介绍
在本章中,我们将学习如何使用卷积神经网络来定位和检测图像上的对象。
RCNN
Fast RCNN
Faster RCNN
YOLO
SSD
使用回归定位对象
回归返回的是数值数据(实数)而不是类别数据,在例子中,将返回与边界框相关的4个数字(x0,y0,width,height)。使用图像以及它的真实边界框训练目标检测系统,并使用L2距离计算预测边界框与真实边界框之间的损失。
image通常,要做的是在最后一个卷积层上附加另一个全连接层(获取也可以使用全局平均池化层)
image这样的话只能用于检测一个对象。
比较边界框预测的准确率
基本上我们需要比较预测框和真实边界框之间的交并比(IoU)是否大于某个阈值(ex> 0.5)
imageRCNN
RCNN(Regions + CNN)是一种依赖于外部区域提议系统的方法
imageRCNN的问题在于它永远不会变得很快,其训练网络的步骤如下:
-
采取预先训练的imagenet cnn模型(Alexnet,vgg,googleNet,ResNet)
-
使用需要检测的对象+“无对象”类重新训练最后一个全连接层
-
获取所有提议(= ~2000 p / image),调整它们的大小以匹配cnn输入,然后保存到磁盘。
-
训练SVM模型,在对象和背景之间进行分类(每个类一个SVM)
-
边界框回归:训练一个线性回归分类器,它将输出一些校正因子
Fast RCNN
Fast RCNN方法从一些外部系统(选择性搜索)接收区域提议。此区域提议的特征图将发送到一个层(Roi Pooling),该层将调整所有区域为固定大小。这是因为全连接层所有输入向量需要具有相同的大小。
image区域提议示例,边界框= [r,x1,y1,x2,y2]
imageRoi Pooling层
image它的作用主要是使不同的区域提议的特征图统一成一样的大小,作为全连接层的输入。因为全连接层网络定义好之后,它的输入维度已经确认,不能改变。
ROI层的输入将是提议区域最后的卷积层激活特征图。例如,考虑以下输入图像及其区域提议。
输入图像:
image两题提议区域:
image最后一个卷积层的激活(例如:conv5):
image对于每个卷积激活(来自上图的每个单元),Roi Pooling层将调整大小,区域提议(红色)将达到全连接层上预期的相同分辨率。例如,将所选单元格视为绿色。
输出将是:
image imageFaster RCNN
image主要思想是使用深层的一些特征图来推断区域提议。
Faster RCNN由两个模块组成。
-
RPN网络(区域提议网络):根据深层的特征图给出一组矩形
-
Fast-RCNN Roi Pooling层:对每个提议的区域进行分类,并优化提议出来的区域的位置。
区域提议网络
-
获得训练过(即imagenet)的卷积神经网络
-
使用使用训练过的模型的卷积层输出的特征图(feature map)
-
训练区域建议网络,该网络将决定图像上是否存在对象,并且还给出框的位置
-
使用ROI池层将所有提议区域重新调整为固定大小后,发送到全连接层以继续分类。
map上滑动一个小窗口(3x3),将窗口下的特征图分类为对象或非对象,并给出一些边界框位置。
对于每个滑动窗口中心,它创建固定的k锚箱,并将这些箱子分类为对象与否。
imageFaster RCNN训练
在论文中,每个网络都是单独训练的,但我们也可以联合训练。只考虑模型有4个损失。
-
RPN分类(对象或非对象)
-
RPN边界框提议
-
Fast RCNN分类(普通对象分类)
-
Faster RCNN边界框回归(改进以前的区域框提案)
Faster RCNN结果
resnet 101层模型作为特征提取的Faster RCNN结果如下:
imageFaster RCNN图
这个图表代表了使用VGG16的Faster RCNN的完整结构,找到了一个github项目(https://github.com/mitmul/chainer-faster-rcnn)。它使用一个名为Chainer的框架(https://github.com/chainer/chainer),它是一个仅使用python(有时是cython)的完整框架。
image **** image****
网友评论