1, 每个location有两个anchor
class_name: "car"
sizes: 4.460000038146973
sizes: 1.8799999952316284
sizes: 1.6799999475479126
rotations: 0.0
rotations: 1.5700000524520874
这个参数可能涉及anchor的方向
num_direction_bins = 2
比较这三种特征提取特征的不同:
vfe_class_name = PillarFeatureNet
vfe_class_dict = {
"VoxelFeatureExtractor": VoxelFeatureExtractor, #second的原始voxel特征提取
"VoxelFeatureExtractorV2": VoxelFeatureExtractorV2, #
"PillarFeatureNet": PillarFeatureNet #pointpillar 特征提取网络
}
pointpillar优化点:
0,数据预处理:
(1)kitti数据的gt 3d框的中心是底面,所以pointpillar在生成pkl的create_data.py中center_to_corner_box3d中参数origine=[0.5,0.5,0],其中0表示底面中心。
(2)如果是自有数据,要改成kitti的gt数据格式,中心点在3dbox底面,或者修改box_np_ops.second_box_encode()/decode()中计算z中心的部分代码。
encode()中:
#zg = zg + hg / 2
#za = za + ha / 2
decode()中:
#za = za + ha / 2
...
#zg = zg - hg / 2
1,数据增强部分:
(1)数据点云的直接稼入,可能与原位置其他点云进行混淆
(2)原始gt目标与数据增强目标之间没有进行冲突判定
2,pillar生成部分:
(1)直接生成12000个pillar,足数之后就停止pillar生成,这时候可能还有目标未生成pilllar或部分生成pillar。
通常多激光雷达复合起来的点云比较密,例如4个激光雷达点云拼接后,有效pillar数目可能有3000左右,但12000个pillar中的有效pillar约只有1000多个。
另外,pillar的尺寸也可以调整,越细的pillar特征越精细,数量也越多,识别效果应该会好。
3,anchor yaw角只有0度和90度,gt与anchor进行assign之后,进行box编码,编码后的3dbox均为与anchor的差异值,yaw角也为与该anchor的夹角。
回归出来后的box要进行角度分类器进行判断,是与哪个anchor相近,然后在相近的anchor上进行角度叠加进行解码。
4, pointpillar.config:
use_rotate_nms = True
region_similarity_calculator:rotate_iou_similarity
5,用自己的数据进行voxelize的时候:det3d/ops/points_cloud/point_cloud_ops_v2.py中point_2_voxel()函数
global COOR_TO_VOXELIDX2
## COOR_TO_VOXELIDX2 ---------------调整coor_range:
COOR_TO_VOXELIDX2 = 65535 * np.ones(shape=(voxelmap_shape[0], voxelmap_shape[1], voxelmap_shape[2]), dtype=np.uint16)
6, preprocess_v4的init()中,类别的设置需要改,因为是hardcode
self.target_class_ids = [1, 2, 3, 4, 5] #