1. random world flip:沿着x或者y轴,翻转点云
点云的x或者y,要翻转
3d box中心的x或者y,要翻转
3d box的朝向要翻转
point segmentation label,点云的相对顺序没有发生变化
2. random_world_rotation:沿着点云原点,旋转点云
点,x,y,绕z轴旋转
3d box,绕z轴旋转,中心和朝向都要变化
point segmentation label,点云的相对顺序没有发生变化
3. random_world_scaling:沿着点云原点,缩放点云
点云,x,y,z 缩放
3d box,缩放,中心和尺寸都要变化
point segmentation label,点云的相对顺序没有发生变化
4. random_world_translation: 沿着x,y,z,轴线平移点云
点云的x,y,z,要平移
3d box的中心,沿着x,y,z,要平移
point segmentation label,点云的相对顺序没有发生变化
5. database sampler
从所有的scene中,采样得到目标识别的3d box和points. 然后把这些box放回到训练的frame中。
a. 确保采样的box,和当前帧的box IOU = 0
b. 确保采样的box之间,IOU = 0
c. 在放置采样box的时候,需要提前删除掉box所在位置的原先的点
d. 把采样box的点,放回到scene中
如上的处理,可能会把box放在不合理的位置(虽然大部分是合理的);会破坏原有的points;会新增points;
需要如下条件:
a. 把database sampler放在roadplane上
b. database的采样的时候,points中带seg的标签
从这一点出发,我觉得,应该把points和points label存到一起!!!
其他新增的数据增强方式
local rotation
local translation
local scaling
如上的local方式,针对每一个3d box筛选出对应的points,然后针对这些points和box,围绕box的局部坐标系进行变换。针对挨着很近的box,可能会存在重叠等问题,而且semantic label也会不准确。所以这里针对语义分割就不用了。
point feature encoding, 这里没有特殊操作,可以通过这个config,筛选输入到后面的点云特征
x,y,z,intensity,enlongation,instance, seg class,timestamp
1. mask points out of range
预设好预测范围,voxel尺寸,进行voxel之后,grid size是固定的。这一步把范围外的点去掉。
需要对seg label,进行同样的操作。
在training,问题不大,因为loss的计算都是在范围内的voxel的label来算的。
在validation时,也要对真值进行这个操作,而且要保证point的label的次序一样。
2. shuffule points
打乱points的相对顺序。
需要对seg labels进行同样的操作。
3. transform points to voxel
划分voxel
得到voxel中点的index,点对应的voxel coordinate
通过voxel中点的seg label,得到这个voxel的seg label
在validation和test的时候,把voxel的seg label,映射成voxel中点的label,用于结果的输出和iou的计算
关于点云的处理:解析waymo数据集的时候,把seg_label作为点的一个feature,合并到pointcloud中,不用单独分开为一个label文件。