一些基础概念
fine-tune
IoU 指标
Region Proposals算法
- selective search
- objectness
- category-independen object proposals
- constrained parametric min-cuts
- multi-scale combinatorial grouping
- ciresan
R-CNN(2014)
论文:Rich feature hierarchies for accurate object detection and semantic segmentation
写在前面:
网络结构:
主要步骤(4步):
- 给定一张图片,提取候选区域(作为最终定位框的参考)
- 使用 selective search 算法生成候选区域
- 每张图片提取约 2000 个候选区域
- 将每个候选区域导入到神经网络,得到一个特征向量
- 基于 AlexNet,但去除掉最后的全连接层
- 因为 AlexNet 输入尺寸为 227 x 227,因此导入神经网络前将候选区域尺寸变换的到 227 x 227,变换前,在每个区域边缘加 p=16 个像素
- 得到特征向量长度为 4096
- 特征向量送入 SVM 分类器,进行分类
- 将从神经网络导出特征向量导入 SVM 分类器,产生类别分数
- 设定 IoU 指标阈值(>0.3),解决类别图像部分包括在框中的问题,这个参数十分重要
- 训练一个线性回归模型,判断目标区域候选框是否完美,修正候选区域框,得到最终的框的位置(参考DPM)
写在后面:
- 候选框会有大量重叠,通过计算 IoU 指标,采用非极大性抑制,以最高分的框为基础,去除掉重叠框
- 采取迁移学习策略,现在 ImageNet 上预训练,然后去掉预训练好的最后一层全连接层,修改类别数(21类=20目标+1背景),在 PASCAL VOC 数据集上 fine-tune
- 训练时使用 SGD 算法,初始学习率取 0.001,batch_size 取 128
缺点:
- 训练速度慢(84h):流程不紧凑,分多个步骤,较为繁琐;候选框大量重叠,卷积操作重复执行
- 训练空间大:中间需要保持候选区域特征,特征文件巨大
- 测试速度慢(47s)
SPPnet(2015)
论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
写在前面:
- 思路
- CNN都需要固定输入图像的尺寸,如何改进,避免其导致的不必要精度损失
- 如何解决 R-CNN 对候选区域进行了重复卷积计算问题
网络结构:
- 整体
(1)
(2)
- 细节
主要步骤:
- 图片输入
- 不需通过区域框剪切,而是直接将整个图送入到卷积层
- 卷积层
- 得到的特征(feature map)不直接送入到全连接层,而是交给下面的SSP层处理
- SPP (spatial pyramid pooling)空间金字塔池化
- 输入为 feature map 的一块区域(与原图一部分区域是相对应)
- 包含 1x1, 2x2, 4x4 三个pooling结构(max pooling)
- 无论选取的 feature map 区域尺寸为多少,最终得到的输出长度都为 (16+4+1) x 256(层数),输出的特征向量导入到下面的全连接层
- 全连接层
- 分类或目标检测(跟 R-CNN相同)
- 导入到 SVM 中进行分类
- 使用 Bbox reg 生成目标识别框
写在后面:
-
为何一般卷积神经网络需要固定图片大小的输入?
- 其实,卷积层参数与图片输入大小是无关的,因为仅仅是卷积核在图像上的滑动
- 全连接层与输入图像大小是相关的 ,因为设置参数数量时需要知道全连接曾输入的神经元数量
-
通过在卷积层与最后一个全连接层间加入 SPP ,解决了开头提到的两个问题
-
Feature map 中的候选区域与原图中的一块区域有映射关系,可以依据每个卷积层来反推得到
-
有关于候选框的细节问题(同 R-CNN 比较)
- 初始时,都是对待测图片搜索出大约 2000 个候选窗口
- 输入到卷积神经网络时,R-CNN 是将每个候选框的内容一一输入其中;SPPnet 是将整张图输入其中,在 feature map 步骤时找到每个候选框区域(根据映射关系),提取到固定长度的特征向量。
优点:
- 解决了图片输入尺寸的限制问题
- 解决了重复卷积的问题,提高了一定运算速度
缺点:
- 训练步骤仍旧属于多步骤
- 仍然需要训练 SVM 分类器,需要额外训练 Bbox reg 回归器
- 特征仍然需要很大空间保存
Fast R-CNN
论文:Fast R-CNN
写在前面:
-
解决 R-CNN 中训练慢,空间大需求大的问题
-
网络基于 VGG-16
网络结构:
- 整体
(1)
(2)
- 细节
(1)
(2)
主要步骤:
-
图片输入(224 x 224)
-
神经网络(基于VGG结构,可以有所改变)
-
Conv Layers
-
层(SPP的简化版)
该层输入为的输出特征和大约2000个尺寸不同的,输出固定大小的 feature map -
全连接层
-
-
两个并联的全连接层和损失层
写在后面:
- 测试时分类和识别的最后一层损失层与训练时是不同的
- 对于分类,测试时替换为 softmax ,输入分数,输出类别概率
- 对于识别,测试时替换为线性回归器,预测 Bounding-box 坐标
- Fast R-CNN 是将 R-CNN 的许多步骤整合到一块,将分类和回归放到同一个网络中,同时使用 softmax 代替 SVM 分类器
- 关于损失函数(???)
- 使用 SVD 分解改进全连接层
- 原始 region proposal 仍旧使用 selective search 算法获得
- 有关ROI pooling如何实现得到固定大小的 feature map
- 2000个不同尺寸的原始 region proposal,假设其中一个尺寸为 hxw
- 将每个尺寸为 h x w 的region proposal 分割成 H x W 的网格(共H*W个网格)
- 将尺寸为 h x w 的 region proposal 映射到最后一个卷积层(Conv5)
- ROI pooling 取每个网格的最大值,因此最后输出尺寸为 H x W
优点:
- 训练速度和测试速度(3s)都有所加快
- ROI Pooling 的使用
- softmax 代替 SVM 分类器
- 使用 SVD
- 训练所需空间较少
- 将分类和回归统一到一个 CNN 网络中,不需要额外存储特征
缺点:
- 使用 selective search 区域提取耗时(2-3s)
Faster R-CNN
论文:
写在前面:
- 摆脱掉使用 selective search 来生成 region proposal
- 网络基于 VGG-16
网络结构:
主要步骤:
- Conv Layers
- Region Proposal Networks(RPN)
- ROI Pooling
- Classification
待续。。。。。。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于目标检测模型 R-CNN 模型简单总结(R-CNN,SPPnet, Fast R-CNN) - Python技术站