41 锚框【动手学深度学习v2】】
锚框:对边框位置的猜测。
先提出多个框在某个地方,比如5个,然后去看这5个框里面到底有没有物体。
两次预测:锚框位置和锚框内物体的预测。
如何处理锚框?
IoU - 交并比
比较两个框之间的相似度:真实框与锚框之间的相似度。一般会用IoU,越接近1 两个框相似度越接近。
计算公式:交集/并集
IoU :计算两个集合的相似度(夹克比指数)
赋予锚框标号:一张图片假设有10000个锚框,去预测每个框中的物体,训练时每个锚框是一个训练样本,对于一个锚框要么是背景(那它就是一个负样本),要么是一个真实的物体(那么它就要与一个真实的边缘框关联上)。
目标检测可能处理大量的锚框都是负样本。
赋予锚框标号的办法:假设一个矩阵有(四个物体)对应有4个框,一些初始化的锚框,每个锚框与边缘框去算IoU,计算值填在矩阵里面,将整个矩阵最大的值挑出来,给到它最可能框到的物体的标号做关联,然后将这个值的所在行和列删掉,再取出一个最大值,继续关联,不断这样下去,直到所有的真实边缘框都关联完。
锚框一般固定生成的或者根据图片生成的。
边缘框是提前标好的。
多少个锚框会生成多少个训练样本。
赋予标号的算法很多种,这里介绍比较常用的几种做法。
NMS:非极大值抑制
使用非极大值抑制输出:每个锚框会预测一个边缘框,很多框是相似的,要去掉相似的框,使得输出更加干净。NMS办法是选中非背景类的最大预测值,然后去除与这个最大预测值IoU大于某个阈值的锚框(比如阈值设为0.5),反复这个过程最后得到干净的输出。
总结: 基于锚框做目标检测的算法很多,生成完锚框给每个锚框一个标号,然后计算与真实锚框的偏移,然后进行训练,最后预测使用NMS去掉冗余的预测。