用自己的数据训练Faster-RCNN

本文介绍了如何使用自己的数据集训练Faster-RCNN物体检测模型,包括数据格式转换、训练前的设置、启动训练的步骤,并提到了训练过程中需要注意的事项和参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Faster-RCNN玩了一段时间了,一直想写一篇文章总结一下,但拖延症一直也没有下笔,今天就写了吧,做个总结。

这里写图片描述

Faster-RCNN是RCNN系列检测方法中最新的方法了(Yolo除外,因为Yolo走的是另一个路子,有机会再说这个),简单来说Faste-RCNN把Fast-RCNN方法用到的proposal方法也弄到了CNN网络里(rbg大神称此网络为RPN网络),省去了额外的诸如selective search之类的proposal方法,后面的分类直接把RPN网络生成的proposal映射回卷基层生成的feature map得到固定纬的特征,进行分类,这就跟之前Fast-RCNN一样了。唯一不同的是,对同一幅图片的多个疑似目标Faster-RCNN只需要进行一次forward,这样就避免了对同一个图片的多个proposal进行多次forward,这样节省的时间就显而易见了,在TitanX上我的实验结果每张图片差不多170ms-200ms, 这个速度还是比Fast-RCNN快了很多。

具体的内容可以参看论文,这里我介绍一下如何用自己的数据训练Faster-RCNN,至于如何安装我就不赘述了,可以参考rgb的github

1. 准备数据

在rbg的原版Faster-RCNN里,他是用的Pascal voc 2007的数据集,为了使用rbg的代码,我在这里没有改变自己的数据格式,而是把标注数据整理成和Pascal voc一样的数据格式,简单来说就是新建一个文件夹,可以任意命名,我在这里假设$pascal_format是我新建的自己放pascal voc格式的数据文件夹。

$pascal_format下应该有一个叫做VOC2007的文件夹,VOC2007下应该有Annotations、ImageSets和JPEGImages三个文件夹,其中:Annotations是标注数据xml文件,JPEGImages是和Annotations中的xml文件一一对应的图片文件,两个文件除了后缀分别是.xml和.jpg,其他部分应该一样,都应该是六位数字,比如:000001.jpg和000001.xml。ImageSets下有一个Main文件夹,文件夹内有一个trainval.txt文件,里面是训练数据设置,格式如下:

000000
000001
000002
000003
000004
000005
000006
……

一般我们手头的数据不是Pascal voc格式的,Pascal voc数据里面的标注数据是如下的xml文件:

<?xml version="1.0"?>

-<annotation>

<folder>VOC2007</folder>

<filename>013120.jpg</filename>


-<source>

<database>ChongQing Database</database>

<annotation>ChongQing</annotation>

<image>flickr</image>

<flickrid>QiangXie</flickrid>

</source>


-<owner>

<flickrid>QiangXie</flickrid>

<name>QiangXie</name>

</owner>


-<size>

<width>1664</width>

<height>1200</height>

<depth>
### Faster-RCNNFaster-rcnn 的命名差异及实现上的区别 #### 命名差异 "Faster-RCNN" 和 "Faster-rcnn" 主要体现在大小写的不同上。这种差异通常并不表示两种完全不同的算法或框架,而是可能源于不同开发者、团队或者文档中的书写习惯[^1]。在计算机科学领域,尤其是在开源项目中,大小写的差异有时仅是为了区分项目的具体分支、版本或者是个人偏好所致。 然而,在某些情况下,大小写的变化也可能暗示着具体的实现细节有所不同。例如,“Faster-RCNN”可能是原始论文或官方实现所采用的标准名称,而“Faster-rcnn”则可能代表某个特定社区维护的派生版本或是针对某一编程语言(如 Python 或 TensorFlow)优化后的变体[^2]。 #### 实现上的区别 尽管两者本质上都基于同样的核心思想——即通过引入区域提议网络(Region Proposal Network, RPN)加速目标检测过程并减少对外部候选框生成工具(如 Selective Search)的依赖,但在实际应用过程中可能存在如下几种主要的区别: 1. **代码库的选择** -Faster-RCNN”的经典实现在早期更多地使用 Caffe 框架完成,并由 Ross Girshick 提出并主导开发[^3]。 - 而“Faster-rcnn”,特别是带有额外修饰词(如 `tensorflow` 或其他后缀),往往指代的是后来移植到 TensorFlow 等更现代深度学习框架下的版本。这些版本可能会对原版做出一些调整以便更好地适配新平台的功能特性[^4]。 2. **配置方式** - 使用 Caffe 版本时,模型训练和测试所需的参数通常是硬编码于脚本内部或者通过简单的 JSON/YAML 文件指定;而在基于 TensorFlow 的实现里,则更加倾向于利用复杂的 protobuf 配置文件来定义整个流水线的行为模式[^5]。 3. **支持的数据集类型** - 初始发布的 Faster-RCNN 更加专注于 Pascal VOC 数据集这样的标准评测集合; - 后续改进型比如提到的小型化版本或其他定制化改造,则允许用户更容易扩展至自定义数据源之上,甚至提供了详细的教程指导如何准备相应的标注信息[^6]。 4. **性能表现** - 不同硬件环境下运行效率有所差别:部分重构成 GPU 加速友好的结构能够显著提升推理速度; - 另外还有关于内存占用方面的考量因素影响最终部署方案设计思路[^7]。 综上所述,虽然表面上看只是简单字母形式改变而已,但实际上背后隐藏了许多潜在的技术选型决策以及工程实践权衡取舍的结果。 ```python # 示例代码展示两个版本间可能存在的API调用风格对比 # Caffe风格 solver_param = { 'base_lr': 0.001, 'gamma': 0.1, 'stepsize': 50000, } net = caffe.Net(train_proto_path, caffe.TRAIN) # Tensorflow风格 config = tf.ConfigProto() session = tf.Session(config=config) model_fn = functools.partial(faster_rcnn_model_fn, num_classes=NUM_CLASSES) estimator = tf.estimator.Estimator(model_fn=model_fn, model_dir=MODEL_DIR) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值