智能计算系统(学习笔记)-第三章深度学习

课程链接:智能计算系统第三章

导读:
上一章学习了神经网络的基本知识,多层感知机的正反向计算过程以及基础优化方法。本章将通过分析经典深度学习算法学习,将基础神经网络应用到实际场景,并逐步优化实现工业级应用的过程。【神经网络和深度学习都应用在建模部分】

  • 本章介绍卷积神经网络、利用卷积神经网络做图像分类、基于卷积神经网络的图像目标检测算法、长短期记忆模型与生成对抗网络。【多图长文预警】
  • 根据数据来源,围绕图像信息序列信息展开,另外加上新技术GAN对抗网络

图像信息

任务是理解图像内容,方法是卷积神经网络。

适合图像处理的卷积神经网络

计算机视觉的例子

深度学习

  • 输入图像大小为32×32(3原色的图),输入数据量为32×32×3=3072。
  • 隐层神经元个数为100,第一层权值数量为3072×100=307200。
  • 如果输入图像大小为1024×1024,第一层隐层神经元个数是1000,那么第一层权重数量级为10^9,过多的参数导致过拟合。
  • 卷积神经网络可以有效减少权重数量

卷积神经网络CNN

卷积和全连接的差别/卷积的工作机制

卷积含义
图中类似的形状共用一组权重,可以减少权重数量,降低计算量。

经典的CNN(VGG16)组成
  • 卷积层conv:filter找特征
    • 一个卷积层=多个filter,一个filter=多片卷积核( f × f × 1 f\times f\times1 f×f×1)
    • 一个filter通过卷积(相乘求和),会将输入的深度变成( h × h × 1 h\times h\times1 h×h×1)
    • 一个filter=一个神经元,神经元内应该具有激活函数(失活那些输出为负值,并加入非线性变换)
  • 池化pooling:把图像尺寸变小,但是具体特征的数量会增加
  • 全连接层FC:分类的关键,相当于传统的神经网络连接
  • Softmax:得到预判分类的概率值

卷积层和池化层构成特征提取,形成多层的特征图。全连接层将高维特征图转成一维特征向量用于分类(概率),softmax输出概率,概率大即是分类结果
小范围简单特征(狗鼻子)–>大范围复杂特征–>全局特征(狗头)
VGG16

卷积层

卷积层如何检测特征?检测复杂边缘,将权重作为参数,在训练中学习。
卷积神经网络的两个重要特征:局部连接,权重共享
可有效减少权重参数,避免过拟合,为增加卷积乘数提供可能。
filter/kernel

  • 卷积运算
    数学公式: y ( n ) = ∑ i = − ∞ ∞ x ( i ) h ( n − i ) = x ( n ) ∗ h ( n )   [ ∗ 表 示 卷 积 ] y(n)=\sum\limits_{i=-\infty}^{\infty}x(i)h(n-i)=x(n)*h(n)\space[*表示卷积] y(n)=i=x(i)h(ni)=x(n)h(n) []
    神经网络:实际是计算矩阵内积(相关系数)
    卷积运算

  • 多输入特征图,单输出特征图的卷积运算[单filter]
    单输出运算

  • 多输入特征图,多输出特征图的卷积运算[多filter]
    不同的过滤器filter( 3 × 3 × 3 3\times 3\times3 3×3×3)可检测不同特征。一个filter卷积出一个特征图 4 × 4 × 1 4\times 4\times1 4×4×1
    多个filter
    4 × 4 的 来 源 : 6 − 3 1 + 1 = 4 ( p a d = 0 , s t r i d e = 1 ) 4\times4的来源:\frac{6-3}{1}+1=4(pad=0,stride=1) 4×4163+1=4(pad=0,stride=1)

  • 卷积层如何检测特征?[设计filter]
    检测垂直边缘
    检测垂直
    检测对角线边缘
    检测对角
    经过卷积层会发现输出的像素变小了,多层卷积将会使得矩阵越来越小。 ⇓ \Darr
    pad

  • 零填充padding【上图是给input的四周加上一圈0】

    • 扩大输入图像/特征图的尺寸并填充像素
    • 防止深度网络中图像被动持续减少
    • 强化图像边缘信息
  • 步长stride【每次filter移动的格子数】

    • 滑动滤波器时每次移动的像素点个数
    • 与pad共同确定输出图像尺寸
      i n p u t = w i × h i , f i l t e r = f × f , p a d = p , s t r i d e = s input=w_i \times h_i,filter=f\times f,pad=p,stride=s input=wi×hi,filter=f×f,pad=p,stride=s
      o u t p u t = ⌊ w i + 2 p − f s + 1 ⌋ × ⌊ h i + 2 p − f s + 1 ⌋ output= \lfloor{\frac{w_i+2p-f}{s}+1}\rfloor\times\lfloor{\frac{h_i+2p-f}{s}+1}\rfloor output=swi+2pf+1×shi+2pf+1
  • 总结卷积层参数
    滤波器filter:卷积核可训练;
    偏置bias:可训练,使得分类器偏离激活函数原点,更灵活;
    激活函数activation:激活函数选择,例如:Sigmoid,ReLU.
    卷积参数

池化层pooling
  • 主动减小图片尺寸,从而减少参数的数量和计算量,控制过拟合
  • 不引入额外参数
  • Max Pooling【提高提取特征的鲁棒性】/Avg Pooling【易糊】/L2 Pooling【开平方不容易计算】
    提高提取特征的鲁棒性
全连接层Fully Connect
  • 卷积层和池化层构成特征提取器,全连接成则为分类器
  • 将特征提取得到的高维特征图映射(卷积)成一维特征向量,该特征向量包含所有特征信息,可转化为各个类别的概率

在这里插入图片描述

Softmax
  • 通常作为网络的最后一层,对输出进行归一化,输出分类概率,这个概率向量,可以和实际输出向量y形成Loss函数。
  • L = 1 n ∑ i = 1 n ( − ∑ j = 1 C y i log ⁡ f ( z ) ) L=\frac{1}{n}\sum\limits_{i=1}^n(-\sum\limits_{j=1}^C{y_i\log{f(z)}}) L=n1i=1n(j=1Cyilogf(z))
  • 凸显其中最大的值,并抑制远低于最大值的其他分量
  • Softmax层输入、输出数据规模相同
  • 公式: f ( z j ) = e z j ∑ i = 0 n e z j f(z_j)=\frac{e^{z_j}}{\sum\limits_{i=0}^{n}e^{z_j}} f(zj)=i=0nezjezj【仅最大的那个概率会接近于1】
小结

输入:用于数据的输入
卷积层:使用卷积核进行特征提取和特征映射
激励:由于卷积也是一种线性运算,因此需要增加非线性映射(例如:ReLU)
池化:进行下采样,对特征图稀疏处理(MaxPooling-stride-padding),减少数据运算量。
全连接层:通常在CNN的尾部进行重新拟合(映射成一维特征向量),减少特征信息的损失
Softmax:对输出进行归一化,输出分类概率,凸显其中最大的值
输出:用于输出结果

卷积神经网络结构
  • 层排列规律
    • 常见卷积神经网络由卷积层(激活),池化层和全连接层构成
    • 各层的常见排列方式如图所示,其中N,M,K为重复次数,
    • 例如:N=3,M=1,K=2情况下的网络结构如下
    • i n p u t → c o n v ( r e l u ) → c o n v ( r e l u ) → c o n v ( r e l u ) → p o o l → F C ( r e l u ) → F C ( r e l u ) → F C → o u t p u t input\rightarrow conv(relu)\rightarrow conv(relu)\rightarrow conv(relu)\rightarrow pool\rightarrow FC(relu)\rightarrow FC(relu)\rightarrow FC\rightarrow output inputconv(relu)conv(relu)conv(relu)poolFC(relu)FC(relu)FCoutput
      层结构
  • 即使只有一层隐层,只要有足够的神经元,神经网络理论上可以拟合任意连续函数,为什么还用使用深层网络结构
    • 深度网络可从局部到整体“理解图像”
      学习复杂特征时(如人脸识别),浅层的卷积层感受野小,学习到局部特征;深层的卷积层感受野大,能学习到整体特征。
    • 深度网络可减少权重数量
      以宽度换深度,用多个小卷机替代一个大卷机,再获得更多样特征的同时,所需权重数量也更少。

基于CNN的图像分类算法

最早是日本学者福岛参照生物的视觉皮层(visual cortex)设计了以"neocognition"命名的神经网络
AlexNet使用卷积神经网络解决图像分类问题,在2012年大大提高了state-of-art的准确率,自此卷积神经网络在图像分类领域获得快速发展。【误差变小,层数变多】

AlexNet

该论文中采用的是两台GPU并行训练,这里只讨论下层的运算。AlexNet

  • 输入224×224×3,步长是4,卷积核是11×11×3
  • 最后的特征向量是2048维的,然后在1000个特征里面进行分类
  • ReLU激活函数:训练重收敛速度更快。【回见第二章内容】
  • LRN(Local Respose Normalization)局部归一化:提升较大响应,抑制较小响应。
    • b x , y i = a x , y i ( k + α ∑ j = m a x ( 0 , i − n 2 ) m i n ( N − 1 , i + n 2 ) ( a x , y j ) 2 ) β b_{x,y}^i=\frac{a_{x,y}^i}{(k+\alpha \sum\limits_{j=max(0,\frac{i-n}{2})}^{min(N-1,\frac{i+n}{2})}(a_{x,y}^j)^2)^{\beta}} bx,yi=(k+αj=max(0,2in)min(N1,2i+n)(ax,yj)2)βax,yi
    • 对图像的每个“位置”,提升高响应特征,抑制低响应特征
    • 减少高激活神经元数量,提高训练速度,抑制过拟合,
    • 但是后来被研究者发现无明显效果,故现在较少使用。
  • MaxPool:避免特征被平均池化模糊,提升特征鲁棒性。【这里不再展开讲解】
  • Dropout:随机舍弃部分隐层节点,避免过拟合。
    • 随机丢弃部分神经元,在模型训练过程中,以一定概率随机的省去某些隐层神经元。在反向传播更新权重时不更新与该神经元相关的权重
    • 但是与被舍弃神经元相关的权重得保留下来,只是暂时不更新,另一批样本输入时继续使用与该神经元相关的权重
    • 防止训练过程中复杂的co-adaptation,抑制过拟合。
  • AlexNet成功的原因
    • 使用多个卷积层,有效提取图像特征
    • ReLU帮助提高训练速度
    • Dropout,数据增强扩大训练集,防止过拟和。

可以设置更深的卷积神经网络吗? ⇓ \Darr

VGG(19)

  • 复杂的网络结构【先浅后深】
    训练VGG11第1层,然后将收敛后的前4个卷积层和后3个全连接层的权重,作为更深神经网络的前4个卷积层和后3个全连接层权重的初始值,其余层的权重随机初始化(随机加入新的卷积层),于是可以训练出更深的神经网络。VGG11

  • A:11层,B:13层,C/D:16层,E:19层

    • A/A-LRN:加LRN准确率无明显提升
    • A/B/D/E:层数越多准确率越高
    • C/D:Conv3×3比conv 1×1得到的准确率高
    • Multi-scale training可明显提高准确率
  • 规整的<卷积-池化>结构
    D层举例:224×224×3—>112×12×64—>56×56×128—>28×28×256—>14×14×512—>7×7×512

    • Conv:所有卷积层filter大小/stride/pad相同,负责数据体深度变化----控制特征图数量
      • filter=3*3,stride=1,pad=SAME
      • pad=SAME:补pad至输出图像大小等于输入图像大小
      • pad=VALID:pad=0
    • Maxpool:所有池化层filter大小/stride/pad相同,负责数据体长度变化----控制特征图大小
      • filter=2*2,stride=2,pad=0
    • 启示:多层小卷积比单层大卷积效果好
      • 实验对比:VGG13(B),使用1×5×5对比2×3×3进行训练和测试
        实验
      • 发现:一个5×5conv网络比两个3×3conv网络top-1准确率低7%
      • 原因:一个5×5conv和两个3×3conv的感受野大小相同,每个卷积层加入ReLU,两个3×3conv决策函数的区分能力更强,weight_count:5×5=25>3×3×2=18,多层网络权值更少
        在这里插入图片描述
  • VGG成功的原因

    • 更深的卷积神经网络,更多的卷积层和非线性激活函数,提升分类准确率
    • 使用规则的多层小卷积替代大卷积,减少参数数量,提高训练收敛速度
    • 部分网络层参数的预初始化,提高训练收敛速度

卷积核还能不能更小?网络还能不能更深? ⇓ \Darr

Inception(GoogLeNet)

Inception-v1
  • Inception两种模块
    • Naïve version:叠加多种尺寸的卷积层和池化层,获得不同尺寸的特征,提高网络对不同尺寸特征的适应性。【不同的特征,尺度是不同的】在这里插入图片描述
    • Dimension redutions:使用1×1的卷积层来缩减维度(减小channel),形成瓶颈层,减少参数。在这里插入图片描述
  • 1×1的卷积【对特征图的数量进行调整】
    • 作用:跨通道聚合,进一步可以起到降维/升维的作用,减少参数
      在多个输入的特征图的同一个位置上,对多个图的同点做全连接,得到输出的特征图的同一个位置(减少/增加输出的特征图)
      在这里插入图片描述
    • 相当于在输入和输出之间做了一个特征上的全连接,提取得到非线性特征
    • c o < c i c_o<c_i co<ci时,维度降低,参数减少
    • 形成瓶颈层,有效减少计算量和参数数量(256个输入特征图,减小到32个特征图,给下一个卷积层输入)在这里插入图片描述
  • Softmax辅助分类网络
    • 训练时:让中间某一层的输出经过softmax得到分类结果,并按较小的权重加到最终分类结果中,相当于模型融合。防止多层神经网络训练过程中梯度消失。在这里插入图片描述
    • 推理时:softmax辅助分类网络会被去掉。

避免梯度消失,数据集的统一分布 ⇓ \Darr

BN-Inception
  • 学习VGG使用两个3×3卷积替代一个5×5卷积
  • 使用BatchNorm,并在每个卷积层之后,激活函数之前插入BN层(强制调整数据正态分布)
    • I n p u t : m i n i − b a t c h : B = { x 1 , x 2 . . . x m } , t o   l e a r n   γ , β      O u t p u t : { y i = B N γ , β ( x i ) } Input:mini-batch:B=\{x_1,x_2...x_m\},to\space learn \space \gamma,\beta \space\space \space\space Output:\{y_i=BN_{\gamma,\beta}(x_i)\} Input:minibatch:B={x1,x2...xm},to learn γβ    Output:{yi=BNγ,β(xi)}
    • μ B ← 1 m ∑ i = 1 m x i \mu_B\gets\frac{1}{m}\sum\limits_{i=1}^m x_i μBm1i=1mxi【mini-batch mean】
    • σ B 2 ← 1 m ∑ i = 1 m ( x i − μ B ) 2 \sigma_B^2\gets\frac{1}{m}\sum\limits_{i=1}^m(x_i-\mu_B)^2 σB2m1i=1m(xiμB)2【mini-batch variance】
    • x i ^ ← x i − μ B σ B 2 + ε \hat{x_i}\gets\frac{x_i-\mu_B}{\sqrt{\sigma_B^2+\varepsilon}} xi^σB2+ε xiμB【normalize】
      将激活成的输入调整为标准正态分布(均值为0,方差为1)。
      激活层输入分布在激活函数敏感部分,输入有小变化,就能使损失函数有较大的反应,避免梯度消失,加快训练速度。
    • y i ← γ x i ^ + β ≡ B N γ , β ( x i ) y_i\gets\gamma\hat{x_i}+\beta\equiv BN_{\gamma,\beta}(x_i) yiγxi^+βBNγ,β(xi)【缩放和平移scale and shift】
      标准化后的输入使网络的表达能力下降,为保持网络的表达能力,增加两个可训练参数。
    • BN可替代LRN/Dropout/L2 normalization
    • 可提高收敛速度训练速度
    • 可选择更高的学习率,方便调参
Inception-v3[22layers]
  • Factorization思想
    • 将3×3卷积拆成1×3和3×1卷积
      在这里插入图片描述
    • 减少参数数量,同时通过非对称的卷积结构拆分增加特征多样性
  • 网络结构
    • 将前面三种inception结构组合起来
    • GoogLeNet中7×7卷积拆分为3×3卷积
    • 卷积层和辅助分类器的全连接层做BN
ResNet[152layers]

卷积层堆积就能提升图像分类的准确率吗?
不,会产生神经网络退化:收敛到极值点而非最值,误差大    ⟹    \implies 如何避免神经网络退化?

  • 普通网络Plain network:直接多项式拟合输出
  • 残差网络Residual network:建立在BN统一分布上,用多项式拟合差值
    优点:在解附近时的权重的反应更灵敏,更容易学习得到最优解,训练时更容易收敛
    残差块
  • 残差块应用到普通网络
    经过块&跳转,使得输出和隐层的权重之间形成比较直接的联系,即使输出离输入远,但是损失函数可以比较容易送到离输入比较近的权重参数里。
    • 改造VGG得到plain-network
      • 基本全部由卷积层构成,filter=3×3,stride=1,pad=same
      • 特征图尺寸的减小,由stride=2的卷积层完成
      • 若特征图的尺寸不变,则特征的数量也不变
      • 若特征图的尺寸减半,则特征图的数量翻倍
    • 增加跳转连接到ResNet
      • 特征图的尺寸不变(实线)特征图的尺寸变化(虚线)
      • 特征图数量翻倍的两种方法
        • 以stride=2直接取值,不够的特征补0,不引入额外参数
        • 用stride=2,特征数量翻倍的1×1卷积做映射,卷积的权重经过学习得到,会引入额外参数
DenseNet
  • 每一层的输入都是前面所有层输入的并集,而该层所学习的特征图(feature map)也会被直接传给其后面的所有层作为输入。
    在这里插入图片描述
  • 通过密集连接,缓解梯度消失问题,加强特征传播,鼓励特征复用,极大的减少了参数量。

基于CNN的图像检测算法

分类—>定位+分类—>检测

评测指标

  • I o U IoU IoU交并比

    • 用于衡量定位准确度,一般 I o U ≥ 0.5 IoU\geq0.5 IoU0.5就认为定位成功
      I o U = A ∩ B A ∪ B IoU=\frac{A\cap B}{A\cup B} IoU=ABAB 在这里插入图片描述
  • mAP[mean Average Precision]平均精度均值

    • 在计算机视觉领域,用于衡量模型在测试集上检测精度的优劣程度
    • 综合考虑检测结果的召回率/查全率和精度/查准率,mAP值越高表示检测结果越好
    • 计算原理:
      • 召回率/查全率[recall]:选的N个样本里选对的k个正样本占总的M个正样本的比例, k M = T P T P + F N \frac{k}{M}=\frac{TP}{TP+FN} Mk=TP+FNTP
      • 精度/查准率[precision]:选的N个样本里选对的k个正样本比例, k N = T P T P + F P \frac{k}{N}=\frac{TP}{TP+FP} Nk=TP+FPTP
      • 选择的样本数N越多,召回率越高,查准率越低
      • 预值越小,选中样本越多,精度越低,召回率越高
      • AP值:对每一个recall,取最大的precision, A P ( 类 A ) = ∑ M a x P r e c i s i o n A 的 实 际 数 量 AP(类A)=\frac{\sum{MaxPrecision}}{A的实际数量} AP(A)=AMaxPrecision
测试结果实际情况-正例positive实际情况-反例negative
正例positive真正例True positive,TP假正例False positive,FP
反例negative假反例False negative,FN真反例True negative,TN

目前基于深度学习的目标检测算法大致分为两类:

  • two-stage两阶段算法:基于候选区域方法,先产生边界框,再做CNN分类(R-CNN系列)准确度高但费时
  • one-stage一阶段算法:对输入图像直接处理,同时输出定位及其类别(YOLO系列&SSD系列)

R-CNN系列[two-stage]

趋势:逐渐将机器学习里的算法放到神经网络里面来运行。

网络名称主要特点mAP单帧检测时间
R-CNN结合RegionProposal区域提取和CNN特征提取,SVM分类,Bounding Box回归53.3%50s
Fast R-CNN提出ROIPoolIng softmax分类65.7%2s
Faster R-CNN使用RPN(Region Proposal Network)生成候选区域67.0%0.2s
R-CNN
  • 主要步骤
    • 特征区域提取:使用Selective Search从输入图片中提取2000个左右候选区域。【最耗时】
      • 意义:经典的目标检测算法使用滑动窗口,依次判断所有可能的区域=穷举,而R-CNN采用Region Proposal预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上提取特征,大大减少了计算量。
        候选区域提取的步骤:
        层次化分组算法
        • 用基于图的图像分割方法创建初始区域
        • 计算所有相邻区域间的相似度
        • 每次合并相似度最高的两个相邻图像区域,并计算合并后的区域与其相邻区域的相似度。重复该过程,直到所有图像区域合并为一张完整图像
        • 提取所有图像区域的目标位置框,并按层级排序(覆盖整个图像的区域的层级是1)
        在不同图像分割阈值,不同彩色空间,以及不同的相似度(综合考虑颜色,纹理,大小,重复度)下,调用层次化分组算法,对所有合并策略下得到的位置框按层级*RND排序,去掉冗余框
        取一定个数的候选区域作为后续卷积神经网络的输入(R-CNN取2000个)。
      • 方法:带多样性策略的选择性搜索。
    • 特征提取:首先将所有候选区域裁切缩放为固定大小,再用AlexNet提取图像特征。
    • 线性分类:用特定类别的线性SVMs对每个候选区域做分类。
      • SVM分类
      • NMS(Non-Maximum Suppression)非极大值抑制–去掉冗余选框
        问题:来源于同一目标的位置可能产生多个候选框,而这些候选框之间可能会有重叠。
        解决思路:对每个分类使用贪心,NMS选择较优的目标边界框,去除冗余的边界框。
        • 按照检测得分对候选框排序
        • 将分数最高的候选框 b m b_m bm加到最终输出列表中,并将其从候选框列表中删除
        • 计算 b m b_m bm与其他候选框 b i b_i bi的IoU,如果IoU大于域值,则从候选框列表中删除 b i b_i bi
        • 重复上述步骤,直至候选框列表为0。
    • 边界框回归:用线性回归修正边界框的位置与大小,其中每个类别单独训练一个边界框回归器。
      • BoundingBox回归–微调校准选框以提高AP

R-CNN
在这里插入图片描述

  • 缺点
    • 重复计算:需要对2000个候选框做CNN,计算量很大,而且有很多重复计算
    • SVM模型:在标注数据足够的时候不是最好的选择
    • 多个步骤:候选区提取,特征提取,分类,回归都要单独训练,大量中间数据需要保存
    • 检测速度慢:GPU上处理一张图片需要13秒,CPU上则需要53秒,

能否避免候选框特征提取过程的重复计算? ⇓ \Darr

Fast R-CNN
  • 主要步骤
    • 特征区域提取:使用Selective Search从输入图片中提取2000个左右候选区域。【最耗时】
    • 特征提取:原始图像输入CNN网络,得到特征图
    • ROI Pooling:根据映射关系,将不同尺寸候选框在特征图上的对应区域,池化为维度相同的特征图(因为全连接层要求输入尺寸固定)
      ROI:Regions Of Interest,对应前文中经过Region Proposal得到的候选框。
      目的:将不同尺寸的ROI对应的卷积特征图,转化为固定大小的特征图。一方面ROI可以复用卷积层提取的特征图,提高图像处理速度;另一方面,面向全连接层提供固定尺寸的特征图。
      特点:输出尺寸与输入尺寸无关。对每个特征图通道,根据输出尺寸 H × W H\times W H×W将输入( h × w h\times w h×w)均分成多块( h H × w W [ 大 小 块 ] \frac{h}{H}\times \frac{w}{W}[\frac{大小}{块}] Hh×Ww[]),取每块的最大值作为输出。
    • 全连接成层:将维度相同的特征图转化为ROI特征向量
    • 分类与回归:经过全连接层,再用softmax分类器进行识别,用回归器修正边界框的位置与大小,最后对每个类别做NMS,BoundingBox回归。

在这里插入图片描述

  • 优缺点
    • 直接对整张图像做卷积,不再对每个候选区域分别做卷积,从而减少大量的重复计算
    • 用ROI Pooling对不同候选框的特征进行尺寸归一化
    • 边界框回归器放进网络一起训练,每个类别对应一个回归器
    • softmax替代SVM分类器
    • 候选区域提取仍使用selective search,目标检测时间大多消耗在这上面了

可以寻找更高效的候选区域生成方法吗? ⇓ \Darr

Faster R-CNN

Faster R-CNN=候选区域生成网络RPN+Fast R-CNN
在这里插入图片描述

  • 主要步骤
    • 卷积层:输入图片经过多层卷积神经网络(ZF,VGG),提取出卷积特征图,供RPN网络和Fast R-CNN使用。RPN网络和Fast R-CNN共享特征提取网络,可大大减小计算时间。
    • RPN层:生成候选区域。并用softmax判断候选框是前景还是背景,从中选取前景候选框并利用bounding box regression调整后选框的位置,得到候选区域。
      目的:输入特征图,输出候选区域集合,包括各候选区域属于前/背景的概率,以及位置坐标。RPN采用Anchor机制,能够从特征图上直接提取候选区域的特征,相对于selective search大大减少运算量,且整个过程融合到一个网络中,方便训练和测试。
      RPN层的步骤&方法
      1.先经过一个3×3选机,使每一个点对应256维(ZF模型)或者512维(VGG16)的特征向量。
      2.然后分两路处理:一路用来判断候选框是前景还是背景,先将卷积特征reshape成一维向量,然后做softmax判断是前景还是背景,然后reshape回2维feature map;另一路用bounding Box regression来确定候选框的位置
      3.两路计算结束后,计算得到前景候选框(物体在前景中),再用NMS去除冗余候选框,最后输出候选区域。
      ,最后输出候选区域。
      在这里插入图片描述
      Anchors:对于feature map的每个位置,考虑9个可能的候选框,三种面积分别是128×128,256×256,512×512,每种面积又分为3种长宽比,分别是2:1,1:2,1:1,这些候选框称为anchors。
      • 在RPN中,feature map每个位置输出2k个得分,分别表##示该位置的k个anchor为前景/背景的概率;
      • 同时每个位置输出4k个框位置参数,用[x,y,w,h]四个坐标来表示anchor的位置。
    • ROIPooling层:同Fast R-CNN,将不同尺寸的候选框在特征图上的对应区域,池化为维度相同的特征图。
    • 分类与回归:同Fast R-CNN,用softmax分类器判断图像类别,同时用边界框回归修正边界框的位置和大小。
R-CNN系列的小结

概述
从R-CNN到Fast R-CNN,再到Faster R-CNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置调整)终于被统一到一个深度网络框架之内,大大提高了运行速度。

YOLO[one-stage]

  • 主要思想:将目标检测问题转化为直接从图像中提取bounding boxes和类别概率的单回归问题,只需看一眼(YOLO,you-only-look-once)就可以检测出目标的类别和位置。YOLO算法开创了one-stage检测的先河,将目标分类和边界划定为合二为一,实现了端到端的目标检测,YOLO的运行速度非常快,达到45帧/秒,满足实时性要求。

  • 主要步骤

    • Resize image:to 448×448
    • Run CNN:run a single convolutional network on the image
    • Non-max suppression:NMS非极大值抑制thresholds the resulting detections by the model’s confidence置信度分数
  • Unified Detection统一检测的具体实现

    • 将输入图像分为S×S个格子,每个格子都预测B个bounding box,每个bbox包含5个预测值x,y,w,h和confidence;
    • x,y,w,h用于表示bbox的位置和大小,且都被归一到(0,1);
    • confidence(置信度分数)综合考虑了当前bbox内存在目标的可能性Pr以及预测目标位置的准确性IoU。定义是: c o f i d e n c e = P r ( O b j e c t ) ∗ I o U p r e d t r u t h , P r ( O b j e c t ) = { 1 o b j e c t   e x i s t s   i n   t h a t   c e l l 0 o t h e r w i s e cofidence=Pr(Object)*IoU_{pred}^{truth},Pr(Object)=\begin{cases} 1 & object\space exists\space in\space that\space cell \\ 0 & otherwise\end{cases} cofidence=Pr(Object)IoUpredtruthPr(Object)={10object exists in that cellotherwise
    • 每个格子还要预测分别属于第C种类别的条件概率 P r ( C l a s s i ∣ O b j e c t ) , i = 0 , 1 , . . . C Pr(Class_i|Object),i=0,1,...C Pr(ClassiObject),i=0,1,...C,其中C为数据集物体类别数量;在测试时,属于该格子的B个bbox共享这C个类别的条件概率,则某个bbox的类别置信度为: P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I o U p r e d t r u t h = P r ( C l a s s i ) ∗ I o U p r e d t r u t h Pr(Class_i|Object)*Pr(Object)*IoU_{pred}^{truth}=Pr(Class_i)*IoU_{pred}^{truth} Pr(ClassiObject)Pr(Object)IoUpredtruth=Pr(Classi)IoUpredtruth
    • 最终输出tensor的维度: S × S × ( B × 5 + C ) S\times S\times (B\times 5+C) S×S×(B×5+C)
      在这里插入图片描述
  • 网络结构

    • 网络结构基于GoogleNet
    • 对于PASCAL VOC数据集,采用S=7,B=2,C=20,最终输出tensor的维度:7×7×30(30=B×5+C)
    • 激活函数用的是Leaky ReLU f ( x ) = m a x ( x , 0.1 x ) f(x)=max(x,0.1x) f(x)=max(x,0.1x),在 x < 0 x<0 x<0的时候用 0.1 x 0.1x 0.1x,避免使用ReLU的时候有些单元永远得不到激活,在不增加计算复杂度的前提下,提升了模型的拟合能力。
      在这里插入图片描述
  • YOLO-v1的优缺点及改进

    • 检测速度快:YOLO将目标检测重建为单一回归问题,对输入图像直接处理,同时输出边界框坐标和分类概率,而且每张图像只预测98个bbox,检测速度非常快,在Titan X的GPU上能达到45FPS,Fast YOLO检测速度可以达到155FPS
    • 背景误判少:以往基于滑窗或者候选区域提取的目标检测算法,只能看到图像的局部信息,会出现把背景当前景的问题。而YOLO在回归之前做的全连接,在训练和测试时每个cell都使用全局信息做预测,因此不容易把背景误认为目标。
    • 泛化性更好:YOLO能够学习到目标的泛化表示,能够迁移到其他领域。例如当YOLO在自然图像上做训练,在艺术品上做测试时,YOLO的性能远优于DPM,R-CNN等。
    • Y O L O − v 2 的 改 进 ⇓ YOLO-v2的改进\Darr YOLOv2
      提高了训练图像的分辨率;引入了Faster R-CNN中的anchor box的思想;对网络结构的设计进行了改进(Darknet-19);输出层使用卷积层替代YOLO的全连接层,联合使用coco物体检测标注数据imagenet物体分类标注数据,训练物体检测模型。
    • Y O L O − v 3 的 改 进 ⇓ YOLO-v3的改进\Darr YOLOv3
      类似FPN的多尺度预测;更好的基础分类网络(Darknet-53,结合resnet);Sigmoid代替Softmax用于多标签分类。

SSD[one-stage]

在这里插入图片描述

  • 主要思想:基于YOLO直接回归bbox和****的one-stage检测方法,结合Faster R-CNN中的anchor-box思想产生先验框,并且采用特征金字塔进行多尺度预测,在满足检测速度快的同时,大大提高了检测准确率。

  • 多尺度特征图检测

    • CNN网络一般前面的特征图比较大,后面会逐渐采用stride=2的卷积或者pool来降低特征图大小,在大的和小的特征图都提取anchor box用来做检测,可找到最适合anchor box尺寸,提高检测准确度。
      • 个数:每个点对应6个anchor box,2个正方形和4个长方形(宽高比 a r 取 2 , 3 , 1 2 , 1 3 a_r取2,3,\frac{1}{2},\frac{1}{3} ar232131
      • 第k层scale: s k = s m i n + ( s m a x − s m i n ) m − 1 ( k − 1 ) , k ∈ [ 1 , m ] s_k=s_{min}+\frac{(s_{max}-s_{min})}{m-1}(k-1),k\isin [1,m] sk=smin+m1(smaxsmin)(k1)k[1,m]。其中 S m i n = 0.2 , S m a x = 0.9 S_{min}=0.2,S_{max}=0.9 Smin=0.2,Smax=0.9,m为网络用于生成anchor box进行检测的卷积层总层数,宽高比为1的情况,增加一个默认狂,其缩放为 s k ′ = s k s k + 1 s_k'=\sqrt{s_ks_k+1} sk=sksk+1
      • 第k层anchor box的 宽 : w k a = s k a r , 高 : h k a = s k a r 宽:w_k^a=s_k\sqrt{a_r},高:h_k^a=s_k\sqrt{a_r} wka=skar hka=skar
    • 比较大的特征图可以用来检测相对较小的目标,而小的特征图负责检测大的目标。例如8×8的特征图可以划分为更多单元,其每个单元的先验框尺度较小,适用于检测较小的目标。在这里插入图片描述
  • 同时对多层特征图上的默认框计算IoU,可以找到与真实框大小和位置最接近其的框(IoU中最大的框),在训练时能达到最好的精度。

Object Detection图谱小结

  • two-stage
    • R-CNN->SPP-Net->Fast R-CNN->Faster R-CNN
    • 更好的特征网络
      • HyperNet
      • MS-CNN
      • PVANet
      • Light-Head R-CNN
    • 更精准的RPN
      • MR-CNN
      • FPN
      • CRAFT
    • 更完善的ROI分类
      • R-FCN
        • CoupleNet
      • Mask R-CNN
      • Cascade R-CNN
    • 样本后处理
      • OHEM
      • soft-NMS
      • A-Fast-RCNN
    • 更大的mini-Batch
      • MegDet
  • one-stage
    • OverFeat
      • YOLO—YOLO9000
      • G-CNN
      • RON
      • SSD
        • R-SSD
        • DSSD
        • DSOD
        • FSSD

序列信息

任务是理解语音/文字/视频,方法是循环神经网络。
任务特点:按时序输入的数据之间不是相互独立的,前后数据之间有相关性,所以网络要有存储信息的能力。
主要应用场景:机器翻译,图片描述,视频标注,视觉问答等。

循环神经网络

  • 循环神经网络RNN,通过使用带自反馈的神经元,能够处理任意长度的序列。

  • 设时刻t的输入为 x ( t ) x^{(t)} x(t),隐藏状态为 h ( t ) h^{(t)} h(t) h ( t ) h^{(t)} h(t)既和当前时刻输入 x ( t ) x^{(t)} x(t)相关,也和上一时刻隐藏状态 h ( t − 1 ) h^{(t-1)} h(t1)相关。 h ( t ) = f ( W h ( t − 1 ) + U x ( t ) + b ) , f h^{(t)}=f(Wh^{(t-1)}+Ux^{(t)}+b),f h(t)=f(Wh(t1)+Ux(t)+b)f是非线性激活函数,常用tanh或者ReLU。

  • 时序sequence:RNN能建模序列数据,序列指的是前、后输入数据( x ( t ) , x ( t − 1 ) x^{(t)},x^{(t-1)} x(t),x(t1))不独立,相互影响;

  • 循环recurrent:对每个输入的操作都是一样的,循环往复地重复这些相同操作,每时刻有相同参数W和U(参数共享);

  • 记忆memory:隐藏层 h ( t ) h^{(t)} h(t)中捕捉了所有时刻t之前的信息,理论上 h ( t ) h^{(t)} h(t)记忆的内容可以无限长,然而实际上记忆还是有限的。

  • RNN有多种输入-输出结构。
    RNN
    多种输入输出结构

  • 正向计算过程

    • 初始时刻: h 0 h_0 h0为输入的初始零向量
      h ( 1 ) = f ( W h ( 0 ) + U x ( 1 ) + b ) , o ( 1 ) = V h ( 1 ) + c , y ^ ( 1 ) = s o f t m a x ( o ( 1 ) ) h^{(1)}=f(Wh^{(0)}+Ux^{(1)}+b),o^{(1)}=Vh^{(1)}+c,\hat{y}^{(1)}=softmax(o^{(1)}) h(1)=f(Wh(0)+Ux(1)+b)o(1)=Vh(1)+cy^(1)=softmax(o(1))
    • 一般时刻:
      h ( t ) = f ( W h ( t − 1 ) + U x ( t ) + b ) , o ( t ) = V h ( t ) + c , y ^ ( t ) = s o f t m a x ( o ( t ) ) h^{(t)}=f(Wh^{(t-1)}+Ux^{(t)}+b),o^{(t)}=Vh^{(t)}+c,\hat{y}^{(t)}=softmax(o^{(t)}) h(t)=f(Wh(t1)+Ux(t)+b)o(t)=Vh(t)+cy^(t)=softmax(o(t))
    • f 常 用 t a n h 或 R e L U , W , U , V , b 在 时 间 序 列 上 共 享 参 数 f常用tanh或ReLU,W,U,V,b在时间序列上共享参数 ftanhReLUW,U,V,b
      在这里插入图片描述
  • 反向传播BPTT-back-propagation through time约等于BP

    • 某个时刻的损失函数为: L ( t ) = − y ( t ) ln ⁡ y ^ ( t ) L^{(t)}=-y^{(t)}\ln{\hat{y}^{(t)}} L(t)=y(t)lny^(t)
    • 整个系列的损失函数为: L = ∑ t = 1 τ L ( t ) = − ∑ t = 1 τ y ( t ) ln ⁡ y ^ ( t ) L=\sum\limits_{t=1}^\tau L^{(t)}=-\sum\limits_{t=1}^\tau y^{(t)}\ln{\hat{y}^{(t)}} L=t=1τL(t)=t=1τy(t)lny^(t)
    • 损失函数对W的偏导为: ∂ L ∂ W = ∑ t = 1 τ ∂ L ( t ) ∂ W = ∑ t = 1 τ ∑ k = 1 t ∂ L ( t ) ∂ y ^ ( t ) ∂ y ^ ( t ) ∂ h ( t ) ∂ h ( t ) ∂ h ( k ) ∂ h ( k ) ∂ W \frac{\partial{L}}{\partial{W}}=\sum\limits_{t=1}^\tau \frac{\partial{L^{(t)}}}{\partial{W}}=\sum\limits_{t=1}^\tau\sum\limits_{k=1}^t \frac{\partial{L^{(t)}}}{\partial{\hat{y}^{(t)}}}\frac{\partial{\hat{y}^{(t)}}}{\partial{h^{(t)}}}\frac{\partial{h^{(t)}}}{\partial{h^{(k)}}}\frac{\partial{h^{(k)}}}{\partial{W}} WL=t=1τWL(t)=t=1τk=1ty^(t)L(t)h(t)y^(t)h(k)h(t)Wh(k)
      在这里插入图片描述
  • 梯度爆炸/梯度消失
    根据推导可知序列损失函数对U和W的梯度为:

    • ∂ L ∂ W = ∑ t = 1 τ ∂ L ( t ) ∂ W = ∑ t = 1 τ ∑ k = 1 t ∂ L ( t ) ∂ y ^ ( t ) ∂ y ^ ( t ) ∂ o ( t ) ∂ o ( t ) ∂ h ( t ) ( ∏ i = k + 1 t W T d i a g ( 1 − ( h ( i ) ) 2 ) ) ∂ h ( k ) ∂ W \frac{\partial{L}}{\partial{W}}=\sum\limits_{t=1}^\tau \frac{\partial{L^{(t)}}}{\partial{W}}=\sum\limits_{t=1}^\tau\sum\limits_{k=1}^t \frac{\partial{L^{(t)}}}{\partial{\hat{y}^{(t)}}}\frac{\partial{\hat{y}^{(t)}}}{\partial{o^{(t)}}}\frac{\partial{o^{(t)}}}{\partial{h^{(t)}}}(\prod\limits_{i=k+1}^{t}W^Tdiag(1-(h^{(i)})^2))\frac{\partial{h^{(k)}}}{\partial{W}} WL=t=1τWL(t)=t=1τk=1ty^(t)L(t)o(t)y^(t)h(t)o(t)(i=k+1tWTdiag(1(h(i))2))Wh(k)
    • ∂ L ∂ U = ∑ t = 1 τ ∂ L ( t ) ∂ U = ∑ t = 1 τ ∑ k = 1 t ∂ L ( t ) ∂ y ^ ( t ) ∂ y ^ ( t ) ∂ o ( t ) ∂ o ( t ) ∂ h ( t ) ( ∏ i = k + 1 t W T d i a g ( 1 − ( h ( i ) ) 2 ) ) ∂ h ( k ) ∂ U \frac{\partial{L}}{\partial{U}}=\sum\limits_{t=1}^\tau \frac{\partial{L^{(t)}}}{\partial{U}}=\sum\limits_{t=1}^\tau\sum\limits_{k=1}^t \frac{\partial{L^{(t)}}}{\partial{\hat{y}^{(t)}}}\frac{\partial{\hat{y}^{(t)}}}{\partial{o^{(t)}}}\frac{\partial{o^{(t)}}}{\partial{h^{(t)}}}(\prod\limits_{i=k+1}^{t}W^Tdiag(1-(h^{(i)})^2))\frac{\partial{h^{(k)}}}{\partial{U}} UL=t=1τUL(t)=t=1τk=1ty^(t)L(t)o(t)y^(t)h(t)o(t)(i=k+1tWTdiag(1(h(i))2))Uh(k)
      γ = ∣ ∣ ∏ i = k + 1 t W T d i a g ( 1 − ( h ( i ) ) 2 ) ) ∣ ∣ 2 \gamma=||\prod\limits_{i=k+1}^{t}W^Tdiag(1-(h^{(i)})^2))||_2 γ=i=k+1tWTdiag(1(h(i))2))2 &
      t ≫ k t\gg k tk时, γ = { → ∞ ∂ L ∂ U → ∞ ∂ L ∂ W → ∞ 梯 度 爆 炸 → 0 ∂ L ∂ U → 0 ∂ L ∂ W → 0 梯 度 消 失 \gamma=\begin{cases}\rightarrow\infty & \frac{\partial{L}}{\partial{U}}\rightarrow\infty & \frac{\partial{L}}{\partial{W}}\rightarrow\infty & 梯度爆炸 \\ \rightarrow 0 & \frac{\partial{L}}{\partial{U}}\rightarrow 0 & \frac{\partial{L}}{\partial{W}}\rightarrow 0 & 梯度消失 \end{cases} γ={0ULUL0WLWL0
      由于梯度暴躁或消失的存在,循环神经网络实际上只能学习到短期的依赖关系。循环神经网络的递归结构导致梯度消失或梯度爆炸现象更明显。
    • 如何改进?
      • 梯度爆炸    ⟹    \implies 梯度截断
        在这里插入图片描述
      • 梯度消失    ⟹    \implies 模型上的改进,例如LSTM,GRU算法

梯度消失    ⟹    \implies 循环神经网络无法处理长期依赖关系
相关信息与预测位置的间隔较长时,RNNs就会无法学习连接信息。
应该如何记住长期依赖呢? ⇓ \Darr

长短期记忆模型

LSTM(Long Short-Term Memory networks)

在这里插入图片描述

  • 隐藏状态:作为神经网络的记忆,保存着网络先前观察到的数据信息。
  • 单元状态:类似信息传送带,他贯穿整个链条,只有一些小的线性相互作用;这很容易让信息以不变的方式向下流动;LSTM有能力向单元状态中移除或添加信息,这种管理结构称为门限。
  • 网络结构【结构的符号看上图】
    • Forget gate遗忘门:记住前一时刻单元状态的多少内容
      f ( t ) = σ ( U f x ( t ) + W f h ( t − 1 ) + b f ) = σ ( W f ( h ( t − 1 ) x ( t ) ) ) f^{(t)}=\sigma(U^f x^{(t)}+W^f h^{(t-1)}+b^f)=\sigma(W_f{h^{(t-1)} \choose x^{(t)}}) f(t)=σ(Ufx(t)+Wfh(t1)+bf)=σ(Wf(x(t)h(t1)))
    • Input gate输入门:写入多少输入到当前状态
      i ( t ) = σ ( U i x ( t ) + W i h ( t − 1 ) + b i ) = σ ( W i ( h ( t − 1 ) x ( t ) ) ) i^{(t)}=\sigma(U^i x^{(t)}+W^i h^{(t-1)}+b^i)=\sigma(W_i{h^{(t-1)} \choose x^{(t)}}) i(t)=σ(Uix(t)+Wih(t1)+bi)=σ(Wi(x(t)h(t1)))
    • Output gate输出门:输出多少当前单元状态
      g ( t ) = σ ( U o x ( t ) + W o h ( t − 1 ) + b o ) = σ ( W o ( h ( t ) x ( t ) ) ) g^{(t)}=\sigma(U^o x^{(t)}+W^o h^{(t-1)}+b^o )=\sigma(W_o {h^{(t)} \choose x^{(t)}}) g(t)=σ(Uox(t)+Woh(t1)+bo)=σ(Wo(x(t)h(t)))
    • 内部状态更新
      c ( t ) = f ( t ) c ( t − 1 ) + i ( t ) c ~ ( t ) c^{(t)}=f^{(t)}c^{(t-1)}+i^{(t)}{\tilde c}^{(t)} c(t)=f(t)c(t1)+i(t)c~(t)
      c ~ ( t ) = tanh ⁡ ( U x ( t ) + W h ( t − 1 ) + b ) = σ ( W c ( h ( t − 1 ) x ( t ) ) ) {\tilde c}^{(t)}=\tanh(Ux^{(t)}+Wh^{(t-1)}+b)=\sigma(W_c{h^{(t-1)} \choose x^{(t)}}) c~(t)=tanh(Ux(t)+Wh(t1)+b)=σ(Wc(x(t)h(t1)))
    • LSTM cell输出
      h ( t ) = g ( t ) tanh ⁡ ( c ( t ) ) h^{(t)}=g^{(t)}\tanh(c^{(t)}) h(t)=g(t)tanh(c(t))
  • LSTM变体
    • 窥视孔连接(peephole connection):门值不仅取决于 h t − 1 和 x t h_{t-1}和x_t ht1xt,也取决于上一个单元状态的值 C t − 1 C_{t-1} Ct1
      f ( t ) = σ ( U f x ( t ) + W f h ( t − 1 ) + M f c ( t − 1 ) + b f ) f^{(t)}=\sigma(U^f x^{(t)}+W^f h^{(t-1)}+M^f c^{(t-1)}+b^f) f(t)=σ(Ufx(t)+Wfh(t1)+Mfc(t1)+bf)
      i ( t ) = σ ( U i x ( t ) + W i h ( t − 1 ) + M i c ( t − 1 ) + b i ) i^{(t)}=\sigma(U^i x^{(t)}+W^i h^{(t-1)}+M^i c^{(t-1)}+b^i) i(t)=σ(Uix(t)+Wih(t1)+Mic(t1)+bi)
      g ( t ) = σ ( U o x ( t ) + W o h ( t − 1 ) + M o c ( t − 1 ) + b o ) g^{(t)}=\sigma(U^o x^{(t)}+W^o h^{(t-1)}+M^o c^{(t-1)}+b^o) g(t)=σ(Uox(t)+Woh(t1)+Moc(t1)+bo)在这里插入图片描述
    • 耦合输入门和遗忘门:不单独决定遗忘和新增信息,在输入时一起做决定: c ( t ) = f ( t ) c ( t − 1 ) + ( 1 − f ( t ) ) c ~ ( t ) c^{(t)}=f^{(t)}c^{(t-1)}+(1-f^{(t)}){\tilde c}^{(t)} c(t)=f(t)c(t1)+(1f(t))c~(t)
      在这里插入图片描述

GRU(Gated Recurrent Unit)

在LSTM的基础上,将单元状态和隐藏状态合并,将遗忘门和输入门合并为更新门,无输出门。更新门决定历史信息和当前信息如何相加;重置门决定保留多少历史信息进入当前信息。
在这里插入图片描述

  • 更新门update gate
    z ( t ) = σ ( U z x ( t ) + W z h ( t − 1 ) + b z ) z^{(t)}=\sigma(U^z x^{(t)}+W^z h^{(t-1)}+b^z) z(t)=σ(Uzx(t)+Wzh(t1)+bz)
  • 重置门reset gate
    r ( t ) = σ ( U r x ( t ) + W r h ( t − 1 ) + b r ) r^{(t)}=\sigma(U^r x^{(t)}+W^r h^{(t-1)}+b^r) r(t)=σ(Urx(t)+Wrh(t1)+br)
  • 隐藏状态更新
    h ( t ) = ( 1 − z ( t ) ) h ( t − 1 ) + z ( t ) h ~ ( t ) h^{(t)}=(1-z^{(t)})h^{(t-1)}+z^{(t)}{\tilde h}^{(t)} h(t)=(1z(t))h(t1)+z(t)h~(t)
    h ~ ( t ) = tanh ⁡ ( U x ( t ) + W ( r ( t ) h ( t − 1 ) ) + b ) {\tilde h}^{(t)}=\tanh(Ux^{(t)}+W(r^{(t)}h^{(t-1)})+b) h~(t)=tanh(Ux(t)+W(r(t)h(t1))+b)

长短期记忆模型小结

在这里插入图片描述
哪个模型更好无定论。
GRU参数量更少,训练速度快
在训练数据足够的情况下,LSTM的表征能力更强
具体问题可自行选择

生成对抗网络GAN[热门&新]

解决小样本的深度学习,从训练样本中学习出新样本,为无监督、预测学习提供算法框架。

  • 有监督学习:损失函数是给定的,网络学习到的是数据的模式和特征

  • 无监督学习:损失函数学习得到,网络学习到的是数据的分布【GAN】

  • 核心组成:生成网络(伪造样本)和判别网络(判别样本是伪造的还是原生的),GAN学习到了真实样本集的数据分布。【极小极大博弈】

    • 生成器-伪装者:找出观测数据内部的统计规律,尽可能生成能够以假乱真的样本,使判别网络输出接近0.5,难以区分真假
      优化生成器G:生成的假样本 G ( z ) G(z) G(z),被判别器判断为接近1,即 ( 1 − D ( G ( z ) ) ) (1-D(G(z))) (1D(G(z)))越小越好。
      J ( G ) = E z ∽ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] J^{(G)}=E_{z\backsim p_z(z)}[\log(1-D(G(z)))] J(G)=Ezpz(z)[log(1D(G(z)))]
    • 判别器-警察:判断输入数据是来自真实样本集还是生成样本集,如果输入是真样本,输出接近1;如果输入是生成样本,输出接近0。倒是有些能耐了。
      优化判别器D:输入真样本x时,输出接近1;输入生成样本 G ( z ) G(z) G(z)时,输出接近0。
      J ( D ) = − E x ∽ p d a t a ( x ) [ log ⁡ ( D ( x ) ) ] − E z ∽ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] J^{(D)}=-E_{x\backsim p_{data}(x)}[\log(D(x))]-E_{z\backsim p_z(z)}[\log(1-D(G(z)))] J(D)=Expdata(x)[log(D(x))]Ezpz(z)[log(1D(G(z)))]
    • GAN训练是极小极大博弈问题-零和博弈
      min ⁡ G max ⁡ D V ( D , G ) = − J ( D ) = E x ∽ p d a t a ( x ) [ log ⁡ ( D ( x ) ) ] + E z ∽ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \min\limits_G\max\limits_DV(D,G)=-J^{(D)}=E_{x\backsim p_{data}(x)}[\log(D(x))]+E_{z\backsim p_z(z)}[\log(1-D(G(z)))] GminDmaxV(D,G)=J(D)=Expdata(x)[log(D(x))]+Ezpz(z)[log(1D(G(z)))]
      在这里插入图片描述
  • GAN的特点和问题
    GAN有一个整体的损失函数,而不需要对生成网络和对抗网络分别指定具体的损失函数,有较强的通用性。

    • 梯度消失:当判别器以高置信度成功判断生成器生成的样本为假样本时,生成器的梯度会消失,训练早期 log ⁡ ( 1 − D ( G ( z ) ) ) \log(1-D(G(z))) log(1D(G(z)))会饱和。
      应对方法:修改生成器的代价函数 J ( G ) = − E z ∽ p z ( z ) [ log ⁡ ( D ( G ( z ) ) ) ] J^{(G)}=-E_{z\backsim p_z(z)}[\log(D(G(z)))] J(G)=Ezpz(z)[log(D(G(z)))]
    • 模式崩溃model collapse:生成器只生成几种模式的样本,生成样本缺乏多样性。
      产生原因:GAN的损失函数使判别器假样本的惩罚是巨大的,一旦生成的某类假样本成功骗过判别器,生成器就趋向于生成相似的样本。
      应对方法(WGAN):采用更加平滑的损失函数。
  • GAN发展现状

    • 卷积GAN
      • DCGAN:将GAN中全连接神经网络扩展到卷积神经网络
      • ResGAN:图像恢复,ResNet。
      • SRGAN:超分辨率,ResNet。
      • CycleGAN:图像转换。
    • 条件GAN
      • CGAN
      • InfoGAN
    • 集成推理模型的GAN
      • BiGAN
    • 对抗自编码器
      • VAE-GAN
  • GAN的应用

    • 人脸生成
    • 风格转换
    • super resolution

Example

Image style transfer

普通的反向传播,调整的是权重;图像风格转化的反向传播,调整的是原始图像,就是损失函数对原始图像的偏导。
在这里插入图片描述

  • 整体概述

    • 给定一张风格图像a和一张内容图像p;
    • 风格图像a经过CNN生成的feature maps组成风格特征集A;
    • 内容图像p通过CNN生成的feature maps组成内容特征集P;
    • 输入一张随机噪声图像x,随机噪声图像x通过CNN生成的feature maps构成内容特征集合F和风格特征集合G,目标损失函数由A,P,F,G计算得到;
    • 优化函数是希望调整图像x,使其最后看起来既保持内容图像p的内容,又有风格图像a的风格。
    • 论文中使用的CNN网络为在imageNet上训练好的VGG19,去除了最后的全连接层和SoftMax。
  • 内容损失函数

    • 只取conv4单层特征来计算内容损失
    • 计算内容图片特征噪音图片特征之间的欧式距离
      L c o n t e n t ( p , x , l ) = 1 2 ∑ i , j ( F i , j l − P i , j l ) 2 L_{content}(p,x,l)=\frac{1}{2}\sum\limits_{i,j}(F_{i,j}^l-P_{i,j}^l)^2 Lcontent(p,x,l)=21i,j(Fi,jlPi,jl)2
      l : 用 于 计 算 内 容 特 征 的 层 数 l:用于计算内容特征的层数 l
      F i , j l : 生 成 图 片 在 第 l 层 第 i 个 特 征 图 上 位 置 j 处 的 特 征 值 F_{i,j}^l:生成图片在第l层第i个特征图上位置j处的特征值 Fi,jllij
      P i , j l : 内 容 图 片 在 第 l 层 第 i 个 特 征 图 上 位 置 j 处 的 特 征 值 P_{i,j}^l:内容图片在第l层第i个特征图上位置j处的特征值 Pi,jllij
      p : 内 容 图 片 p:内容图片 p
      x : 生 成 图 片 x:生成图片 x
  • 风格损失函数

    • 取conv1~conv5共5层的特征来计算风格损失
    • 使用相关矩阵来表示图像的风格
      L s t y l e ( a , x ) = ∑ l w l E l L_{style}(a,x)=\sum\limits_{l}w_lE_l Lstyle(a,x)=lwlEl
      E l = 1 4 N l 2 M l 2 ∑ i , j ( G i , j l − A i , j l ) 2 E_l=\frac{1}{4N_l^2M_l^2}\sum\limits_{i,j}(G_{i,j}^l-A_{i,j}^l)^2 El=4Nl2Ml21i,j(Gi,jlAi,jl)2
      G i , j l = ∑ k F i , k l F j , k l , [ g r a m 矩 阵 ] G_{i,j}^l=\sum\limits_kF_{i,k}^lF_{j,k}^l,[gram矩阵] Gi,jl=kFi,klFj,kl[gram]
      L : 用 于 计 算 风 格 特 征 的 层 数 L:用于计算风格特征的层数 L
      w l : 第 l 层 的 E l 用 于 计 算 风 格 损 失 的 权 重 , 文 中 都 取 0.2 w_l:第l层的E_l用于计算风格损失的权重,文中都取0.2 wllEl,0.2
      a : 初 始 风 格 图 片 a:初始风格图片 a
      x : 生 成 图 片 x:生成图片 x
      A i , j l : 风 格 图 片 在 第 l 层 第 i 个 特 征 图 和 第 j 个 特 征 图 的 内 积 A_{i,j}^l:风格图片在第l层第i个特征图和第j个特征图的内积 Ai,jllij
      G i , j l : 生 成 图 片 在 第 l 层 第 i 个 特 征 图 和 第 j 个 特 征 图 的 内 积 G_{i,j}^l:生成图片在第l层第i个特征图和第j个特征图的内积 Gi,jllij
      M l : 第 l 层 的 输 出 特 征 图 的 大 小 M_l:第l层的输出特征图的大小 Mll
      N l : 第 l 层 的 输 出 特 征 图 的 数 目 N_l:第l层的输出特征图的数目 Nll
      F i , k l : 第 l 层 第 i 个 特 征 图 像 位 置 上 k 处 的 特 征 值 F_{i,k}^l:第l层第i个特征图像位置上k处的特征值 Fi,kllik
  • 整体函数: L t o t a l ( p , a , x ) = α L c o n t e n t ( p , x ) + β L s t y l e ( a , x ) L_{total}(p,a,x)=\alpha L_{content}(p,x)+\beta L_{style}(a,x) Ltotal(p,a,x)=αLcontent(p,x)+βLstyle(a,x)
    可以利用 α 和 β \alpha和\beta αβ调整内容和风格的权重, α β \frac{\alpha}{\beta} βα越大,内容越具体在这里插入图片描述

  • 适当改进
    对每一张带转换图片,都要进行前馈和反馈调优过程,无法做到实时转换    ⟹    \implies 能够把图像生成网络提前训练,好使风格转换过程不需要进行反向训练。 ⇓ \Darr
    在这里插入图片描述运用GAN的思想,反向传播调整的是图像转换网络(生成器)里的权重,损失函数可以认为是判别器。提速1000倍,但是准确度稍微有所下降。
    在这里插入图片描述

  • Image Transfer Net的特点

    • 深度卷积网络,参考DCGAN的设计思路:用步幅卷积替代pooling,每个卷积层后接BatchNorm和ReLU。
    • 增加残差结构,使网络更易训练。

总结

本章的公式和概念暂时先列出,未来继续遇到实践,有所理解会来更新
1.适合图像处理的卷积神经网络
包括卷积层,池化层,归一化层,全连接层,softmax计算原理,层的排布规律。
2.基于CNN的图像分类神经网络算法
主要介绍了AlexNet(LRN,dropout),VGG,Inception系列(1*1卷积,BatchNorm),ResNet经典的神经网络分类算法。
3.基于CNN的图像检测神经网络算法
主要介绍了检测算法评价指标(IoU,mAP),R-CNN系列(Region Proposal,NMS,ROIPooling,RPN,anchor box),YOLO,SSD。
4.循环神经网络
主要介绍了循环神经网络的应用,网络结构,正/反向过程,以及梯度消失产生原因。
5.长短期记忆模型LSTM/GRU
6.生成对抗网络GAN
包括原始GAN结构,模式崩溃,DCGAN,以及conditionalGAN。
7.Example-Image Transfer

PS.只是学习笔记,如果有版权或者内容错误,请联系博主。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值