本人刚刚本科毕业,准备出国所以跟着清华导师做个项目,最近开了物体追踪的坑,老师话不多说直接让跑代码,作为一个萌新,尤其是懒得装双系统的萌新,决定直接在windows上跑。从代码架构上可以看出作者很有代码功底,然而唯一不足的是他引用了适用性比较坑的prpooling代码,导致在Windows上跑炸裂。事先说明,如果实验室用linux环境的同学尽量用linux跑,windows跑要做好折腾的准备。既然你已经准备好啦,那就来吧
Github代码:https://github.com/visionml/pytracking
论文地址: https://arxiv.org/pdf/1811.07628.pdf
https://github.com/vacancy/PreciseRoIPooling
说明如下
还有一个小问题要注意吧,大家要看好自己的显卡支持的最高CUDA版本,方法为 桌面右键-NVIDIA选项-帮助-系统信息-组件-NVCUDA.dll
作者在代码里引用了其他github代码,默认是不下载的,所以在download的时候别忘了进入pytracking/ltr/external/ 下载prpooling的源码
如果你用git下载需要两个命令
git clone https://github.com/visionml/pytracking.git
git submodule update --init
不然真正跑代码的时候会提示缺少包
这一步还算简单,用记事本打开install.sh,打开anaconda prompt一步一步敲就好,创建虚拟环境就自己弄吧~我们从虚拟环境activate后开始
conda install -y matplotlib
conda install -y pandas
pip install opencv-python
pip install tensorboardX
pip install visdom
conda install -y cython
pip install jpeg4py
mkdir pytracking/networks
如果我没有记错的话,这些都是可以直接装上的,如果装不上去看看网上的其他教程,看看缺什么包
还有几个就是深坑了…容我们慢慢来
这个东东要去github上下载,送上地址
https://github.com/ninja-build/ninja/releases
把这个东东下载下来,让后加入到环境变量里
访问cmd,输入ninja可以直接运行就ok,碰到错误系统找不到指定的文件,没关系,pytorch会生成那个文件的~
这个东西就是深坑了,可以看看网上其他的教程
我是这么安装上的
再送上两个教程
https://blog.csdn.net/benzhujie1245com/article/details/82686973
https://www.jianshu.com/p/820f0177b867
这个就是比较麻烦的地方了,但是不要嫌麻烦,后面ninja还要用这个变量的,坑死我了
一共有三个
PATH
C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\VC\bin\amd64
C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\Common7\Tools
LIB
C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\VC\lib\amd64;
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\ucrt\x64;
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\um\x64;
D:\Anaconda3\envs\pytorch\Lib\site-packages\torch\lib;
INCLUDE
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\shared;
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\ucrt;
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\um;
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\winrt;
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0;
C:\Program Files (x86)\Microsoft Visual Studio\Shared\14.0\VC\include
这里需要注意的是
emm,这个东西嘛,下好了
链接:https://pan.baidu.com/s/1Qd2CTxgbDyh-9obos4zn7w
提取码:ij11
复制这段内容后打开百度网盘手机App,操作更方便哦
下载好之后放到pytracking的network目录下,没有就自己建一个
好了,现在我萌可以开始跑啦~
如果你的笔记本有摄像头的话可以直接运行
python run_webcam.py atom default
或者
python run_webcam.py dimp dimp50
如果没有可以找一个视频,运行
python run_vidio.py atom default 视频路径
别着急,后面坑多着呢
首先是linux路径和我们的路径不太一样
在anaconda prompt里,在master目录下输入这个
python -c "from pytracking.evaluation.environment import create_default_local_file; create_default_local_file()"
python -c "from ltr.admin.environment import create_default_local_file; create_default_local_file()"
会在pytracking\evaluation\目录下创建local.py
我们需要重新改一下目录字符串,按照自己的目录改一下就行,这是我的目录
如果还有其他的错误,大概看一下源码,把左斜杠改成右斜杠就可以了
啊~这个错误让我差点买U盘装双系统……
就当我尝试在虚拟机上跑代码的时候,我终于知道问题在哪了…
原因是作者的CUDA版本和我的CUDA版本不一样
在torch.load()的时候会悄无声息的推出,提示错误码0xC0000005
所以我们只需要把代码改一下 ,在ltr\admin\loading.py
def torch_load_legacy(path):
"""Load network with legacy environment."""
# Setup legacy env (for older networks)
_setup_legacy_env()
# Load network
checkpoint_dict = torch.load(path,map_location=lambda storage, loc: storage.cuda(0))
# Cleanup legacy
_cleanup_legacy_env()
return checkpoint_dict
如果自己有多块显卡根据自己的需要改一下就行,参考教程
https://www.cnblogs.com/llfctt/p/10986401.html
好了,最后一个大坑
如果你跑程序的话会出现一大堆编译错误。如果上面VC都配好的话,这一步应该不会出现cl.exe不存在,math.h不存在等问题
但是你会发现编译不通过,没错~这就是prpooling比较坑的地方(虽然我觉得算法挺好的)
在运行的时候你会发现有这一句话
Emitting ninja build file C:\Users\40889\AppData\Loca\Temp\torch_extensions_prroi_pooling\build.ninja…
找到这个目录,把ninja.exe复制到build.ninja同于个目录下,先说错误原因把
把这两个参数加上之后,在这个目录下运行ninja应该编译成功,如果编译失败需要再找原因,有可能是环境配置错误,有可能是lib版本出现问题
但是编译通过之后发现还是不能运行,再打开ninjabuild发现文件又改回去了
于是我们只好改pytorch的代码,没错
找到出现错误的cpp_extention.py代码,CUDAExtension函数下
还有这个地方,改成COMMON_MSVC_FLAGS = [’/MD’, ‘/wd4819’, ‘/EHsc’,’/TP’]
这样就可以生成能运行的ninja文件了,,,真艰难