ssd源码相比于caffe架构主要添加了flatten,normal,prior,detection,multibox等层,其中最重要的难点是multibox层和multibox,通过学习ssd源码可以更加深刻的了解ssd的使用原理.而源码链接为:ssd算法源码

ssd算法架构综述

本文讲解ssd源码,所以不介绍ssd的理论知识


  • ssd算法的损失函数由两部分组成:一个类别预测,一个位置的线性回归。它们对应的前向传播层能够在网络结构文件中找到norm_mbox_conf层和norm_mbox_loc层,这些层也实现了反向传播用于计算预测类别损失以及位置回归损失。

  • 通过网络结构能够发现还有一个前向传播的分支为mbox_priorbox层,奇怪的是此层没有反向传播,其实这层仅仅是计算norm_mbox_loc对应于原图的大小,有了mbox_priorbox层来获取原图的比例,norm_mbox_loc就能够通过比例来计算出所处于原图具体的什么位置了。

  • ssd中的难点理解主要是detection_output_layer和multibox_loss_layer,但是理解了multibox_loss_layer后detection_output_layer就容易理解了,因为前者比后者多出来反向传播用来计算损失函数来更新参数。

  • 其实caffe的卷积层的实现远远比multibox_loss_layer复杂,所以不要太担心学习ssd算法源码将会十分困难。

具体将在下文叙述detection_output_layer和multibox_loss_layer。

detection_output_layer层和multibox_loss_layer层的输入

找到对应的train.prototxt和deploy.prototxt文件,并且索引MultiBoxLoss和DetectionOutput,可以发现前者比后者多了一个label层的输入,可以知道两者网络结构大概相同,并且前者需要通过label层来计算损失函数更新参数


两者的公共输入为 :

  • bottom: “mbox_loc”
  • bottom: “mbox_priorbox”

区别为:

  • train: bottom: “mbox_conf”
  • deploy: bottom: “mbox_conf_flatten”

而mbox_conf_flatten是将mbox_conf进行了softmax操作后的结果。可以在train.prototxt和deploy.prototxt进行比对。

mbox_loc解析

其中mbox_loc对应为:

layer {name: "mbox_loc"type: "Concat"bottom: "conv4_3_norm_mbox_loc_flat"bottom: "fc7_mbox_loc_flat"bottom: "conv6_2_mbox_loc_flat"bottom: "conv7_2_mbox_loc_flat"bottom: "conv8_2_mbox_loc_flat"bottom: "conv9_2_mbox_loc_flat"top: "mbox_loc"concat_param {axis: 1}
}
  • 可以得知,而mbox_loc中的conv4_3_norm_mbox_loc_flat的维度为: n x (38 x 38 x 4 x 4) x 1 x 1
  • 存储的分别代表blob中的样本数(n) x 通道数© x h x w ,因为n, c, h, w默认为1,而38 x 38表示的是经过卷积后的图片大小,紧跟着的是候选框的数量为4,最后的一个4表示的是一个候选框的长宽以及中心点的x,y坐标。其他的输入层同理。
  • 而mbox_loc实现的是将第二个通道(c)合并在一起,合并后的通道含义不变(这里需发挥自己的想象理解一下)
  • 我的废话:为了更好的理解,我一般只考虑conv4_3_norm_mbox_loc_flat,然后通过类比的方法最终应用到整个mbox_loc上去(依旧需要发挥自己想象)。

mbox_conf解析

mbox_conf 对应为:

layer {name: "mbox_conf"type: "Concat"bottom: "conv4_3_norm_mbox_conf_flat"bottom: "fc7_mbox_conf_flat"bottom: "conv6_2_mbox_conf_flat"bottom: "conv7_2_mbox_conf_flat"bottom: "conv8_2_mbox_conf_flat"bottom: "conv9_2_mbox_conf_flat"top: "mbox_conf"concat_param {axis: 1}
}

同理可以知道:

  • conv4_3_norm_mbox_conf_flat为:n x (38x 38 x 4 x 2) x 1 x 1
  • 其中n为样本数,38 x 38 为卷积后图像大小,4为候选框大学,2为类别

mbox_priorbox解析

mbox_priorbox对应为:

layer {name: "mbox_priorbox"type: "Concat"bottom: "conv4_3_norm_mbox_priorbox"bottom: "fc7_mbox_priorbox"bottom: "conv6_2_mbox_priorbox"bottom: "conv7_2_mbox_priorbox"bottom: "conv8_2_mbox_priorbox"bottom: "conv9_2_mbox_priorbox"top: "mbox_priorbox"concat_param {axis: 2}
}

同理,

  • conv4_3_norm_mbox_priorbox对应为: n x 2 x (38 x 38 x 4 x 4) x 1
  • mbox_priorbox合并的是第三个通道(h),其中第二个通道©是0时是原图坐标轴,为1为相应坐标轴下的variance值,variance是为了使得位置回归训练的速度更快。

接下来,可以查看detection_output_layer层源码解析

detection_output_layer解析

Caffe框架下SSD算法源码综述相关推荐

  1. 1、SSD算法源码解读-如何进行数据增强

    文章目录 目标检测任务中数据包含的基本信息 两种类型的数据增强 Int类型图片转为float类型 去均值 将x,y,w,h转化从0-1的相对值转化为图片真实值 将x,y,w,h转化真实值转化为0-1的 ...

  2. 2022年视觉框架,增加了机器人 流程框架 多任务流程 C#源码框架,机器视觉源码框架,编程语言C#,算法使用的是halcon

    2022年最新视觉框架VM PRO 2.7版本,增加了机器人 流程框架 多任务流程 C#源码框架,机器视觉源码框架,编程语言C#,算法使用的是halcon,参考了cognex visionpro的输入 ...

  3. 2022年最新视觉框架VM PRO 2.7版本,增加了机器人 流程框架 多任务流程 C#源码框架,机器视觉源码框架,编程语言C#,算法使用的是halcon,参考了cognex visionpro的输入

    2022年最新视觉框架VM PRO 2.7版本,增加了机器人 流程框架 多任务流程 C#源码框架,机器视觉源码框架,编程语言C#,算法使用的是halcon,参考了cognex visionpro的输入 ...

  4. 超像素SLIC算法源码阅读

    超像素SLIC算法源码阅读 超像素SLIC算法源码阅读 SLIC简介 源码阅读 实验结果 其他超像素算法对比 超像素SLIC算法源码阅读 SLIC简介 SLIC的全称Simple Linear Ite ...

  5. LeGo-LOAM激光雷达定位算法源码阅读(二)

    文章目录 1.featureAssociation框架 1.1节点代码主体 1.2 FeatureAssociation构造函数 1.3 runFeatureAssociation()主体函数 2.重 ...

  6. 机器学习算法源码全解析(三)-范数规则化之核范数与规则项参数选择

    前言 参见上一篇博文,我们聊到了L0,L1和L2范数,这篇我们絮叨絮叨下核范数和规则项参数选择.知识有限,以下都是我一些浅显的看法,如果理解存在错误,希望大家不吝指正.谢谢. 机器学习算法源码全解析( ...

  7. Android-FixBug热修复框架的使用及源码分析(不发版修复bug)

    前面几篇博文已经介绍了2种热修复框架的使用及源码分析,AndFix兼容性比较好,而Dexposed Art处于Beta版. AndFix和Dexposed都是阿里的开源项目.  Alibaba-And ...

  8. 【集合框架】JDK1.8源码分析之HashMap(一)

    转载自  [集合框架]JDK1.8源码分析之HashMap(一) 一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大 ...

  9. Android Glide图片加载框架(二)源码解析之into()

    文章目录 一.前言 二.源码解析 1.into(ImageView) 2.GlideContext.buildImageViewTarget() 3.RequestBuilder.into(Targe ...

最新文章

  1. 待解决的问题--用DOS命令删除远程主机系统文件的方法
  2. Qt Creator创建一个移动应用程序
  3. JS 中判断一个对象是否为数组对象?
  4. php model db 赋值,PHP 框架 Model 层是否应该统一 DB 和 Cache
  5. 【.NET特供-第三季】ASP.NET MVC系列:传统WebForm站点和MVC站点执行机制对照
  6. 前端学习(1938)vue之电商管理系统电商系统之下拉框环境
  7. PHP框架 CI与TP之MVC比较
  8. Jenkins任务配置详解,支持ssh远程部署,maven聚合项目,springboot
  9. 查看电脑硬盘分区格式
  10. Skiplist和strcpy以及AVL/红黑树
  11. jQuery入口函数的写法
  12. ZigBee网络数据传递流程_基于ZigBee远程通信的水质监测系统设计
  13. NAT模式实现虚拟机共享主机网络
  14. ps排版html,排版教程,超详细适合初学者的排版教程(二)
  15. 计算机网络(思科)章节测试总结
  16. nrf51822+rfx2401c系统板(开源原理图、PCB)
  17. 无线路由器常用的五种工作模式详细介绍
  18. Android WebView播放视频并支持全屏
  19. CentOS升级内核版本_linux升级内核版本_Redhat升级内核版本
  20. 苹果手机上滑动会卡顿_苹果手机Safari浏览器下滑动卡顿的问题

热门文章

  1. 【2020.2.7 练习赛】 T1-瑶馨相遇-[2019河南省赛初中组](模拟)
  2. 如何爬取微博全部粉丝python_让你了解python的强大!【 登录新浪微博爬取粉丝信息】...
  3. ChatGPT 是怎样炼成的?
  4. Three.js - MapControls 地图控件
  5. artDialog学习文档
  6. 朝花夕拾——Sql语句
  7. typescript编译选项
  8. 单片机双机通信c语言实验心得,双机通讯实验报告
  9. 问题 C: 粉兔爱女装
  10. mysql select into语句_SELECT INTO语句介绍