1. 模型代码下载:
github地址:GitHub - jwyang/faster-rcnn.pytorch at pytorch-1.0
2.创建数据文件夹
创建文件夹experiment,专门用来搭建Faster-RCNN模型,所有的配置文件均在此目录下进行。下载faster-rcnn.pytorch at pytorch-1.0文件,解压在experiment文件夹下。
cd faster-rcnn.pytorch-pytorch-1.0
mkdir data
3.下载数据
cd data
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
执行下方命令解压数据到data/VOCdevkit(其实解压后会自动生成一个名为VOCdevkit的文件夾)
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
cd 进入data文件夹下,创建软链接
ln -s VOCdevkit的绝对路径 VOCdevkit2007
我的路径:
xu@xu-RedmiBook-16:~/faster-rcnn.pytorch-pytorch-1.0/data$ pwd
/home/xu/faster-rcnn.pytorch-pytorch-1.0/data
xu@xu-RedmiBook-16:~/faster-rcnn.pytorch-pytorch-1.0/data$ ln -s /home/xu/faster-rcnn.pytorch-pytorch-1.0/data/VOCdevkit VOCdevkit2007
4.下载预训练模型
在data中创建一个名为pretrained_model文件
cd data
mkdir pretrained_model //sudo mkdir pretrained_model
Pytorch离线下载预训练模型方法(VGG,RESNET等)
其他的学习模型也可以用类似的方法下载,或者可以参看下面的下载网址。
‘resnet18’: ‘https://download.pytorch.org/models/resnet18-5c106cde.pth’
‘resnet34’: ‘https://download.pytorch.org/models/resnet34-333f7ec4.pth’
‘resnet50’: ‘https://download.pytorch.org/models/resnet50-19c8e357.pth’
‘resnet101’: ‘https://download.pytorch.org/models/resnet101-5d3b4d8f.pth’
‘resnet152’: ‘https://download.pytorch.org/models/resnet152-b121ed2d.pth’
‘densenet121’: ‘https://download.pytorch.org/models/densenet121-a639ec97.pth’
‘densenet169’: ‘https://download.pytorch.org/models/densenet169-b2777c0a.pth’
‘densenet201’: ‘https://download.pytorch.org/models/densenet201-c1103571.pth’
‘densenet161’: ‘https://download.pytorch.org/models/densenet161-8d451a50.pth’
‘vgg11’: ‘https://download.pytorch.org/models/vgg11-bbd30ac9.pth’
‘vgg13’: ‘https://download.pytorch.org/models/vgg13-c768596a.pth’
‘vgg16’: ‘https://download.pytorch.org/models/vgg16-397923af.pth’
‘vgg19’: ‘https://download.pytorch.org/models/vgg19-dcbb9e9d.pth’
‘vgg11_bn’: ‘https://download.pytorch.org/models/vgg11_bn-6002323d.pth’
‘vgg13_bn’: ‘https://download.pytorch.org/models/vgg13_bn-abd245e5.pth’
‘vgg16_bn’: ‘https://download.pytorch.org/models/vgg16_bn-6c64b313.pth’
‘vgg19_bn’: ‘https://download.pytorch.org/models/vgg19_bn-c79401a0.pth’
‘alexnet’: ‘https://download.pytorch.org/models/alexnet-owt-4df8aa71.pth’
下载预训练:VGG16,ResNet101的预训练模型到/data/pretrained_model中
5.编译
返回工程根目录中如我的是../faster-rcnn.pytorch-pytorch-1.0下
使用pip安装所有python依赖包
pip install -r requirements.txt
编译CUDA依赖环境
cd lib
sudo python setup.py build develop
6. 训练
在训练之前需要根据自己的环境将trainval_net.py和test_net.py中的save_dir和load_dir参数进行更改。(这一步我没有操作)
使用VGG16在pascal_voc上训练faster R-CNN使用如下命令:(中断的话,重新使用训练命令就行)
CUDA_VISIBLE_DEVICES=$GPU_ID python trainval_net.py \
--dataset pascal_voc --net vgg16 \
--bs $BATCH_SIZE --nw $WORKER_NUMBER \
--lr $LEARNING_RATE --lr_decay_step $DECAY_STEP \
--cuda
或者
CUDA_VISIBLE_DEVICES=0,1 python trainval_net.py --dataset pascal_voc --net res101 --cuda
“CUDA_VISIBLE_DEVICES”指代了gpu的id,这得看你实验室服务器哪块gpu是闲置的。(命令: nvidia-smi)
“–dataset”指代你跑得数据集名称,我们就以pascal-voc为例。
“–net”指代你的backbone网络是啥,我们以vgg16为例。
"–bs"指的batch size。
“–nw”指的是worker number,取决于你的Gpu能力,我用的是1050ti,所以选择4。稍微差一些的gpu可以选小一点的值。
“–cuda”指的是使用gpu。
训好的model会存到models文件夹底下,此处暂时使用默认的训练参数。
如我的命令为
CUDA_VISIBLE_DEVICES=0 python trainval_net.py \
--dataset pascal_voc --net vgg16 \
--bs 1 --nw 4 \
--lr 0.00001 \
--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'错误。
创建run.sh文件并开始训练
在代码主目录下创建run.sh文件,并输入以下内容。执行该文件即可开始训练
CUDA_VISIBLE_DEVICES=0 python trainval_net.py \
--dataset pascal_voc --net vgg16 \
--bs 1 \
--cuda
总结
1、所有操作都要基于第三步创建的pytorch1.0虚拟环境进行,否则会出错。