【深度学习】嘿马深度学习笔记第12篇:产品物体检测项目介绍,3.4 Fast R-CNN【附代码文档】

🏆🏆🏆教程全知识点简介:1.深度学习概述包括深度学习与机器学习区别、深度学习应用场景、深度学习框架介绍、项目演示、开发环境搭建(pycharm安装)。2. TensorFlow基础涵盖TF数据流图、TensorFlow实现加法运算、图与TensorBoard(图结构、图相关操作、默认图、创建图、OP)、张量(张量概念、张量的阶、张量数学运算)、变量OP(创建变量)、增加其他功能(命名空间、模型保存与加载、命令行参数使用)、逻辑回归案例。3. 神经网络基础包括playground使用、多个神经元效果演示、深层神经网络。4. 神经网络与tf.keras。5. 梯度下降算法改进涵盖指数加权平均、动量梯度下降法、RMSProp算法、Adam算法、TensorFlow Adam算法API、学习率衰减、标准化输入、神经网络调优、批标准化。6. 卷积神经网络包括CNN原理、CIFAR类别分类(API使用、步骤分析代码实现缩减版LeNet)、卷积神经网络学习特征可视化。7. 经典分类网络结构涵盖LeNet解析、AlexNet、卷积网络结构优化、Inception结构、pre_trained模型VGG预测(VGG模型使用、步骤代码)。8. CNN网络实战技巧。9. 迁移学习案例包括基于VGG的五种图片类别识别迁移学习(数据集迁移需求、思路步骤、训练时读取本地图片类别、特征图平均值输出替代全连接层)。10. 目标检测包括目标检测任务描述、目标定位实现思路、产品物体检测项目介绍、R-CNN(Overfeat模型、SPPNet)、Faster R-CNN(RPN原理)、YOLO(单元格grid cell、非最大抑制NMS、训练)、SSD。11. 产品检测数据集训练涵盖标注数据读取存储(xml读取本地文件存储pkl、解析结构、one_hot编码函数)、训练(案例训练结果、多GPU训练代码修改)、本地预测测试(预测代码)、模型导出(keras模型TensorFlow导出)。12. 模型部署包括Web与模型服务对接逻辑、Docker部署环境、TF Serving与Web开启服务(安装Tensorflow Serving、commodity模型服务运行)、TensorFlow Client对接模型服务、Web Server开启。

📚📚👉👉👉本站这篇博客: https://bbs.huaweicloud.com/blogs/458269 中查看
📚📚👉👉👉本站这篇博客: https://bbs.huaweicloud.com/blogs/458269 中查看
📚📚👉👉👉本站这篇博客: https://bbs.huaweicloud.com/blogs/458269 中查看
✨ 本教程项目亮点
🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考
🎯🎯🎯全教程总章节
🚀🚀🚀本篇主要内容
产品物体检测项目介绍
3.4 Fast R-CNN
学习目标
-
目标
-
了解Fast R-CNN的结构特点
- 说明RoI pooling的特点
-
了解多任务损失
-
应用
-
无
SPPNet的性能已经得到很大的改善,但是由于网络之间不统一训练,造成很大的麻烦,所以接下来的Fast R-CNN就是为了解决这样的问题
3.4.1 Fast R-CNN
改进的地方:
- 提出一个RoI pooling,然后整合整个模型,把CNN、SPP变换层、分类器、bbox回归几个模块一起训练
-
步骤
-
首先将整个图片输入到一个基础卷积网络,得到整张图的feature map
- 将region proposal(RoI)映射到feature map中
- RoI pooling layer提取一个固定长度的特征向量,每个特征会输入到一系列全连接层,得到一个RoI特征向量(此步骤是对每一个候选区域都会进行同样的操作)
- 其中一个是传统softmax层进行分类,输出类别有K个类别加上”背景”类
- 另一个是bounding box regressor
3.4.1.1 RoI pooling
首先RoI pooling只是一个简单版本的SPP,目的是为了减少计算时间并且得出固定长度的向量。
- RoI池层使用最大池化将任何有效的RoI区域内的特征转换成具有H×W的固定空间范围的小feature map,其中H和W是超参数 它们独立于任何特定的RoI。
例如:VGG16 的第一个 FC 层的输入是 7 x 7 x 512,其中 512 表示 feature map 的层数。在经过 pooling 操作后,其特征输出维度满足 H x W。假设输出的结果与FC层要求大小不一致,对原本 max pooling 的单位网格进行调整,使得 pooling 的每个网格大小动态调整为 h/H,w/W, 最终得到的特征维度都是 HxWxD。
它要求 Pooling 后的特征为 7 x 7 x512,如果碰巧 ROI 区域只有 6 x 6 大小怎么办?每个网格的大小取 6/7=0.85 , 6/7=0.85,以长宽为例,按照这样的间隔取网格:[0,0.85,1.7,2.55,3.4,4.25,5.1,5.95],取整后,每个网格对应的起始坐标为:[0,1,2,3,3,4,5]
为什么要设计单个尺度呢?这要涉及到single scale与multi scale两者的优缺点
- single scale,直接将image定为某种scale,直接输入网络来训练即可。(Fast R-CNN)
- multi scal,也就是要生成一个金字塔,然后对于object,在金字塔上找到一个大小比较接近227x227的投影版本
后者比前者更加准确些,没有突更多,但是第一种时间要省很多,所以实际采用的是第一个策略,因此Fast R-CNN要比SPPNet快很多也是因为这里的原因。
3.4.1.3 End-to-End model
[Click 文档]
从输入端到输出端直接用一个神经网络相连,整体优化目标函数。
接着 来看为什么后面的整个网络能进行统一训练?
[PyQuery 文档]
特征提取CNN的训练和SVM分类器的训练在时间上是先后顺序,两者的训练方式独立,因此SVMs的训练Loss无法更新SPP-Layer之前的卷积层参数,去掉了SVM分类这一过程,所有特征都存储在内存中,不占用硬盘空间,形成了End-to-End模型(proposal除外,end-to-end在Faster-RCNN中得以完善)
- 使用了softmax分类
- RoI pooling能进行反向传播,SPP层不适合
3.4.2 多任务损失-Multi-task loss
两个loss,分别是:
- 对于分类loss,是一个N+1路的softmax输出,其中的N是类别个数,1是背景,使用交叉熵损失
- 对于回归loss,是一个4xN路输出的regressor,也就是说对于每个类别都会训练一个单独的regressor的意思,使用平均绝对误差(MAE)损失即L1损失
[invoke 文档]
-
fine-tuning训练:
-
在微调时,调整 CNN+RoI pooling+softmax+bbox regressor网络当中的参数
3.4.3 R-CNN、SPPNet、Fast R-CNN效果对比
参数 | R-CNN | SPPNet | Fast R-CNN |
---|---|---|---|
训练时间(h) | 84 | 25 | 9.5 |
测试时间/图片 | 47.0s | 2.3s | 0.32s |
mAP | 66.0 | 63.1 | 66.9 |
其中有一项指标为mAP,这是一个对算法评估准确率的指标,mAP衡量的是学出的模型在所有类别上的好坏
[Tkinter 文档]
3.4.4 Fast R-CNN总结
-
缺点
-
使用Selective Search提取Region Proposals,没有实现真正意义上的端对端,操作也十分耗时
3.4.5 总结
- 掌握Fast R-CNN的改进
- 掌握RoI pooling的作用
- 掌握多任务损失结构
3.4.6 问题?
1、详细说明RoI pooling过程?
2、Fast R-CNN的损失是怎么样的?
3.5 Faster R-CNN
学习目标
-
目标
-
了解Faster R-CNN的特点
-
知道RPN的原理以及作用
-
应用
-
无
在Fast R-CNN还存在着瓶颈问题:Selective Search(选择性搜索)。要找出所有的候选框,这个也非常耗时。那 有没有一个更加高效的方法来求出这些候选框呢?
3.5.1 Faster R-CNN
在Faster R-CNN中加入一个提取边缘的神经网络,也就说找候选框的工作也交给神经网络来做了。这样,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。
Faster R-CNN可以简单地看成是区域生成网络+Fast R-CNN的模型,用区域生成网络(Region Proposal Network,简称RPN)来代替Fast R-CNN中的选择性搜索方法,结构如下:
- 1、首先向CNN网络(VGG-16)输入任意大小图片
- 2、Faster RCNN使用一组基础的conv+relu+pooling层提取feature map。该feature map被共享用于后续RPN层和全连接层。
- 3、Region Proposal Networks。RPN网络用于生成region proposals,该层通过softmax判断anchors属于foreground或者background,再利用bounding box regression修正anchors获得精确的proposals,输出其Top-N(默认为300)的区域给RoI pooling
-
生成anchors -> softmax分类器提取fg anchors -> bbox reg回归fg anchors -> Proposal Layer生成proposals
-
4、第2步得到的高维特征图和第3步输出的区域建合并输入RoI池化层(类), 该输出到全连接层判定目标类别。
- 5、利用proposal feature maps计算每个proposal的不同类别概率,同时bounding box regression获得检测框最终的精确位置
3.5.2 RPN原理
RPN网络的主要作用是得出比较准确的候选区域。整个过程分为两步
- 用n×n(默认3×3=9)的大小窗口去扫描特征图,每个滑窗位置映射到一个低维的向量(默认256维),并为每个滑窗位置考虑k种(在论文设计中k=9)可能的参考窗口(论文中称为anchors)
- 低维特征向量输入两个并行连接的1 x 1卷积层然后得出两个部分:reg窗口回归层(用于修正位置)和cls窗口分类层(是否为前景或背景概率)
3.5.2.1 anchors
- 3*3卷积核的中心点对应原图上的位置,将该点作为anchor的中心点,在原图中框出多尺度、多种长宽比的anchors,三种尺度{ 128,256,512 }, 三种长宽比{1:1,1:2,2:1}
举个例子:
