一些基础概念
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
写在前面:
- 思路
- 将目标识别应用到目标检测和定位上来
- 如何定位?如何将目标框选出来?
- 网络基于 AlexNet
网络结构:
主要步骤(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
i m g → C o n v 1 → p o o l i n g → C o n v 2 → p o o l i n g → C o n v 3 → C o n v 4 → C o n v 5 → img\rightarrow Conv1\rightarrow pooling \rightarrow Conv2\rightarrow pooling \rightarrow Conv3 \rightarrow Conv4\rightarrow Conv5 \rightarrow img→Conv1→pooling→Conv2→pooling→Conv3→Conv4→Conv5→ -
R O I P o o l i n g ROIPooling ROIPooling 层(SPP的简化版)
→ R O I P o o l i n g → \rightarrow ROIPooling \rightarrow →ROIPooling→
该层输入为 C o n v 5 Conv5 Conv5的输出特征和大约2000个尺寸不同的 r e g i o n p r o p o s a l region proposal regionproposal,输出固定大小的 feature map -
全连接层
→ F C 4096 → F C 4096 → \rightarrow FC 4096\rightarrow FC 4096 \rightarrow →FC4096→FC4096→
-
-
两个并联的全连接层和损失层
∣ → F C 21 ( c l a s s s c o r e ) → s o f t m a x W i t h L o s s ∣ → F C 84 ( B b o x p r i d e c t i o n ) → s m o o t h L 1 L o s s L o s s = c l s _ l o s s + b b o x _ l o s s \begin{aligned} & |\rightarrow FC 21 \ \ (class\ score) \rightarrow softmaxWithLoss \\ & |\rightarrow FC 84 \ \ (Bbox\ pridection) \rightarrow smoothL1Loss \end{aligned} \\ Loss = cls\_loss+bbox\_loss ∣→FC21 (class score)→softmaxWithLoss∣→FC84 (Bbox pridection)→smoothL1LossLoss=cls_loss+bbox_loss
写在后面:
- 测试时分类和识别的最后一层损失层与训练时是不同的
- 对于分类,测试时替换为 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
待续。。。。。。