Ubantu下基於Pytorch的Faster-rcnn環境部署

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的文件。

參考博文:參考博文1參考博文2

第八步:創建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。配置了好久,最後訓練的時候顯示下圖中的錯誤,一直無法解決。

 

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