头图

本教程的知识点为:深度学习介绍 1.1 深度学习与机器学习的区别 TensorFlow介绍 2.4 张量 2.4.1 张量(Tensor) 2.4.1.1 张量的类型 TensorFlow介绍 1.2 神经网络基础 1.2.1 Logistic回归 1.2.1.1 Logistic回归 TensorFlow介绍 总结 每日作业 神经网络与tf.keras 1.3 神经网络基础 神经网络与tf.keras 1.3 Tensorflow实现神经网络 1.3.1 TensorFlow keras介绍 1.3.2 案例:实现多层神经网络进行时装分类 神经网络与tf.keras 1.4 深层神经网络 为什么使用深层网络 1.4.1 深层神经网络表示 卷积神经网络 3.1 卷积神经网络(CNN)原理 为什么需要卷积神经网络 原因之一:图像特征数量对神经网络效果压力 卷积神经网络 3.1 卷积神经网络(CNN)原理 为什么需要卷积神经网络 原因之一:图像特征数量对神经网络效果压力 卷积神经网络 2.2案例:CIFAR100类别分类 2.2.1 CIFAR100数据集介绍 2.2.2 API 使用 卷积神经网络 2.4 BN与神经网络调优 2.4.1 神经网络调优 2.4.1.1 调参技巧 卷积神经网络 2.4 经典分类网络结构 2.4.1 LeNet-5解析 2.4.1.1 网络结构 卷积神经网络 2.5 CNN网络实战技巧 2.5.1 迁移学习(Transfer Learning) 2.5.1.1 介绍 卷积神经网络 总结 每日作业 商品物体检测项目介绍 1.1 项目演示 商品物体检测项目介绍 3.4 Fast R-CNN 3.4.1 Fast R-CNN 3.4.1.1 RoI pooling YOLO与SSD 4.3 案例:SSD进行物体检测 4.3.1 案例效果 4.3.2 案例需求 商品检测数据集训练 5.2 标注数据读取与存储 5.2.1 案例:xml读取本地文件存储到pkl 5.2.1.1 解析结构

完整笔记资料代码:https://gitee.com/yinuo112/AI/tree/master/深度学习/嘿马深度学...

感兴趣的小伙伴可以自取哦~


全套教程部分目录:


部分文件图片:

商品物体检测项目介绍

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

从输入端到输出端直接用一个神经网络相连,整体优化目标函数。

接着我们来看为什么后面的整个网络能进行统一训练?

特征提取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损失

  • fine-tuning训练:

    • 在微调时,调整 CNN+RoI pooling+softmax+bbox regressor网络当中的参数

3.4.3 R-CNN、SPPNet、Fast R-CNN效果对比

参数R-CNNSPPNetFast R-CNN
训练时间(h)84259.5
测试时间/图片47.0s2.3s0.32s
mAP66.063.166.9

其中有一项指标为mAP,这是一个对算法评估准确率的指标,mAP衡量的是学出的模型在所有类别上的好坏

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}

举个例子:

3.5.2.2 候选区域的训练
  • 训练样本anchor标记

    • 1.每个ground-truth box有着最高的IoU的anchor标记为正样本
    • 2.剩下的anchor/anchors与任何ground-truth box的IoU大于0.7记为正样本,IoU小于0.3,记为负样本
    • 3.剩下的样本全部忽略
    • 正负样本比例为1:3
  • 训练损失

    • RPN classification (anchor good / bad) ,二分类,是否有物体,是、否
    • RPN regression (anchor -> proposal) ,回归
    • 注:这里使用的损失函数和Fast R-CNN内的损失函数原理类似,同时最小化两种代价

候选区域的训练是为了让得出来的 正确的候选区域, 并且候选区域经过了回归微调。

在这基础之上做Fast RCNN训练是得到特征向量做分类预测和回归预测。

3.5.3 Faster R-CNN的训练

Faster R-CNN的训练分为两部分,即两个网络的训练。前面已经说明了RPN的训练损失,这里输出结果部分的的损失(这两个网络的损失合并一起训练):

  • Fast R-CNN classification (over classes) ,所有类别分类N+1
  • Fast R-CNN regression (bbox regression)

3.5.4 效果对比

R-CNNFast R-CNNFaster R-CNN
Test time/image50.0s2.0s0.2s
mAP(VOC2007)66.066.966.9

3.5.5 Faster R-CNN总结

  • 优点

    • 提出RPN网络
    • 端到端网络模型
  • 缺点

    • 训练参数过大
    • 对于真实训练使用来说还是依然过于耗时

可以改进的需求:

  • RPN(Region Proposal Networks) 改进 对于小目标选择利用多尺度特征信息进行RPN
  • 速度提升 如YOLO系列算法,删去了RPN,直接对proposal进行分类回归,极大的提升了网络的速度

3.5.6 总结

  • Faster R-CNN的特点
  • RPN的原理

3.5.7 问题?

1、Faster RCNN改进之处?

2、如何得到RPN的 anchors?

总结

每日作业

YOLO与SSD

YOLO与SSD

3.6 YOLO(You only look once)

学习目标

  • 目标

    • 知道YOLO的网络结构
    • 知道单元格的意义
    • 知道YOLO的损失
  • 应用

在正式介绍YOLO之前,我们来看一张图:

可以看出YOLO的最大特点是速度快。

3.6.1 YOLO

3.6.1.1 结构

一个网络搞定一切,GoogleNet + 4个卷积+2个全连接层

3.6.1.2 流程理解
  • 1、原始图片resize到448x448,经过前面卷积网络之后,将图片输出成了一个7 7 30的结构

以图示的方式演示

2、默认7 7个单元格,这里用3 3的单元格图演示

3、每个单元格预测两个bbox框

4、进行NMS筛选,筛选概率以及IoU

3.6.2 单元格(grid cell)

最后网络输出的7 7 30的特征图怎么理解?7 * 7=49个像素值,理解成49个单元格,每个单元格可以代表原图的一个方块。单元格需要做的两件事:

  • 1.每个单元格负责预测一个物体类别,并且直接预测物体的概率值
  • 2.每个单元格预测两个(默认)bbox位置,两个bbox置信度(confidence) 7 7 2=98个bbox

    • 30=(4+1+4+1+20), 4个坐标信息,1个置信度(confidence)代表一个bbox的结果, 20代表 20类的预测概率结果
3.6.2.1 网格输出筛选

一个网格会预测两个Bbox,在训练时我们只有一个Bbox专门负责(一个Object 一个Bbox)

怎么进行筛选?

  • 通过置信度大小比较

每个bounding box都对应一个confidence score

  • 如果grid cell里面没有object,confidence就是0
  • 如果有,则confidence score等于 预测的box和ground truth的IOU乘积

注:所以如何判断一个grid cell中是否包含object呢?如果一个object的ground truth的中心点坐标在一个grid cell中,那么这个grid cell就是包含这个object,也就是说这个object的预测就由该grid cell负责。

这个概率可以理解为不属于任何一个bbox,而是属于这个单元格所预测的类别

  • 不同于faster rcnn中的anchors,yolo的框坐标是由网络得出,而faster-rcnn是人为设定一个值,然后利用RPN网络对其优化到一个更准的坐标和是否背景类别

3.6.3 非最大抑制(NMS)

每个Bbox的Class-Specific Con


程序员一诺python
16 声望18 粉丝

python技术发烧友 资料收集狂