小白跑deep snake(巨详细)

**

小白跑deep snake项目碰到的坑

**
照着网上这篇博客:CVPR2020分割算法Deep Snake的配置跑程序
中间碰到了大大小小的坑,在各种百度中最后还是运行出来了。写这篇文章就是想说一下我碰到的有哪些坑。

上面那篇博客还是挺好的。没有太多的数据集,笔记本也可以跑。
先说下我的环境:win10+pycharm+python3.6+cuda9.0+torch1.1.0+torchvision0.3.0。(我的笔记本比较辣鸡)没有用到anaconda。包都是pip下载的
具体的坑:

一:搭环境:

1.首先下载python3.6(最好python3.6):我之前没学过python,最开始装的时候直接莽了个3.9,后来运行时碰到了很多坑,换个3.6的就好了
2.cuda安装。这个没太多坑,在nvidia控制面板中看一下自己电脑支持哪个版本就行,我一开始装了一次然后又卸载,再安装时碰到这个
小白跑deep snake(巨详细)_第1张图片
这个只需在安装时选择自定义安装,然后把CUDA/Visual Studio Intergration取消勾选就可以安装了。当时我也没装Visual Studio,这个有点大。后续解决方法百度可以找到。
3.torch安装:不同版本的cuda对torch的要求不一样,这个大家可以自己去百度。我是cuda9.0,需要的是torch1.1.0。一开始我直接
pip install torch==1.1.0. 然后安装出错,后来找了其他镜像源,装好了一个几十m的,然后在跑代码时报错了cpu is not available。然后我在python里面print(torch.cuda.is_available())。结果为false。
然后我就各种百度,都是什么cuda和torch版本不匹配啊啥的。我踩了很多坑了,我敢肯定我cuda和torch是匹配的。在cmd命令下也能看到toch是0.3.0。
最后隐约看到一篇博客说可能是下的torch是无cuda版本的(当时那篇博客我只是扫了一眼,没在意,后面发现真是这个原因)。然后我重新下了带cuda版本的的torch。

pip3 install https://download.pytorch.org/whl/cu90/torch-1.1.0-cp36-cp36m-win_amd64.whl

可以根据自己的电脑配置下载匹配的:torch下载
cpu/torch就是不带cuda的,cu90就是cuda9.0,cp36就是python版本3.6
好家伙差不多700m。最后安装好成功返回ture。
在这里插入图片描述
然后安装基本没啥其他坑了。

二、跑程序

首先去github里面fork一份。然后用pycharm去下载代码。除了一个ssh key较麻烦,其他操作都可以百度到。(ssh key解决方法 )
github进不去?
好,现在进入pycharm开始跑程序了。

1.安装依赖库两步
进入工程目录运行如下代码(就是在pycharm中Terminal窗口下,pip在安装python时都会自动安装上):

pip install Cython==0.28.2
pip install -r requirements.txt

第一步还好,第二步安装失败,然后我就打开requirement.txt一个一个用pip命令安装。大致都可以一个一个来,失败了都可以自己百度找个镜像源啥的。
2.安装apex

git clone https://github.com/NVIDIA/apex.git

这个没啥问题,有问题自己去百度
然后进入apex目录安装:

cd apex
python setup.py install

在执行install时基本上就开始各种错了。前面的cpu is not available啥啊也是这儿开始的。
此外,还有个Microsoft Visual C++ 14.0 is required错误

error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/ Tools":

因为我没安装Visual Studio,就出了这个错
解决方法(不用下Visual Studio,下一个Microsoft Visual C++ Build Tools安装就行):百度网盘 提取码: b2qp
安装方法:visual c++ build tools的安装与使用
论文作者在这儿安装用的python setup.py install --cuda_ext --cpp_ext。只不过原贴作者报错了才换的python setup.py install。这个大家可以去原贴看看,最顶上有。
小白跑deep snake(巨详细)_第2张图片
3、使用Cuda编译库lib/csrc
依次进入lib/csrc/下的三个目录里面运行(记得退出apex):`
1)进入lib/csrc/dcn_v2路径运行

cd lib\csrc\dcn_v2
python setup.py build_ext --inplace

现在开始麻烦的来了,如果没有其他什么错,窗口会显示出一大堆东西。翻到最顶上,发现有个错:

E:\Python\Lib\site-packages\torch\utils\cpp_extension.py:189: UserWarning: Error checking compiler version for cl: [WinError 2] 系统找不到指定的文件。
 warnings.warn('Error checking compiler version for {}: {}'.format(compiler, error))

意思找不到cl.exe这个文件。好吧,那我去给它配个系统变量,在Path后面加个地址(大致目录是这样的,可以自己去找找,最后目录下有cl.exe):

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64

再次执行上面的代码python setup.py build_ext --inplace,又来一个错误:

E:\Python\lib\site-packages\torch(utils\cpp_extension.py:191: UserWarning:
                     !! WARNING !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Your compiler (cl 19.00.24210) may be ABI-incompatible with PyTorch!
Please use a compiler that is ABI-compatible with GCC 4.9 and above.
See https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html.

See https://gist.github.com/goldsborough/d466f43e8ffc948ff92de7486c5216d6
for instructions on how to install GCC 4.9 or higher.

意思是我的编译器cl跟PyTorch不兼容,需要GCC4.9或者更高版本的编译器。
但是我之前装过Dev-Cpp,里面的GCC版本是4.9.2的。
然后我在这儿卡了很久很久,也装过MinGW,然后GCC到也没用。(最后发现根本不用装这些)
当时我想的是先不管,先往下看。(最后我跑出来时还是没有管这个warning)看到下面还有其他错误:

E:/Python/lib/site-packages/torch/include\THC/THCNumerics.cuh(196): error: more than one operator "!=" matches these operands:
            built-in operator "arithmetic != arithmetic"
            function "operator!=(const __half &, const __half &)"
            operand types are: c10::Half != c10::Half
6 errors detected in the compilation of "C:/Users/xtt/AppUata/Local/Temp/tmpxft_0001f7c_0000000-8_utils.opp4.ii".
error:command ‘C:\\ProgramFiles\\NVIDIA GPU Computing Toolkit\\CUDA\\v9.0\|bin\\nvcc.exe' failed with exit status 2

(前面还有几个error,但是跟上面都一样,只是把“!=”换成其他的<,>,==啥的)其实一开始我一直搜的是最后两行代码。百度的都是牛头不对马嘴,然后我就搜error: more than one operator "!=" matches these operands:,搜是搜到了,原因是cuda和torch的头文件都提供了相同的重载运算符,编译器不知道用哪一个,可能与前面的warning有关,也有可能是我cuda和torch版本太低了。我百度出来的解决方法都是Linux下。
最后在我坚持不懈的到处找解决方法的情况下。最后还是找到了:
参考博客:Flownet2 NVIDIA pytorch最新安装教程 有效的避坑教程
这是因为torch关于Half和cuda的头文件关于Half 的三元运算符定义重叠了,编译器不知道选择哪个进行编译,(这些是cuda9开发以前遗留的兼容问题)

解决方法:找到THCNumerics.cuh文件,正常来说在这儿:'...\Python\Lib\site-packages\torch\include\THC\THCNumerics.cuh'
找到

static inline __host__ __device__ bool lt(at::Half a, at::Half b) { return a < b; } 
static inline __host__ __device__ bool le(at::Half a, at::Half b) { return a <= b; } 
static inline __host__ __device__ bool gt(at::Half a, at::Half b) { return a > b; } 
static inline __host__ __device__ bool ge(at::Half a, at::Half b) { return a >= b; } 
static inline __host__ __device__ bool eq(at::Half a, at::Half b) { return a == b; }
static inline __host__ __device__ bool ne(at::Half a, at::Half b) { return a != b; }

大致在190行左右,然后把以上这些代码注释掉。
再次运行那个代码,出现了跟原贴作者一样的错误:
在这里插入图片描述
照着原贴来,进入目录:lib/csrc/dcn_v2/src/cuda
打开dcn_v2_cuda.cu,把extern THCState *state;改成THCState *state = at::globalContext().lazyInitCUDA();
更改后,再次编译即可。
小白跑deep snake(巨详细)_第3张图片成功
2)进入lib/csrc/extreme_utils路径运行

python setup.py build_ext --inplace

每次最上面都会出现:Your compiler (cl 19.00.24210) may be ABI-incompatible with PyTorch!不用管这个。
也报了跟原贴作者一样的错:
在这里插入图片描述
继续跟着原贴改:
打开lib/csrc/extreme_utils/src/utils.cu文件,将里面的long全部替换成int64_t,再次运行编译即可。
小白跑deep snake(巨详细)_第4张图片

3)进入lib/csrc/roi_align_layer路径运行

python setup.py build_ext --inplace

这儿就没啥错了小白跑deep snake(巨详细)_第5张图片
4、在用Sbd的预训练模型做可视化测试
1)下载预训练模型 here 然后放到这个路径/data/model/snake/sbd/149.pth
当你打开data,发现里面只有一个卑微的.gitignore文件。没办法,自己一路建文件夹。
2)回到工程路径运行(就是回到snake目录下)

python run.py --type demo --cfg_file configs/sbd_snake.yaml demo_path demo_images/2009_000871.jpg ct_score 0.3

然后错误又来了(前面好像还有一个No module named "XXX"的错误,直接用pip安装XXX那个包就行):

Downloading: "http://dl.yf.io/dla/models\imagenet\dla34-ba72cf86.pth" to C:\Users\xtt/.cache\torch\checkpoints\dla34-ba72cf86.pth
Traceback (most recent call last):
  File "run.py", line 99, in <module>
    globals()['run_'+args.type]()
  ...
  ...
  File "E:\Python\lib\urllib\request.py", line 650, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found

404错误,没找到页面?注意最上面那句话,是要下个东西到一个文件夹中,去那个文件夹中看了看,没有。那就自己下

去代码中的页面下载,然后拷到目标文件夹中(也就60m)。
再次运行刚才的代码
小白跑deep snake(巨详细)_第6张图片
历尽千辛万苦。哎,还是跑出来了。
其实中间还有其他的一些bug出现,但大多数都可以百度解决。中间这个warning:Your compiler (cl 19.00.24210) may be ABI-incompatible with PyTorch!最后还是没有解决,但是能跑出来就没管了

我中间还进行了驱动更新,安装cudnn啥的麻烦得很。
没学过python,没跑过程序,电脑辣鸡,自己一个人摸着跑出来。哎,都是泪啊!!!

第一次写这些东西,如有不足,请谅解!

你可能感兴趣的:(deep,python,深度学习,编译器,github,visual,studio)