Caffe框架下SSD算法源码综述
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、SSD算法源码解读-如何进行数据增强
文章目录 目标检测任务中数据包含的基本信息 两种类型的数据增强 Int类型图片转为float类型 去均值 将x,y,w,h转化从0-1的相对值转化为图片真实值 将x,y,w,h转化真实值转化为0-1的 ...
- 2022年视觉框架,增加了机器人 流程框架 多任务流程 C#源码框架,机器视觉源码框架,编程语言C#,算法使用的是halcon
2022年最新视觉框架VM PRO 2.7版本,增加了机器人 流程框架 多任务流程 C#源码框架,机器视觉源码框架,编程语言C#,算法使用的是halcon,参考了cognex visionpro的输入 ...
- 2022年最新视觉框架VM PRO 2.7版本,增加了机器人 流程框架 多任务流程 C#源码框架,机器视觉源码框架,编程语言C#,算法使用的是halcon,参考了cognex visionpro的输入
2022年最新视觉框架VM PRO 2.7版本,增加了机器人 流程框架 多任务流程 C#源码框架,机器视觉源码框架,编程语言C#,算法使用的是halcon,参考了cognex visionpro的输入 ...
- 超像素SLIC算法源码阅读
超像素SLIC算法源码阅读 超像素SLIC算法源码阅读 SLIC简介 源码阅读 实验结果 其他超像素算法对比 超像素SLIC算法源码阅读 SLIC简介 SLIC的全称Simple Linear Ite ...
- LeGo-LOAM激光雷达定位算法源码阅读(二)
文章目录 1.featureAssociation框架 1.1节点代码主体 1.2 FeatureAssociation构造函数 1.3 runFeatureAssociation()主体函数 2.重 ...
- 机器学习算法源码全解析(三)-范数规则化之核范数与规则项参数选择
前言 参见上一篇博文,我们聊到了L0,L1和L2范数,这篇我们絮叨絮叨下核范数和规则项参数选择.知识有限,以下都是我一些浅显的看法,如果理解存在错误,希望大家不吝指正.谢谢. 机器学习算法源码全解析( ...
- Android-FixBug热修复框架的使用及源码分析(不发版修复bug)
前面几篇博文已经介绍了2种热修复框架的使用及源码分析,AndFix兼容性比较好,而Dexposed Art处于Beta版. AndFix和Dexposed都是阿里的开源项目. Alibaba-And ...
- 【集合框架】JDK1.8源码分析之HashMap(一)
转载自 [集合框架]JDK1.8源码分析之HashMap(一) 一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大 ...
- Android Glide图片加载框架(二)源码解析之into()
文章目录 一.前言 二.源码解析 1.into(ImageView) 2.GlideContext.buildImageViewTarget() 3.RequestBuilder.into(Targe ...
最新文章
- 绝对布局优势_遇上狭长型卫生间基本没救?2种布局教会你,什么叫美观实用兼具...
- 广东省“安网2016”网络安全专项治理行动正式启动
- python的结构_Python结构的选择,python,之
- ☆聊聊Spring系列_Index
- 从源码深处体验Spring核心技术--基于Xml的IOC容器的初始化
- MySQL Encryption and Compression Functions(加密)
- 海量数据库解决方案2011022101
- 程序生成30道四则运算(包括整数和真分数)
- 6.3 API : XGBoost
- System Toolkit for Mac(系统维护工具)
- 简单版WAF代码学习
- 浏览器升级提示网站:《快乐浏览》
- 电子计算机的基本概念简述
- HDU 1275 两车追及或相遇问题(相遇和追及公式)
- spyglass CDC方法学
- 凸包问题-Graham 算法
- 企业管理的智能化趋势
- 我谈“孙宇晨拍天价午餐”
- 又一所985大学改考408!中国海洋大学计算机专硕
- UVaOJ 11205 - The broken pedometer
热门文章
- WinHex显示的数据不完整, Size not a multiple of 512. Imcomplete image。的问题解决
- sql中pivot函数的使用
- 调用l2行情数据api接口如何做?
- 字典 | springboot 返回数据字典翻译
- 哦买嘎,我没有积分啊!
- 去除 字符串中空格/回车
- 今日话题:京东百亿收购1号店,能够与阿里对抗吗?
- 通过PyTorch构建的LeNet-5网络对手写数字进行训练和识别
- 就业信息追踪|基于Springboot+Vue开发实现就业信息追踪系统
- 赛力斯遭东风集团减持:套现10亿 前者获政府补助3亿