【目标检测】用自己的数据集训练Faster RCNN的详细全过程(步骤很详细很直观,小白可入)

一、写在前面

最近和小伙伴一起参加了服务外包比赛,选择的题目是对于图像中的安全帽的检测。对YOLOv3,Faster RCNN这些常见的目标检测算法都进行了实验。本文就介绍Faster RNN的整个实验过程。

二、电脑相关配置

win10,python3.6

三、训练过程

实验选用的源码是较为常用的Faster RCNN源码。对于该源码的使用网上也有很多的博客文章,但是正是因为文章很多,所以也容易造成一些误导,所以也踩过一些坑。以下是我测试过的可以正确训练的步骤:

1 安装支持包

首先要安装源码运行需要的支持包。下载的Faster RCNN源码中有一个requirement.txt文件,其中记录了需要安装的包的名字。可以在cmd中输入pip install -r requirements.txt安装需要的所有依赖包。也可以自己手动一个个安装,需要的python依赖包有,cython,opencv-python,easydict,Pillow,matplotlib,scipy。

2 修改config.py文件

在lib/config下的config.py文件,是专门的配置文件,其中定义了模型的诸多参数,大家可以根据自己的需要修改相关参数,下面介绍较为重要的需要修改的参数。
(1)network参数
定义预训练使用的模型,我见到的最多的是使用vgg16模型(源码默认也是使用vgg16),也可以使用resnet模型。我采用的是vgg16模型。
(2) learning_rate参数
这个就是我们熟知的学习率,学习率定义的太小收敛速度会很慢,学习率定义的太大可能会导致不收敛。这个参数可以多次调整,分别训练,取一个最优的学习率。
(3) batch_size参数
这个也是很熟知的一个参数,定义的是每一个梯度的大小。一般用的比较多的是32,64,128,256这些batch_size。batch_size太大,内存容量可能撑不住,但是下降方向更准确,震荡更小,而且训练相同量的数据集速度更快;batch_size太小,内存利用率就变小了,但是容易陷入局部最优。个人理解是,如果内存够大,硬件允许的话,batch_size设置的大一些会更容易收敛,效果也会更好。
(4)max_iters参数
这个参数定义的是最大的迭代次数。
(5) snap_iterations参数
这个参数定义的是迭代多少次保存一次模型。个人觉得snap_iterations和max_iters要比较匹配,修改的话需要一起修改。因为如果max_iters参数定义的较小,但是snap_iterations很大的话,就看不到自己生成的模型了。模型保存的路径是default/voc_2007_trainval/default。每次保存模型都是保存4个文件。
(6) roi_bg_threshold_low
这个参数定义的是background(背景)认定的ROI的最小阈值。这里我没有深入研究,但是在运行train.py文件进行训练的时候如果产生Exception:image invalid,skipping。此时修改此处的值为0.0,会解决问题。

3 添加预训练模型

由于我们训练的时候是基于一个预训练模型进行训练的,所以需要下载vgg16模型,并且保存在data/imagenet_weights中。下载的模型命名一般是vgg_16.ckpt,但是我们要修改为vgg16.ckpt。原因是要和源码中调用部分代码一致,源码中调用的名称就是vgg16.ckpt。如果此处不修改,在源码中全部采用vgg_16.ckpt应该也是可以的,但是何必要这么麻烦呢。附上vgg16的百度网盘链接,提取码为45ef。

  • 41
    点赞
  • 471
    收藏
    觉得还不错? 一键收藏
  • 30
    评论
训练自己的数据集,你可以按照以下步骤进行操作: 1. 准备数据集:将自己的数据集按照特定的文件夹结构存放在VOCDevkit文件夹中。其中Annotations文件夹存放标签的XML文件,JPEGImages文件夹存放数据集的所有图片,ImageSets/Main文件夹下保存的是test.txt、train.txt、trainval.txt、val.txt,分别是测试集、训练集、训练验证集、验证集的标签文件名。\[4\] 2. 数据集划分:考虑到源码中没有数据集划分程序,你可以使用以下代码进行数据集划分。将代码中的文件路径替换成自己的路径后运行,即可生成所需的txt文件。\[5\] ```python import os import random trainval_percent = 0.0 train_percent = 0.0 xmlfilepath = 'data/Annotations' txtsavepath = 'data/ImageSets' total_xml = os.listdir(xmlfilepath) num = len(total_xml) list = range(num) tv = int(num * trainval_percent) tr = int(tv * train_percent) trainval = random.sample(list, tv) train = random.sample(trainval, tr) ftrainval = open('data/ImageSets/trainval.txt', 'w') ftest = open('data/ImageSets/test.txt', 'w') ftrain = open('data/ImageSets/train.txt', 'w') fval = open('data/ImageSets/val.txt', 'w') ``` 3. 加载预训练权重:根据你训练时加载的vgg16预训练权重是caffe框架的还是pytorch的,选择相应的代码进行预测。如果是pytorch的预训练权重,可以使用以下代码加载权重。\[2\] ```python trainer.load('训练好的权重路径') opt.caffe_pretrain = False _bboxes, _labels, _scores = trainer.faster_rcnn.predict(img, visualize=True) vis_bbox(at.tonumpy(img\[0\]), at.tonumpy(_bboxes\[0\]), at.tonumpy(_labels\[0\]).reshape(-1), at.tonumpy(_scores\[0\]).reshape(-1)) ``` 4. 训练模型:根据你的数据集和需求,使用相应的训练代码进行模型训练。可以参考提供的GitHub链接\[1\]中的源码进行训练。 请注意,以上步骤仅提供了一般的指导,具体的操作还需要根据你的数据集和需求进行调整。 #### 引用[.reference_title] - *1* *2* *4* *5* [【目标检测】用Faster R-CNN训练自己的数据集](https://blog.csdn.net/qq_41464279/article/details/124042614)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [目标检测FasterRcnn算法——训练自己的数据集(pytorch)](https://blog.csdn.net/weixin_42917352/article/details/121388638)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值