跑通pytorch版Faster RCNN并训练自己的数据

一、环境配置

系统配置——ubuntu16.04
显卡——RTX2080Ti
cuda10.0+cudnn7.5.0——参考 https://blog.csdn.net/wanzhen4330/article/details/81699769
Python3.6+Anaconda
PyTorch1.0.0——官网 https://pytorch.org/get-started/previous-versions/

conda install pytorch==1.0.0 torchvision==0.2.1 cuda100 -c pytorch

超级慢
添加清华镜像源,重新下装

conda install pytorch==1.0.0 torchvision==0.2.1 cuda100

二、git clone

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

其中:-b是分支名,--single-branch是clone指定分支的命令,--depth==1是只克隆最近一次更改,--recursive用于循环递归克隆子项目。

三、训练前准备

  1. 创建数据文件夹
cd faster-rcnn.pyroch
mkdir data
  1. 下载数据集
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

太慢,不推荐
有镜像网站 https://pjreddie.com/projects/pascal-voc-dataset-mirror/
下载后解压,解压后的目录结构如下:

——data
————local
————results
————VOCdevkit2007
——————VOC2007
————————Annotations
————————ImageSets
————————JPEGImages
————————SegmentationClass
————————SegmentationObject
————VOCcode

  1. 预训练模型
    VGG16: https://filebox.ece.vt.edu/~jw2yang/faster-rcnn/pretrained-base-models/vgg16_caffe.pth
    ResNet101:https://filebox.ece.vt.edu/%7Ejw2yang/faster-rcnn/pretrained-base-models/resnet101_caffe.pth

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

  1. 下载相关安装包
pip install -r requirements.txt

贴一下我的安装包版本

cython==0.29.21
cffi==1.11.5
opencv-python==4.3.0.36
scipy==1.0.0
msgpack==1.0.0
easydict==1.9
matplotlib==3.3.0
pyyaml==5.3.1
tensorboardX==2.1
  1. 编译CUDA依赖环境
cd lib
python setup.py build develop

训练

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

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

bs是batch size,默认为1
dataset是要在什么数据集上训练
net是你要使用的预训练模型,可以换为resnet101
epoch是要训练的轮数
nw是number work,我的显卡显存是11G,可以进行4线程读取,如果显存小的话就设为1
lr是学习率
lr_decay_step 8: 每几个epoch学习率衰减一次(默认衰减一次0.1,通过decay_gamma可调);可选参数
use_tfb: 使用tensorboardX实现记录和可视化,不用就不写;可选参数
mGPUs: 多GPU训练,不用就不写该命令;可选参数
cuda:使用cuda;
由上, BATCH_SIZE 和 WORKER_NUMBER 可以根据你的GPU情况来设置。
我的参数设置如下

CUDA_VISIBLE_DEVICES=0 python trainval_net.py  --dataset pascal_voc --net res101 --bs 4 --nw 0 --lr 0.001 --lr_decay_step 5 --cuda --use_tfb

运行出现一个错误

ImportError: cannot import name '_mask'

解决——安装CoCO API

cd data
git clone https://github.com/pdollar/coco.git 
cd coco/PythonAPI
make
cd ../../..

再运行就OK了
训练loss可视化
进入到faster-rcnn.pytorch文件下

pip install tensorboard
tensorboard --logdir=logs/logs_s_1/losses/ --port=7001

进入网页得到loss曲线
在这里插入图片描述

测试

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

具体参数根据得到的模型设置

python test_net.py --dataset pascal_voc --net res101 --checksession 1 --checkepoch 18 --checkpoint 2504 --cuda

结果

AP for aeroplane = 0.7395
AP for bicycle = 0.7692
AP for bird = 0.7679
AP for boat = 0.6246
AP for bottle = 0.5593
AP for bus = 0.7996
AP for car = 0.8363
AP for cat = 0.8708
AP for chair = 0.5058
AP for cow = 0.8168
AP for diningtable = 0.6224
AP for dog = 0.8573
AP for horse = 0.8494
AP for motorbike = 0.7673
AP for person = 0.7781
AP for pottedplant = 0.4604
AP for sheep = 0.7470
AP for sofa = 0.7415
AP for train = 0.7469
AP for tvmonitor = 0.7353
Mean AP = 0.7298

训练自己的数据

制作自己的数据

  1. 数据集放置
    注意四个文件夹JPEGImages、Annotations、ImageSets/Main、LabelImages
    制作自己的数据集替换下这四个文件夹原来的数据即可
    JPEGImages——输入图像
    Annotations——图像标签的xml文件
    ImageSets/Main——自己制作的trainval.txt、test.txt、 train.txt和val.txt文件
    LabelImages——图像标签(有框框)

  2. python文件修改
    第一处:改类名 faster-rcnn.pytorch/lib/datasets/pascal_voc.py

在这里插入图片描述3.修改参数faster-rcnn.pytorch/lib/model/utils/config.py
Initial learning rate = 0.001
momentum = 0.9
weight_decay = 0.0005
batch_size = 4
epoch = 100
RPN相关参数
batch_size = 16
anchor_scales = (1.375, 2.25, 3.5, 5.75)
anchor_ratios = (0.8, 1, 1.2)
在这里插入图片描述

训练结束

在这里插入图片描述

测试阶段

出错
在这里插入图片描述解决——我的数据集标签中没有pose,去把它注释掉就可以了
在这里插入图片描述
truncated也没有,也注释掉。

测试

 python test_net.py --dataset pascal_voc --net res101 --checksession 1 --checkepoch 100 --checkpoint 473 --cuda

结果
在这里插入图片描述

改了几处的参数,结果
在这里插入图片描述
在这里插入图片描述

还是不行还要改进

改了参数,ovthresh原来是0.5改为0
在这里插入图片描述训练

CUDA_VISIBLE_DEVICES=0 python trainval_net.py  --dataset pascal_voc --net res101 --bs 4 --nw 0 --lr 0.001 --lr_decay_step 40 --cuda --use_tfb

结果
在这里插入图片描述

待更新……

  • 6
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
要使用PyTorch中的Faster R-CNN训练自己的数据集,你需要以下步骤: 1. 准备数据集:首先准备自己的数据集,包括图像和相应的标注信息。标注信息可以使用类似于PASCAL VOC或COCO的标注格式,其中包含每个图像中物体的边界框和类别。 2. 数据预处理:对于数据预处理,你可能需要对图像进行缩放、裁剪、归一化等操作,以确保它们与模型的输入要求相匹配。同时,还需要将标注信息转换成模型所需的格式。 3. 构建数据集类:创建一个自定义数据集类,继承PyTorch的Dataset类,并实现__getitem__和__len__方法。__getitem__方法应当返回图像和标注信息的元组,同时根据需要进行必要的转换。 4. 定义模型:使用PyTorch中的torchvision.models中的Faster R-CNN模型作为基础,将其实例化为一个对象。你可以选择是否使用预训练的模型权重,以加快训练过程。 5. 设置训练参数:通过定义优化器、学习率调度器以及损失函数等来设置训练的参数。常用的优化器是SGD和Adam,并且可以使用不同的学习率调度器来动态调整学习率。 6. 训练模型:使用准备好的数据集、模型和训练参数来进行训练。在每个epoch中,循环遍历数据集并使用模型进行前向传播和反向传播,最后更新模型的权重。 7. 评估和测试模型:训练完成后,可以使用测试集或验证集对模型进行评估。评估指标可以包括准确率、召回率、平均精确度等。你可以根据需要进行必要的调整和优化。 8. 模型保存和使用:将训练好的模型保存为.pth文件,以便以后使用。你可以加载模型并在新的图像上进行预测,以获得目标检测的结果。 以上是使用PyTorch中的Faster R-CNN训练自己的数据集的大致步骤。根据具体的需求,你可能还需要进行其他的调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值