原理

ssd采用的是VGG16的特征提取,在vgg16中提取二个特征图,之后又通过额外的增加卷积操作再次提取四个特征图,一共6个特征图。

前半部分是vgg-16的架构,作者在vgg-16的层次上,将vgg-16后边两层的全连接层(fc6,fc7)变换为了卷积层,conv7之后的层则是作者自己添加的识别层。

在conv4_3层,有一层Classifier层,使用一层(3,3,(4*(Classes+4)))卷积进行卷积(Classes是识别的物体的种类数,代表的是每一个物体的得分,4为x,y,w,h坐标,乘号前边的4为default box的数量),这一层的卷积则是提取出feature map,不仅在conv4_3这有一层卷积,在Conv7、Conv8_2、Conv9_2、Conv10_2和Conv11_2都有一层这样的卷积层,因此最后提取到6个feature map层。

最后的 Detections:8732 per Class 具体的计算如下:

  Conv4_3  得到的feature map大小为38*38:38*38*4 = 5776

  Conv7      得到的feature map大小为19*19:19*19*6 = 2166

  Conv8_2  得到的feature map大小为10*10:10*10*6 = 600

  Conv9_2  得到的feature map大小为5 * 5  :5 * 5 * 6 = 150

  Conv10_2得到的feature map大小为3 * 3  :3 * 3 * 4 = 36

  Conv11_2得到的feature map大小为1 * 1  :1 * 1 * 4 = 4

  最后结果为:8732(乘以4或者6,这个是default box数量)

  那么ssd则是在这8732个结果中找到识别的物体。

ssd 用于目标检测,重点之一是目标框的生成,多尺度的融合。

代码实现

# Single Shot Multibox Detecor import torch
import torch.nn as nn
import torchvision
import torch.nn.init as init
import torch.nn.functional as F
from torch.autograd import Variable
from math import sqrt as sqrt
from itertools import productbase = {'300': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'C',512, 512, 512, 'M', 512, 512, 512],'512': []
}def vgg(cfg, i, batch_norm=False):layers = []in_channels = ifor v in cfg:  # 构建几层网络if v == 'M':layers += [nn.MaxPool2d(2, 2)]elif v == 'C':layers += [nn.MaxPool2d(2, 2, ceil_mode=True)]# ceil_mode,默认为False(地板模式),剩余数据不足kernel_size大小时,直接舍弃。# 为True时是天花板模式,将保存不足为kernel_size大小的数据保存,自动补足NAN至kernel_size大小。else:conv2d = nn.Conv2d(in_channels, v, 3, 1, 1)if batch_norm:layers += [conv2d, nn.BatchNorm2d(v), nn.ReLU(True)]else:layers += [conv2d, nn.ReLU(inplace=True)]in_channels = v  # 更新ipool5 = nn.MaxPool2d(3, 1, 1)conv6 = nn.Conv2d(512, 1024, 3, padding=6, dilation=6)conv7 = nn.Conv2d(1024, 1024, 1)layers += [pool5, conv6, nn.ReLU(True), conv7, nn.ReLU(True)]return layersextral = {'300': [256, 'S', 512, 128, 'S', 256, 128, 256, 128, 256],'512': [],
}def add_extral(cfg, i, batch_norm=False):layers = []in_channels = iflag = Falsefor k, v in enumerate(cfg):if in_channels != 'S':if v == 'S':layers += [nn.Conv2d(in_channels, cfg[k+1],kernel_size=(1, 3)[flag], stride=2, padding=1)]else:layers += [nn.Conv2d(in_channels, v, (1, 3)[flag])]flag = not flagin_channels = vreturn layersif __name__ == "__main__":layers = vgg(base['300'], 3)print(nn.Sequential(*layers))x = torch.rand(1, 3, 38, 38)for i, layer in enumerate(layers):x = layer(x)print(layer)print(x.shape)add_layer = add_extral(extral['300'], 1024)print(nn.Sequential(*add_layer))x = torch.rand(1, 1024, 19, 19)for k, v in enumerate(add_layer):x = F.relu(v(x), inplace=True)print(x.shape)

参考文章:

pytorch 实现SSD详细理解 (一)vgg和特征图的提取_视觉盛宴的博客-CSDN博客_pytorch vgg提取特征

pytorch 实现SSD详细理解 (二)ssd网络_视觉盛宴的博客-CSDN博客

ssd算法的pytorch实现与解读_a14780429533的博客-CSDN博客

ssd算法论文理解 - 那年盛夏 - 博客园

Pytorch池化层Maxpool2d中ceil_mode参数_seungribariumgd的博客-CSDN博客

pytorch 实现SSD详细理解 (三)loss的定义和训练_视觉盛宴的博客-CSDN博客

经典神经网络 -- SSD : 设计原理与pytorch实现相关推荐

  1. 经典滤波器的设计原理

    前言 想写一篇文章,包含经典滤波器的万象. 1.滤波器基础知识 总的来说,滤波器可分为经典滤波器和现代滤波器两大类.经典滤波器是假定输入信号x(n)中的有用成分和希望去除的成分各自占有不同的频带.这样 ...

  2. 深度解析LSTM神经网络的设计原理

    引人入胜的开篇: 想要搞清楚LSTM中的每个公式的每个细节为什么是这样子设计吗?想知道simple RNN是如何一步步的走向了LSTM吗?觉得LSTM的工作机制看不透?恭喜你打开了正确的文章! 前方核 ...

  3. 神经网络处理器设计原理,神经网络控制系统设计

    谷歌发布tpu研究论文,神经网络专用处理器是怎样炼成的 TPU的需求大约真正出现在6年之前,那时我们在所有产品之中越来越多的地方已开始使用消耗大量计算资源的深度学习模型:昂贵的计算令人担忧. 假如存在 ...

  4. 【 卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10)】

    卷积神经网络CNN 数学原理分析与源码详解 深度学习 Pytorch笔记 B站刘二大人(9/10) 本章主要进行卷积神经网络的相关数学原理和pytorch的对应模块进行推导分析 代码也是通过demo实 ...

  5. 《不只是美:信息图表设计原理与经典案例》—— 2.5 功能限制形式

    本节书摘来异步社区<不只是美:信息图表设计原理与经典案例>一书中的第2章,第2.5节,作者:[美]Alberto Cairo,更多章节内容可以访问云栖社区"异步社区"公 ...

  6. PrivacyIN Week2 | 张宇鹏博导开讲经典零知识证明协议设计原理

    前言 隐私研究院[PrivacyIN]第一期ZK训练营课程精讲内容上线,本期课堂邀请到美国德州农工大学(Texas A&M University)计算机科学与工程学院的助理教授张宇鹏,主要介绍 ...

  7. 《不只是美:信息图表设计原理与经典案例》—— 第2章 形式与功能:可视是一种技术...

    本节书摘来异步社区<不只是美:信息图表设计原理与经典案例>一书中的第2章,作者:[美]Alberto Cairo,更多章节内容可以访问云栖社区"异步社区"公众号查看. ...

  8. 《不只是美:信息图表设计原理与经典案例》—— 1.1 理性乐观派观派

    本节书摘来异步社区<不只是美:信息图表设计原理与经典案例>一书中的第1章,第1.1节,作者:[美]Alberto Cairo,更多章节内容可以访问云栖社区"异步社区"公 ...

  9. 经典神经网络论文超详细解读(三)——GoogLeNet InceptionV1学习笔记(翻译+精读+代码复现)

    前言 在上一期中介绍了VGG,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而今天要介绍的就是同年分类任务的第一名--GoogLeNet . 作为2014年Ima ...

  10. 深度学习入门笔记(二十):经典神经网络(LeNet-5、AlexNet和VGGNet)

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

最新文章

  1. HTTP和SOAP完全就是两个不同的协议
  2. 分布式消息通信ActiveMQ原理-持久化策略-笔记
  3. 物联网成果初显但瓶颈犹存
  4. 计算字符串的实际长度
  5. oracle 叠加代码写法,利用st_geometry进行图形叠加分析
  6. Bootstrap 4:如何使顶部固定的Navbar保持在容器中而不拉伸?
  7. 山寨一个ini文件的解析器
  8. uinty粒子系统子物体变大_新Unity 最新粒子系统如何用代码改变参数
  9. android tabhost 生命周期,FragmentTabHost + FragmentLayout布局框架,Fragment生命周期
  10. 使用oradebug来获取跟踪文件的位置
  11. 智能优化算法应用:基于GWO优化的最小交叉熵图像多阈值分割 - 附代码
  12. 天津麒麟正式更名为麒麟软件
  13. scikit-learn的高级介绍
  14. ZigBee技术[转]
  15. 使用天平只用3次求出12个球中的次品球并确认轻重
  16. 【2023计算机考研】双非院校录取分数线汇总
  17. 【Lilishop商城】No4-1.业务逻辑的代码开发,涉及到:会员B端第三方登录使用及后端接口(微信、QQ等)
  18. 代数,几何及微积分之间的关系
  19. 人工智能给敏捷项目管理带来的九大好处
  20. 记一次服务器“挖矿“处理

热门文章

  1. 类成员指针——偏移量
  2. 任意半径中值滤波(扩展至百分比滤波器)O(1)时间复杂度算法的原理、实现及效果。
  3. 读取图像中任意点的像素值
  4. 【OpenCV学习笔记】【函数学习】十(常用的OpenCV函数汇总说明)
  5. 智能优化算法:动物迁徙优化算法-附代码
  6. 智能优化算法应用:基于麻雀搜索算法无线传感器网络(WSN)覆盖优化 - 附代码
  7. 从零基础入门Tensorflow2.0 ----七、33 数据padding,模型构建,训练
  8. Fragstats 4.2 批处理(geotiff格式)
  9. 第五章——Pytorch中常用的工具
  10. 机器学习第三回——logistic回归算法