You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

234 lines
13 KiB
Markdown

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

[工具介绍](./README.md)
[操作说明](./README_cn.md)
[快捷键](./doc/shortcuts_cn.md)
# 什么是3D目标检测/追踪
3D目标检测就是给定3D场景(激光点云,或者图像), 把所有感兴趣的物体识别出来, 用3D立方体将物体框起来, 并给出物体的类别. 如果还有追踪任务, 则需要给每个目标物体分配唯一ID.
对应的数据集可以参考
[KITTI数据集](http://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d),
[百度Apollo数据集](http://apolloscape.auto/tracking.html)
## 如何制作
通常我们需要专用的数据采集车, 采集各种场景的数据. 数据包括激光雷达点云, 相机图片等. 然后从中挑选有代表性的片段进行标注.
# 标注要求
下文描述3D目标检测和追踪数据集(点云/图像)的标注.
## 标注范围
### 距离
不管目标物体距离多远, 只要是可辨认出目标物体的都应该标注.如果被完全遮挡则不用标.
### 类别及属性
所有可移动的物体都要标注.
部分类别有一些属性,需要根据实际情况选择或者填写
比如人的属性, 伞,婴儿车,行李,坐着,蹲着..
rider的属性载客1个载客2个..
车的属性: 门开着
目前支持的类别如下:
|Name|中文|可选属性|参考图片|
|----|----|------|------|
|Car|轿车|门开着||
|Van|面包车|||
|PoliceCar|警车|||
|Pedestrian|行人|伞,行李,坐着,蹲着,弯腰||
|RoadWorker|工人||![roadworker](./doc/objtype/road-worker.png)|
|Child|小孩|||
|Cone|雪糕筒|||
|FireHydrant|消防栓|||
|ReflectiveTriangle|安全三角||![triangle](./doc/objtype/Triangle.jpeg)|
|PlatformCart|平板车||![platform cart](./doc/objtype/platform-cart.jpg)|
|ConstructionCart|建筑小车||![Construction Cart](./doc/objtype/construction-cart.jpeg)|
|RoadBarrel|安全桶||![road barrel](./doc/objtype/road-barrel.jpg)|
|TrafficBarrier|交通护栏||![traffic barrier](./doc/objtype/TrafficBarrier.jpeg)|
|ScooterRider|骑电动车的人|伞,1个乘客,2个乘客||
|MotorcyleRider|骑摩托的人|伞,1个乘客,2个乘客||
|BicycleRider|骑自行车的|伞,1个乘客,2个乘客||
|Bicycle|自行车|倒在地上|
|Babycart|婴儿车||![babycart](./doc/objtype/babycart.png)|
|LongVehicle|长尾拖车||![longvehicle](./doc/objtype/LongVehicle.png)|
|Motorcycle|||
|Scooter|电动车||![scooter](./doc/objtype/scooter.jpg)|
|BicycleGroup|路边的电动车/自行车堆||
|Bus|||
|Truck|卡车||
|ConcreteTruck|水泥车||![Construction Cart](./doc/objtype/concrete-truck.jpeg)|
|Tram|电车||
|Animal|动物||
|ForkLift|叉车||![Forklift](./doc/objtype/forklift.jpg)|
|Trimotorcycle|电动三轮车||![Trimotocycle](./doc/objtype/Trimotorcycle.jpeg)|
|FreightTricycle|人力三轮车||![freight tricycle](./doc/objtype/freight-tricycle.png)|
|Crane|吊车||![crane](./doc/objtype/crane.jpeg)|
|Excavator|挖掘机||![excavator](./doc/objtype/excavator.png)|
|Roadroller|压路机||![road roller](./doc/objtype/RoadRoller.jpeg)|
|Bulldozer|推土机||![bull dozer](./doc/objtype/Bulldozer.jpeg)|
## 3D Box要求
3d box的大小方向类别都需要准确标注对于旋转方向需要将个轴都旋转到正确的方向
### 车
3D box应该力求和真实目标物体大小一样包括后视镜车门(如果是开的)等所有附属物box的方向是车头的方向
对于部分遮挡的车需要在相邻帧中找到同一物体将box大小COPY过去
如果找不到相同的物理根据照片等查看是否有相同车款如果有的话将box拷贝过去
如果找不到,可以根据经验估计大小.
### 人
box应该包括整个人包括四肢人走动时形状发生变化box应该跟着变化
人方向为整个主题躯干的方向,或者行进的方向.
注意如果地面是倾斜的,人仍然会平行于重力方向站立,不会垂直于地面,此处有别于车.
### 雪糕筒/交通障碍栏等/防撞桶
这些物体没有明确方向,可以使用任一方向.
## 追踪ID要求
每个物体需要标注跟踪ID在场景内唯一如果有中断后续应该仍然使用相同的ID.
# 如何开始标注
建议的标注方法
0. 建议按照目标物体标, 不要按帧标. 也就是一个目标物体在整个场景中全部标完后再标下一个物体.
1. 打开一个场景后可以先浏览一下然后开始选定目标物体进行标注 一个场景长20s, 包含40帧原始数据每秒选取了2帧进行标注(我们采集的数据是每秒10帧每帧间隔100ms. 由于间隔时间短场景变化太小所以不需要每帧都标注我们可以根据每秒2帧的标注结果进行线性插值完成对剩余帧的标注)
2. 标一个物体时,建议选择场景中视野最好的帧开始,比如距离较近,无遮挡就满足要求,这种情况下可以比较准确的标出物体的大小和方向. 标好后,可以使用复制/粘贴的方式把box迁移到上一帧或者下一帧两帧都调整好后可以启动批量标注功能(edit multiple instances),使用自动标注的方式对其他帧进行标注. 先标两帧的目的是给物体一个初始速度,对自动标注时的追踪有帮助. 也可以标完一帧后就开始批量标注,如果有问题再进行调整.
3. 批量标的时候,有时候自动标注算法会失败,比如找不到物体(追踪丢失等)方向不正确等这时需要手工调整可以调整一部分后再尝试批量标最后将不存在物体被遮挡或者太远看不见了的物体box删除自动算法包含 插值,自动(不旋转),全自动三种, 这三个功能依次更加自动化, 但是在复杂情况下出错的概率也更高。 而且这三个功能运行的条件是已经有一些或者至少一个box是已经标好的已经标好的box越多算法效果可能就更好。所以在标注过程中可以先尝试全自动如果有部分box已经标的满足要求可以将这些box finalize相当于已经人工确认这样下次再运行算法时就有更多可参考的输入。如果全自动效果不好可以尝试自动无旋转如果效果仍然不好可以尝试最简单的插值。不管用那种方法都应该是运行算法-手工修改一两个box-运行算法-...这样交替的方式操作,整体效率最高。
4. 建议打开trajectory查看该物体在整个场景里面的轨迹如果有异常比如方向变化太大等可以再次检查确认
5. 点击finalize, save, exit, 完成一个物体在场景里面的标注.
6. 对于小目标的物体如人在标注的过程中可能不太容易分辩方向可以根据其前进的方向相对与建筑路面的方向等进行辅助判断 在拥挤场景如果不容易进行追踪可以切换到10hz的数据(goto/10Hz)进行识别和标注 10hz的数据和Hz的数据是共享标注结果的识别完成后建议切换回2hz,因为10HZ下帧间差距太小标起来比较浪费时间
# FAQ
- 如何升级版本
标注工具是基于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的下边界。
![bottom-line](./doc/box-size-bottom.png)
- 根据物体的对称性,将边线拉到对称的位置
- 查看对应的图片如果是常见车型如byd的的士可以找到另外的同类型的车对应的box复制粘贴然后修改位置不修改大小
- 实在没有任何办法的情况下,根据经验估计大小
- 如何修改类别
如果某个object的类别标错了又不想一个一个去修改可以在某帧修改好之后鼠标移到工具框的`...`然后选`Sync object type & attr`.
![modify-type](./doc/modify-type-attr.png)
- 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编辑功能
- 快捷键列表 (俯视图/侧视图/后视图), 鼠标在某个视图上时,按键对该视图有效
- a: 左移
- s: 下移
- d: 右移
- w: 上移动
- q: 逆时针旋转
- e: 顺时针旋转
- r: 逆时针旋转同时自动调整box大小
- f: 顺时针选择同时自动调整box大小
- g: 反向
- 鼠标操作 (俯视图/侧视图/后视图)
- 鼠标可以对每个试图对应的矩形边线,角,旋转方向进行拖动/双击, 产生对应编辑效果
- 拖动 - 移动边线到鼠标位置
- 双击 - 自动fit到最近的内点
- shift+拖动 - 移动边线到鼠标位置,但是整个box大小保持不变
- ctrl+拖动 - 拖动后, 从做后的位置,自动fit到物体最近的内点
- 按钮
- scale - 自动调整大小
- rotate - 自动调整方向,大小不变
- move - 自动调整位置,大小和方向都不改变
- I am lucky - 方向/大小/位置都自动调整
- move direction - 使用物体的移动方向作为朝向,
- 如果是运动物体, 且前后帧至少有一帧已经标注过,位置正确即可计算方向
- 如果物体没有移动或者移动很缓慢,该功能不可使用
- 如果是大型车辆, 速度慢且转弯时, 该功能也不可使用
# 参考资料