使用两个全连接层,一个作为类别的输出,一个作为物体位置数值的输出。(4个位置)
对于分类的概率,使用交叉熵损失
位置信息具体的数值,使用MSE均方误差损失(L2损失)
在目标检测当中,对bbox主要由两种类别。
Grounding-truth bounding box:图片当中真实标记的框
Predicted bounding box:预测的时候标记的框
对于一张图片当中多个目标,多个类别的时候。前面的输出结果是不定的,有可能是以下有四个类别的输出这种情况。或者N个结果,这样的话,网络模型输出结构不定
![](https://i-blog.csdnimg.cn/blog_migrate/e557672ccad6788cc2840851d4bb3715.png)
对于多个目标的情况,就不能以固定个数输出物体的位置值
目标检测-Overfeat模型
滑动窗口
目标检测的暴力方法是从左到右、从上到下滑动窗口,利用分类识别目标。但是滑动窗口需要初始设定一个固定大小的窗口,这就遇到了一个问题,有些物体适应的框不一样
所以需要提前设定K个窗口,每个窗口滑动提取M次,总共K×M个图片,通常会直接将图像变形转换成固定大小的图像,变形图像块被输入CNN分类器中,提取特征后,我们使用一些分类器识别类别和该边界框的另一个线性回归器。
目标检测R-CNN模型
候选区域方法(region propousal method):提供了物体检查测的一种重要思路。
步骤(AlexNet为例)
对于一张图片,找出默认2000个候选区域
2000个候选区域做大小变换,输入到AlexNet当中,得到特征向量
2000×4096
经过20个类别的SVM分类器,对于2000个候选区域做判断,得到[2000,20]得分矩阵
2000个候选区域做NMS,取出不好的,重叠度高的一些候选区域,得到剩下分数高,结果好的框
修正候选框,bbox的回归微调。
![](https://i-blog.csdnimg.cn/blog_migrate/c11c06710eab2ee44b9b0bf057dc7e57.png)
非最大抑制(NMS)
目的:筛选候选区域,目标是一个物体只保留一个最优的框,来抑制那些冗余的候选框
修正候选区域
为了让候选框标注更准确,去修正原来的位置。修正过程(线性回归)
检测的评价指标
ioU交并比
平均精确率(map)
改进-SPPNet
![](https://i-blog.csdnimg.cn/blog_migrate/0cbe69a6f142de98591e4ab95f9e1783.png)
Fast R-CNN
训练会比较统一:废弃了svm以及sppnet
roi pooling layer+softmax
多任务损失-Multi-task loss
平均绝对误差(MAE)损失即L1损失+交叉熵损失
Faster R-CNN
候选区域筛选融合到网络当中
区域生成网络(RPN)+Fast R-CNN
RPN替代了SS选择性搜索算法
RPN网络用于生成region proposals
通过softmax判断anchors属于foreground或者background
bounding box regression修正anchors获得精确的proposals
得到默认300个候选区域给roi pooling继续后面fast rcnn的步骤
RPN原理
RPN网络的主要作用是得出比较准确的候选区域。
用m×n(默认3×3=9)的大小窗口去扫面特征图得到K个候选窗口
每个特征图中像素对应的9个窗口大小?
三种尺度(128,256,512),三种长宽比(1:1, 1:2, 2:1),3×3=9种不同大小的候选框
eg:feature(51*39*256) 得到51*39*9 anchors
窗口输出[N,256]➡分类:判断是否是背景
回归位置:N个候选框与自己对应目标值GT做回归,修正位置
得到更好的候选区域提供给ROI pooling使用
Faster R-CNN训练
RPN训练:
分类:二分类,poftmax,;logisticregression
候选框的调整:均方误差做修正
Fast RCNN部分的训练:
预测类别训练(softmax)还有预测位置的训练(均方差损失)
样本准备:正负anchors样本比例:1:3
YOLO
GoolgleNet+4个卷积+2个全连接层
网络输出大小:7×7×30
流程理解
单元格
7*7=49个像素值,理解成49个单元格
每个单元格负责预测一个物体类别,并且直接预测物体的概率值
每个单元格:两个(默认)bbox位置,两个置信度(confidence)
一个bbox:xmin,ymin,xmax,ymax,confidence
两个bbox:4+1+4+1=10个值
30:上面的10个+20(20代表20类的预测概率结果)
网格输出筛选
一个网格会预测两个bbox,在训练时我们只有一个bbox专门负责预测概率(一个object 一个bbox)
20个类别概率代表这个网格当中的一个bbox
一个confidence score
yolo框,概率值都直接由网络输出【7*7*30(人为给30个值赋了定义)】;faster-rcnn是人为设定一个值,然后利用RPN网络对其优化到一个更准的坐标和是否背景类别
训练
预测框对应的目标值标记
三部分损失 bbox损失+confidence损失+classfication损失
总结
优点:速度快
缺点:
准确率会打折扣
yolo对相互靠的很近的物体(挨在一起且中点都落在同一个格子上的情况),还有很小的群体检测效果不好,这是因为一个网格中只预测了两个框
SSD
SSD结合了YOLO中的回归思想和Faster-RCNN中的Anchor机制
不同尺度的特征图上采用卷积核来预测一系列Default Bounding Boxes的类别、坐标偏移
不同尺度feature map所有特征点上使用PriorBox层(Detector&classifier)
训练与测试
训练
样本标记:8732个候选框default boxes,得到正负样本,正:负=1:3
Softmax Loss(Faster R-CNN是log loss),位置回归则是采用Smooth L1 loss(与Faster R-CNN一样)
测试
输入→输出→nms→输出
目标检测数据集标记
工具:Labellmg
需求:商品图片,需要标记的物体有哪些
标记原则为图片中所出现的物体与我们确定类别的物体相匹配即可
xml读取本地文件存储到pkl
ElementTree工具使用,解析xml结构
保存物体坐标结果以及类别
pickle工具导出
保存的信息:类别,位置
找到路径对应的图片
对应每张图片,解析其中的多个物体