最近准备学习目标追踪于是想复现一篇基础的算法看看效果,故选择记录以下复现的过程,方便以后复习,本文采用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
报错如图:
解决方案(修改如下代码):
文章来源地址https://www.toymoban.com/news/detail-476248.html
try:
video_writer.writeFrame(image)
count += 1
except IOError as e:
if e.errno == errno.EPIPE:
pass
再次运行,成功得到结果:
打开问价夹查看结果:
前三帧文件 :
文章来源:https://www.toymoban.com/news/detail-476248.html
到了这里,关于ubuntu20.04上conda环境复现AB3DMOT目标追踪算法记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!