工程复现 -- SiamMOT

news2024/12/23 1:38:54

工程复现 – SiamMOT

先赞后看,养成好习惯,感谢您的理解与支持!

参考
1. siam-mot源码地址
2. SiamMOT 论文地址
3. SiamMOT 论文解析

简单介绍

SiamMOT(SiamMOT: Siamese Multi-Object Tracking)是一个基于区域的孪生多对象跟踪网络,可同时进行图像的检测追踪。该网络作为baseline ,由亚马逊提出的一个解决Airbone Object Tracking(AOT) 空中障碍物追踪问题。目前仅支持EMM运动模型。

一. 下载和安装工程

  1. 下载工程
git clone https://github.com/amazon-science/siam-mot.git
  1. 安装依赖
conda create -n siammot python=3.7 
conda activate siammot
pip3 install -r requirements.txt
conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=10.2 -c pytorch  # 因为本机CUDA10.2,故需要找到对应版本torch
  1. 下载三方库maskrnn_benchmark及其相关依赖包
    参考:maskrcnn-benchmark install
git clone https://github.com/facebookresearch/maskrcnn-benchmark.git

pip install ninja yacs cython matplotlib tqdm opencv-python
conda install -c pytorch pytorch-nightly torchvision cudatoolkit=9.0 # pytorch-nightly 和 cudatoolkit=9.0 未安装上
export INSTALL_DIR=$PWD

# install pycocotools
cd $INSTALL_DIR
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
python setup.py build_ext install

# install cityscapesScripts
cd $INSTALL_DIR
git clone https://github.com/mcordts/cityscapesScripts.git
cd cityscapesScripts/
python setup.py build_ext install

# install apex
cd $INSTALL_DIR
git clone https://github.com/NVIDIA/apex.git
cd apex
python setup.py install --cuda_ext --cpp_ext

# install maskrcnn-benchmark
cd maskrcnn-benchmark
python setup.py build develop

unset INSTALL_DIR

二. demo 测试

1.详情参考README.md, 遇到问题请参考第三模块。

python3 demos/demo.py --demo-video  PATH_TO_DEMO_VIDE --track-class person --dump-video True

2.结果
在这里插入图片描述

三.可能遇到的问题

Q1: 运行demo测试脚本,出现ModuleNotFoundError: No module named ‘demos’
A1: 将工程加入python环境变量

export PYTHONPATH=/home/cui/workspace/siam-mot

Q2: 将工程加入环境变量后,出现ModuleNotFoundError: No module named ‘maskrcnn_benchmark’
A2: 需要下载拷贝三方库,详细参考一中第3点。

Q3: 拷贝maskrcnn_benchmark后,出现库中模块缺少属性,AttributeError: module ‘torch._six’ has no attribute ‘PY3’
A3: 可能是torch版本不对,这里判断主要是否引入头文件和定义函数,直接暴力取true即可。

if torch._six.PY3: 直接修改为
if 1:

Q4: ImportError: cannot import name ‘_download_url_to_file’ from ‘torch.utils.model_zoo’
A4: 未进入python虚拟环境 或者 vscode IDE未切换到新建的虚拟环境,或者由于torch版本问题,修改_download_url_to_file函数名如下

#from torch.hub import _download_url_to_file  # 原版
from torch.hub import download_url_to_file as _download_url_to_file  # 修改

Q5: ImportError: cannot import name ‘_C’ from ‘maskrcnn_benchmark’
A5: 修改如下,修改_C 路径

from ._utils import _C
#from maskrcnn_benchmark import _C

Q6:Maskrcnn第三方依赖,apex安装过程中 cuda版本不对应,RuntimeError: Cuda extensions are being compiled with a version of Cuda that does not match the version used to compile Pytorch binaries. Pytorch binaries were compiled with Cuda 11.7.
A6:
参考:如何安装apex
本机CUDA版本10.2,注意torch、cudatoolkit对应版本

conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=10.2 -c pytorch
再次重新安装apex

Q7: fatal error: THC/THC.h: No such file or directory
A7:原因及解决:最新的版(1.11)本中将THC/THC.h文件删除了,pytorch降级1.10即可.

## 设置清华源,加速安装(貌似没什么效果)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=10.2 -c pytorch

Q8:编译maskrcnn_benchmark, /home/cui/workspace/maskrcnn_benchmark/maskrcnn_benchmark/csrc/cuda/deform_conv_cuda.cu(72): error: identifier “AT_CHECK” is undefined
A8:在maskrcnn_benchmark/maskrcnn_benchmark/csrc/cuda/文件夹下,修改deform_conv_cuda.cu和deform_pool_cuda.cu两个文件开头添加如下内容:

#ifndef AT_CHECK
#define AT_CHECK TORCH_CHECK 
#endif

Q9: 执行demo脚本,出现bug:libtorch_cuda_cu.so: cannot open shared object file: No such file or directory
A9: 首先进入到虚拟环境torch下,可以找到该文件。查看torch版本发现不是gpu版本(使用conda方式 安装的pytorch 是GPU版本),安装完之后如果还是不行,可以重新安装一边maskrcnn-benchmark。

cd ~/anaconda3/envs/siammot/lib/python3.7/site-packages/torch/lib
ls
pip install torch==1.10.1+cu102 torchvision==0.11.2+cu102 torchaudio==0.10.1 -f 
 https://download.pytorch.org/whl/torch_stable.html

Q10:ModuleNotFoundError: No module named ‘torchvision.models.utils’
A10
参考:torchvision版本问题,修改/home/cui/workspace/siam-mot/siammot/modelling/backbone/dla.py", line 11

#from torchvision.models.utils import load_state_dict_from_url  # 原版
from torch.hub import load_state_dict_from_url                  # 改版

Q11:ModuleNotFoundError: No module named ‘decord’
A11

pip install decord

Q12: ModuleNotFoundError: No module named ‘ffmpeg’
A12: 使用如下命令,切忌不要使用pip install ffmpeg,否则会出现Q17的问题(不识别的参数crf)。

sudo apt-get install ffmpeg 

Q13: 运行demo脚本,RuntimeError: Error reading PATH_TO_DEMO_VIDE…
A13
修改运行脚本中–demo-video PATH_TO_DEMO_VIDE 数据输入路径 为自己本地数据路径,以.mp4为结尾命名的文件,如下所示工程的data目录下。(注:如果实在无法录制视频数据,可以去掉--dump-video参数,或者参考Q16解决视频无法录制问题)
参考数据下载地址为:siam-mot issue中有人提问的问题

python3 demos/demo.py --demo-video ./data/person_car.mp4 --track-class person --dump-video True --output-path ./demos/demo_vis/

Q14: 运行demo脚本,/home/cui/workspace/siam-mot/demos/utils/vis_writer.py", line 42,assert (self._video_writer is not None)
A14: 原因同Q16问题相同,/demos/demo_vis/ 目录下没有需要检测的视频文件。

Q15: 运行demo脚本,AttributeError: module ‘ffmpeg’ has no attribute ‘probe’
A15

pip install ffmpeg-python

Q16: 运行demo脚本 [ERROR:0] global /tmp/pip-req-build-oxjbfc17/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp (2650) open Could not find encoder for codec_id=27, error: Encoder not found
[ERROR:0] global /tmp/pip-req-build-oxjbfc17/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp (2722) open VIDEOIO/FFMPEG: Failed to initialize VideoWriter
A16:
根本原因在于 VideoWriter 的初始化,推测是.mp4格式数据与 `
‘avc1’ 类型不兼容,这里推荐两种更改方法,用于生成AVI格式数据。
法一:修改demos/utils/vis_writer.py,36行_init_video_writer函数中cv2.VideoWriter_fourcc,修改完后会直接修改demos/demo_vis/下面的视频。

self._video_writer = cv2.VideoWriter(str(self._video_path), cv2.VideoWriter_fourcc(*'mp4v'), self._fps,(int(frame_width), int(frame_height)))

法二:修改demos/utils/vis_writer.py,36行_init_video_writer函数,同时可以注释掉close_video_writer函数中关于#compress the videos下面部分。

    def _init_video_writer(self, frame_width, frame_height):
        self._video_path = os.path.join(self._output_path, self._file_name)
        video_output_path = os.path.join(self._output_path, 'debug.avi') #
        fourcc = cv2.VideoWriter_fourcc('M','J','P','G') #
        self._video_writer = cv2.VideoWriter(str(video_output_path), fourcc, self._fps,
                                            (int(frame_width), int(frame_height)))

Q17: 运行demo脚本,Unrecognized option ‘crf’.
Error splitting the argument list: Option not found
A17: 原因可能是使用 ffmpeg 时使用到了 libx264,但在实际的编译过程中并有指定编译 libx264 参数,默认不会编译这一部分组件,从而产生报错。,参考crf 未识别参数

sudo apt-get install ffmpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/100001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务框架 SpringCloud微服务架构 服务异步通讯 53 MQ 集群 53.5 仲裁队列【SpringAMQP】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 服务异步通讯 文章目录微服务框架服务异步通讯53 MQ 集群53.5 仲裁队列【SpringAMQP】53.5.1 仲裁队列53 MQ 集群 53.5 仲裁队列【SpringAM…

Jvm学习笔记

🎶 文章简介:Jvm学习笔记 💡 创作目的:Jvm学习笔记 ☀️ 今日天气:天气很好 📝 每日一言:乾坤琉璃色,碧宇凝清光。 文章目录类文件结构详解一 概述二 Class 文件结构总结2.1 魔数&am…

工程机械部件的大尺寸空间精度检测仪器

工程机械作为工程建设中的重要工具,施工过程中长期承受各种外力,因此对各结构件质量要求很高,检测十分严格,通常要求的公差在0.1mm~0.2mm以内。工程机械部件外形尺寸及重量通常较大,常规仪器无法有效满足检…

【Linux权限管理】

The secret of getting ahead is getting started. 目录 1 Linux权限的概念 2 文件访问者的分类(人) 3 文件类型和访问权限(事物属性) chmod chown: chgrp: 4 文件掩码 umask 5 目录的权限 6 粘滞位 7 权限的总结 1 Linu…

【瑕疵检测】瓶盖瑕疵检测【含Matlab源码 730期】

⛄一、简介 文中将图像预处理与边缘检测相结合对瓶盖瑕疵进行检测, 先使用直方图规定化的方法对图像做出修正与增强, 再利用中值滤波的方法消除图像孤立的噪声点;Canny算子快速分辨出瓶盖瑕疵, 再利用采用Otsu阈值方法求取自适应阈值自动选择并提取瑕疵。 1 图像预处理 在特征…

Mac 使用 brew 安装 mysql

最近需要用到 MySQL 来开发项目,所以在 Mac 配置了下 MySQL 的环境。 1、使用 brew install mysql 安装 MySQL 安装完毕后会有以下提示信息,告诉我们初始安装好后 root 账户没有密码,只需要输入 mysql -uroot就能连接运行MySQL。 那咱们输入 …

模板引擎:ftl文件生成word

wshanshi:总结记录…便于回顾… 一、什么是FreeMarker FreeMarker 是一个用 Java 语言编写的模板引擎,基于模板来生成文本输出。 FreeMarker的原理:模板数据模型输出,模板只负责数据在页面中的表现,不涉及任何的逻辑代…

设计模式之组合模式

Composite design pattern 组合模式的概念、组合模式的结构、组合模式的优缺点、组合模式的使用场景、组合模式的实现示例、组合模式的源码分析 1、组合模式的概念 组合模式,即部分整体模式,是用于把一组相似的对象当做一个单一个的对象。组合模式依据树…

C#语言实例源码系列-身份证验证

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

【车载开发系列】UDS诊断---数据传输($0x36)

【车载开发系列】UDS诊断—数据传输($0x36) UDS诊断---数据传输($0x36)【车载开发系列】UDS诊断---数据传输($0x36)一.概念定义二.报文格式1)请求报文2)肯定响应3)否定响…

FL Studio21最新中文公测版下载及新功能介绍

FL Studio水果21现已推出,提供更快、更精确的音频编辑,coco玛奇朵升级后的DAW为用户提供了更多的内容发现和改进的界面。 Image-Line发布了FL Studio 21,称其可以实现更快、更精确的音频编辑,以及对整个DAW的更多控制。 期待已久…

【毕业设计_课程设计】基于SSM的实验室管理系统(源码+论文)

文章目录0 项目说明1 研究目的2 研究方法3 项目使用4 研究结论5 论文目录6 项目源码0 项目说明 基于SSM的实验室管理系统 提示:适合用于课程设计或毕业设计,工作量达标,源码开放 1 研究目的 基于B/S模式的实验室管理系统,它所覆…

Linux命令行笔记-00 综述

文章目录1 Linux命令行简介1.1 Linux命令行的分类1.1.1 根据系统中作用来分类1.1.2 根据对象来分类2 Linux命令行解释器2.1 命令行解释器shell2.1.1 核心程序2.1.2 公用程序shell2.1.3 用户的默认shell2.1.4 shell如何工作2.2 Shell发展历史2.3 shell版本的差异2.3.1 C shell2.…

云原生----什么是云原生

【原文链接】云原生----什么是云原生 文章目录1. 云原生的概念2. 云原生的四要素3. 云原生的关键目标什么是云原生?这里将从云原生的概念、云原生的四要素、云原生关键目标等方面介绍。1. 云原生的概念 云原生应用时面向云而设计的应用,在使用云原生技术…

Metasploit Framework和msf框架

Metasploit Framework ● MSF默认集成与kali linux之中 ● 使用postgresql数据库存储数据 ○ 早期版本需要先启动数据库再启动msf MSF架构 Rex ● 基本功能库,用于完成日常基本任务,无需人工手动编码实现 ● 处理socket连接访问、协议应答&#xff08…

洛谷千题详解 | P1020 [NOIP1999 普及组] 导弹拦截【C++语言】

博主主页:Yu仙笙 专栏地址:洛谷千题详解 目录 题目描述 输入格式 输出格式 输入输出样例 解析: C源码: C源码2: -------------------------------------------------------------------------------------------------…

【(C语言)数据结构奋斗100天】栈和队列

前言 🏠个人主页:泡泡牛奶 🌵系列专栏:[C语言] 数据结构奋斗100天 本期所介绍的是栈和队列,那么什么是栈呢,什么是队列呢?在知道答案之前,请大家思考一下下列问题: 你如何…

【问答篇】Java 线程篇 面试题(二)

每天进步一点~ (ps: 文章内容及图片出处来自本人公众号~) 01、问:请谈谈你对线程声明周期的6种状态的认识和理解 答:很多地方说线程有5种状态,但实际上是6种状态:NEW、RUNNABLE, BLOCKED、 WAITING、TIMED_WAITING、TERMINATED; 新创建&a…

(附源码)Springboot掌上博客系统 毕业设计 063131

Springboot掌上博客系统的设计与实现 摘 要 掌上博客系统是当今网络的热点,博客技术的出现使得每个人可以零成本、零维护地创建自己的网络媒体,Blog站点所形成的网状结构促成了不同于以往社区的Blog文化,Blog技术缔造了“博客”文化。 本文课…

微服务框架 SpringCloud微服务架构 服务异步通讯 53 MQ 集群 53.1 集群分类 53.2 普通集群

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 服务异步通讯 文章目录微服务框架服务异步通讯53 MQ 集群53.1 集群分类53.1.1 集群分类53.2 普通集群53.2.1 普通集群53.2.2 搭建普通 集群5…