YOLOv4中filters数量设置为(classes + 5)*3的原因是什么
YOLOv4配置项
filters = (classes + 5) * 3的规则说明 首先纠正你对系数3的误解:这个3不是对应3个YOLO检测层,而是单个检测层上每个网格单元绑定的3个不同尺度的先验锚框(anchor)。YOLOv4的3个检测层是独立输出预测结果的,每个检测层前的最后一层卷积都要单独设置这个filters值,和检测层的总数量没有关系。
classes + 5是单个锚框需要输出的所有预测值的总数量,拆分逻辑如下:
- 固定数值
5对应每个锚框必须输出的5个基础参数:- 2个中心坐标偏移量
x、y:表示预测框中心点相对于当前所属网格单元左上角的位置偏移 - 2个宽高缩放值
w、h:表示预测框相对于匹配的先验锚框的宽高缩放比例 - 1个目标置信度(objectness score):表示当前锚框范围内存在待检测目标的概率,用来后续过滤无效负样本
- 2个中心坐标偏移量
- 动态值
classes对应你训练任务的待检测总类别数:这部分输出的是类别条件概率,也就是当确定框内存在目标时,该目标属于每一个类别的概率,有多少个检测类别就对应多少个输出值。
整体计算逻辑很简单:每个网格点对应3个锚框,每个锚框要输出5 + classes个预测结果,所以每个网格点总共要输出(classes + 5) * 3个值,卷积层的filters数必须和这个输出通道数完全匹配,不然会出现维度不匹配的运行错误。
你参考的英文结构示意图只标注了网络模块的连接关系,没有拆解检测头的输出通道维度构成,找不到对应解释是正常的。
内容的提问来源于stack exchange,提问作者ChengYao
相关产品推荐
相关产品推荐

