/Correction_OBB

通常,点云目标检测网络(如pointrcnn)出来的OBB与真实存在着些许误差,本仓库利用PCA配合BallTree算法对已知的OBB进行修正,效果喜人

Primary LanguagePython

Post Detector

应用主成分分析法临近点查询相结合,进行包围盒矫正


🤡 算法设计

#0:  已知:points(N,3):[x,y,z] , fake_boxes(1,7):[x,y,z,dx,dy,dz,yaw] , gt_boxes(1,7):[x,y,z,dx,dy,dz,yaw]
||
|| [->1] 判断points是否在fake_boxes内(默认选取高于0.2的points)
\/
#1:  得到:points_in_fb(M,3): [x,y,z]
||
|| [->2] 运用BALLTREE对 points_in_fb 进行临近点搜索(默认半径为0.15)
\/
#2:  得到:points_from_bq(Q,3):[x,y,z]
||
|| [->3] 运用PCA对 point_from_bq 进行有向包围盒(OBB)的生成
\/
#3:  得到:obb(1,7): {x,y,z,dx,dy,dz,yaw}_hat
||
|| [->4] 对obb与fake_boxes进行融合 , 修正了fake_box的 [x,y,dx,dy,yaw]
\/
#4:  得到:pred_box(1,7): [(x + x_hat) / 2 ,(y + y_hat) / 2 , z ,  (dx + dx_hat) / 2 ,(dy + dy_hat) / 2 , dz , yaw_hat]

🧩 依赖

pip install numpy pyobb sklearn open3d 
python setup.py develop

📗 使用方法

  • 首先需要将数据存成pkl格式,[{'points','fake_boxes','fb_mask','gt_boxes','gt_mask'},...] , 我在nvidia@172.22.52.12:~/shared_data/lyft_bus里面存放了一个样板数据,以供参考。
  • 运行程序,得到result.pkl
python main.py --data_path *.pkl

📊 性能评估

python tools/analyzer.py

采用对矫正前后的pred_boxes , fake_boxes分别与真值gt_boxes计算IOU,然后求差,统计IOU差值分布情况

fig_method

如图所示,横坐标为正的表示矫正起到了作用,反之就是没作用。所以用四个字评价当前的效果: 乏善可陈

👀 可视化

python tools/viewer.py

选取一些看起来还不错的效果展示一下。红框表示真值框(gt_boxes),蓝框表示主网络检测出来的结果(fake_boxes),绿框表示矫正后的结果(pred_boxes)

fig_method