最近在做课题用到了YOLOv3,之前在B站听bulingbuling大神讲的课收益颇丰,所以用的代码依然选择了bulingbuling的,先说说总体的感受吧,代码结构清晰,阅读起来非常方便,而且代码中已经有了很多注释,整体的逻辑就更加明朗,本人为了更加深刻理解代码,同时也为了备份,在大神注释的基础上进行添砖加瓦,解释错误的地方请各路大神多多指正。
本篇文章主要讲解yolov3中的darknet.py文件!
import math
from collections import OrderedDict
import torch.nn as nn
#---------------------------------------------------------------------#
# 残差结构
# 利用一个1x1卷积下降通道数,然后利用一个3x3卷积提取特征并且上升通道数
# 最后接上一个残差边
首先对残差边进行了类定义,残差边中包含包含了两个卷积层,其中一个大小1*1,另外一个大小为3*3,
两个卷积层步长均为1,采用的是LeakyRelu函数
#---------------------------------------------------------------------#
class BasicBlock(nn.Module):
def __init__(self, inplanes, planes):
super(BasicBlock, self).__init__()
self.conv1 = nn.Conv2d(inplanes, planes[0], kernel_size=1, stride=1, padding=0, bias=False)
self.bn1 = nn.Bat