ubuntu20.04上conda环境复现AB3DMOT目标追踪算法记录

        最近准备学习目标追踪于是想复现一篇基础的算法看看效果,故选择记录以下复现的过程,方便以后复习,本文采用ubuntu20.04与python3.8的conda虚拟环境,记录了一些环境问题。

选择的AB3Dmot源代码地址: GitHub - xinshuoweng/AB3DMOT: (IROS 2020, ECCVW 2020) Official Python Implementation for "3D Multi-Object Tracking: A Baseline and New Evaluation Metrics"(IROS 2020, ECCVW 2020) Official Python Implementation for "3D Multi-Object Tracking: A Baseline and New Evaluation Metrics" - GitHub - xinshuoweng/AB3DMOT: (IROS 2020, ECCVW 2020) Official Python Implementation for "3D Multi-Object Tracking: A Baseline and New Evaluation Metrics"https://github.com/xinshuoweng/AB3DMOT

第一步激活自己的conda环境并git代码,或者直接从上述的链接下载:

git clone https://github.com/xinshuoweng/AB3DMOT.git

 安装依赖包:

venv只有python3可以使用,因此只能创建python3的虚拟环境,创建命令如下(这里照着代码步骤,应该不用再创建一个虚拟环境也可以,保险起见直接用作者提供的思路,但是在我python3.8环境下pip install venv会报错,不用安装直接操作下一步):

配置一个虚拟环境
python3 -m venv env
source env/bin/activate
pip3 install -r requirements.txt

 接着在根目录git作者的工具包并安装依赖然后返回工作区间:

git clone https://github.com/xinshuoweng/Xinshuo_PyToolbox
cd Xinshuo_PyToolbox
pip3 install -r requirements.txt
cd ..

如下图 

 设置路径(为了让代码能找到工具包)

export PYTHONPATH=${PYTHONPATH}:/home/user/workspace/code/AB3DMOT
export PYTHONPATH=${PYTHONPATH}:/home/user/workspace/code/AB3DMOT/Xinshuo_PyToolbox

source激活一下

source ~/.profile
# cd path/to/AB3DMOT(没用上,因为一直在该路径下)
source env/bin/activate

如下图:

 接下来运行作者提到的不用下载kitti数据就能快速演示的demo(这里我看了一下作者提供的代码里面没有相应的kitti数据所以大部分都不能运行,所以我直接下的kitti运行,但是记录一下该部分的一些bag错误):

运行作者提供的:

python3 main.py --dataset KITTI --split val --det_name pointrcnn

报错:packages/numba/_dynfunc.cpython-38-x86_64-linux-gnu.so: undefined symbol: _PyObject_GC_UNTRACK

原因:作者用的python3.6,这里pyhon3.8使用时需要更新numba包,解决方案:

pip install numba==0.50.1

.接着报错:

FileNotFoundError: [Errno 2] No such file or directory: '/home/t/t/AB3DMOT/AB3DMOT/AB3DMOT_libs/../data/KITTI/tracking/training/oxts/0001.txt

对照路径发现并没有相应的文件,作者提供的文件没有kittti简单的simple不能直接检测,故选择直接上完整kitti数据集

链接:The KITTI Vision Benchmark Suite

下载解压到相应的文件夹:

 解压完成后运行:

python3 main.py --dataset KITTI --det_name pointrcnn

报错:ValueError: not enough values to unpack(expected 2,got 1)

 问题分析:由于kitti数据集里面calibs校准数据缺少冒号

如图(倒数3行,由于数据需要修改的txt很多,所以写了一个python脚本批量处理,如下):

 批量处理():

from re import L
import numpy
import os
import sys
# 输入文件夹
root = '/home/t/t/AB3DMOT/AB3DMOT/data/KITTI/tracking/training/calib'
file_names = os.listdir(root)
file_ob_list = []
for file_name in file_names:
    fileob = root + '/' + file_name
    file_ob_list.append(fileob)
for file1 in file_ob_list:
    print(file1)
    with open(file1,"r+") as f:
        file = f.read()
        file = file.replace('R_rect','R_rect:')
        file = file.replace('Tr_velo_cam','Tr_velo_cam:')
        file = file.replace('Tr_imu_velo','Tr_imu_velo:')
        print(file)
        f.seek(0,0)
        f.truncate()	#清空文件,配合seek使用,否则清空的位置不对
        f.write(file)
        f.close()
        # for line in f:
        #     xiugai = line.split(' ')
        #     if(xiugai[0]=='R_rect'):
        #         line = line[0:6]+':'+line[6:]
        #     if(xiugai[0]=='Tr_velo_cam'):
        #         line = line[0:11]+':'+line[11:]
        #     if(xiugai[0]=='Tr_imu_velo'):
        #         line = line[0:11]+':'+line[11:]    

 修改后再次运行(接着报错):

关键字报错:KeyError: 'Tr_velo_to_cam' KeyError: 'Tr_imu_to_velo' KeyError: 'R0_rect'

后续出现该问题,首先检测是否每个calib里面的txt符合规范

问题描述:由于代码里面与kiiti数据calibs上面的txt文件里面名称不同,这里可以改 代码也可以改上面的kitti数据集的calibs:

from re import L
import numpy
import os
import sys
root = '/home/t/t/AB3DMOT/AB3DMOT/data/KITTI/tracking/training/calib'
file_names = os.listdir(root)
file_ob_list = []
for file_name in file_names:
    fileob = root + '/' + file_name
    file_ob_list.append(fileob)
for file1 in file_ob_list:
    print(file1)
    with open(file1,"r+") as f:
        file = f.read()
        file = file.replace('R_rect','R0_rect')
        file = file.replace('Tr_velo_cam','Tr_velo_to_cam')
        file = file.replace('Tr_imu_velo','Tr_imu_to_velo')
        print(file)
        f.seek(0,0)
        f.truncate()	#清空文件,配合seek使用,否则清空的位置不对
        f.write(file)
        f.close()

 再次运行,成功:

运行test:

python3 main.py --dataset KITTI --det_name pointrcnn --split test

可视化准备:

python3 scripts/post_processing/trk_conf_threshold.py --dataset KITTI --result_sha pointrcnn_test_H1

生成追踪结果:

python3 scripts/post_processing/visualization.py --dataset KITTI --result_sha pointrcnn_test_H1_thres --split test

报错: self._proc.stdin.write(vid.tostring())
BrokenPipeError: [Errno 32] Broken pipe

参考这类错误原因:

IOError: [Errno 32] Broken pipe 错误分析_顶晚人的博客-CSDN博客_broken pipe异常分析及解决一、概述Broken pipe 本质是 IOError 错误,是 Linux 系统层面的机制导致,一般发生在读写文件IO和网络Socket IO的时候。对应的 Linux 系统错误是 EPIPE,摘自【参考2】的一段话:'''Macro: int EPIPE “Broken pipe.” There is no process reading from the other end...https://blog.csdn.net/qq_34333481/article/details/105135640

报错如图:

解决方案(修改如下代码): 

 

 

try:
	video_writer.writeFrame(image)
		count += 1
except IOError as e:
    	if e.errno == errno.EPIPE:
    		pass

再次运行,成功得到结果:

 打开问价夹查看结果:

 前三帧文件 :

 

 

 

  • 15
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ng_T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值