Deecamp笔记——点云目标跟踪 & Open3D连续可视化

点云目标跟踪 & Open3D可视化

本文是基于AB3DMOT进行的改编及应用,楼主在参加创新工场Deecamp时使用该方法使基于Det3D的目标检测效果smooth and visualized.

论文名称:《A Baseline for 3D Multi-Object Tracking》(AB3DMOT)
论文地址:https://arxiv.org/pdf/1907.03961.pdf
论文Github项目地址:https://github.com/xinshuoweng/AB3DMOT
本文Github项目地址:Deecamp_AB3DMOT

数据读取

Deecamp所使用的是Momenta的128线激光雷达数据集,目标检测输出的数据结构为:

label3d bboxanglescore
Pedestrian/Car/Cyclist/Truck/Tricarx,y,z,l,w,halpha_yscore

由于输出结果每一帧为一个独立文件,因此数据读取修改如下:

dets = seq_dets[:,1:8]
    ori_array = seq_dets[:,-1].reshape((-1, 1))
    other_array = seq_dets[:,0:6]
    additional_info = np.concatenate((ori_array, other_array), axis=1)
    dets_all = {'dets': dets, 'info': additional_info}

(由于所用数据与原文数据只有2D信息的差别,数据接口改变较为容易,后续会将tracking加入到eval中进行实时输入与输出(loading))

Open3D

此次尝试选用的是Open3D进行可视化操作
安装和具体函数使用可见文档 http://www.open3d.org/docs/release/

Open3D python版本安装

部分blog会建议使用

pip install open3d-python

但是!!!!!!!
open3d-python版本最新只有到0.7.0,部分module无效,建议使用:

pip install open3d==0.10.0(版本号)
   or 
conda install -c open3d-admin open3d
Open3D可视化

先定义window以及visualizer等

  vis = o3d.visualization.Visualizer()
  vis.create_window()
  opt = vis.get_render_option()
  opt.background_color = np.asarray([0, 0, 0])
  opt.point_size = 1
  opt.show_coordinate_frame = True

读取显示点云

file_name = seq_name + ".bin"
    v_f = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                     "/path/to/pointcloud", file_name)
    pcs = load_pc_from_file(v_f)
    pcs = np.array(pcs[:, :3])
    pcobj = o3d.geometry.PointCloud()
    pcobj.points = o3d.utility.Vector3dVector(pcs)
    vis.add_geometry(pcobj)

循环进入跟踪后结果进行输出

for d in trackers:
        xyz = np.array([d[: 3]])
        hwl = np.array([d[3: 6]])
        r_y = [d[6]]
        pts3d = compute_3d_box_lidar_coords(xyz, hwl, angles=r_y, origin=(0.5, 0.5, 0.5), axis=2)
        lines = [[0, 1], [1, 2], [2, 3], [3, 0],
                 [4, 5], [5, 6], [6, 7], [7, 4],
                 [0, 4], [1, 5], [2, 6], [3, 7]]
        colors = [[1, 0, 1] for i in range(len(lines))]
        line_set = o3d.geometry.LineSet()
        line_set.points = o3d.utility.Vector3dVector(pts3d[0])
        line_set.lines = o3d.utility.Vector2iVector(lines)
        line_set.colors = o3d.utility.Vector3dVector(colors)
        vis.add_geometry(line_set)

若连续可视化需要清除内容

vis.clear_geometries()

可视化效果如下所示在这里插入图片描述
在这里插入图片描述

Edit

使用

vis.add_geometries()

之后由于当前ubuntu16限制,没有办法将open3d提升至0.10.0版本,无法进行视角变化,因此使用下列方法将视角变为自由模式,可以通过拖动和滚轮调整视角。

通过判断当前line_set的值进行update

if line_set[index].has_lines():
            line_set[index].points = o3d.utility.Vector3dVector(pts3d[0])
            line_set[index].lines = o3d.utility.Vector2iVector(lines)
            line_set[index].colors = o3d.utility.Vector3dVector(line_colors)
            vis.update_geometry(line_set[index])
        else:
            line_set[index].points = o3d.utility.Vector3dVector(pts3d[0])
            line_set[index].lines = o3d.utility.Vector2iVector(lines)
            line_set[index].colors = o3d.utility.Vector3dVector(line_colors)
            vis.add_geometry(line_set[index])

点云也是一样

if pcobj.is_empty():
        pcobj.points = o3d.utility.Vector3dVector(pcs[:, 0:3])
        vis.add_geometry(pcobj)
    else:
        pcobj.points = o3d.utility.Vector3dVector(pcs[:, 0:3])
        vis.update_geometry(pcobj)

最终可以得到下面的效果:

【无人驾驶】3D目标识别效果

可视化效果还不够好,欢迎沟通~

  • 20
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
连续系统的时域分析是信号与系统学习中的重要部分。时域分析研究的是信号在时间域内的变化规律,常用的分析方法包括冲激响应法、单位阶跃响应法和相应方程法。 1. 冲激响应法 冲激响应法是一种基于系统输入信号的冲激函数的响应来分析系统时域特性的方法。具体来说,将系统输入信号表示为一个冲激序列的加权和,然后计算出系统对每个冲激的响应,得到系统的冲激响应函数。然后,通过线性时不变系统的特性,可以将任何输入信号都表示为冲激序列的加权和,从而得到系统对任何输入信号的响应。 2. 单位阶跃响应法 单位阶跃响应法是一种基于系统输入信号的单位阶跃函数的响应来分析系统时域特性的方法。具体来说,将系统输入信号表示为一个单位阶跃函数的加权和,然后计算出系统对每个单位阶跃函数的响应,得到系统的单位阶跃响应函数。然后,通过线性时不变系统的特性,可以将任何输入信号都表示为单位阶跃函数的加权和,从而得到系统对任何输入信号的响应。 3. 相应方程法 相应方程法是一种基于系统微分方程的解析解来分析系统时域特性的方法。具体来说,根据系统微分方程的特性,可以得到系统的传递函数,然后通过拉普拉斯变换将输入信号和传递函数变换到频域内,最终通过反变换得到系统的时域响应。 以上三种方法都是分析连续系统时域特性的重要方法,各自适用于不同的情况。掌握这些方法可以帮助我们更好地理解和分析连续系统的时域特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值