图像识别三大任务
目标识别:输出类别
目标检测:输出类别以及物体在图片当中的位置
目标分割:把物体形状描述出来,背景进行剔除
一、R-CNN
1、步骤:
1、找出可能存在的候选区域,得出2000个候选区域,统一成大小
- 通过选择性搜索(ss)算法,进行筛选
- 大小统一:通过crop + warp
2、进行CNN提取特征,得出2000特征向量
- 使用 AlexNet 的结构,输入要素227*227
- 提取出的特征会保存在磁盘当中
- [2000,4096 ]
3、20个 SVM 进行分类,得到2000*20的得分矩阵
- 20:代表你的目标检测当前数据集一共需要检测20种类别
- 得出 [2000,20]的得分矩阵,打分
4、进行 NMS ,剔除候选框
- 理解 NMS 的整个过程
- 假设现在滑动窗口有:A、B、C、D、E 5个候选框,
- 第一轮:假设B是得分最高的,与B的 IoU > 0.5删除。现在与 B 计算 IoU ,DE结果>0.5,剔除DE,B 作为一个预测结果。
- 第二轮:AC中,A的得分最高,与A计算 IoU,C的结果 > 0.5,剔除C,A作为一个结果。
5、修正bbox,对bbox做回归微调
- 通过线性回归,特征值是候选区域,目标是对应的GT
- 建立回归方程学习参数。
2、R-CNN训练过程
正负样本准备 + 预训练 + 微调网络 + 训练SVM + 训练边框回归器
(1)正负样本准备
当前我们业务的数据集(正负样本标记)
(2)预训练
一般在现有模型的基础之上进行,别人已经在大数据集上训练好的CNN网络参数模型。model1
(3)微调
利用标记好的样本,输入到model1当中,继续训练,得到model2(CNN网络)
(4)SVM 分类器
训练 SVM 分类器,每个类别训练一个分类器
特征 M * 4096,一个 SVM ,4096 * 20
- 正负样本标记结果(100个猫,900个非猫)
- 总共得到 4096*20 的 SVM 权重
(5)bbox回归器训练
筛选候选框,只对那些跟 ground truth 的 IoU 超过某个阈值且 IoU 最大的 region proposal 回归
训练得到回归的参数
3、R-CNN测试过程
4、缺点
速度慢在哪里:卷积层慢
二、SPPNet
一张图片直接全部卷积计算,取出 crop + warp 操作
流程分析:重点是映射 + SPP 层
1、映射
image --- > SS -- > 候选区域
image -- > CNN -- > 特征图
将候选区域映射到特征图当中,得出每个候选区域的特征向量。
2、SPP:spatial pyramid pooling
- 对于 M 个候选区域,每个都要经过 SPP 层进行变换
- 把每个候选区域进行分块:4*4、2*2、1*1
- 输出:没个候选区域的特征向量都为 21 * 256 (不同网络 卷积输出通道数不一定一样)
- 长度固定,特征向量有了