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. 绝对布局优势_遇上狭长型卫生间基本没救?2种布局教会你,什么叫美观实用兼具...
  2. 广东省“安网2016”网络安全专项治理行动正式启动
  3. python的结构_Python结构的选择,python,之
  4. ☆聊聊Spring系列_Index
  5. 从源码深处体验Spring核心技术--基于Xml的IOC容器的初始化
  6. MySQL Encryption and Compression Functions(加密)
  7. 海量数据库解决方案2011022101
  8. 程序生成30道四则运算(包括整数和真分数)
  9. 6.3 API : XGBoost
  10. System Toolkit for Mac(系统维护工具)
  11. 简单版WAF代码学习
  12. 浏览器升级提示网站:《快乐浏览》
  13. 电子计算机的基本概念简述
  14. HDU 1275 两车追及或相遇问题(相遇和追及公式)
  15. spyglass CDC方法学
  16. 凸包问题-Graham 算法
  17. 企业管理的智能化趋势
  18. 我谈“孙宇晨拍天价午餐”
  19. 又一所985大学改考408!中国海洋大学计算机专硕
  20. UVaOJ 11205 - The broken pedometer

热门文章

  1. WinHex显示的数据不完整, Size not a multiple of 512. Imcomplete image。的问题解决
  2. sql中pivot函数的使用
  3. 调用l2行情数据api接口如何做?
  4. 字典 | springboot 返回数据字典翻译
  5. 哦买嘎,我没有积分啊!
  6. 去除 字符串中空格/回车
  7. 今日话题:京东百亿收购1号店,能够与阿里对抗吗?
  8. 通过PyTorch构建的LeNet-5网络对手写数字进行训练和识别
  9. 就业信息追踪|基于Springboot+Vue开发实现就业信息追踪系统
  10. 赛力斯遭东风集团减持:套现10亿 前者获政府补助3亿