运行Domain-Adaptive-Faster-RCNN-PyTorch 和 MaskRcnn-benchmark出现的问题及解决办法

上一篇文章说,现在有个目标检测的任务。。然后我看了几篇经典的domain adaptation的论文。接下来,就是想跑下代码,具体看下这个模型咋写的。

我发现这个repository还挺好的:Domain-Adaptive-Faster-RCNN-PyTorch
因为它是pytorch的,而且还支持pytorch1.0,之前找的几个都太老了。。

然后,我就看它的install.md。发现,就写了这么一句话,好吧,我接下来就去装一下Maskrcnn-benchmark。
在这里插入图片描述

运行Maskrcnn-benchmark的血泪史

按照它官网的步骤:cocoapi和cityscapesScripts,我都可以顺利编译。

重点在于这个apex,弄了一晚上
运行Domain-Adaptive-Faster-RCNN-PyTorch 和 MaskRcnn-benchmark出现的问题及解决办法_第1张图片
一开始跟我说是:pytorch的cuda版本跟我系统按照的cuda版本不符。
神奇的是我将pytorch升级到cuda10.1的版本,pytorch竟然不能用gpu运行了???
我只好将cuda降级(详见我上一篇博客)

然后,我的pytorch cuda和系统cuda匹配后,我再编译还是不成功。
出现这一堆报错:

csrc/mlp.cpp:67:3: note: in expansion of macro ‘AT_DISPATCH_FLOATING_TYPES_AND_HALF’
   AT_DISPATCH_FLOATING_TYPES_AND_HALF(inputs[0].type(), "mlp_forward", [&] {
   ^
csrc/mlp.cpp:71:54: error: expected primary-expression before ‘>’ token
       w_ptr.push_back(inputs[i + 1].data_ptr());
                                                      ^
/home/dailh/anaconda3/lib/python3.7/site-packages/torch/include/ATen/Dispatch.h:12:12: note: in definition of macro ‘AT_PRIVATE_CASE_TYPE’
     return __VA_ARGS__();                          \
            ^
csrc/mlp.cpp:67:3: note: in expansion of macro ‘AT_DISPATCH_FLOATING_TYPES_AND_HALF’
   AT_DISPATCH_FLOATING_TYPES_AND_HALF(inputs[0].type(), "mlp_forward", [&] {
   ^
csrc/mlp.cpp:71:56: error: expected primary-expression before ‘)’ token
       w_ptr.push_back(inputs[i + 1].data_ptr());
                                                        ^
/home/dailh/anaconda3/lib/python3.7/site-packages/torch/include/ATen/Dispatch.h:12:12: note: in definition of macro ‘AT_PRIVATE_CASE_TYPE’
     return __VA_ARGS__();                          \
            ^
csrc/mlp.cpp:67:3: note: in expansion of macro ‘AT_DISPATCH_FLOATING_TYPES_AND_HALF’
   AT_DISPATCH_FLOATING_TYPES_AND_HALF(inputs[0].type(), "mlp_forward", [&] {
   ^
csrc/mlp.cpp:73:69: error: expected primary-expression before ‘>’ token
         b_ptr.push_back(inputs[i + 1 + num_layers].data_ptr());
                                                                     ^
/home/dailh/anaconda3/lib/python3.7/site-packages/torch/include/ATen/Dispatch.h:12:12: note: in definition of macro ‘AT_PRIVATE_CASE_TYPE’
     return __VA_ARGS__();                          \
            ^
csrc/mlp.cpp:67:3: note: in expansion of macro ‘AT_DISPATCH_FLOATING_TYPES_AND_HALF’
   AT_DISPATCH_FLOATING_TYPES_AND_HALF(inputs[0].type(), "mlp_forward", [&] {
   ^
csrc/mlp.cpp:73:71: error: expected primary-expression before ‘)’ token
         b_ptr.push_back(inputs[i + 1 + num_layers].data_ptr());

/home/dailh/anaconda3/lib/python3.7/site-packages/torch/include/ATen/Dispatch.h:12:12: note: in definition of macro ‘AT_PRIVATE_CASE_TYPE’
     return __VA_ARGS__();                          \
            ^
csrc/mlp.cpp:123:3: note: in expansion of macro ‘AT_DISPATCH_FLOATING_TYPES_AND_HALF’
   AT_DISPATCH_FLOATING_TYPES_AND_HALF(inputs[0].type(), "mlp_backward", [&] {
   ^
error: command 'gcc' failed with exit status 1

google了很久,终于找到解决方案。因为从官网下载的最新的apex,好像cuda10.0有点旧了???反正就要回退到之前的版本。
你还不能直接下载zip文件。。得git下来:

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

cd apex

git checkout f3a960f80244cf9e80558ab30f7f7e8cbf03c0a0

python setup.py install --cuda_ext --cpp_ext

然后,我就成功安装apex啦!!!
运行Domain-Adaptive-Faster-RCNN-PyTorch 和 MaskRcnn-benchmark出现的问题及解决办法_第2张图片
你以为现在我就能成功运行maskrcnn-benchmark了吗?我真是太天真了。。。

旧bug解决,新bug又出现了。类似于这种错误:

ImportError: /home/dailh/Study/Underwater/Domain-Adaptive-Faster-RCNN-PyTorch-master/maskrcnn_benchmark/maskrcnn_benchmark/_C.cpython-37m-x86_64-linux-gnu.so: undefined symbol: _ZN3c105ErrorC1ENS_14SourceLocationERKSs

运行Domain-Adaptive-Faster-RCNN-PyTorch 和 MaskRcnn-benchmark出现的问题及解决办法_第3张图片
气死了气死了,又重装一番Pytorch无果后,我只能打开看看这个setup.py里面是些什么代码。。
然后,我发现这里面有个CUDA_HOME。咦,我刚不是改完cuda版本,还装在自己目录嘛。所以我就打印了一下,发现他竟然还是原来路径,吐了。
运行Domain-Adaptive-Faster-RCNN-PyTorch 和 MaskRcnn-benchmark出现的问题及解决办法_第4张图片
运行Domain-Adaptive-Faster-RCNN-PyTorch 和 MaskRcnn-benchmark出现的问题及解决办法_第5张图片
原来要在.bashrc里面重新声明一下cuda_home的全局路径(export CUDA_HOME=/home/dailh/cuda-10.0/),昨天我以为这句话无关紧要,就没写。。果然,该找来的bug还是会来的。

然后刷新一下.bashrc,OK,CUDA_HOME变了!

好吧,这次我以为我真能成功了,立马去maskrcnn-benchmark文件夹下运行:

python setup.py build develop

就上面 同样的Bug又如约而至,而且无论我怎么重复进行前面的步骤,重装pytorch,这个bug就是变不了。。此时,我真的感觉我立马要give up!!!真的也太麻烦了()

好吧,后来我又去他们提的issues里查,他们说,这个只有Pytorch 1.0.1的版本能用,我天,指定的这么死,我之前只遇到说大于多少的版本能用,我哪知道这代码指定的这么死啊??(好神奇,我用pytorch 1.1 和pytorch 1.2都不行emmmm)

至此,我终于编译成功maskrcnn-benchmark。

运行Domain-Adaptive-Faster-RCNN-PyTorch

现在回到这个DA的代码,注意,上面只是保证你的环境是正确的,你最终编译还是要用这份代码的。。

就直接在这份代码的根目录下面:

python setup.py build develop

不报错就行了。。

你就可以跑他们的程序了。

准备数据集

怎么把cityscapes转coco,见我下一篇博客。(又是一个艰辛的过程,因为我本来也不想对这个数据集多做了解,我只想跑来试试酱紫)

cd ~/github/Domain-Adaptive-Faster-RCNN-PyTorch
ln -s // datasets/cityscapes
ln -s // datasets/foggy_cityscapes
训练
python tools/train_net.py --config-file "configs/da_faster_rcnn/e2e_da_faster_rcnn_R_50_C4_cityscapes_to_foggy_cityscapes.yaml"

你可能感兴趣的:(pytorch,Object,detection)