当前位置:网站首页>3D detection: fast visualization of 3D box and point cloud
3D detection: fast visualization of 3D box and point cloud
2022-07-07 13:55:00 【Roast zongzi】
3D testing , be used for 3D box, Quick visualization of point cloud , auxiliary debug And analysis :
(Nuscenes,mmdet3d,OpenPCDet And so on )
Be careful : The code is applicable to a variety of models , But notice BEVDet Series and FCOS3D(front View) Choose different series box transformation .
3D box Projection to bev visualization :
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: Lower left corner
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 Lower left corner
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
# Drawing according to coordinates
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')
Quick visualization of point cloud :
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)
边栏推荐
- Es log error appreciation -limit of total fields
- "Song of ice and fire" in the eleventh issue of "open source Roundtable" -- how to balance the natural contradiction between open source and security?
- 2022-7-6 初学redis(一)在 Linux 下下载安装并运行 redis
- Split screen bug notes
- Parameter keywords final, flags, internal, mapping keywords internal
- 华为镜像地址
- C语言数组相关问题深度理解
- Help tenants
- 【日常训练】648. 单词替换
- LIS longest ascending subsequence problem (dynamic programming, greed + dichotomy)
猜你喜欢

My "troublesome" subordinates after 00: not bad for money, against leaders, and resist overtime

交付效率提升52倍,运营效率提升10倍,看《金融云原生技术实践案例汇编》(附下载)

2022-7-6 beginner redis (I) download, install and run redis under Linux

Indoor ROS robot navigation commissioning record (experience in selecting expansion radius)

Social responsibility · value co creation, Zhongguancun network security and Information Industry Alliance dialogue, wechat entrepreneur Haitai Fangyuan, chairman Mr. Jiang Haizhou
![Supply chain supply and demand estimation - [time series]](/img/2c/82d118cfbcef4498998298dd3844b1.png)
Supply chain supply and demand estimation - [time series]

Help tenants

Getting started with cinnamon applet

Ways to improve the performance of raspberry pie

2022-7-6 使用SIGURG来接受外带数据,不知道为什么打印不出来
随机推荐
The reason why data truncated for column 'xxx' at row 1 appears in the MySQL import file
LeetCode简单题分享(20)
Fast development board pinctrl and GPIO subsystem experiment for itop-imx6ull - modify the device tree file
"Song of ice and fire" in the eleventh issue of "open source Roundtable" -- how to balance the natural contradiction between open source and security?
室內ROS機器人導航調試記錄(膨脹半徑的選取經驗)
搜索框效果的实现【每日一题】
Clion mingw64 Chinese garbled code
JS function returns multiple values
属性关键字Aliases,Calculated,Cardinality,ClientName
Excerpt from "misogyny: female disgust in Japan"
Detr introduction
C语言数组相关问题深度理解
Best practice | using Tencent cloud AI willingness to audit as the escort of telephone compliance
call undefined function openssl_cipher_iv_length
交付效率提升52倍,运营效率提升10倍,看《金融云原生技术实践案例汇编》(附下载)
社会责任·价值共创,中关村网络安全与信息化产业联盟对话网信企业家海泰方圆董事长姜海舟先生
Co create a collaborative ecosystem of software and hardware: the "Joint submission" of graphcore IPU and Baidu PaddlePaddle appeared in mlperf
1、深拷贝 2、call apply bind 3、for of for in 区别
Evolution of customer service hotline of dewu
Navicat运行sql文件导入数据不全或导入失败