yolov5代码解读详细版.pdf

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
yolov5代码解读(⼀) yolov5 代码解读(⼀) common.py 部分 ⾸先插⼊⼀张YOLOV5 结构图 普通卷积Conv 即图中CBL部分 class Conv(nn.Module): # Standard convolution def __init__(self, c1 , c2 , k=1, s=1, p=None, g=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups super().__init__() self.conv = nn .Conv2d(c1, c2 , k, s, autopad(k, p), groups=g, bias=False) self.bn = nn .BatchNorm2d(c2) self.act = nn .SiLU() if act is True else (act if isinstance(act, nn .Module) else nn .Identity()) def forward(self, x): return self.act(self.bn(self.conv(x))) def forward_fuse(self, x): return self.act(self.conv(x)) 深度可分离卷积DWConv 分组卷积为对输⼊feature map进⾏分组,然后每组分别卷积,即改变的是g分组部分 深度可分离卷积为分组数量等于输⼊通道数量,即每个通道作为⼀个⼩组分别进⾏卷积,结果联结作为输出,Cin = Cout = g,没有bias 项,如图中上⾯部分,Output channels作为DWCONV的输⼊,划分了输⼊通道数量相等的分组,通道之间完全没有信息流通。 class DWConv(Conv): # Depth-wise convolution class def __init__(self, c1 , c2 , k=1, s=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups super().__init__(c1, c2 , k, s, g=math.gcd(c1, c2), act=act) 跨尺度连接1—Bottleneck 图中Res unit 结构 class Bottleneck(nn.Module): # Standard bottleneck def __init__(self, c1 , c2 , shortcut=True, g=1, e=0.5): # ch_in, ch_out, shortcut, groups, expansion super().__init__() c_ = int(c2 * e) # hidden channels self.cv1 = Conv(c1, c_ , 1, 1) self.cv2 = Conv(c_, c2 , 3, 1, g=g) self.add = shortcut and c1 == c2 def forward(self, x): return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x)) 跨尺度连接2—BottleneckCSP 图中CSP1_X 结构 class BottleneckCSP(nn.Module): # CSP Bottleneck /WongKinYiu/CrossStagePartialNetworks def __init__(self, c1 , c2 , n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion super().__init__() c_ = int(c2 * e) # hidden channels self.cv1 = Conv(c1, c_ , 1, 1) self.cv2 = nn .Conv2d(c1, c_ , 1, 1, bias=False)

文档评论(0)

Rocky006 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档