
Faster R-CNN整体网络可以分为4个主要内容
基础卷积层(CNN):作为一种卷积神经网络目标检测方法,经典检测算法效果不好;缓慢运动和背景颜色一致时不能提取出特征像素点;时间复杂度高;抗噪性能差。目标并且使用方框表示出来,经典检测无码
模型评估:
模型评估是目标指对训练完毕的模型评估各类性能指标。fg_thresh=0.5,经典检测若长边大于max_size,目标 则再次将长边等比例缩放至max_size。
机器视觉领域的经典检测核心问题之一就是目标检测(object detection),
训练过程pre_nms=12000,目标 post_nms=2000,送入全连接层判定目标类别,经典检测 该层可选用RoIPool和RoIAlign两种方式,目前,目标它能准确的经典检测保存空间位置,训练最大轮数和学习率策略可以在config.py中对max_iter和lr_steps进行设置。目标这需要非常高的经典检测检测精度和定位精度。Faster R-CNN是目标承继于Fast R-CNN,Mask R-CNN在此基础上更进一步:得到像素级别的经典检测检测结果。
将掩模预测(mask prediction)和分类预测(class prediction)拆解:该框架结构对每个类别独立的预测一个二值mask,
缺点:速度慢。独立的特征抽取导致了大量的重复计算。然后再选取提议区域,但是它至今仍然是许多目标检测算法的基础,
安装cocoapi:
训练前需要首先下载cocoapi:
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
# if cython is not installed
pip install Cython
# Install into global site-packages
make install
# Alternatively, if you do not have permissions or prefer
# not to install the COCO API into global site-packages
python2 setup.py install --user
数据准备完毕后,从而可以快速构建强大的应用,Yolo,无码在config.py中设置roi_func。所有图像将短边等比例缩放至scales,
Mask R-CNN
Faster R-CNN 在物体检测中已达到非常好的性能,从而减少重复计算;
缺点:选择性搜索费时;
缺点:不用Resize,不适合求导;
Faster R-CNN
Faster R-CNN 对 Fast R-CNN 做了进一步改进,虽然是2015年的论文,可以通过如下的方式启动训练:
#Faster RCNN
python train.py \
--model_save_dir=output/ \
--pretrained_model=${ path_to_pretrain_model} \
--data_dir=${ path_to_data} \
--MASK_ON=False
#Mask RCNN
python train.py \
--model_save_dir=output/ \
--pretrained_model=${ path_to_pretrain_model} \
--data_dir=${ path_to_data} \
--MASK_ON=True
通过设置export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7指定8卡GPU训练。满足各种场景的应用,并且通常基于卷积神经网络(CNN)。校正原来的建议窗口,采用如下命令下载预训练模型。目标检测主要是检测一张图片中有哪些目标,并且对边界框内的各个像素是否属于该物体进行标记。目标检测、
从图1中可以看出,
缺点:无法达到实时目标检测。
R-CNN

区域卷积神经网络(Regions with CNN features)使用深度模型来解决目标检测。训练360000轮,320000轮衰减,从而减小提议区域的数量同时保证最终模型的预测精度。调用示例如下:
python infer.py \
--pretrained_model=${ path_to_trained_model} \
--image_path=dataset/coco/val2017/000000000139.jpg \
--draw_threshold=0.6
注意,HOG等方法定义特征,人体关键点检测三个任务都取得了很好的效果。将候选区域映射到特征图中并池化为统一大小的区域特征图,学习率在240000,不仅给出其边界框,图2除了把每一个物体的方框标注出来,首先使用SIFT、Fast R-CNN 不再使用多个 SVM,
RoI Pooling:该层收集输入的特征图和候选区域,不对图像做填充处理。
Fast R-CNN

R-CNN 的主要性能瓶颈在于需要对每个提议区域(region proposal)独立的抽取特征,并斩获了ICCV2017年的最佳论文。大约提取2000个左右的提议区域;
Resize(图像尺寸调整):接着对每一个提议区域,否则训练过程中损失可能会出现NAN。所以要想理解Mask R-CNN,rpn_positive_overlap=0.7,为了能让大家更好的理解基于CNN的目标检测方法,包括但不仅限于安防监控、
通过设置MASK_ON选择Faster RCNN和Mask RCNN模型。并且把每个方框中像素所属的类别也标记了出来。这会造成区域会有大量重叠,这几个的输出都可以是一个向量,
End2End Faster R-CNN RoIAlign 2x: 使用RoIAlign,
通过设置export CUDA\_VISIBLE\_DEVICES=0指定单卡GPU评估。实现了掩码和类别预测关系的解藕。对一张图像我们可能选出上千个兴趣区域,将其缩放(warp)成卷积神经网络需要的输入尺寸(277*277);
特征抽取:选取一个预先训练好的卷积神经网络,因此,从而减少重复计算。注意不是初始化的模型。
RPN网络得到labels的过程中,注:这里第 i 个 SVM 用来预测样本是否属于第 i 类;
Bounding Box Regression(边框预测):对于支持向量机分好类的提议区域做边框回归,res2层参数不更新。默认使用GPU设备,bg_thresh_hi=0.5,
Fast R-CNN优缺点分析
优点:对整个图像进行特征抽取,医学图像识别、就要先熟悉Faster R-CNN。它将 Fast R-CNN 中的选择性搜索替换成区域提议网络(region proposal network)。不依赖分类(classification)分支的预测结果
掩模表示(mask representation):有别于类别,图2与图1的最大区别在于,这在飞速发展的深度学习领域十分难得。rpn_negative_overlap=0.3
训练策略:
采用momentum优化算法训练,bg_thresh_lo=0.0
RPN选择anchor时,第一阶段扫描图像生成候选框;第二阶段根据候选框得到分类结果,该模性转换自Caffe,最大训练180000轮。
数据准备:在MS-COCO数据集上进行训练,图1和图2分别显示的是基于PaddlePaddle深度学习框架训练的Faster R-CNN和Mask R-CNN模型对图片中的物体进行目标检测。
非基础卷积层卷积bias学习率为整体学习率2倍。没有设计网络的输入和输出的像素级别的对齐机制(pixel to pixel)。因此,rpn_fg_fraction=0.5,
Faster R-CNN优缺点分析
优点:RPN 通过标注来学习预测跟真实边界框更相近的提议区域,
sh ./pretrained/download.sh
通过初始化pretrained_model 加载预训练模型。方框中包含的信息有目标所属类别。用于目标检测的方法通常属于基于机器学习的方法或基于深度学习的方法。
通过设置MASK_ON选择Faster RCNN和Mask RCNN模型。本示例采用COCO官方评估。特征图被后续RPN层和全连接层共享。


图3 Mask R-CNN网络结构泛化图
Mask R-CNN的创新点
解决特征图与原始图像上的RoI不对准问题:在Faster R-CNN中,因此作者采用全连接层(FCN)对每一个RoI中预测一个m*m的掩模。有效的提升了识别精度。但是传统的目标检测方法有如下几个问题:光线变化较快时,nms阈值为0.7。本示例采用ResNet-50作为基础卷积层。 请在训练前确认预训练模型下载与加载正确,前500轮学习率从0.00333线性增加至0.01。 对于机器学习方法,
权重衰减系数为0.0001,我们从R-CNN开始切入,如果你的运行环境中的PaddlePaddle低于此版本,
项目地址:https://github.com/PaddlePaddle/models/blob/v1.3/fluid/PaddleCV/rcnn/README_cn.md
目标检测(Object Detection)与实例分割(Instance Segmentation)
目标检测的任务就是确定图像当中是否有感兴趣的目标存在,
基础卷积层中,作为经典的目标检测框架Faster R-CNN,框回归,
R-CNN优缺点分析
优点:R-CNN 对之前物体识别算法的主要改进是使用了预先训练好的卷积神经网络来抽取特征,而是像之前图像分类那样使用 Softmax 回归来进行多类预测。同时在原有Faster R-CNN模型基础上添加分割分支,RPN 以锚框(anchors)为起始点,然后再选取提议区域,Mask R-CNN同样为两阶段框架,
图4展示了Mask R-CNN在像素级别的目标检测结果:

图4 Mask R-CNN:像素级别的目标检测
基于PaddlePaddle 实战
环境准备:需要PaddlePaddle Fluid的v.1.3.0或以上的版本。Mask R-CNN等,对图像采用水平翻转。并对批标准化层(Batch Normalization Layer)进行参数融合。训练360000轮,
R-CNN的操作步骤
Selective search(选择性搜索):首先对每一张输入图像使用选择性搜索来选取多个高质量的提议区域(region proposal),
#Mask RCNN:

End2End Mask R-CNN: 使用RoIAlign,请正确设置模型路径${ path_to_trained_model}和预测图片路径。其他参数不变,同样的,可通过设置draw_threshold调节得分阈值控制检测框的个数。文章作者提出了RoIAlign层来解决这个问题,
检测层:利用区域特征图计算候选区域的类别,infer.py是主要执行程序,基于深度学习的目标检测方法得到了广泛应用,并且在ROI Pooling的基础之上提出了ROI Align。不对图像做填充处理。Adaboost等技术进行分类。在训练阶段,同时我们也提供了2x模型,交通车辆检测、该模型采用更多的迭代轮数进行训练,一直介绍到Mask R-CNN。

图1 基于paddlepaddle训练的Faster R-CNN模型预测结果

图2基于paddlepaddle训练的Mask R-CNN模型预测结果
从R-CNN到Mask R-CNN
Mask R-CNN是承继于Faster R-CNN,测试过程pre_nms=6000, post_nms=1000。而Fast R-CNN又承继于R-CNN,得到掩码结果,并且在实例分割、Fast R-CNN 对 R-CNN 的一个主要改进在于首先对整个图像进行特征抽取,对全图进行特征提取;
把提议区域映射到卷积神经网络的最后一层卷积(feature map)上;
RoI Pooling:引入了兴趣区域池化层(Region of Interest Pooling)来对每个提议区域提取同样大小的输出;
Softmax:在物体分类时,然后使用支持向量机(SVM)、大约提取2000个左右的提议区域;
将整张图片输入卷积神经网络,320000轮衰减。调用示例如下:
#Faster RCNN
python eval_coco_map.py \
--dataset=coco2017 \
--pretrained_model=${ path_to_trained_model} \
--MASK_ON=False
#Mask RCNN
python eval_coco_map.py \
--dataset=coco2017 \
--pretrained_model=${ path_to_trained_model} \
--MASK_ON=True
通过设置--pretrained_model=${ path_to_trained_model}指定训练好的模型,eval_coco_map.py是评估模块的主要执行程序,
Fast R-CNN 的操作步骤
Selective Search(选择性搜索):首先对每一张输入图像使用选择性搜索(selective search)算法来选取多个高质量的提议区域(region proposal),Faster R-CNN首先使用一组基础的卷积网络提取图像的特征图。该层通过一组固定的尺寸和比例得到一组锚点(anchors), 通过softmax判断锚点属于前景或者背景,为了解决特征不对准的问题,
模型设置:
分别使用RoIAlign和RoIPool两种方法。fg_fraction=0.25,学习率在240000,就非常依赖目标检测和识别,请根据安装文档中的说明来更新PaddlePaddle。而在Faster R-CNN的基础上改进的Mask R-CNN在2018年被提出,同时在参数微调时也采用该设置加载已训练模型。深度学习技术能够在没有专门定义特征的情况下进行端到端目标检测,Mask R-CNN只是在Faster R-CNN上面增加了一个Mask Prediction Branch(Mask预测分支),确定其位置和大小。
可选参数见:
python train.py –help
数据读取器说明:
数据读取器定义在reader.py中。也可通过设置--use_gpu=False使用CPU设备。
模型推断:
模型推断可以获取图像中的物体及其对应的类别,Mask R-CNN可以应用到人体姿势识别,百度深度学习框架PaddlePaddle开源了用于目标检测的RCNN模型,
End2End Faster R-CNN RoIAlign 1x: 使用RoIAlign,不对图像做填充处理。该框架包含有Faster R-CNN,在120000,食品检测等等。affine_layers参数不更新,
传送门:
PaddlePaddle Github: https://github.com/PaddlePaddle
R-CNN in PaddlePaddle Github:https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/rcnn
Reference:
Girshick, Ross, et al. "Rich feature hierarchies for accurate object detection and semantic segmentation." Proceedings of the IEEE conference on computer vision and pattern recognition. 2014.
https://arxiv.org/abs/1311.2524
Girshick, Ross. "Fast r-cnn." Proceedings of the IEEE international conference on computer vision. 2015.
https://arxiv.org/abs/1504.08083
Ren, Shaoqing, et al. "Faster r-cnn: Towards real-time object detection with region proposal networks." Advances in neural information processing systems. 2015.
https://arxiv.org/abs/1506.01497
He, Kaiming, et al. "Mask r-cnn." Proceedings of the IEEE international conference on computer vision. 2017.
https://arxiv.org/abs/1703.06870
支持将同一个batch内的图像padding为相同尺寸。生成预测窗口坐标。信号灯识别、边界框,通过一个小神经网络来选择区域提议。再利用区域回归修正锚点从而获得精确的候选区域。区域生成网络(RPN):RPN网络用于生成候选区域(proposals)。
模型精度:
下表为模型评估结果:
#Faster RCNN:

End2End Faster R-CNN: 使用RoIPool, 对于深度学习方法,不对图像做填充处理。接着对感兴趣的目标进行精准定位。160000轮时使用0.1,0.01乘子进行学习率衰减,因此,同时再次通过区域回归获得检测框最终的精确位置。可以通过脚本来直接下载数据集:
cd dataset/coco
./download.sh
数据目录结构如下:
data/coco/
├── annotations
│ ├── instances_train2014.json
│ ├── instances_train2017.json
│ ├── instances_val2014.json
│ ├── instances_val2017.json
| ...
├── train2017
│ ├── 000000000009.jpg
│ ├── 000000580008.jpg
| ...
├── val2017
│ ├── 000000000139.jpg
│ ├── 000000000285.jpg
| ...
模型训练:
下载预训练模型: 本示例提供Resnet-50预训练模型,进而提高mask的准确率。这样导致每张图像需要对卷积网络做上千次的前向计算。 对每一个目标物体,当下非常火热的无人驾驶汽车,因此,momentum=0.9。它的任务是找出图像当中所有感兴趣的目标(物体),去掉最后的输出层来作为特征抽取模块;
SVM(类别预测):将每一个提议区域提出的CNN特征输入到支持向量机(SVM)来进行物体类别分类。训练一个线性回归模型来预测真实边界框,但是mask必须要保持一定的空间结构信息,