小武与SSD与pytorch-尝试手撕代码

本文介绍了SSD(Single Shot MultiBox Detector)在PyTorch中的实现,通过分析代码理解其网络结构。文章详细阐述了VGG网络、extra_layers以及multibox的设计,并解释了如何利用nn.Module构建神经网络。通过代码的for循环结构,展示了如何简洁地定义和连接网络层。此外,还讨论了forward方法和load_weights在模型中的作用,以及位置信息和类别信息的预测过程。
摘要由CSDN通过智能技术生成

参考连接:
https://zhuanlan.zhihu.com/p/33544892
https://zhuanlan.zhihu.com/p/31427288
知乎说的还是不错的、

SSD作为one-stage 和 two-stage结合的方法
先post上SSD的流程图:

在这里插入图片描述

代码的实现部分:核心还是数据流:

我们跟着一张图如何走的形态,走下去看看每一步都会发生什么。同时也通过该代码学习下如何用pytorch搭建自己的网络。

开头的nn.module,torch.nn是专门为神经网络设计的模块化接口。nn构建于autograd之上,可以用来定义和运行神经网络。nn.Module是nn中十分重要的类,包含网络各层的定义及forward方法。

代码总体结构

代码的总体结构:先定义了multibox的方法,将vgg和add_extras 放入到multibox中进行处理得到新的vgg基本网络和新的额外的网络同时生成处理置信度和处理位置逻辑回顾的网络。最后一起放入到大的网络中,将刚刚生成这些网络,进行融合,并且加入了前向传播。最后是在其他部分直接调用了build_sad的方法。

    base = {
    '300': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'C', 512, 512, 512, 'M',
            512, 512, 512],
    '512': [],
}
extras = {
    '300': [256, 'S', 512, 128, 'S', 256, 128, 256, 128, 256],
    '512': [],
}
mbox = {
    '300': [4, 6, 6, 6, 4, 4],  # number of boxes per feature map location
    '512': [],
}
    def build_ssd(phase, size=300, num_classes=21):
        if phase != "test" and phase != "train":
            print("ERROR: Phase: " + phase + " not recognized")
            return
        if size != 300:
            print("ERROR: You specified size " + repr(size) + ". However, " +
                  "currently only SSD300 (size=300) is supported!")
            return
        base_, extras_, head_ = multibox(vgg(base[str(size)], 3),
                                         add_extras(extras[str(size)], 1024),
                                         mbox[str(size)], num_classes)
                                          #融合到了multibox中给出对应的vgg,extral_layer,还有生成处理置信度和处理位置逻辑回顾的网络。最后将这些放到了SSD的总体网络中。我们这里使用了SSD300 所以size是300
        return SSD(phase, size, base_, extras_, head_, num_classes)

mutilbox部分(VGG分析,extra_layer分析)

所以我们先看看multibox,这里会生成一系列我们需要的结构:可以看到输入部分有vgg和extra_layers 还有其他的参数。我们会结合extral_layer和vgg来看看.从VGG的搭建来看和上图的模型是符合的。Conv4-3后讲全连接层替换成了33和11的卷积网络,其中conv6加了dilation=6.

来自知乎的解释:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值