当前位置:网站首页>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)
边栏推荐
- 2022-7-6 Leetcode 977. Square of ordered array
- Distributed transaction solution
- QQ medicine, Tencent ticket
- Dry goods | summarize the linkage use of those vulnerability tools
- Shell batch file name (excluding extension) lowercase to uppercase
- 搜索框效果的实现【每日一题】
- Co create a collaborative ecosystem of software and hardware: the "Joint submission" of graphcore IPU and Baidu PaddlePaddle appeared in mlperf
- [daily training -- Tencent select 50] 231 Power of 2
- 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)
- Attribute keywords aliases, calculated, cardinality, ClientName
猜你喜欢

Introduction and basic use of stored procedures

干货|总结那些漏洞工具的联动使用

Flink | multi stream conversion

Redis can only cache? Too out!

2022-7-7 Leetcode 34.在排序数组中查找元素的第一个和最后一个位置

高等數學---第八章多元函數微分學1

2022-7-6 Leetcode27.移除元素——太久没有做题了,为双指针如此狼狈的一天

Navicat run SQL file import data incomplete or import failed

Esp32 ① compilation environment

566. Reshaping the matrix
随机推荐
Esp32 series column
2022-7-7 Leetcode 34.在排序数组中查找元素的第一个和最后一个位置
Did login metamask
PHP中用下划线开头的变量含义
Supply chain supply and demand estimation - [time series]
Redis can only cache? Too out!
What are the principles for distinguishing the security objectives and implementation methods that cloud computing security expansion requires to focus on?
1. Deep copy 2. Call apply bind 3. For of in differences
High end for 8 years, how is Yadi now?
提升树莓派性能的方法
JS function returns multiple values
PC端页面如何调用QQ进行在线聊天?
Co create a collaborative ecosystem of software and hardware: the "Joint submission" of graphcore IPU and Baidu PaddlePaddle appeared in mlperf
[1] Basic knowledge of ros2 - summary version of operation commands
What parameters need to be reconfigured to replace the new radar of ROS robot
Leecode3. Longest substring without repeated characters
[fortress machine] what is the difference between cloud fortress machine and ordinary fortress machine?
DID登陆-MetaMask
属性关键字Aliases,Calculated,Cardinality,ClientName
Data refresh of recyclerview