基於GitHub的一個開源項目:https://github.com/jwyang/faster-rcnn.pytorch
環境:Ubuntu 18.04.3、python2.7,顯卡NVIDIA GeForce RTX 2070,pytorch0.4.0,CUDA10.1 update2
(嘗試過Ubuntu 16.04安裝cuda但是一直不成功,使用Ubuntu 18.04.3就非常容易的安裝好了,所以建議還是使用最新的操作系統)
由於該項目是2年前的,為了能夠順利測試通過,所以環境都使用了比較舊的python和pytorch版本,不過最近看項目的介紹好像已經支持了pytorch-1.0:
下面我把0.4的版本和1.0版本的地址都貼出來:
pytorch0.4.0版源碼:https://github.com/jwyang/faster-rcnn.pytorch.git
pytorch1.0.0版源碼:https://github.com/jwyang/faster-rcnn.pytorch/tree/pytorch-1.0
第一步准備好環境:
1.1、 系統環境:Ubuntu 18.04.3:下載地址:https://ubuntu.com/download/server 直接到官網下載,安裝過程非常的簡單。
1.2、Python 2.7,安裝Anaconda,https://blog.csdn.net/lwplwf/article/details/79162470
use qinhua: https://blog.csdn.net/weixin_34296641/article/details/94171967
1.3、CUDA Toolkit 10.1 update2 下載地址:https://developer.nvidia.com/cuda-toolkit-archive
首先我們需要仔細查看一下安裝文檔:Versioned Online Documentation
第一需要注意的就是對比所有的安裝要求,確保ubantu系統內核還有gcc的版本和cuda要求的版本一致,否則會安裝不上:

先查看gcc的版本,:
gcc --version

我下載安裝的ubantu18.04.3的gcc版本是7.4.0的,正好符合cuda安裝要求,如果提示沒有安裝gcc,可以通過apt-get進行安裝:
sudo apt-get install gcc
再確認您的系統內核版本:
uname -r

我的是5.0.0所以也是符合cuda安裝要求的,這個非常重要,要省下很多事情,之前我用unbantu16.04就是卡在這里。哪怕把內核修改成了cuda要求的都還是安裝不成功。所以選對操作系統非常重要。
接下來就是要安裝顯卡驅動,雖然cuda的.run方式安裝會自帶顯卡驅動,但是失敗率高。建議直接使用ubantu系統自帶安裝顯卡驅動功能進行安裝:
ubuntu-drivers devices

查看可以安裝的版本,紅框里面的是系統推薦我安裝的版本。
但是我運行的命令是自動安裝:
#自動安裝合適顯卡驅動
sudo ubuntu-drivers autoinstall
安裝完成之后,請重啟操作系統。
輸入命令,查看顯卡情況:
nvidia-smi

接下來就是下載和安裝cuda:
//下載cuda
wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.243_418.87.00_linux.run
//執行安裝
sudo sh cuda_10.1.243_418.87.00_linux.run
我之前已經安裝了Nvidia的顯卡驅動,這里不安裝driver

接下來cuda就會自動安裝成功。

添加環境變量
vi ~/.bashrc
在文件末尾添加
export PATH="/usr/local/cuda-10.1/bin:$PATH"
export LD_LIBRARY_PATH="/usr/lcoal/cuda-10.1/lib64:$LD_LIBRARY_PATH"
最后使其生效
source ~/.bashrc
最好測試cuda是否安裝成功:
終端輸入
cd /usr/local/cuda-10.1/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
結果如圖

出現Result = PASS則表示安裝成功通過
Pytorch 安裝:conda install pytorch=0.4.0 -c soumith
二、用voc2007標准數據集訓練模型
1、訓練模型
2.1.1 到github下載源碼:https://github.com/jwyang/faster-rcnn.pytorch,放到指定的目錄下
2.1.2 在代碼所在目錄打開終端,手動創建data文件夾或者用命令行創建:mkdir data
2.1.3 安裝模型所需依賴(第三方包),命令行輸入即可自動安裝所需依賴:pip install -r requirements.txt
if use conda to install,You must change the requirements.txt content like this:
cython cffi opencv3 scipy msgpack-python easydict matplotlib pyyaml tensorboardX
2.1.4 進入lib目錄下,編譯NMS, ROI_Pooling, ROI_Align和ROI_Crop模塊,命令行輸入:
cd lib
python setup.py build develop
2.1.5 下載voc2007數據集,下載鏈接:
http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
將:VOCtrainval_06-Nov-2007 目錄下的VOCdevkit文件夾,復制到./data目錄下 ,目錄結構如下:

下載預訓練好的vgg16模型,並在data數據集上面新建一個pretrained_model文件夾,將與訓練模型放到里面
訓練模型:基於vgg16模型訓練網絡,在項目根目錄下輸入下列命令就會開始訓練模型,python trainval_net.py表示執行trainval_net.py代碼進行訓練,后面的都是指定的參數,若不指定,將會選擇默認選項
CUDA_VISIBLE_DEVICES=$GPU_ID python trainval_net.py \ --dataset pascal_voc --net vgg16 \ --bs 1 --nw 4 \ --lr 0.00001 \ --cuda
其中
“CUDA_VISIBLE_DEVICES”指代了gpu的id,–dataset”指代你跑得數據集名稱,我們就以pascal-voc為例;“–net”指代你的backbone網絡是啥,我們以vgg16為例;"–bs"指的batch size;“–nw”指的是worker number;"--lr"指代學習率,“–cuda”指的是使用gpu。
在訓練過程中可能出現的錯誤:
1、Path does not exist: ×××/data/VOCdevkit2007/VOC2007/ImageSets/Main/trainval.txt
分析:路徑中不存在VOCdevkit2007一個文件夾
解決方法:.\lib\datasets\pascal_voc.py文件下116行的
return os.path.join(cfg.DATA_DIR, 'VOCdevkit' + self._year)
修改為
return os.path.join(cfg.DATA_DIR, 'VOCdevkit')
2、AttributeError: 'int' object has no attribute 'astype'
解決方法:/lib/roi_data_layer/roibatchLoader.py
line 52, target_ratio = 1 change to:
target_ratio = np.array(1)
3、RuntimeError: cuda runtime error (2) : out of memory at /pytorch/aten/src/THC/generic/THCStorage.cu:58
解決方法:跑代碼需要的內存超出當前指定的GPU的可用內存,需要重新指定,(我在訓練模型時不指定GPU的ID,即不用輸入CUDA_VISIBLE_DEVICES=$GPU_ID,錯誤消除)
最終在控制台輸入以下命令開始訓練模型,
python trainval_net.py --dataset pascal_voc --net vgg16 --bs 1 --nw 4 --cuda
訓練過程中模型默認保存地址為./model/vgg16/pascal_voc路徑下(trainval_net.py中變量sava_name的值為模型保存的路徑)。
