打印调试得出
NanoDetPlus(
(backbone): ShuffleNetV2(
(conv1): Sequential(
(0): Conv2d(3, 24, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
(1): BatchNorm2d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
(maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)
(stage2): Sequential(
(0): ShuffleV2Block(
(branch1): Sequential(
(0): Conv2d(24, 24, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=24, bias=False)
(1): BatchNorm2d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(24, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(4): LeakyReLU(negative_slope=0.1, inplace=True)
)
(branch2): Sequential(
(0): Conv2d(24, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(58, 58, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=58, bias=False)
(4): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(1): ShuffleV2Block(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(58, 58, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=58, bias=False)
(4): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(2): ShuffleV2Block(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(58, 58, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=58, bias=False)
(4): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(3): ShuffleV2Block(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(58, 58, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=58, bias=False)
(4): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(58, 58, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(58, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
)
(stage3): Sequential(
(0): ShuffleV2Block(
(branch1): Sequential(
(0): Conv2d(116, 116, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=116, bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(4): LeakyReLU(negative_slope=0.1, inplace=True)
)
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(1): ShuffleV2Block(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(2): ShuffleV2Block(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(3): ShuffleV2Block(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(4): ShuffleV2Block(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(5): ShuffleV2Block(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(6): ShuffleV2Block(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(7): ShuffleV2Block(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(116, 116, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=116, bias=False)
(4): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(116, 116, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(116, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
)
(stage4): Sequential(
(0): ShuffleV2Block(
(branch1): Sequential(
(0): Conv2d(232, 232, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=232, bias=False)
(1): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(4): LeakyReLU(negative_slope=0.1, inplace=True)
)
(branch2): Sequential(
(0): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(232, 232, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=232, bias=False)
(4): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(1): ShuffleV2Block(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(232, 232, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=232, bias=False)
(4): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(2): ShuffleV2Block(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(232, 232, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=232, bias=False)
(4): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(3): ShuffleV2Block(
(branch1): Sequential()
(branch2): Sequential(
(0): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
(3): Conv2d(232, 232, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=232, bias=False)
(4): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(5): Conv2d(232, 232, kernel_size=(1, 1), stride=(1, 1), bias=False)
(6): BatchNorm2d(232, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(7): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
)
)
(fpn): GhostPAN(
(upsample): Upsample(scale_factor=2.0, mode=bilinear)
(reduce_layers): ModuleList(
(0): ConvModule(
(conv): Conv2d(116, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(1): ConvModule(
(conv): Conv2d(232, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(2): ConvModule(
(conv): Conv2d(464, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(top_down_blocks): ModuleList(
(0): GhostBlocks(
(blocks): Sequential(
(0): GhostBottleneck(
(ghost1): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(192, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(ghost2): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(96, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
)
(shortcut): Sequential(
(0): Conv2d(192, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=192, bias=False)
(1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(192, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
)
)
(1): GhostBlocks(
(blocks): Sequential(
(0): GhostBottleneck(
(ghost1): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(192, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(ghost2): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(96, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
)
(shortcut): Sequential(
(0): Conv2d(192, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=192, bias=False)
(1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(192, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
)
)
)
(downsamples): ModuleList(
(0): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(2, 2), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(1): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(2, 2), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(bottom_up_blocks): ModuleList(
(0): GhostBlocks(
(blocks): Sequential(
(0): GhostBottleneck(
(ghost1): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(192, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(ghost2): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(96, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
)
(shortcut): Sequential(
(0): Conv2d(192, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=192, bias=False)
(1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(192, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
)
)
(1): GhostBlocks(
(blocks): Sequential(
(0): GhostBottleneck(
(ghost1): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(192, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(ghost2): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(96, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
)
(shortcut): Sequential(
(0): Conv2d(192, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=192, bias=False)
(1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(192, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
)
)
)
(extra_lvl_in_conv): ModuleList(
(0): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(2, 2), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(extra_lvl_out_conv): ModuleList(
(0): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(2, 2), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
)
(head): NanoDetPlusHead(
(distribution_project): Integral()
(loss_qfl): QualityFocalLoss()
(loss_dfl): DistributionFocalLoss()
(loss_bbox): GIoULoss()
(cls_convs): ModuleList(
(0): ModuleList(
(0): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(1): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(1): ModuleList(
(0): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(1): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(2): ModuleList(
(0): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(1): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(3): ModuleList(
(0): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(1): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
)
(gfl_cls): ModuleList(
(0): Conv2d(96, 52, kernel_size=(1, 1), stride=(1, 1))
(1): Conv2d(96, 52, kernel_size=(1, 1), stride=(1, 1))
(2): Conv2d(96, 52, kernel_size=(1, 1), stride=(1, 1))
(3): Conv2d(96, 52, kernel_size=(1, 1), stride=(1, 1))
)
)
(aux_fpn): GhostPAN(
(upsample): Upsample(scale_factor=2.0, mode=bilinear)
(reduce_layers): ModuleList(
(0): ConvModule(
(conv): Conv2d(116, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(1): ConvModule(
(conv): Conv2d(232, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(2): ConvModule(
(conv): Conv2d(464, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(top_down_blocks): ModuleList(
(0): GhostBlocks(
(blocks): Sequential(
(0): GhostBottleneck(
(ghost1): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(192, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(ghost2): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(96, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
)
(shortcut): Sequential(
(0): Conv2d(192, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=192, bias=False)
(1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(192, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
)
)
(1): GhostBlocks(
(blocks): Sequential(
(0): GhostBottleneck(
(ghost1): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(192, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(ghost2): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(96, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
)
(shortcut): Sequential(
(0): Conv2d(192, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=192, bias=False)
(1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(192, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
)
)
)
(downsamples): ModuleList(
(0): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(2, 2), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(1): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(2, 2), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(bottom_up_blocks): ModuleList(
(0): GhostBlocks(
(blocks): Sequential(
(0): GhostBottleneck(
(ghost1): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(192, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(ghost2): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(96, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
)
(shortcut): Sequential(
(0): Conv2d(192, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=192, bias=False)
(1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(192, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
)
)
(1): GhostBlocks(
(blocks): Sequential(
(0): GhostBottleneck(
(ghost1): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(192, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(ghost2): GhostModule(
(primary_conv): Sequential(
(0): Conv2d(96, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
(cheap_operation): Sequential(
(0): Conv2d(48, 48, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=48, bias=False)
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Sequential()
)
)
(shortcut): Sequential(
(0): Conv2d(192, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2), groups=192, bias=False)
(1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(2): Conv2d(192, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
)
)
)
)
)
(extra_lvl_in_conv): ModuleList(
(0): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(2, 2), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(extra_lvl_out_conv): ModuleList(
(0): DepthwiseConvModule(
(depthwise): Conv2d(96, 96, kernel_size=(5, 5), stride=(2, 2), padding=(2, 2), groups=96, bias=False)
(pointwise): Conv2d(96, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
(dwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(pwnorm): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
)
(aux_head): SimpleConvHead(
(relu): ReLU(inplace=True)
(cls_convs): ModuleList(
(0): ConvModule(
(conv): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(gn): GroupNorm(32, 192, eps=1e-05, affine=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(1): ConvModule(
(conv): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(gn): GroupNorm(32, 192, eps=1e-05, affine=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(2): ConvModule(
(conv): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(gn): GroupNorm(32, 192, eps=1e-05, affine=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(3): ConvModule(
(conv): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(gn): GroupNorm(32, 192, eps=1e-05, affine=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(reg_convs): ModuleList(
(0): ConvModule(
(conv): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(gn): GroupNorm(32, 192, eps=1e-05, affine=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(1): ConvModule(
(conv): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(gn): GroupNorm(32, 192, eps=1e-05, affine=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(2): ConvModule(
(conv): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(gn): GroupNorm(32, 192, eps=1e-05, affine=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
(3): ConvModule(
(conv): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(gn): GroupNorm(32, 192, eps=1e-05, affine=True)
(act): LeakyReLU(negative_slope=0.1, inplace=True)
)
)
(gfl_cls): Conv2d(192, 20, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(gfl_reg): Conv2d(192, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(scales): ModuleList(
(0): Scale()
(1): Scale()
(2): Scale()
(3): Scale()
)
)
)