Yolov3-tiny训练报convolutional层与yolo层参数不匹配错误求助
问题解决方案
报错含义:[convolutional]层配置的filters参数与[yolo]层的classes或mask参数不匹配。
你当前的filters参数计算是正确的(单类别场景下(1+5)*3=18),报错根源是所有size=1的卷积层pad参数设置错误:卷积核大小为1时不需要额外填充,pad设为1会改变特征图尺寸,导致yolo层输入维度不匹配。
具体修改步骤
修改cfg文件中以下4个卷积层的pad参数为0即可:
- 第一个yolo层前的1x1卷积
# 修改前 [convolutional] batch_normalize=1 filters=256 size=1 stride=1 pad=1 activation=leaky # 修改后 [convolutional] batch_normalize=1 filters=256 size=1 stride=1 pad=0 activation=leaky
- 第一个yolo层正上方的输出卷积层
# 修改前 [convolutional] size=1 stride=1 pad=1 filters=18 activation=linear # 修改后 [convolutional] size=1 stride=1 pad=0 filters=18 activation=linear
- route层后的1x1卷积
# 修改前 [convolutional] batch_normalize=1 filters=128 size=1 stride=1 pad=1 activation=leaky # 修改后 [convolutional] batch_normalize=1 filters=128 size=1 stride=1 pad=0 activation=leaky
- 第二个yolo层正上方的输出卷积层
# 修改前 [convolutional] size=1 stride=1 pad=1 filters=18 activation=linear # 修改后 [convolutional] size=1 stride=1 pad=0 filters=18 activation=linear
后续调整规则
如果后续修改训练类别数,直接按公式 filters = (类别数 + 5) * 3 修改两个输出卷积层的filters值即可,其他参数不用变动。如果修改配置后仍报错,确认你加载的是yolov3-tiny对应的预训练权重,不要误用yolov3完整版的权重。
内容的提问来源于stack exchange,提问作者Yan Ming
相关产品推荐
相关产品推荐

