当前位置:网站首页>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)
边栏推荐
- ROS机器人更换新雷达需要重新配置哪些参数
- Help tenants
- mysql ”Invalid use of null value“ 解决方法
- 2022-7-7 Leetcode 34.在排序数组中查找元素的第一个和最后一个位置
- Read PG in data warehouse in one article_ stat
- Split screen bug notes
- The delivery efficiency is increased by 52 times, and the operation efficiency is increased by 10 times. See the compilation of practical cases of financial cloud native technology (with download)
- Mongodb meets spark (for integration)
- High end for 8 years, how is Yadi now?
- [1] ROS2基础知识-操作命令总结版
猜你喜欢
高等数学---第八章多元函数微分学1
10 pictures open the door of CPU cache consistency
AI人才培育新思路,这场直播有你关心的
[dark horse morning post] Huawei refutes rumors about "military master" Chen Chunhua; Hengchi 5 has a pre-sale price of 179000 yuan; Jay Chou's new album MV has played more than 100 million in 3 hours
Distributed transaction solution
JS slow motion animation principle teaching (super detail)
Leecode3. Longest substring without repeated characters
Help tenants
2022-7-6 Leetcode 977. Square of ordered array
Custom thread pool rejection policy
随机推荐
DID登陆-MetaMask
【日常训练--腾讯精选50】231. 2 的幂
QQ medicine, Tencent ticket
Cinnamon taskbar speed
提升树莓派性能的方法
LIS longest ascending subsequence problem (dynamic programming, greed + dichotomy)
1、深拷贝 2、call apply bind 3、for of for in 区别
My "troublesome" subordinates after 00: not bad for money, against leaders, and resist overtime
[daily training -- Tencent select 50] 231 Power of 2
MySQL error 28 and solution
Mongodb replication (replica set) summary
C语言数组相关问题深度理解
Deep understanding of array related problems in C language
Server to server (S2S) event (adjust)
566. Reshaping the matrix
实现IP地址归属地显示功能、号码归属地查询
Sliding rail stepping motor commissioning (national ocean vehicle competition) (STM32 master control)
PHP中用下划线开头的变量含义
Move base parameter analysis and experience summary
[etc.] what are the security objectives and implementation methods that cloud computing security expansion requires to focus on?