查看原文
其他

开发者说|自动驾驶标注工具

王方浩 Apollo开发者社区 2022-07-29


下面是由社区开发者—王方浩提供的文章,本文主要分析 自动驾驶标注工具。


    ENJOY THE FOLLOWING  



改进一款图像标注工具,使它能够实现自动标注。


自动驾驶感知目前主流的方法都是深度学习,需要用到大量的标注数据集来训练模型,所以能够更快更高效生成大量的标注数据是无人驾驶感知的关键。


大部分的开源数据集,都是请第三方外包公司来完成这项工作,目前数据标注是一个新兴行业,基本是靠廉价的人工,手动完成标注。开源的标注工具很多,大部分都是业余开发,没有在实践中进行改进,并不能支持大规模的标注。


自动驾驶数据集的标注工作,机械式的去标注效率可能不高。如果能够自动标注后再由人去检查数据,进行调整,这样则可以大大提高效率。


若想尽量简单地实现这个方案,首先需要支持自动标注,然后需要支持多人协同标注。下面整理下具体的思路:



自动标注功能可以在网上找到训练好的模型,然后网页端加载模型,通过前端框架执行后,展示标好的数据。前端的神经网络框架有很多好处,主要优势是可视化,跨平台,而且web端支持多人协作也很方便,只需要一个浏览器,就可以进行标注。


  • 第一步:选定前端深度学习框架

优秀的框架有很多,决定选择TensorFlow.jsTensorFlow.js的好处是可以导入模型,教程丰富,并且可以把Python模型转成js模型进行导入。


  • 第二步,前端框架选择借鉴MIT开源图片标注工具Labelme

体验网址(LabelMe. The Open annotation tool


Labelme优点:
  • 能调节图片的对比度,在阴影或光照不好的情况下,调节对比度可以很好的找到标注物体的轮廓
  • 右键自动闭合,省去了每次都要移动鼠标到起点的过程
  • 支持Label层级,比如标注了一个汽车,又要标注汽车的车窗,可以设置层级,让车窗属于汽车的标注,这在一些需要二次识别的场景中很管用
  • 支持语义分割的标注。
  • 数据保存格式很完善,包括标注人、标注时间、各种Label、备注等


Labelme缺点:
  • 黑科技太多,集合PHP、Perl、Nodejs、HTML多项技术,最可怕的是还用到了C++转js的技术
  • 前端技术栈比较老旧,布局不支持Flex


建议先在Labelme上实现相应的功能,把相关的功能了解后,再开发一个更Cool的项目。下面以识别汽车为例,如何用TensorFlow.js实现标注图片中的汽车,用的模型是coco-ssd。



加载前端机器学习框架TensorFlow.js,如果不想本地安装编译,可直接用编译好的文件,在HTML中增加:


//加载tensorflow模型<!-- Load TensorFlow.js. This is required to use coco-ssd model. --><script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"> </script><!-- Load the coco-ssd model. --><script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/coco-ssd"> </script>



//获取图片const img = document.getElementById('img');
// Load the model. cocoSsd.load().then(model => { // detect objects in the image. model.detect(img).then(predictions => { //识别出的对象 console.log('Predictions: ', predictions); }); });


Predictions的格式为:

bbox: [x,y,w,h] //4个元素的数组,x,y为矩形左上角坐标,w为宽,h为高class: "car" //识别的类别score: 0.99 //可信度


上述例子可参考TensorFlow.js的例子(TensorFlow/tfjs-models)这个模型可以识别的目标包括汽车、人和交通灯。


如果需要更强大的模型,可以选择专门针对KITTI数据集的模型,在Tensorflow模型动物园中可以找到Python版本,但需要转换成js版本。开始下载的时候文件有400多兆,如果模型太大,可以考虑用服务的方式实现,而不是前端加载,下面还是以coco-ssd为例,这个模型比较简单,主要用在嵌入式和手机设备。


LabelMe


面是自动标注的例子,对MIT的Labelme做了改进后,增加了自动标注功能,并且这个框架本身就支持web端,效果如下:


自动标注演示:



  • 点击最上面工具栏的笑脸图标
  • 开始加载模型,并且显示动画(由于网络原因可能会加载模型失败,一般第一次加载完成后就比较快了)
  • 最后画出标注好的框

代码可见:

https://github.com/daohu527/LabelMeAnnotationTool ,最好采用容器的方式部署,在"LabelMeAnnotationTool/DockerFiles/ubuntu_16.04"中,用脚本编译和启动容器(因为原生的代码采用直接部署编译的方式,安装环境遇到问题,所以就采用了容器部署的方式)。



*自动驾驶标注工具
https://zhuanlan.zhihu.com/p/60876682


以上是"自动驾驶标注工具"的全部内容,更多话题讨论、技术交流可以扫描下方二维码添加『Apollo小哥哥』为好友,进开发者交流群。
 


©️著作权归作者所有,如需转载,请注明出处,否则将追究法律责任。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存