ubuntu下Pytorch版的faster-rcnn的代碼復現

在ubuntu上使用pytorch,來實現的faster-rcnn這個代碼的復現。

以下是一路上遇到的各種奇怪的問題以及解決的辦法。

 

基本上全部參考這個

https://github.com/ruotianluo/pytorch-faster-rcnn 
部分參考這個
https://blog.csdn.net/xzy5210123/article/details/81530993

git clone https://github.com/ruotianluo/pytorch-faster-rcnn.git

cd data 
git clone https://github.com/pdollar/coco.git 
cd coco/PythonAPI 
make 
cd ../../..


wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar


tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar

它應該具有這種基本結構

$ VOCdevkit /                            #開發套件
$ VOCdevkit / VOCcode /                    # VOC實用代碼
$ VOCdevkit / VOC2007                     #圖像集,註釋等
# ...等幾個目錄...
爲PASCAL VOC數據集創建符號鏈接

cd ~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn/data
ln -s $VOCdevkit VOCdevkit2007
使用符號鏈接是一個好主意,因爲您可能希望在多個項目之間共享相同的PASCAL數據集安裝。

-----------------------------------------------------------------------------------
下一步:

使用預先訓練的模型進行演示和測試
下載預先訓練的模型 
 
(可選) 您也可以從tf-faster-rcnn模型轉換,而不是下載我的預訓練或轉換模型。您可以從tf-faster-rcnn下載tensorflow預訓練模型。然後運行:

python tools / convert_from_tensorflow.py --tensorflow_model resnet_model.ckpt 
python tools / convert_from_tensorflow_vgg.py --tensorflow_model vgg_model.ckpt
此腳本將.pth在與tensorflow模型相同的文件夾中創建一個具有相同名稱的文件。

---------------------------------------------------------------------------------------
依次執行:
(base) twinkle@twinkle-ubuntu:~$ conda activate rcnn36
(rcnn36) twinkle@twinkle-ubuntu:~$ cd ~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn/data
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn/data$ ln -s $VOCdevkit VOCdevkit2007
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn/data$ cd ..
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ NET=vgg16
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ TRAIN_IMDB=voc_2007_trainval
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ mkdir -p output/${NET}/${TRAIN_IMDB}
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ cd output/${NET}/${TRAIN_IMDB}
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn/output/vgg16/voc_2007_trainval$ ln -s ../../../data/voc_2007_trainval ./default
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn/output/vgg16/voc_2007_trainval$ cd ../../..

(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ python ./tools/demo.py --net vgg16 --dataset pascal_voc

-----------------------------------------------------------------------------------
No module named 'easydict'
pip install easydict
-----------------------------------------------------------------------------------
No module named 'cv2'
pip install opencv-python

RuntimeError: Detected that PyTorch and torchvision were compiled with different CUDA versions. PyTorch has CUDA Version=9.0 and torchvision has CUDA Version=10.0. Please reinstall the torchvision that matches your PyTorch install.

(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ python
Python 3.6.8 |Anaconda, Inc.| (default, Dec 30 2018, 01:22:34) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import  torch
>>> torch.__version__ 
'1.1.0'
>>> torch.version.cuda
'9.0.176'
>>> quit()
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ cat /usr/local/cuda/version.txt
CUDA Version 10.0.130

(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ pip uninstall torch
Successfully uninstalled torch-1.1.0
torchvision 0.3.0 has requirement torch>=1.1.0, but you'll have torch 1.0.1 which is incompatible.
Successfully installed torch-1.0.1
pip uninstall torch
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
-----------------------------------------------------------------------------------
conda update -n base -c defaults conda
-----------------------------------------------------------------------------------
No module named 'matplotlib'
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ python
Python 3.6.8 |Anaconda, Inc.| (default, Dec 30 2018, 01:22:34) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import  torch
>>> torch.__version__ 
'1.1.0'
>>> torch.version.cuda
'10.0.130'
>>> quit()
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ pip install matplotlib
-----------------------------------------------------------------------------------
No module named 'tensorboardX'
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ pip install tensorboardX
-----------------------------------------------------------------------------------
No module named 'scipy'
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ pip install scipy

-----------------------------------------------------------------------------------
ImportError: cannot import name 'imresize'

cannot import name 'imresize' from 'scipy.misc'
問題:執行以下python命令,出現這樣的錯誤     cannot import name 'imresize' from 'scipy.misc'

from scipy.misc import imresize
原因及解決辦法:

缺少依賴項。網上出現類似問題,給出的答案是需要安裝PIL,即
pip install pillow
但是如果你的scipy是通過conda安裝的,conda會自動安裝所需的依賴項,因此不需要額外安裝PIL。

scipy版本問題。scipy>=1.0.0不再包含函數imresize,官網給出的解釋及解決辦法如下:
imresize is deprecated! imresize is deprecated in SciPy 1.0.0, and will be removed in 1.3.0. Use Pillow instead: numpy.array(Image.fromarray(arr).resize()).
參考scipy官網

(base) twinkle@twinkle-ubuntu:~$ cd /home/twinkle/Downloads/mypycharm/bin
(base) twinkle@twinkle-ubuntu:~/Downloads/mypycharm/bin$ ./pycharm.sh

-----------------------------------------------------------------------------------

UnicodeDecodeError: 'ascii' codec can't decode byte 0xb8 in position 2: ordinal not in range(128)

# 在data文件夾中創建名爲voc_2007_trainval的文件夾,把下載並解壓好的預訓練模型文件放進去

# 以下命令在faster rcnn 根目錄下操作
NET=vgg16

TRAIN_IMDB=voc_2007_trainval

mkdir -p output/${NET}/${TRAIN_IMDB}

cd output/${NET}/${TRAIN_IMDB}

ln -s ../../../data/voc_2007_trainval ./default

cd ../../..
 


NET=res101

TRAIN_IMDB=voc_2007_trainval+voc_2012_trainval

mkdir -p output/${NET}/${TRAIN_IMDB}

cd output/${NET}/${TRAIN_IMDB}

ln -s ../../../data/voc_2007_trainval+voc_2012_trainval ./default

cd ../../..
 
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ python ./tools/demo.py 
Traceback (most recent call last):
  File "./tools/demo.py", line 164, in <module>
    torch.load(saved_model, map_location=lambda storage, loc: storage))
  File "/home/twinkle/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn/tools/../lib/nets/network.py", line 522, in load_state_dict
    for k, v in state_dict.items() if k in self.state_dict()}
  File "/home/twinkle/Downloads/myanaconda3/anaconda3/envs/rcnn36/lib/python3.6/site-packages/torch/nn/modules/module.py", line 777, in load_state_dict
    self.__class__.__name__, "\n\t".join(error_msgs)))
RuntimeError: Error(s) in loading state_dict for vgg16:

我使用的是Pytorch 4.0.1,但我加載的Jupyter Notebook使用4.0.0。所以我在load_state_dict()中添加了strict = False屬性。

model.load_state_dict(checkpoint['state_dict'], strict=False)

增加之後,demo.py可以運行,但是識別明顯有錯誤,所以又修改回來,最後發現是模型下載出錯,錯用了tf的模型。
下載了這個tf的
https://drive.google.com/drive/folders/0B1_fAEgxdnvJSmF3YUlZcHFqWTQ
而應該下載pytorch的
https://drive.google.com/drive/folders/0B7fNdx_jAqhtNE10TDZDbFRuU0E
--------------------------------------------------------------------------------
如果使用pth的模型,那麼輸入
GPU_ID=0
CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py
出現這個錯誤
RuntimeError: Error(s) in loading state_dict for vgg16:
發現昨天下載的是tf的模型,重新下載正確的pytorch的模型之後,提示
ModuleNotFoundError: No module named 'yaml'
下載正確的模型之後,上訴的問題消失。

****用於測試自定義圖像的演示****:
GPU_ID=0
CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py

-------------------------------------------------------------------------------

****使用預訓練模型跑測試集****:
輸入
GPU_ID=0
./experiments/scripts/test_faster_rcnn.sh $GPU_ID pascal_voc vgg16
出現
ModuleNotFoundError: No module named 'yaml'
----------------------------------------------------------------------------------
(rcnn36) twinkle@twinkle-ubuntu:~/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn$ sudo -H pip install pyyaml --upgrade
Collecting pyyaml
  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f231fe019e8>: Failed to establish a new connection: [Errno 101] 網絡不可達',)': /packages/a3/65/837fefac7475963d1eccf4aa684c23b95aa6c1d033a2c5965ccb11e22623/PyYAML-5.1.1.tar.gz
  Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f231fe0ffd0>: Failed to establish a new connection: [Errno 101] 網絡不可達',)': /packages/a3/65/837fefac7475963d1eccf4aa684c23b95aa6c1d033a2c5965ccb11e22623/PyYAML-5.1.1.tar.gz

--------------------------------------------------------------------------------------
如果要用tensorflow的模型轉換,需要
新建環境tftorch36 能使用tensorflow-gpu
import tensorflow   
import tensorflow as tf
matrix1 = tf.constant([[3., 3.]])     
matrix2 = tf.constant([[2.],[2.]])    
product = tf.matmul(matrix1, matrix2) 
sess = tf.Session()    
 
---------------------------------------------------------------------------------------
****使用預訓練模型跑測試集****:
輸入
GPU_ID=0
./experiments/scripts/test_faster_rcnn.sh $GPU_ID pascal_voc vgg16
出現

im_detect: 4952/4952 0.115s 0.006s
Evaluating detections
Writing aeroplane VOC results file
Writing bicycle VOC results file
Writing bird VOC results file
Writing boat VOC results file
Writing bottle VOC results file
Writing bus VOC results file
Writing car VOC results file
Writing cat VOC results file
Writing chair VOC results file
Writing cow VOC results file
Writing diningtable VOC results file
Writing dog VOC results file
Writing horse VOC results file
Writing motorbike VOC results file
Writing person VOC results file
Writing pottedplant VOC results file
Writing sheep VOC results file
Writing sofa VOC results file
Writing train VOC results file
Writing tvmonitor VOC results file
VOC07 metric? Yes
Reading annotation for 1/4952
 。。。
Reading annotation for 4901/4952
Saving cached annotations to /home/twinkle/Documents/A_RCNN/A_codeTemplate/pytorch-faster-rcnn/data/VOCdevkit2007/VOC2007/ImageSets/Main/test.txt_annots.pkl
AP for aeroplane = 0.6400
AP for bicycle = 0.7051
AP for bird = 0.6265
AP for boat = 0.4797
AP for bottle = 0.5371
AP for bus = 0.6961
AP for car = 0.8145
AP for cat = 0.8036
AP for chair = 0.4351
AP for cow = 0.7608
AP for diningtable = 0.4895
AP for dog = 0.7412
AP for horse = 0.7771
AP for motorbike = 0.7003
AP for person = 0.7477
AP for pottedplant = 0.4081
AP for sheep = 0.6935
AP for sofa = 0.6323
AP for train = 0.6423
AP for tvmonitor = 0.7078
Mean AP = 0.6519
~~~~~~~~
Results:
0.640
0.705
0.627
0.480
0.537
0.696
0.814
0.804
0.435
0.761
0.489
0.741
0.777
0.700
0.748
0.408
0.693
0.632
0.642
0.708
0.652
~~~~~~~~

--------------------------------------------------------------
Results computed with the **unofficial** Python eval code.
Results should be very close to the official MATLAB eval code.
Recompute with `./tools/reval.py --matlab ...` for your paper.
-- Thanks, The Management
--------------------------------------------------------------
850.14user 117.08system 19:06.14elapsed 84%CPU (0avgtext+0avgdata 13603272maxresident)k
2003248inputs+80536outputs (13960major+4071345minor)pagefaults 0swaps

感動
Mean AP = 0.6519,好像說應該要0.70+,但是我覺得也還好。哈哈哈哈


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章