博客链接 网络结构图最中间下面batch_size应该13×13×512
视频链接
特征金字塔:进行多尺度特征融合,提取出更有效的特征。典型例子yolov3。
先验框调整过程,中心由左上角往右下角区域调整(绘图原点原因造成图片显示是往右上角调整),同时先验框宽高也在调整。
- darknet.py:主干网络构建,定义残差结构,通过循环构建darknet主干提取网络,返回底部三个特征层 52×52×256、26×26×512、13×13×024。
- yolo3.py:主要是yolobody网络构建,通过七次卷积获得最终三个特征层(注意进行七次卷积的位置),五次卷积后的结果再卷积、上采样、cat。
- utils.py文件中DecodeBox解码:利用网络预测结果对先验框进行调整的过程。将anchor调整为适应不同特征层(通过计算得出先验框宽高,与后面预测wh结合调整为预测框)、获得先验框中心(网格左上角)、与预测xy结合调整中心位置、预测框通过比例返回到原始图片上、得到物体置信度和种类置信度。
- yolo.py里的YOLO(object):创建模型、加载权重、CUDA是否使用、图片加灰条、解码得到预测框、NMS、去灰条、画框。
- yolo_training.py中的YOLOLoss(nn.Module):(在训练的main函数中分三次计算)。通过prediction计算出先验框与预测框的xywh调整参数、物体置信度、种类置信度。通过get_target得到xywh、物体和种类置信度的真实调整值。并通过get_ignore把预测结果和真实结果iou大的去掉,方便网络训练。最后计算不同损失并求出总损失。
- yolo_training.py中的get_target函数:利用真实框和先验框计算交并比,找到哪些先验框内部包含物体。get_ignore函数将预测结果进行解码,判断预测结果和真实值的重合程度,如果重合程度过大则忽略,因为这些特征点属于预测比较准确的特征点,作为负样本不合适。
- class Generator(object):数据生成器。