本文读取MMDetection v2.23.0版本的Yolov3版本。我们选择config/yolo/yolov3_d53_320_273e_coco.py作为分析对象,然后分析Mobilenet Yolo的主链。
MMDET将目标检测过程分为人类结构,并将其分为三个过程:骨干,Next和Head.Yolov3还包括三个部分:骨干,下一个和头部。其参数和计算的数量和计算数量如下。MMDET将目标检测过程分为人类结构,并将其分为三个过程:骨干,NEXT和HEAD.YOLOV3还包括三个部分:骨干,下一个和下一个和下一个和头。其参数和计算的数量和计算数量如下。
1280x800的三个通道的图像用作参数和漂浮次数的基础。
没有详细的分析,从config/yolo/yolo/yolov3_d53_320_273e_coco.py的Train_Pipeline中,图片已经通过了Miniourandomcrop的预处理操作
mmdet/型号/骨架/darknet.py
量表的输出用作后续的yolov3neck输入。
configs/yolo/yolov3_d53_mstrain-608_273e_coco.py的darknet描述如下,out_indices =(3、4、5),因此,请选择3、4和5的输出作为backbone网络的输出。
mmdetection/mmdet/型号/骨架/darknet.py.py
Darknet53中有5个CON_RES_BLOCK
在Darknet中,通常在卷积层后面进行重视。以下make_conv_res_block函数将实现此功能。3x3卷积的卷积为2,卷积层的数量等于Resblock的输入和输出通道。
/mmdet/models/backbones/darknet.py#l180 conv_res_block代码如下。
Darknet53的重新块如下。首先,通过1x1卷积,然后添加3x3卷积,然后添加。在这次重视之后,输入和输出通道的通道数和宽度不变。
Netron视觉残留结构F(X)= X + G(X)
Resblock的代码为/mmdet/models/backbones/darknet.py#l14。每个重块包含两个卷积模块。输入和输出是作为最终输出的添加。在yolov3纸中,泄漏驱动式激活层的定位,第一卷积模块的卷积核是第二个卷积的一半。第一卷积为1x1,第二个卷积为3x3。
以下红色框架部署是yolov3的颈部部分,可以被视为yolov3的简化版本。
%yolov3neck14.71 M23.909%33.89417.485%
MMDET/型号/脖子/YOLO_NECK.PY#l65的代码
Yolov3neck可以被视为FPN的简化版本。它将从Backbone网络DarkNet获得特征提取结果,并执行一些样品和系列,以适应不同的比例特别融合,并将其输出到Yolov3head
检测块由六个卷积层组成1x1xn,3x3x2n,1x1xn,3x3x2n,1x1xn,3x3x2n。第一个检测板的第一个卷积层是1x1x256。
Yolov3的头定义了实际值的编码。输出为4维张量(batch_size,5+num_classes,高度,宽度)。在本文中,num_classes = 1。
CORVS_BRIDGE6.197 M10.072%14.1777.314%CORVS_PRED0.032 M0.053%0.129Flopsyolov3head6.229 M10.125%14.3077.380%
您可以在基于基础和bboxtestmixin中同时看到yolov3head继承
mmdet/models/dense_heads/yolof_head.py#l43是yolov3head的代码。