Faster-rcnn代碼下載地址,根據作者要求執行此代碼需要Pytorch1.0+Python3.6+CUDA 8.0 or higher,我的設備環境如下:
Ubantu18.04+Anaconda3+Pycharm+GTX1650(4G顯存)+CUDA10.0+CUDNN+Pytorch1.0.0+Python3.6
第一步:安裝Pycharm和Anaconda
具體安裝步驟可以參看win10下的安裝方法,過程很相似,不詳細介紹。
第二步:安裝CUDA10.0和CUDNN
具體安裝步驟可以參看我的另一篇博客,安裝過程基本相同。windows與linux都可以並存多個版本的CUDA,我們只要把環境變量設置爲想要使用的那個版本即可。更多關於多版本CUDA並存的介紹,詳見此博客。
第三步:搭建虛擬環境
我們在第一步安裝anaconda的時候已經將conda默認的下載源換成了清華源。這裏我們需要對pip也進行換源,將其換成豆瓣源。
在終端輸入如下代碼:主目錄下新建一個名字爲pip的隱藏文件夾,並在此文件夾內新建一個名字爲pip.conf的文件
mkdir ~/.pip
cd ~/.pip
gedit pip.conf
在pip.conf文件中添加如下代碼,保存並退出,換源完畢。
[global]
index-url = https://pypi.douban.com/simple
[install]
trusted-host=pypi.douban.com
打開終端輸入以下命令,創建一個名字爲pytorch1.0的虛擬環境,python使用3.6版本
conda create -n pytorch1.0 python=3.6
創建完成後,激活該虛擬環境
conda activate pytorch1.0
安裝Pytorch1.0.0
conda install pytorch=1.0.0
安裝torchvision0.2.0
conda install torchvision=0.2.0
安裝其它依賴包。進入requirements.txt所在目錄,執行如下命令:
pip install -r requirements.txt
注意:scipy要安裝1.2版本,否則後面訓練的時候可能會出現ImportError: cannot import name 'imread'錯誤。requirements.txt修改如下圖所示:
第四步:準備訓練所需的數據集
下載voc2007數據集
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
將上面三個壓縮包解壓到同一個文件夾內,命名爲:VOCdevkit
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
VOCdevkit
應該具有下面所示的文件結構
$VOCdevkit/ # development kit
$VOCdevkit/VOCcode/ # VOC utility code
$VOCdevkit/VOC2007 # image sets, annotations, etc.
# ... and several other directories ...
在Faster-rcnn代碼文件夾內創建一個名字爲data的新文件夾,並在data文件夾內創建voc數據集的軟鏈接
cd $FRCN_ROOT/data
ln -s $VOCdevkit VOCdevkit2007
注意:$VOCdevkit代表VOCdevkit文件夾完整的絕對路徑,運行命令後將在data文件夾下生成一個名字爲VOCdevkit2007的軟連接。
第五步:準備預訓練模型
在data文件夾下新建一個文件夾,名字爲:pretrained_model,在此文件夾內存放預先下載好的預訓練模型。以vgg16爲例,名稱格式爲:vgg16_caffe.pth(預訓練模型的名稱格式可以查看Faster-rcnn作者源碼中的要求)。
如果我們沒有下載好的預訓練模型,那麼只需將源碼中加載vgg16網絡時的“pretrained”參數設置爲False即可。
第六步:編譯setup.py文件
由於在NMS、Roi Pooling、Roi Align中使用了CUDA加速,因此需要使用以下命令編譯cuda依賴項:
cd lib
python setup.py build develop
更多關於setup.py的介紹參考此三篇文章:博文1,博文2,博文3
第七步:替換/lib/pycocotools中的文件
下載cocoapi包,解壓並編譯/cocoapi-master/PythonAPI路徑下的setup.py文件,命令如下:
python setup.py build_ext --inplace
編譯完成後,複製/cocoapi-master/PythonAPI/pycocotools路徑下的所有文件到源碼的/lib/pycocotools路徑下。
注意:一定要在上面創建的pytorch1.0虛擬環境下執行該命令。因爲該命令會生成一系列的文件,其中有一個文件名爲:_mask.cpython-36m-x86_64-linux-gnu.so,36m代表適用於python3.6版本(pytorch1.0環境內的python版本)。如果在一個python爲3.7版本的虛擬環境中執行該命令,則會生成名爲:_mask.cpython-37m-x86_64-linux-gnu.so的文件。
第八步:創建run.sh文件並開始訓練
在代碼主目錄下創建run.sh文件,並輸入以下內容。執行該文件即可開始訓練
CUDA_VISIBLE_DEVICES=0 python trainval_net.py \
--dataset pascal_voc --net vgg16 \
--bs 1 \
--cuda
總結
1、所有操作都要基於第三步創建的pytorch1.0虛擬環境進行,否則會出錯。
2、如果不執行第七步,運行run.sh文件時會提示ImportError: cannot import name '_mask'錯誤。
3、之前在github上下載過另一版本的faster-rcnn源碼,需要pytorch0.4.1。配置了好久,最後訓練的時候顯示下圖中的錯誤,一直無法解決。