知乎文章:
YOLO:实时快速目标检测
YOLO详解
后面再发现的!
CSDN:
所以如何判断一个grid cell中是否包含object呢?
答案是:如果一个object的ground truth的中心点坐标在一个grid cell中,那么这个grid cell就是包含这个object,也就是说这个object的预测就由该grid cell负责。
每个grid cell都预测C个类别概率。
这一段具体分析
在loss function中,前面两行表示localization error(即坐标误差),第一行是box中心坐标(x,y)的预测,第二行为宽和高的预测。这里注意用宽和高的开根号代替原来的宽和高,这样做主要是因为相同的宽和高误差对于小的目标精度影响比大的目标要大。举个例子,原来w=10,h=20,预测出来w=8,h=22,跟原来w=3,h=5,预测出来w1,h=7相比,其实前者的误差要比后者小,但是如果不加开根号,那么损失都是一样:4+4=8,但是加上根号后,变成0.15和0.7。
B站视频:
这里我用自己的话写一段感受:
已经知道输入图片都被归一化到 0-1 之间, YOLO网络输出的值为 7X7X30 的矩阵(FC结果reshape的),所以每一个grid cell 的预测结果为 30 个数值(机体的分析见 2. 的文章)。可以知道两个bbox 的值 w, h 范围都在 0~1之间!!!这就看出每一个grid cell 预测的 bbox都可以在整张图片画框框!!!
另外,对于每一个object,如何确定负责他预测的grid cell 呢? 依据是 ground truth 的中心点落到的那个cell!其他 grid cell 就算有object 的某一部分落到这个grid cell ,P(Object) 也 不会因为他 变为1.
LOSS:
Predict:
首先使用nms,这里会存在为某一类置零的操作! 强烈建议任何疑问看视频3!!!
如何筛选,并画框设定类别 ? 横向一列是一组!!!
三步:
-
对每一个 class ,对他的一组 scores(所有bbox,后20个类别值与所有B的confidence的乘积), 使用阈值为 0.2 ,进行筛选,小于0.2 的,socre 置 0。
-
对剩下的,对每一组 scores ,每一个bbox的每一个score都是这个bbox属于某一类的概率。对横向的同一类的一组scores 做从大到小排列 , 前后两个bbox的 IOU 按照是否大于 0.5 进行筛选,大于0.5 , 后一个score 置 0!
-
对每一个bbox , 选取它 所有不同类的score中大于零的数值!那么这个类就是这个bbox的类,画框输出