论文名称:YOLOv3: An Incremental Improvement
论文下载地址: https://arxiv.org/abs/1804.02767
代码仓库地址:YOLOv3 SPP网络代码仓库(Pytorch版)
参考仓库地址:keras-yolo3
参考视频:
\quad YOLO系列理论视频合集
\quad YOLOv3 SPP网络源码讲解(Pytorch版)
yolo 格式:
我用 netron 可视化了网络,图像太长,我放在了文章的最后 (最最后,还附有用 pycharm 输出的网络模型)
网络最后的输出 (以 pascal voc 为例, 有20个类别):
1)若原图像尺寸为 512×512512 \times 512512×512 ,网络的3个尺度输出分别为(16, 16, 75), (32, 32, 75), (64, 64, 75)
2)若原图像尺寸为 416×416416 \times 416416×416 ,网络的3个尺度输出分别为(13, 13, 75), (26, 26, 75), (52, 52, 75)
3个尺度表示 原图被缩减了 8倍, 16倍, 32倍
75 表示 4个坐标信息(center_x, center_y, weight, height) + 1个置信度信息 + 20个类别的概率
图片来源于:霹雳吧啦Wz 的bilibili视频讲解
注意 pad 的取值规则:pad=1 表示 padding模式为same, 即 padding=kernel_size//2 ;; pad=0 表示不添加padding
将上一层的输出与 第 -3 层的输出进行 跨层连接,也就是 add 操作,需要保证 上一层的输出与 第-3层的输出的 尺寸完全一样。
默认: padding = (kernel_size) // 2
a、layers 只有一个值, 比如 layers=-2。 表示返回到 第-2层,或者说指向 第-2层, 后面的操作会在 第-2层的基础上继续
b、layers 有多个值, 比如 layer = -1, -3, -5, -6。 表示 拼接(concatnate) 第 -1, -3, -5, -6 层
classes 表示类别数, COCO 数据集的类别数为80, PASCAL VOC 类别为20
mask 是 anchors 的索引,指明用哪几个 anchors, 比如 mask=0, 1, 2, 表示使用 前3个anchors
anchors 表示 anchor 的尺寸,一共生成3个尺度的检测输出, 每个尺度的分别有 3个尺寸的 anchor。
netron 可视化 网络结构
** 如下,WeightedFeatureFusion 就是 shortcut;\quad FeatureConcat 就是 concatenate
ModuleList((0): Sequential((Conv2d): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(1): Sequential((Conv2d): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(2): Sequential((Conv2d): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(3): Sequential((Conv2d): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(4): WeightedFeatureFusion()(5): Sequential((Conv2d): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(6): Sequential((Conv2d): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(7): Sequential((Conv2d): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(8): WeightedFeatureFusion()(9): Sequential((Conv2d): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(10): Sequential((Conv2d): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(11): WeightedFeatureFusion()(12): Sequential((Conv2d): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(13): Sequential((Conv2d): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(14): Sequential((Conv2d): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(15): WeightedFeatureFusion()(16): Sequential((Conv2d): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(17): Sequential((Conv2d): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(18): WeightedFeatureFusion()(19): Sequential((Conv2d): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(20): Sequential((Conv2d): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(21): WeightedFeatureFusion()(22): Sequential((Conv2d): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(23): Sequential((Conv2d): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(24): WeightedFeatureFusion()(25): Sequential((Conv2d): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(26): Sequential((Conv2d): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(27): WeightedFeatureFusion()(28): Sequential((Conv2d): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(29): Sequential((Conv2d): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(30): WeightedFeatureFusion()(31): Sequential((Conv2d): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(32): Sequential((Conv2d): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(33): WeightedFeatureFusion()(34): Sequential((Conv2d): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(35): Sequential((Conv2d): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(36): WeightedFeatureFusion()(37): Sequential((Conv2d): Conv2d(256, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(38): Sequential((Conv2d): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(39): Sequential((Conv2d): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(40): WeightedFeatureFusion()(41): Sequential((Conv2d): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(42): Sequential((Conv2d): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(43): WeightedFeatureFusion()(44): Sequential((Conv2d): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(45): Sequential((Conv2d): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(46): WeightedFeatureFusion()(47): Sequential((Conv2d): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(48): Sequential((Conv2d): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(49): WeightedFeatureFusion()(50): Sequential((Conv2d): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(51): Sequential((Conv2d): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(52): WeightedFeatureFusion()(53): Sequential((Conv2d): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(54): Sequential((Conv2d): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(55): WeightedFeatureFusion()(56): Sequential((Conv2d): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(57): Sequential((Conv2d): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(58): WeightedFeatureFusion()(59): Sequential((Conv2d): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(60): Sequential((Conv2d): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(61): WeightedFeatureFusion()(62): Sequential((Conv2d): Conv2d(512, 1024, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(63): Sequential((Conv2d): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(64): Sequential((Conv2d): Conv2d(512, 1024, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(65): WeightedFeatureFusion()(66): Sequential((Conv2d): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(67): Sequential((Conv2d): Conv2d(512, 1024, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(68): WeightedFeatureFusion()(69): Sequential((Conv2d): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(70): Sequential((Conv2d): Conv2d(512, 1024, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(71): WeightedFeatureFusion()(72): Sequential((Conv2d): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(73): Sequential((Conv2d): Conv2d(512, 1024, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(74): WeightedFeatureFusion()(75): Sequential((Conv2d): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(76): Sequential((Conv2d): Conv2d(512, 1024, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(77): Sequential((Conv2d): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(78): MaxPool2d(kernel_size=5, stride=1, padding=2, dilation=1, ceil_mode=False)(79): FeatureConcat()(80): MaxPool2d(kernel_size=9, stride=1, padding=4, dilation=1, ceil_mode=False)(81): FeatureConcat()(82): MaxPool2d(kernel_size=13, stride=1, padding=6, dilation=1, ceil_mode=False)(83): FeatureConcat()(84): Sequential((Conv2d): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(85): Sequential((Conv2d): Conv2d(512, 1024, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(86): Sequential((Conv2d): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(87): Sequential((Conv2d): Conv2d(512, 1024, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(88): Sequential((Conv2d): Conv2d(1024, 75, kernel_size=(1, 1), stride=(1, 1)))(89): YOLOLayer()(90): FeatureConcat()(91): Sequential((Conv2d): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(92): Upsample(scale_factor=2.0, mode=nearest)(93): FeatureConcat()(94): Sequential((Conv2d): Conv2d(768, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(95): Sequential((Conv2d): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(96): Sequential((Conv2d): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(97): Sequential((Conv2d): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(98): Sequential((Conv2d): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(99): Sequential((Conv2d): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(100): Sequential((Conv2d): Conv2d(512, 75, kernel_size=(1, 1), stride=(1, 1)))(101): YOLOLayer()(102): FeatureConcat()(103): Sequential((Conv2d): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(104): Upsample(scale_factor=2.0, mode=nearest)(105): FeatureConcat()(106): Sequential((Conv2d): Conv2d(384, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(107): Sequential((Conv2d): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(108): Sequential((Conv2d): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(109): Sequential((Conv2d): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(110): Sequential((Conv2d): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(111): Sequential((Conv2d): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(BatchNorm2d): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(activation): LeakyReLU(negative_slope=0.1, inplace=True))(112): Sequential((Conv2d): Conv2d(256, 75, kernel_size=(1, 1), stride=(1, 1)))(113): YOLOLayer()
)
上一篇:淮河能源:公司无应披露未披露信息