faster RCNN实现细节

http://blog.csdn.net/hunterlew/article/details/71075925 部分说的很好。

RPN训练设置:

根据ANCHOR_SCALES和ANCHOR_RATIOS得到

(1)width/RPN_FEAT_STRIDE*height/RPN_FEAT_STRIDE*len(ANCHOR_SCALES)*len(ANCHOR_RATIOS)个anchors,如果一个anchor是ground-truth box的最大的IOU的anchor或者IOU大于0.7,那么这个anchor是正样本,label赋1,如果IOU小于0.3,那么这个anchor是负样本,label赋0,其余anchor忽略,label为-1。

(2)在训练RPN时,一个mini-batch是由一幅图像中任意选取的256个rois组成,其中正负样本比例为1:1,正样本128个,负样本128个。实际上筛选出来的正负样本肯定不止256个,随机从筛选出来的正负样本中选出128个正样本和128个负样本。

(3)如果正样本不足128个,则多用一些负样本以满足有256个rois可以用于训练,反之亦然。

(4)训练RPN时,与VGG或者Resnet共有的层参数可以直接拷贝经ImageNet训练得到的模型中的参数,剩下的没有的层参数用标准差=0.01的高斯分布初始化。

roipooling层:将rois从原图区域映射到conv5区域,最后pooling到固定大小的功能

fast RCNN回归部分:

正负样本比例为1:3,当IOU大于0.5时为正样本,IOU小于0.5时为负样本,总共128个。


RPN部分的分类层,输出只有两类,前景和背景,RCNN部分分类层输出K+1(K classes+背景)类。回归层也是rpn部分输出2*4,RCNN部分输出(k+1)*4


最后测试输出的是RCNN部分batch_images=1,batch=128个框非极大抑制后的框,输出的score为输出的K+1类中最大的score。

最后可视化时,一般只显示score>0.7的框框。

“Alternating training”的训练策略,分为四步:

(1)训练RPN;

(2)利用RPN产生的候选窗口来训练RCNN;

(3)在(2)的基础上再次训练RPN,不过保持共享层不训练;

(4)在(3)的基础上训练RCNN分支,同时保持其他层不训练。

不过现在一般一步训练完,把RPN和RCNN的损失函数加到一起训练。


RPN中,刚开始的3X3卷积层后接了激活层,两个1X1卷积层后没有接激活层,fast rcnn部分,分类和回归层是全连接层。


RPN网络最先得到的大约2万个anchor不是都直接给fast-RCNN,因为有很多重叠的框。文章通过非极大抑制的方法,设定IOU为0.7的阈值,即仅保留覆盖率不超过0.7的局部最大分数的box(粗筛)。最后留下大约2000个anchor,然后再取前N个box(比如前300个)给fast rcnn。fast rcnn将输出300个判定类别及其box,然后对类别分数采用阈值为0.3的非极大抑制(精筛),并仅取分数大于某个分数的目标结果(?????是从128个中进行非极大抑制还是从300个中进行非极大抑制?,测试中输出到底是哪些??)这一部分还需要仔细看代码。


RPN部分和RCNN部分中回归的损失函数的计算方式是一样的,具体计算方式稍后补充。



# 工程内容 这个程序是基于tensorflow的tflearn库实现部分RCNN功能。 # 开发环境 windows10 + python3.5 + tensorflow1.2 + tflearn + cv2 + scikit-learn # 数据集 采用17flowers据集, 官网下载:http://www.robots.ox.ac.uk/~vgg/data/flowers/17/ # 程序说明 1、setup.py---初始化路径 2、config.py---配置 3、tools.py---进度条和显示带框图像工具 4、train_alexnet.py---大数据集预训练Alexnet网络,140个epoch左右,bitch_size为64 5、preprocessing_RCNN.py---图像的处理(选择性搜索、数据存取等) 6、selectivesearch.py---选择性搜索源码 7、fine_tune_RCNN.py---小数据集微调Alexnet 8、RCNN_output.py---训练SVM并测试RCNN(测试的时候测试图片选择第7、16类中没有参与训练的,单朵的花效果好,因为训练用的都是单朵的) # 文件说明 1、train_list.txt---预训练数据,数据在17flowers文件夹中 2、fine_tune_list.txt---微调数据2flowers文件夹中 3、1.png---直接用选择性搜索的区域划分 4、2.png---通过RCNN后的区域划分 # 程序问题 1、由于数据集小的原因,在微调时候并没有像论文一样按一个bitch32个正样本,128个负样本输入,感觉正样本过少; 2、还没有懂最后是怎么给区域打分的,所有非极大值抑制集合canny算子没有进行,待续; 3、对选择的区域是直接进行缩放的; 4、由于数据集合论文采用不一样,但是微调和训练SVM时采用的IOU阈值一样,有待调参。
### 回答1: 可以使用 Python 实现 Faster RCNN 算法。Faster RCNN 是一种目标检测算法,它使用了一种叫做区域建议网络 (Region Proposal Network, RPN) 的方法来提出候选区域,然后使用其他神经网络分类和定位目标。 使用 Python 实现 Faster RCNN 算法可以使用一些已有的库,例如: - TensorFlow Object Detection API:这是由 Google 开发的一个开源框架,可以用于训练和部署计算机视觉模型,包括 Faster RCNN 算法。 - mmdetection:这是由阿里巴巴搜索算法团队开发的一个开源目标检测库,它支持 Faster RCNN 算法。 如果你想手动实现 Faster RCNN 算法,你可以参考论文 "Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks" 中的方法。你也可以参考其他资源,例如博客文章或教程。 ### 回答2: Faster RCNN是一种在目标检测中表现出色的深度学习模型,它结合了Fast RCNN和RPN(Region Proposal Network)的思想。要使用Python来实现Faster RCNN,我们需要以下几个步骤: 1. 数据准备:首先,准备训练和测试所需的图像数据集,并标注每个图像中目标的位置和对应的类别。 2. 搭建基础模型:我们可以使用Python中的深度学习框架(如TensorFlow、PyTorch等)来搭建Faster RCNN的基础模型。一般而言,我们可以选择使用预训练的CNN模型(如VGG、ResNet等)作为Faster RCNN的主干网络。 3. Region Proposal Network(RPN):在Faster RCNN中,首先需要使用RPN来生成候选的目标框。RPN是一个简单的卷积神经网络,它可以从图像中提取一系列的候选目标框。 4. ROI Pooling:通过ROI Pooling,我们可以将RPN生成的目标框提取出来,并将其调整为固定的大小。这一步骤是为了保证每个目标框的特征长度一致,方便后续的分类和回归。 5. 目标分类和回归:最后,我们使用CNN模型对提取出的目标框进行分类和回归。分类可以使用softmax函数,而回归可以使用线性回归等方法。 在实现Faster RCNN的过程中,我们还需要进行模型训练和调参等步骤,以获得更好的检测效果。此外,还可以利用一些其他的技巧,如数据增强、多尺度训练等来进一步提升模型性能。 总结起来,实现Faster RCNN主要包括数据准备、搭建基础模型、RPN生成目标框、ROI Pooling和目标分类与回归等步骤。同时,合理的训练和调参过程也是实现一个高性能的Faster RCNN模型的关键。 ### 回答3: Faster R-CNN(Region Convolutional Neural Network)是目标检测领域的经典算法,结合了区域建议网络(Region Proposal Networks)和卷积神经网络(Convolutional Neural Networks)。下面我将简要说明如何使用Python来实现Faster R-CNN。 首先,我们需要导入相应的Python库,如numpy、torch和torchvision等。接下来,需要定义我们的模型架构。Faster R-CNN的模型由提取特征的主干网络和两个子网络组成,即Region Proposal Network(RPN)和Fast R-CNN Network。 主干网络通常使用预训练的卷积神经网络,如ResNet、VGG等。我们可以使用torchvision中的这些预训练模型来作为主干网络。 接下来,我们需要定义RPN网络。RPN是一个用来生成候选检测框的网络,它通过在主干网络的特征图上滑动一个小窗口,并预测窗口内是否存在目标,并生成一组候选框。 然后,我们需要定义Fast R-CNN网络,该网络用于对RPN生成的候选框进行分类和回归。这个网络类似于一个分类器,根据候选框的特征来进行目标的分类和位置的回归。 在训练过程中,我们需要定义损失函数,通常包括分类损失和边界框回归损失。我们使用训练集来调整网络参数,以使模型能够准确地预测目标的类别和位置。 在测试过程中,我们可以使用模型来检测输入图像中的目标。我们先使用RPN网络生成一组候选框,然后使用Fast R-CNN网络对这些候选框进行分类和位置回归,得到最终的检测结果。 最后,我们可以根据需要对模型进行优化和调整,例如调整超参数、增加数据增强等,以提升模型的性能和泛化能力。 综上所述,使用Python来实现Faster R-CNN,我们需要导入库,定义模型架构、网络和损失函数,然后进行训练和测试。这只是一个简单的概述,实际实现中会涉及更多的细节和代码。具体的实现可以参考相关的开源实现和教程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值