YoloV3 FPN、Head
先总览一下Yolov3模型结构(主干网络为Darknet53,左侧虚线框内)
FPN、Yolo Head
- FPN特征金字塔进行加强特征提取,主要解决的是物体检测中的多尺度问题。
- Yolo Head本质上是一次3x3卷积加上一次1x1卷积,3x3卷积的作用是特征整合,1x1卷积的作用是调整通道数。
- 下面是对应onnx的网络结构,我选取几个关键的点进行示意,其他两个点也是类似的结构(需要注意的是在下面图片中BN被融合到Conv):
- 对应的代码实现:
#------------------------------------------------------------------------#
# make_last_layers里面一共有七个卷积,前五个用于提取特征(如上图:F1部分)。
# 后两个用于获得yolo网络的预测结果(如上图YH1部分)
#------------------------------------------------------------------------#
def make_last_layers(filters_list, in_filters, out_filter):
m = nn.Sequential(
conv2d(in_filters, filters_list[0], 1),
conv2d(filters_list[0], filters_list[1], 3),
conv2d(filters_list[1], filters_list[0], 1),
conv2d(filters_list[0], filters_list[1], 3),
conv2d(filters_list[1], filters_list[0], 1),
conv2d(filters_list[0], filters_list[1], 3),
nn.Conv2d(filters_list[1], out_filter, kernel_size=1, stride=1, padding=0, bias=True)
)
return m