Faster RCNN 训练过程中遇到的问题及解决方法

摘要

本文对Faster RCNN训练过程中遇到的问题及解决方法进行总结。训练过程采用的是 faster-rcnn.pytorch pytorch-1.0 版本。

配置

训练之前首先查看环境配置:

  1. anaconda : 使用 anaconda 3.0
  2. Pythonfaster-rcnn.pytorch 要求使用 python 2.7 or 3.6,实际过程中使用更高版本如 python 3.9 也是可以的
  3. Pytorchfaster-rcnn.pytorch 要求使用 pytorch 1.0 (for Pytorch 0.4.0 go to master branch),实际过程中使用更高版本如 pytorch 1.10 也可以
  4. CUDA 8.0 or higher,实际过程中使用 cuda-10.2

数据集准备

训练过程中只用到了 PASCAL_VOC 07 数据集,按照 faster-rcnn.pytorch 中提到的 GitHub 上faster rcnn 另一个复现版本中的方法准备数据集:

  1. 下载训练、验证、测试数据集以及VOCdevkit
    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
    
  2. 解压
    tar xvf VOCtrainval_06-Nov-2007.tar
    tar xvf VOCtest_06-Nov-2007.tar
    tar xvf VOCdevkit_08-Jun-2007.tar
    
  3. 创建软连接
    cd $FRCN_ROOT/data 
    ln -s $VOCdevkit VOCdevkit2007`
    

实际训练过程中创建软连接会出现提示找不到 /Faster-RCNN-Root/data/VOCdevkit2007/VOC2007/… 的错误,怀疑是软连接出现的问题,直接将解压得到的 VOCdevkit 改名为 VOCdevkit2007 解决了问题

预训练模型

将预训练模型 VGG16和 ResNet101 放置在 data/pretrained_model/ 文件夹下.
预训练模型下载:
VGG16: Dropbox, VT Server
ResNet101: Dropbox, VT Server

编译

  1. 使用 pip 安装所需的工具包
     pip install -r requirements.txt
    
  2. 编译
    cd lib
    python setup.py build develop
    
    编译过程出错可能是由于 cuda 环境变量配置造成的,需要将正确的环境变量添加到 ~/.bashrc 文件中:
    1. 查看 cuda 路径,一般是在 /user/local/ 路径下
    2. 添加环境变量:
    export PATH=/usr/local/cuda-10.2/bin${PATH:+:${PATH}}
    export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
    

训练

以预训练模型 vgg16 为例,

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
  1. $GPU_ID: 指定使用哪个 gpu,在 gpu 空闲的情况下是可用的,如机器有两张卡,在均没有被占用的情况下 $GPU_ID=0,1
  2. $BATCH_SIZE: 批大小,也就是在一次模型迭代/训练过程中所使用的样本数目,一般设置为 2 的整数幂,根据显存大小而定,实际中使用的是两张 GTX 2080 Ti 的显卡,大小均为12G,设置 bs=16 可以跑,但是负荷比较大,可能会造成显卡温度过高,可以设置 bs=8
  3. $WORKER_NUMBER:加载数据(batch)的线程数目,根据 gpu 的能力而定,实际训练中设置 nw=4
    • 当加载batch的时间 < 数据训练的时间GPU每次训练完都可以直接从CPU中取到next batch的数据无需额外的等待,因此也不需要多余的worker,即使增加worker也不会影响训练速度
    • 当加载batch的时间 > 数据训练的时间GPU每次训练完都需要等待CPU完成数据的载入若增加worker,即使worker_1还未就绪,GPU也可以取worker_2的数据来训练
  4. $LEARNING_RATE:学习率初始化为 0.01
  5. $DECAY_STEP:decay step,学习率衰减速度,设置为 8
batch sizenum workerslearning ratedecay step
840.018

训练过程中出现的一些问题

site-packages 版本问题

由于第三方库有些方法已经过时了,因此代码中的一些语句可能导致错误。

  1. ImportError: cannot import name ‘imread’ from 'scipy.misc’
    解决方法,主要是将代码中的

    from scipy.misc import imread
    

    替换为

    import imageio
    

    并将代码中的

    imread()
    

    替换为

    imageio.imread()
    
  2. TypeError: load() missing 1 required positional argument: 'Loader’
    解决方法,主要是将代码中的

    yaml.load(file)
    

    替换为

    yaml.safe_load(file)
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值