当前位置:网站首页>3D Detection: 3D Box和点云 快速可视化
3D Detection: 3D Box和点云 快速可视化
2022-07-07 11:56:00 【烤粽子】
3D检测,用于3D box,点云快速可视化,辅助debug和分析:
(Nuscenes,mmdet3d,OpenPCDet等适用)
注意:代码适用于多种模型,但是注意BEVDet系列和FCOS3D(front View)系列要选用不同的box转换。
3D box投影到bev可视化:
import matplotlib.pyplot as plt
import torch
def box3d2x0y0wh(boxes_3d):
# BEVDet/CenterPoints
import numpy as np
n = boxes_3d.shape[0]
box2d = np.zeros((n,4))
# 3dbox --> xywh
box2d[:,:2] = boxes_3d[:,:2]
box2d[:,2] = boxes_3d[:,3]
box2d[:,3] = boxes_3d[:,4] # 2xywh
#
# xyxy = np.ones_like(box2d)
box2d[:,0] = box2d[:, 0] - box2d[:, 2] / 2
box2d[:,1] = box2d[:, 1] + box2d[:, 3] / 2 # NOTE: 左下角点
return box2d
def box3d2x0y0wh_2(boxes_3d):
# FCOS3D: front view--> BEV
import numpy as np
n = boxes_3d.shape[0]
box2d = np.zeros((n,4))
# 3dbox --> xywh 左下角点
box2d[:, 0] = boxes_3d[:, 0]
box2d[:, 1] = boxes_3d[:, 2]
box2d[:, 2] = boxes_3d[:, 4]
box2d[:, 3] = boxes_3d[:, 5] # 2xywh
#
# xyxy = np.ones_like(box2d)
box2d[:,0] = box2d[:, 0] - box2d[:, 2] / 2
box2d[:,1] = box2d[:, 1] + box2d[:, 3] / 2 # NOTE
return box2d
# 根据坐标作图
def draw_boxes(pred_boxes_3d, target_boxes_3d, path):
# pred_boxes xywh
import matplotlib.pyplot as plt
import matplotlib.patches as patches
pred_boxes = box3d2x0y0wh(pred_boxes_3d)
target_boxes = box3d2x0y0wh(target_boxes_3d)
fig, ax = plt.subplots()
ax.plot()
# ax.add_patch(patches.Rectangle((1, 1),0.5,0.5,edgecolor = 'blue',facecolor = 'red',fill=True) )
#
for index, coord in enumerate(pred_boxes):
rect = patches.Rectangle((coord[0], coord[1]), coord[2], coord[3],
linewidth=1, edgecolor='r',facecolor='none')
ax.add_patch(rect)
for index, coord in enumerate(target_boxes):
rect = patches.Rectangle((coord[0], coord[1]), coord[2], coord[3],
linewidth=1, edgecolor='g',facecolor='none')
ax.add_patch(rect)
# plt.legend(loc='best',edgecolor='g')
if os.path.exists(path):
os.remove(path)
fig.savefig(path, dpi=90, bbox_inches='tight')
# print(0)
plt.close(fig)
print('Successfully saved')
点云快速可视化:
def draw_pts(points, save_path, show=False):
''' points: [N,3+c] '''
assert len(points.shape) == 2
if isinstance(points, torch.Tensor):
points = points.cpu().numpy()
points = points.copy()
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# point_range = range(0, points.shape[0], skip) # skip points to prevent crash
point_range = range(0, points.shape[0])
ax.scatter(points[point_range, 0], # x
points[point_range, 1], # y
points[point_range, 2], # z
c=points[point_range, 2], # height data for color
cmap=plt.get_cmap("Spectral"),
marker="x")
ax.axis('auto') # {equal, scaled}
if show:
plt.show()
if save_path is not None:
fig.savefig(save_path, dpi=90, bbox_inches='tight')
plt.close(fig)
边栏推荐
- 10 pictures open the door of CPU cache consistency
- 记一次 .NET 某新能源系统 线程疯涨 分析
- Leetcode simple question sharing (20)
- [daily training -- Tencent select 50] 231 Power of 2
- QQ medicine, Tencent ticket
- 2022-7-6 sigurg is used to receive external data. I don't know why it can't be printed out
- Detr introduction
- Esp32 construction engineering add components
- Sliding rail stepping motor commissioning (national ocean vehicle competition) (STM32 master control)
- toRaw和markRaw
猜你喜欢

Use of polarscatter function in MATLAB

最佳实践 | 用腾讯云AI意愿核身为电话合规保驾护航

Centso7 OpenSSL error Verify return code: 20 (unable to get local issuer certificate)

Navicat run SQL file import data incomplete or import failed

LeetCode简单题分享(20)

C语言数组相关问题深度理解

Digital IC Design SPI

2022-7-6 sigurg is used to receive external data. I don't know why it can't be printed out

TPG x AIDU | AI leading talent recruitment plan in progress!

OSI seven layer model
随机推荐
How to make join run faster?
Xshell connection server changes key login to password login
2022-7-7 Leetcode 844. Compare strings with backspace
Write it down once Net a new energy system thread surge analysis
Best practice | using Tencent cloud AI willingness to audit as the escort of telephone compliance
QQ medicine, Tencent ticket
move base参数解析及经验总结
Toraw and markraw
Custom thread pool rejection policy
Excerpt from "misogyny: female disgust in Japan"
Scripy tutorial classic practice [New Concept English]
Introduction to database system - Chapter 1 introduction [conceptual model, hierarchical model and three-level mode (external mode, mode, internal mode)]
室內ROS機器人導航調試記錄(膨脹半徑的選取經驗)
Ogre introduction
Deep understanding of array related problems in C language
实现IP地址归属地显示功能、号码归属地查询
Mysql怎样控制replace替换的次数?
[daily training] 648 Word replacement
【日常训练】648. 单词替换
Simple and easy-to-use code specification