【深度学习】嘿马深度学习目标检测教程第4篇:目标检测算法原理,3.7 SSD(Single Shot MultiBox Dete

🏆🏆🏆教程全知识点简介:涵盖图像识别背景、目标检测定义和应用场景。核心算法原理包括R-CNN系列算法(R-CNN、SPPNet、Faster R-CNN、RPN原理)、YOLO算法(单次检测、候选框机制、单元格概念)以及SSD算法(单次多框检测器、多个Detector & classifier、训练与测试流程)。数据处理模块包含目标数据集标记、数据集格式转换(TFRecords文件、VOC2007数据集)、slim库和API使用。项目实现涉及项目结构设计、数据模块接口、预处理和数据增强技术。模型训练包括预训练模型、SSD模型定义、default boxes、模型加载、变量初始化、交互式会话。模型推理涵盖predictions筛选、bbox处理、scores排序、NMS算法。部署方案包括Web Server、TensorFlow Serving Client、环境安装、DeploymentConfig配置。训练主函数包含设备选择、全局步长变量、网络参数获取、批处理数据队列、多GPU/CPU平均损失计算。

📚📚👉👉👉code git仓库: https://gitee.com/yinuo112/AI/blob/master/深度学习/嘿马深度学习目标检测教程/note.md 直接get🍅🍅
✨ 本教程项目亮点
🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考
🎯🎯🎯全教程总章节
🚀🚀🚀本篇主要内容
目标检测算法原理
了解目标检测算法分类
知道目标检测的常见指标IoU
了解目标定位的简单实现方式
了解Overfeat模型的移动窗口方法
说明R-CNN的完整结构过程
了解选择性搜索
了解Crop+Warp的作用
知道NMS的过程以及作用
了解候选区域修正过程
说明R-CNN的训练过程
说明R-CNN的缺点
说明SPPNet的特点
说明SPP层的作用
了解Fast R-CNN的结构特点
说明RoI的特点
了解多任务损失
了解Faster R-CNN的特点
知道RPN的原理以及作用
知道YOLO的网络结构
知道单元格的意义
知道YOLO的损失
知道SSD的结构
说明Detector & classifier的作用
说明SSD的优点
知道TensorFlow的SSD接口意义
3.7 SSD(Single Shot MultiBox Detector)
学习目标
-
目标
-
知道SSD的结构
- 说明Detector & classifier的作用
-
说明SSD的优点
-
应用
-
无
3.7.1 SSD
3.7.1.1 简介
SSD算法源于2016年发表的算法论文,论文网址:[
SSD的特点在于:
-
SSD结合了YOLO中的回归思想和Faster-RCNN中的Anchor机制,使用全图各个位置的多尺度区域进行回归,既保持了YOLO速度快的特性,也保证了窗口预测的跟Faster-RCNN一样比较精准。
-
SSD的核心是在不同尺度的特征特征图上采用卷积核来预测一系列Default Bounding Boxes的类别、坐标偏移。
3.7.1.2 结构
以VGG-16为基础,使用VGG的前五个卷积,后面增加从CONV6开始的5个卷积结构,输入图片要求300*300。
[Requests 文档]
3.7.1.3 流程
SSD中引入了Defalut Box,实际上与Faster R-CNN的anchor box机制类似,就是预设一些目标预选框,不同的是在不同尺度feature map所有特征点上是使用不同的prior boxes
3.7.1.4 Detector & classifier
Detector & classifier的三个部分:
-
1.default boxes: 默认候选框
-
2.localization:4个位置偏移
-
3.confidence:21个类别置信度(要区分出背景)
3.7.1.4.1 default boxes
default boxex类似于RPN当中的滑动窗口生成的候选框,SSD中也是对特征图中的每一个像素生成若干个框。
只不过SSD当中的默认框有生成的公式
以下为了解内容,记住几个参数即可:
- ratio:长宽比
- 默认框的大小计算参数:s_min:最底层的特征图计算参数,s_max最顶层的特征图计算参数
3.7.1.4.2 localization与confidence
这两者的意义如下,主要作用用来过滤,训练
经过这一次过滤操作,会将候选框筛选出数量较少的prior boxes。
关于三种boxes的解释区别:
- gournd truth boxes:训练集中,标注好的待检测类别的的位置,即真实的位置,目标的左下角和右上角坐标
- default boxes:在feature map上每一个点上生成的某一类别图片的位置。feature map每个点生成4或6个box(数量是事先指定的),格式为转换过后的(x, y, w, h)
- prior boxes:经过置信度阈值筛选后,剩下的可能性高的boxes。这个box才是会被真正去做回归
也就是说SSD中提供事先计算好的候选框这样的机制,只不过不需要再像RPN那种筛选调整,而是直接经过prior boxes之后做回归操作(因为confidence中提供了21个类别概率可以筛选出背景)
[datetime 文档]
问题:SSD中的多个Detector & classifier有什么作用?
SSD的核心是在不同尺度的特征图上来进行Detector & classifier 容易使得SSD观察到更小的物体
3.7.2 训练与测试流程
3.7.2.1 train流程
- 输入->输出->结果与ground truth标记样本回归损失计算->反向传播, 更新权值
1. 样本标记:
利用anchor与对应的ground truth进行标记正负样本,每次并不训练8732张计算好的default boxes, 先进行置信度筛选,并且训练指定的正样本和负样本, 如下规则
-
正样本
-
1.与GT重合最高的boxes, 其输出对应label设为对应物体.
-
2.物体GT与anchor iou满足大于0.5
-
负样本:其它的样本标记为负样本
在训练时, default boxes按照正负样本控制positive:negative=1:3
3. 损失
网络输出预测的predict box与ground truth回归变换之间的损失计算, 置信度是采用 Softmax Loss(Faster R-CNN是log loss),位置回归则是采用 Smooth L1 loss (与Faster R-CNN一样)
3.7.2.2 test流程
[invoke 文档]
- 输入->输出->nms->输出
3.7.3 比较
从图中看出SSD算法有较高的准确率和性能,兼顾了速度和精度
3.7.4 总结
- SSD的结构
- Detector & classifier的组成部分以及作用
- SSD的训练样本标记
- GT与default boxes的格式转换过程
3.8 TensorFlowSSD接口
学习目标
-
目标
-
知道TensorFlow的SSD接口意义
-
应用
-
无
3.8.1 接口文件
TensorFlow在github上面已经做了接口的封装,只不过过没有提供在官网的接口当中,是官方案例当中提供的Python文件,需要自行去下载,参考:[
下载到项目当中如下:
3.8.1.1 网络配置
3.8.2 接口介绍
[Python.org 初学者指南]
3.8.2.1 模型搭建处理:
-
ssd_net.net:网络结构定义函数
-
输出:predictions, localisations, logits, end_points,分别表示bbox分类预测值(经过softmax)、bbox位移预测值、bbox分类预测值(未经过softmax)、模型节点
-
获取默认anchor:
-
ssd_net.anchors:所有阶段特征图的default boxes生成, 得到每层特征图的预设框(x, y, w, h)(公式计算得来)
-
Default boxes的对应Ground Truth标记处理:使 Ground Truth 数量与预测结果一一对应
-
ssd_net.bboxes_encode(glabels, gbboxes, ssd_anchors),grounding truth处理函数,利用gt与每层生成的anchor进行标记得分,返回gclasses, glocalisations, gscores
3.8.2.2 定义网络的损失:
-
ssd_net.losses:
-
网络的输出预测结果与Ground Truth之间损失计算
总结
目标检测算法原理
了解目标检测算法分类
知道目标检测的常见指标IoU
了解目标定位的简单实现方式
了解Overfeat模型的移动窗口方法
说明R-CNN的完整结构过程
了解选择性搜索
了解Crop+Warp的作用
知道NMS的过程以及作用
了解候选区域修正过程
说明R-CNN的训练过程
说明R-CNN的缺点
说明SPPNet的特点
说明SPP层的作用
了解Fast R-CNN的结构特点
说明RoI的特点
了解多任务损失
了解Faster R-CNN的特点
知道RPN的原理以及作用
知道YOLO的网络结构
知道单元格的意义
知道YOLO的损失
知道SSD的结构
说明Detector & classifier的作用
说明SSD的优点
知道TensorFlow的SSD接口意义
2.1 目标检测数据集
学习目标
-
目标
-
了解常用目标检测数据集
-
了解数据集构成
-
应用
-
无
2.1.1 常用目标检测数据集
- pascal Visual Object Classes
