自动驾驶数据集标注工具

🎯 模块目标:掌握自动驾驶数据集标注工具的特性和用法

简介

SUSTechPOINTS - 3D目标检测及追踪标注工具

SUSTechPOINTS是面向自动驾驶的3D点云目标检测及追踪标注平台,支持如下功能

  • 3D点云/2D图像目标融合标注
  • 9自由度3D Box编辑
  • 交互式半自动标注
  • 多帧批量编辑
  • 多帧自动标注
  • 多相机图片自动切换
  • 错误检查
  • 点云上色
  • 基于web架构,支持多用户跨地域同时标注
  • 用户及权限控制
  • 开源

alt text

batch edit

使用方法参考 主界面说明 , 标注方法 , 快捷键说明

操作体验(校内访问): https://172.18.35.208:18082

默认登录guest账号,登录后选择scene/frame即可开始浏览(guest账号没有保存权限)

示例视频(单物体标注)

整体架构

  1. 整体系统采用服务器-浏览器架构。

  2. 服务器端负责信息获取,用户管理等常用功能,并提供api接口支持自动标注算法运行。服务端采用cherrypy库实现webserver,通过tensorflow运行标注算法。 标注算法支持根据点云推理目标物体的旋转方向,前端利用该算法结果提供更多的交互式/启发式标注功能。

  3. 客户端负责除自动标注算法之外的所有操作和渲染。3D渲染部分采用three.js库。2D部分使用svg,部分算法依赖tfjs库,部分UI依赖react,无其他依赖。前端使用npm编译和发布。

关键技术和算法

渲染

  1. 点云直接使用threejs的points方法进行渲染,可以修改点的大小和颜色

  2. 主界面包含4个camera渲染区域(3个子视图窗口和一个主视图窗口)。主视角窗口的相机使用perspective投影方式,确保效果与人眼观察世界一致。子视角采用orthogonal投影方法,确保编辑的精确性。

  3. 主界面点云的拖拽/移动操作使用OribitControl

  4. 相机图片通过canva方式渲染到对应的html元素中

3D空间编辑功能

选中目标,激活3D标注后,会出现3D标注控件,可分别操作每个轴的大小,旋转,位置。 该控件为threejs原生,参考说明示例

下图分别显示位置/大小/旋转的编辑

position scale rotation

2D空间编辑功能实现

该功能通过对目标物体的多个透视图操作,完成精确的3Dbox编辑。 如下图中3个子视图上均可以实现对相应轴的操作(大小/旋转/位置)。

实现方法:对应的编辑区域后方为3D渲染区域(threejs),表层为透明的2D编辑界面(SVG,虚线即为可拖拽对象)。在2D界面操作后根据投影关系计算3D框的变换,让操作者感觉和直接操作3D框效果一样。类似于在窗户玻璃上进行拖拽,实现对屋子里的物体的操作。

2d edit

批处理界面渲染

批处理编辑界面和主界面上的子视图编辑原理一致,只是批处理一次显示了多个对象的编辑界面。并增加了一些针对多个对象的编辑功能,如选中/删除/同步/插值/自动标注等。

batch edit

自动标注算法

各种自动/辅助标注算法,如果涉及到目标对象的旋转,均会使用deepannotate算法,部署在server端,通过api访问。

其原理是根据一片给定的3D点云,计算该物体的旋转(重点是正前方)角度。算法使用PointNet骨干网络和分类头(120个分类,每个类别表示3度的区间)实现。推理时借助TTA方法(test time augmentation)进行结果融合:通过将输入点云随机旋转变成多份数据,最后使用输出平均值作为最后结果。

为减轻地面对结果的影响,输入点云最低30cm的部分需删除。

下图展示自动标注的使用

  1. 用户选择一片点云(部分或全部)
  2. 前端根据用户的框选经过自动扩展算法,将物体所有的点云找齐,发送给服务端(去除地面部分)
  3. 服务端使用本节算法计算旋转角度,返回给前端
  4. 前端根据旋转角度确定物体的大小和位置(每个轴的最大最小值及中间值)
  5. 前端汇出对应的3D box,各子视图自动更新

rotation

多帧自动标注算法

该功能是对同一个物体在多帧中的实例进行自动/半自动标注。具体方法是根据一个或多个示例,利用插值/kalman滤波等算法,在多帧数据中完成改物体的自动标注。具体算法如下:

  1. 以已经标注的实例为基础(记为anchor),向前一帧或像后一帧循环执行如下操作:
  2. 插值或者使用kalman滤波估计初始3Dbox
  3. 根据初始3Dbox,估计旋转角度,根据视角和点云估计目标位置,大小保持不变
  4. 对下一帧执行上述2个步骤,直到完成所有帧内该物体的标注

auto-anno-multi-frame

图中展示了根据某物体在某一帧的标注,自动完成其他帧同一物体的标注过程

加载速度优化

点云染色

2D框生成

根据3D标注生成2D框的标注,使用点云投射生成2D框

  • 如果根据3DBox顶点生成的2D框,一般会有过大的问题,部分被遮挡的情况不能根据实际大小调整
  • 使用投影点云生成2D框可以解决上述问题
  • 点云太稀疏时不准确

我们采用的方法:自动生成+手工修改

2d box generation

下图是生成的2D框的示例

alt text

目标物体朝向优化

Webgl画布与批处理编辑

图片分割标注工具

简介

语义分割将图像中每个像素分配到不同的语义类别中,实现对图像内容的精细划分,分割能够有效地捕捉图像中物体的形状和边缘信息,为后续下游应有提供基础。下图为分割标注效果图。

alt text

语义分割工具的关键功能为多边形的操作和计算,包括绘制/修改/合并/intersection等,以及对象的管理/类别编辑/copy/paste/redu/undo等。

下图为操作界面

semantic segmentation tool

体验网址 https://172.18.35.208:18083

操作说明

操作示例视频

点云分割标注工具

点云分割与图片类似,但是需要在3D空间操作。

point-cloud-semseg

🔗 相关资源

https://github.com/naurril/SUSTechPOINTS

🔗 导航链接