Faster-RCNN.Pytorch的使用

一、Colab运行Faster-RCNN

慈善GPU

  Google大大免费开放了GPU给全世界使用相信很多人已经知道了,那么我们把Goolge云和慈善GPU结合起来使用简直不要太方便!再也不用排队等待老板的GPU了!
  有效利用慈善GPU跑模型需要两个条件:1、Goolge账号,2、科学上网

Google云

  只要注册一个Google账号,就会免费送15G的空间,良心谷歌啊。当然如果嫌小可以花钱扩容,价格也没有很贵。这个注册过程和科学上网过程我就不说了。
  我们登录上谷歌云,把项目上传到谷歌云里,然后打开Caloboratory,加载完谷歌硬盘就可以进行操作啦。下面就来说一说详细步骤。

1、克隆仓库

  我们先将faster-rcnn的仓库克隆到本地,我这里使用的是jwyangfaster-rcnn.pytorch。当然如果想要使用其他大佬的其他框架的faster-rcnn也可以。注意,克隆到本地需要先安装Git,这个可以参考廖雪峰的Git教程。在你想要克隆的文件夹下打开 Git bash,输入以下命令:

git clone -b pytorch-1.0 --single-branch --depth=1 --recursive https://github.com/jwyang/faster-rcnn.pytorch.git

  git -b 分支名 --single-branch是克隆指定分支的命令,因为我需要克隆的模型是pytorch1.0的faster-rcnn,而master下的faster-rcnn是0.4版本的,所以我需要到pytorch-1.0下去克隆。
  --depth==1是指克隆最近一次更改,因为将整个仓库克隆下来可能会因为仓库太大而报错无法克隆。
  --recursive用于循环递归克隆子项目

2、创建数据文件夹

cd faster-rcnn.pyroch
mkdir data

这个没啥好说的

3、下载数据

  • 下载压缩文件到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

  注意:wget是一个下载工具,linux系统中会自带wget,Windows环境下需要下载,教程地址:windows安装wget教程

  • 解压数据到data/VOCdevkit
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
  • 创建软链接
cd faster-rcnn.pytorch/data
ln -s VOCdevkit的绝对路径 VOCdevkit2007

Tips:其实这步可以不执行,直接将VOCdevkit改成VOCdevkit2007
PASCAL VOC 2010 and 2012、COCO等数据集也是如此操作。

4、下载预训练模型

  VGG16: Dropbox, VT Server
  ResNet101: Dropbox, VT Server
  基于caffe训练的模型要比基于pytorch训练的模型表现好些,推荐下载Dropbox。下载完以后,把这两个模型都放进/data/pretrained_model/里。

5、上传到Google云盘

在这里插入图片描述
在这里插入图片描述
  再点击上传即可。

6、编译

  其实从一到五可以直接在谷歌云上完成,但是我没试,各位大佬如果有感兴趣的可以试一下。
  接着打开Colaboratory,确认你的账号已经登录,然后挂载你的谷歌硬盘在这里插入图片描述
注意:下面的工作目录若非特意cd,都是/content/drive/My Drive/faster-rcnn.pytorch
  使用pip命令安装所有的python依赖包

pip install -r requirements.txt

  使用下面的命令编译CUDA依赖环境

cd lib
!python setup.py build develop
cd ..

Tips:要注意如果出现can’t import ‘imread’,请检查scipy的版本是否超过了1.0,因为1.0以上的版本里,scipy不再使用imread。并且推荐更改pillow版本为5.2.0。而且scipy和pillow要在同一路径下

pip uninstall scipy
pip install scipy==1.0

pip uninstall pillow
pip install pillow==5.2.0 

7、训练

  在训练之前,设置 正确的保存和加载模型的目录,改变trainval_nettest_net.py中的参数save_dirloader_dir以适应你的环境。
  使用vgg16在pascal_voc上训练你的faster-rcnn模型,运行下面代码:

!CUDA_VISIBLE_DEVICES=0 python trainval_net.py \
                   --dataset pascal_voc --net vgg16 \
                   --epochs 1 --bs 1 --nw 4 \
                   --lr  1e-3 --lr_decay_step 5 \
                   --cuda

  bs是batch size,默认为1
  dataset是要在什么数据集上训练
  net是你要使用的预训练模型,可以换为resnet101
  epoch是要训练的轮数
  nw是number work
  lr是学习率
  由上, BATCH_SIZE 和 WORKER_NUMBER 可以根据你的GPU情况来设置.。比如在 12G的Titan Xp上,可以达到4。如果你有多个GPU,可以使用下面代码使用全部的GPU来训练

!python trainval_net.py --dataset pascal_voc --net vgg16 \
                       --bs 24 --nw 8 \
                       --lr $LEARNING_RATE --lr_decay_step $DECAY_STEP \
                       --cuda --mGPUs

8、测试

  如果你想要估计vgg16的预训练模型在pascal_voc测试集上的表现,运行以下代码即可

!python test_net.py --dataset pascal_voc --net vgg16 \
                   --checksession $SESSION --checkepoch $EPOCH --checkpoint $CHECKPOINT \
                   --cuda

  要指定具体的checksession、checkepoch、checkpoint数值。如果你不知该如何设置,可以根据你训练出来的模型名字来设置。
例如:
在这里插入图片描述

!python test_net.py --dataset pascal_voc --net vgg16 \
                   --checksession 1 --checkepoch 1 --checkpoint 10021 \
                   --cuda

9、运行demo

  如果你想要运行预训练模型去检测你自己的图片,要先下载预训练模型或者训练你自己模型,然后把图片放到工作目录下的images文件夹里,再运行

!python demo.py --net vgg16 \
               --checksession $SESSION --checkepoch $EPOCH \
               --checkpoint $CHECKPOINT \
               --cuda --load_dir path/to/model/directoy

  除了指定那三个数值外,还要写清楚存放vgg16/pascal_voc/模型.pth的文件夹。例如我的是
在这里插入图片描述
那么,命令就是

!python demo.py --net vgg16 \
                --checksession 1 --checkepoch 1 \
                --checkpoint 10021 \
                --cuda --load_dir models

二、远程服务器运行Faster-RCNN

1、服务器环境介绍

  torch版本:1.0.1
  Python版本:3.6
  torchvision版本:0.2.1
  需要OpenCV3、matplotlib、numpy等
  Ubuntu16.04(这是我自己的系统版本)
  CUDA版本:9.0
  GPU型号:GTX1080
查看上述信息的命令参见https://blog.csdn.net/ThunderF/article/details/100727446

2、编译

  克隆仓库、创建数据文件夹、下载数据、下载预训练模型这几步可以参考上面的部分,编译步骤也与上面相似。
  使用pip命令安装所有的python依赖包

pip install -r requirements.txt

  使用下面的命令编译CUDA依赖环境

cd lib
!python setup.py build develop
cd ..

Tips:
1、要注意如果出现can't import 'imread',这个问题的处理与上面相同。
2、报can not import _mask等类似的错误,大概是coco编译环境错误,网上的方法我也试了,并没有起作用。后来我编译了两次setup,问题解决了。

如果你已经执行了上面 python setup.py build develop,那么将lib下生成build文件夹和faster-rcnn.egg-info删掉,再执行下面的操作
一、将本文上传的setup.py文件放入pycocotools文件夹下
在这里插入图片描述
再执行下面命令

# 进入pycocotools文件下
python setup.py build develop

二、再退回到lib文件夹下再执行一次上面的命令即可

3、其余

  训练、测试的命令操作和上面的基本一致。若运行时出现faster rcnn:assert (boxes[:, 2] >= boxes[:, 0]).all()的错误,可以参考https://blog.csdn.net/10km/article/details/64641322

三、使用自己的数据集训练

1、准备数据

  我们仍然采用VOC2007外表,把我们自己的数据集“塞进去”

---VOC2007
    ------Annotations
    ------ImagesSet
         ---------Main
    ------JPEGImages

  真正“起作用”的训练集其实是这四个文件夹,位置是

faster-rcnn.pytorch/data/VOCdevkit2007/VOC2007/
  • Annotations为标注文件夹,存放的是标注文件,后缀名是xml,所以我们也要把该文件夹下的xml文件替换为自己的。
  • ImagesSet文件夹下的Main里,保存了需要训练图片的名称,以txt文本存储。
  • JPEGImage文件夹保存了训练图片。

  首先把我们的训练图片放进进JPEGImage文件夹里。该文件夹下原来的图片我们需要备份,并从JPEGImage里移除。然后将Annotations下的xml文件替换为自己的,原来的xml文件备份后从该文件夹下移除。

2、制作训练集trainval.txt

  接着我们自己制作trainval.txt文件,即将trainval.txt文件里的图片名称替换为自己的图片名称,具体请看图:
在这里插入图片描述
在这里插入图片描述

3、修改训练类别信息

  制作完成后用其替换掉ImagesSet\Main\下的trainval.txt。然后修改lib\datasets\pascal_voc.py中的类别信息,即把原来的类别换成你要训练的类别。如:
在这里插入图片描述

4、训练

  训练命令与前面一致。

不对的地方还请各位大佬指正!留言和点赞Thanks♪(・ω・)ノ

猜你喜欢

转载自blog.csdn.net/ThunderF/article/details/100294913