3D目标检测就是给定3D场景(激光点云,或者图像), 把所有感兴趣的物体识别出来, 用3D立方体将物体框起来, 并给出物体的类别. 如果还有追踪任务, 则需要给每个目标物体分配唯一ID.
对应的数据集可以参考 KITTI数据集, 百度Apollo数据集
通常我们需要专用的数据采集车, 采集各种场景的数据. 数据包括激光雷达点云, 相机图片等. 然后从中挑选有代表性的片段进行标注.
下文描述3D目标检测和追踪数据集(点云/图像)的标注.
不管目标物体距离多远, 只要是可辨认出目标物体的都应该标注.如果被完全遮挡则不用标.
所有可移动的物体都要标注.
部分类别有一些属性,需要根据实际情况选择或者填写 比如人的属性, 伞,婴儿车,行李,坐着,蹲着.. rider的属性: 伞,载客1个,载客2个.. 车的属性: 门开着
目前支持的类别如下:
3d box的大小,方向,类别都需要准确标注.对于旋转方向,需要将3个轴都旋转到正确的方向.
3D box应该力求和真实目标物体大小一样,包括后视镜,车门(如果是开的)等所有附属物.box的方向是车头的方向.
对于部分遮挡的车,需要在相邻帧中找到同一物体,将box大小COPY过去. 如果找不到相同的物理,根据照片等查看是否有相同车款,如果有的话将box拷贝过去. 如果找不到,可以根据经验估计大小.
box应该包括整个人,包括四肢.人走动时形状发生变化,box应该跟着变化. 人方向为整个主题躯干的方向,或者行进的方向.
注意如果地面是倾斜的,人仍然会平行于重力方向站立,不会垂直于地面,此处有别于车.
这些物体没有明确方向,可以使用任一方向.
每个物体需要标注跟踪ID,在场景内唯一,如果有中断,后续应该仍然使用相同的ID.
建议的标注方法
- 建议按照目标物体标, 不要按帧标. 也就是一个目标物体在整个场景中全部标完后再标下一个物体.
- 打开一个场景后,可以先浏览一下,然后开始选定目标物体进行标注. 一个场景长20s, 包含40帧原始数据,每秒选取了2帧进行标注.(我们采集的数据是每秒10帧,每帧间隔100ms. 由于间隔时间短,场景变化太小,所以不需要每帧都标注,我们可以根据每秒2帧的标注结果进行线性插值完成对剩余8帧的标注.)
- 标一个物体时,建议选择场景中视野最好的帧开始,比如距离较近,无遮挡就满足要求,这种情况下可以比较准确的标出物体的大小和方向. 标好后,可以使用复制/粘贴的方式把box迁移到上一帧或者下一帧,两帧都调整好后,可以启动批量标注功能(edit multiple instances),使用自动标注的方式对其他帧进行标注. 先标两帧的目的是给物体一个初始速度,对自动标注时的追踪有帮助. 也可以标完一帧后就开始批量标注,如果有问题再进行调整.
- 批量标的时候,有时候自动标注算法会失败,比如找不到物体(追踪丢失等),方向不正确等,这时需要手工调整,可以调整一部分后再尝试批量标.最后将不存在物体(被遮挡,或者太远看不见了)的物体box删除.自动算法包含 插值,自动(不旋转),全自动三种, 这三个功能依次更加自动化, 但是在复杂情况下出错的概率也更高。 而且这三个功能运行的条件是已经有一些或者至少一个box是已经标好的,已经标好的box越多,算法效果可能就更好。所以在标注过程中,可以先尝试全自动,如果有部分box已经标的满足要求,可以将这些box finalize(相当于已经人工确认),这样下次再运行算法时,就有更多可参考的输入。如果全自动效果不好,可以尝试自动(无旋转),如果效果仍然不好,可以尝试最简单的插值。不管用那种方法,都应该是运行算法-手工修改一两个box-运行算法-...这样交替的方式操作,整体效率最高。
- 建议打开trajectory查看该物体在整个场景里面的轨迹,如果有异常(比如方向变化太大等)可以再次检查确认.
- 点击finalize, save, exit, 完成一个物体在场景里面的标注.
- 对于小目标的物体,如人,在标注的过程中可能不太容易分辩方向,可以根据其前进的方向,相对与建筑/路面的方向等进行辅助判断. 在拥挤场景如果不容易进行追踪,可以切换到10hz的数据(goto/10Hz)进行识别和标注. 10hz的数据和2Hz的数据是共享标注结果的.识别完成后建议切换回2hz,因为10HZ下帧间差距太小,标起来比较浪费时间.
-
如何升级版本
标注工具是基于web页面的,服务端升级后就会自动升级,但是本地有时候会使用local cache不更新,此时可以用两种方式强制更新
- 如果使用chrome, 可以按住ctrl按刷新按钮
- 清除历史记录,再刷新页面
-
坐标系
标注系统涉及到2个坐标系, 点云坐标系和世界坐标系. 在设置里面可以选择显示的坐标系(coordinate system)
-
LiDAR: 按点云坐标系显示, 原点为激光雷达的原点, 按车身方向, z轴朝上, y朝后, x朝左. 该配置下看起来世界向后走,采集车(ego car)不动
-
GPS/UTM: 按大地坐标系显示, z朝上, x朝东, y朝北. 该配置下, 看起来地面不动, 车向前后. (由于定位精度和误差, 地面有时会漂移)
-
-
视图转来转去一段时间后, 就很难操作, 怎么办
- 在主界面右键选择reset view, 会回到当前frame正中间, 从上向下俯视.
-
如何确定物体的方向(旋转)
- 对于大型的车, 一般可以使用算法确定的方向, 然后微调.
- 对于人, 有几种方法:
- 可以先确定位置, 最后使用行进方向作为方向. (在multiple instance edit模式下, 右键/fit/moving direction), 然后根据情况微调. 如果人没有移动, 该方法不可使用.
- 按照周围环境, 如路的方向, 借助图片, 确定方向,
- 按照人的身形确定方向.
-
如何确定遮挡物体的大小
-
在前后帧中寻找相对完整的场景, 从该帧开始标, 然后将大小迁移到其他帧.
- multiple instance edit模式下, interpolate/auto等功能都是保持物体大小的, 只要有已经确定大小的帧就可以工作.
- 普通模式下, 可以使用copy, paste的方式将box从一帧挪到另一帧.
- 在用鼠标编辑box时, 按住shift, 可以保持box大小不变.
-
没有可参考的其他帧数据,而且被遮挡,怎么确定大小
- 根据环境:在侧试图或者后视图中,缩放视角,查看物体周围是否有地面线,如果有将box下边缘拉到地面线的位置. 如下图,后边的灰色线为地面线,可以据此确定box的下边界。
- 根据物体的对称性,将边线拉到对称的位置
-
查看对应的图片,如果是常见车型(如byd的的士),可以找到另外的同类型的车对应的box,复制粘贴,然后修改位置(不修改大小)
-
实在没有任何办法的情况下,根据经验估计大小
-
-
如何修改类别
如果某个object的类别标错了,又不想一个一个去修改,可以在某帧修改好之后,鼠标移到工具框的
...
然后选Sync object type & attr
. -
multiple instance edit模式下, 有哪些操作方法
- box选择, 使用鼠标可以选择多个操作对象
- 单击: 选择/反选
- Ctrl+单击: 选择/反选
- shift+单击: 选择连续帧
- 拖动: 选择多个帧
- 鼠标右键可以选择当前帧前面的,后面的, 所有的帧
- 注意鼠标如果在某个box的边线上点击时, 则是对box的编辑,不会进入选择功能
- box选择后, 使用右键菜单, 可以进行如下功能
-
删除
-
interploate 按线性移动速度方式插值
-
auto (no rotation) 自动(不旋转)
-
auto annotate 全自动
-
fit
- size: 自动适配大小
- position: 自动适配位置
- rotation: 用ai算法调整方向
- moving direciotn: 使用行进方向调整方向
- 上述功能对应俯视图的4个按钮
-
finalize: 将所选box标记为人工编辑完成(后续自动算法运行时会作为重要的参考,而且自动算法不再会修改该box)
-
reload
-
goto this frame: 切换到普通模式,并切换到当前帧, 对应的box会选中
-
- 右上角的按钮
trajectory
显示该物体在世界坐标系下的轨迹, 双击某个位置的box, 会退出并将对应的box选中.- 其他按钮跟右键菜单一样,但是针对所有的帧.
- 显示屏有点小/大, 如果调整批量编辑的数量
- 右上角config ->
Batch mode max box number
- 调整数量后, 如果显示的帧数少于场景总帧数, 请使用右上角按钮
next
/previous
翻页
- 右上角config ->
- box选择, 使用鼠标可以选择多个操作对象
-
点云的点有点暗,看不清怎么办
- 使用+/-调整点的大小, 或者在config菜单中修改(右上角按钮)
-
box编辑功能
-
快捷键列表 (俯视图/侧视图/后视图), 鼠标在某个视图上时,按键对该视图有效
- a: 左移
- s: 下移
- d: 右移
- w: 上移动
- q: 逆时针旋转
- e: 顺时针旋转
- r: 逆时针旋转同时自动调整box大小
- f: 顺时针选择同时自动调整box大小
- g: 反向
-
鼠标操作 (俯视图/侧视图/后视图)
- 鼠标可以对每个试图对应的矩形边线,角,旋转方向进行拖动/双击, 产生对应编辑效果
- 拖动 - 移动边线到鼠标位置
- 双击 - 自动fit到最近的内点
- shift+拖动 - 移动边线到鼠标位置,但是整个box大小保持不变
- ctrl+拖动 - 拖动后, 从做后的位置,自动fit到物体最近的内点
-
按钮
- scale - 自动调整大小
- rotate - 自动调整方向,大小不变
- move - 自动调整位置,大小和方向都不改变
- I am lucky - 方向/大小/位置都自动调整
- move direction - 使用物体的移动方向作为朝向,
- 如果是运动物体, 且前后帧至少有一帧已经标注过,位置正确即可计算方向
- 如果物体没有移动或者移动很缓慢,该功能不可使用
- 如果是大型车辆, 速度慢且转弯时, 该功能也不可使用
-