传统目标检测:滑动窗口,去便利整个图像区域
缺点:模板需要提前设定
提升部分:权值共享
预测阶段:
关于置信度:是否有物体的概率*预测与真实的IOU
每一个grid(网格)包含两个预测框,每一个预测框包含5个参数(x,y,w,h,置信度)这五个参数。然后pascal voc数据集中包含20个类别,所以总共5+5+20=30维度。又因为是7*7的张量。所以输出参数维度是7*7*30=1470tensor outputs的向量
每一个grid cell还能生成20个类别的条件概率。上面不同颜色表示不同类别,而相同颜色里面,那些grid cell都是对应类别中条件概率比较高的区域
每一个grid cell都得到两个预测框,总共7*7=49个grid cell得到98个预测框。在对其进行后处理:比如低置信度的框过滤掉、非极大值抑制去除掉,得到最终的结果。
每一个grid cell都有对应的两个bounding box,每个bounding box都有5个参数:
中心点坐标(x,y);bounding box的宽高(w,h);置信度c
置信度:bounding box包含物体的概率
后面20个是条件概率
在bounding box负责预测这个物体的条件下,是20个类别的概率
用条件概率*包含物体的概率(置信度)=全概率
每一个grid cell都可以获得两个20维的全概率,分别表示两个bounding box
总共有7*7=49个grid cell,每一个grid cell都可以获得两个20维的向量;一共有98个bounding box,就可以获得98个20维的向量;这里面的每一个黄色竖条都表示这20个类别的概率是多少(全概率)
将中间98个竖条可视化出来,就是中间的图
首先,假设每个竖条第一个为狗的概率。一共有98个狗的概率,然后设定一个阈值,把概率小于阈值的概率全部置零,再按照概率高低排序,接着进行NMS(非极大抑制)处理
首先,将概率最高的与其他概率分别进行比较,假设最高的和次高的IOU大于某个阈值,说明这两个是重复识别了一个物体,将置信度较小的那一个去掉;如果不小于,就保留。直到最后一个和第一个比对结束后,再让次高的和其他的进行比较,一直重复下去;最后只剩下少数几个 。
这只是一类物体的,当所有的物体都遍历完成之后,得到一个数值。将不全为0的矩阵保留。最后将其中的分数和类别取出,作为目标检测的结果
深度学习训练是通过 梯度下降 和 反向传播 的方法迭代的去微调神经元的权重,使得损失函数最小化的过程。
而目标检测是一个典型的监督学习问题。首先,在训练集上先人为画出ground truth(真实的),而算法就是为了让预测框能够更好的拟合这个绿框。而这个绿框的中心点落在哪个grid cell里面,就需要哪个grid cell产生的bounding box去拟合这个绿框。并且这个grid cell输出的类别也应该是ground truth的类别。
所以每个grid cell只能预测一个物体,而7*7=49个grid cell也只能预测49个物体。这也是yolo局限的地方,对于小目标或者密集目标时效果不好的原因。有可能一个grid cell里面会有很多个ground truth。
而每一个grid cell都预测了两个bounding box,这时候要选出由哪一个bounding box去拟合ground truth。
由和ground truth 的 IOU比较大的那个框去拟合ground truth
如果 grid cell里 没有ground truth的中心点落在其中的话,那么这个grid cell预测出的两个bounding box都将被舍弃,只需要让这两个框的置信度越接近0越好。
yolo目标检测问题其实是当做回归问题去做的
首先,右上角的蓝框、红框、绿框分别表示
蓝框:负责检测物体的grid cell(若所在grid cell有物体为1,否则为0)
红框:负责检测物体的bounding box(若负责检测为1,否则为0)
绿框:表示不负责检测物体的bounding box(若不负责检测为1,否则为0)
另外,若一个bounding box 负责检测物体,那么它所在的grid cell也负责检测物体,并且它的另一个bounding box就不负责检测物体。相当于红框为1,则蓝框也为1;并且此时绿框一定为0
其中,角标i表示的是s*s个grid cell,角标j表示有B个bounding box。所以i最大到7*7=49,最大到2,因为B = 2
这是对那些真正负责检测物体的bounding box的坐标误差给予更大的权重
这是对那些不负责检测物体bounding box误差给予小一点的权重。
这两项是:坐标回归误差。其中,第一项,是bounding box的中心点坐标与ground truth中心点坐标的误差;第二项,是bounding box的宽高(w,h)与ground truth的宽高(w,h)的误差。
这两项是置信度回归误差。其中,预测值和标签值
Ci 预测值:从模型正向推断结果为s*s*(B*5+c)维向量中找到这个bbox的confidence score
Ci^标签值:计算这个bounding box与ground truth的IOU
c = pr(object)*IOU(pred 和 truth)
这一项是类别预测误差
测试结果:
检测效果不是特别好
yolo论文细节
在实时检测中,yolo是最准的;在非实时检测中,yolo是最快的。
在2015年的时候,yolo的检测效果介于rcnn和fast rcnn,并没有特别优势。但是,它的检测速度却很高。
对比之后,yolov1的优缺点就比较鲜明了:因为是将全图喂给cnn,所以拥有全局的信息,那么区分背景与物体的能力强,误差小;但是定位能力就比较差,误差大。
其中原因有很多,可能是输入图片像素较低,只有448*448。
考虑到两种网络各有优劣,人们尝试将两种网络结合,实现优势互补:
通过对比,发现Fast-rcnn在和yolo结合之后效果提升最大。集成基模型的关键就是要模型之间好且不同。
yolo的模型迁移泛化能力很强。