1.首次使用GPU加速网络训练
2.ReLU激活函数
关于Sigmod,ReLU,LeakyReLU激活函数的比较
3.使用LRN局部响应归一化
4.在全连接层的前两层中使用了 Dropout 随机失活神经元操作,以减少过拟合
*Note:
经 过 卷 积 后 的 矩 阵 尺 寸 大 小 计 算 公 式 为 : N = W − F + 2 P S + 1 输 入 图 片 大 小 : W × W 卷 积 核 尺 寸 : F × F 步 长 s t r i d e : S p a d d i n g 值 : P 经过卷积后的矩阵尺寸大小计算公式为:\\ N=\frac{W-F+2P}{S}+1\\ 输入图片大小:W \times W \quad 卷积核尺寸:F \times F \quad 步长stride:\ S \quad padding值:P 经过卷积后的矩阵尺寸大小计算公式为:N=SW−F+2P+1输入图片大小:W×W卷积核尺寸:F×F步长stride: Spadding值:P
–VERY DEEP CONVOLUTIONAL NETWORKS–
通过堆叠多个3x3的卷积核来替代大尺度卷积核 (减少所需参数)
可以通过堆叠两个3x3的卷积核替代5x5的卷积核,堆叠三个3x3的卷积核替代7x7的卷积核,它们拥有相同的感受野(receptive field).。
感 受 野 计 算 公 式 : F ( i ) = ( F ( i + 1 ) − 1 ) × S t r i d e + K s i z e 感受野计算公式:F(i)=(F(i+1)-1)\times Stride+Ksize 感受野计算公式:F(i)=(F(i+1)−1)×Stride+Ksize
4.丢弃全连接层,使用平均池化层(大大减少模型参数)
**Question:**Is learning better networks as easy as stacking more layers?
Anwser:如图 所示,在训练集上,传统神经网络越深效果不一定越好。而 Deep Residual Learning for Image Recognition 这篇论文认为,理论上,可以训练一个 shallower 网络,然后在这个训练好的 shallower 网络上堆几层 identity mapping(恒等映射) 的层,即输出等于输入的层,构建出一个 deeper 网络。这两个网络(shallower 和 deeper)得到的结果应该是一模一样的,因为堆上去的层都是 identity mapping。这样可以得出一个结论:理论上,在训练集上,Deeper 不应该比 shallower 差,即越深的网络不会比浅层的网络效果差。但为什么会出现图 中 这样的情况呢,随着层数的增多,训练集上的效果变差?这被称为退化问题(degradation problem),原因是随着网络越来越深,训练变得原来越难,网络的优化变得越来越难。理论上,越深的网络,效果应该更好;但实际上,由于训练难度,过深的网络会产生退化问题,效果反而不如相对较浅的网络。而残差网络就可以解决这个问题的,残差网络越深,训练集上的效果会越好。(测试集上的效果可能涉及过拟合问题。过拟合问题指的是测试集上的效果和训练集上的效果之间有差距。)
文中对比了VGG19、34-layer plain(没有residue模块)、34-layer residual模型
1.超深的网络结构
->梯度消失或梯度爆炸问题
3.Batch Normalization
目的:使一批feature map满足均值为0,方差为1的分布规律
Input: V a l u e s o f x o v e r a m i n i − b a t c h : B = { x 1... m } ; P a r a m e t e r s t o b e l e a r n e d : γ , β Output: { y i = B N γ , β ( x i ) } μ B ← 1 m ∑ i = 1 m x m / / m i n i − b a t c h m e a n σ B 2 ← 1 m ∑ i = 1 m ( x i − μ B ) 2 / / m i n i − b a t c h v a r i a n c e x i ^ ← x i − μ B σ B 2 + ϵ / / n o r m a l i z e y i ← γ x i ^ + β ≡ B N γ , β ( x i ) / / s c a l e a n d s h i f t \textbf{Input:}Values\ of\ x\ over\ a\ mini-batch:B=\{ x_{1...m}\}; \\Parameters\ to\ be\ learned:\gamma,\beta\\ \textbf{Output:}\{y_i=BN_{\gamma,\beta}(x_i)\}\\ \mu_B \leftarrow \frac {1}{m} \sum_{i=1}^m x_m \qquad //mini-batch\ mean\\ \sigma_B^2 \leftarrow \frac{1}{m} \sum_{i=1}^m(x_i-\mu_B)^2 \qquad //mini-batch\ variance\\ \hat{x_i} \leftarrow \frac {x_i-\mu_B}{\sqrt{\sigma_B^2+\epsilon}} \qquad //normalize \\ y_i \leftarrow \gamma \hat{x_i}+\beta \equiv BN_{\gamma,\beta}(x_i) \qquad //scale\ and\ shift Input:Values of x over a mini−batch:B={x1...m};Parameters to be learned:γ,βOutput:{yi=BNγ,β(xi)}μB←m1i=1∑mxm//mini−batch meanσB2←m1i=1∑m(xi−μB)2//mini−batch variancexi^←σB2+ϵxi−μB//normalizeyi←γxi^+β≡BNγ,β(xi)//scale and shift
我们给一个网络不论在中间还是末尾加上一个残差块,并给残差块中的 weights 加上 L2 regularization(weight decay),这样F(x)=0 是很容易的。这种情况下加上一个残差块和不加之前的效果会是一样,所以加上残差块不会使得效果变得差。如果残差块中的隐藏单元学到了一些有用信息,那么它可能比 identity mapping(即 F(x)=0)表现的更好。
*Note:–迁移学习–
优势:
常见的迁移学习方式
一张图像生成1000~2000个候选区域(Proposals),采用Selective Search方法
对每个候选区域,使用深度网络提取特征
特征送入每一类的SVM分类器,判别是否属于该类
将2000×4096的特征矩阵与20个SVM组成的权值矩阵4096×20
相乘,获得2000×20的概率矩阵,每一行代表一个建议框归于每个
目标类别的概率。分别对上述2000×20维矩阵中每一列即每一类进
行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一
些建议框。
使用回归器精细修正候选框位置
论文指出了R-CNN存在的问题
测试速度慢:测试一张图片约53s(CPU)。用Selective Search算法提取候选框用时约2秒,一张图像内候选框之间存在大量重叠,提取特征操作冗余;训练速度慢;训练所需空间大。
Fast_RCNN的主要贡献:
损失函数 Multi-task loss
L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) p 是 分 类 器 预 测 的 s o f t m a x 概 率 分 布 p = { p 0 , . . . , p k } u 对 应 目 标 真 实 类 别 标 签 分 类 损 失 : L c l s ( p , u ) = − l o g p u 边 界 框 回 归 损 失 : L l o c ( t u , v ) = ∑ i ∈ { x , y , w , h } s m o o t h L 1 ( t i u − v i ) s m o o t h L 1 ( x ) = { 0.5 x 2 i f ∣ x ∣ < 1 ∣ x ∣ − 0.5 o t h e r w i s e L(p,u,t^u,v)=L_{cls}(p,u)+\lambda[u\ge1]L_{loc}(t^u,v) \\p是分类器预测的softmax概率分布p=\{p_0,...,p_k\} \\u对应目标真实类别标签 \\分类损失:L_{cls}(p,u)=-log\ p_u \\边界框回归损失:L_{loc}(t^u,v)=\sum_{i\in \{x,y,w,h \}}smooth_{L_1}(t_i^u-v_i) \\ smooth_{L_1}(x)= \left\{ \begin{array}{lr} 0.5x^2 \qquad if |x|<1\\ |x|-0.5 \qquad otherwise \end{array} \right. L(p,u,tu,v)=Lcls(p,u)+λ[u≥1]Lloc(tu,v)p是分类器预测的softmax概率分布p={p0,...,pk}u对应目标真实类别标签分类损失:Lcls(p,u)=−log pu边界框回归损失:Lloc(tu,v)=i∈{x,y,w,h}∑smoothL1(tiu−vi)smoothL1(x)={0.5x2if∣x∣<1∣x∣−0.5otherwise
对于一张1000x600x3的图像,大约有60x40x9(20k)个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor。对于RPN生成的候选框之间存在大量重叠,基于候选框的cls得分,采用非极大值抑制,IoU设为0.7,这样每张图片只剩2k个候选框。
L ( p i , t i ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ ) p i 表 示 第 i 个 a n c h o r 预 测 为 真 实 标 签 的 概 率 p i ∗ 当 为 正 样 本 时 为 , 当 为 负 样 本 时 为 0 t i 表 示 预 测 第 i 个 a n c h o r 的 边 界 框 回 归 参 数 t i ∗ 表 示 第 i 个 a n c h o r 对 应 的 G T B o x 的 边 界 回 归 参 数 N c l s 表 示 一 个 m i n i − b a t c h 中 的 样 本 数 量 256 N r e g 表 示 a n c h o r 位 置 的 个 数 , 约 2400 L({p_i},{t_i})=\frac {1}{N_{cls}}\sum_i L_{cls}(p_i,p_i^*)+\lambda \frac {1}{N_{reg}}\sum_i p_i^* L_{reg}(t_i,t_i^*) \\p_i表示第i个anchor预测为真实标签的概率 \\p_i^*当为正样本时为,当为负样本时为0 \\t_i表示预测第i个anchor的边界框回归参数 \\t_i^*表示第i个anchor对应的GTBox的边界回归参数 \\N_{cls}表示一个mini-batch中的样本数量256 \\N_{reg}表示anchor位置的个数,约2400 L(pi,ti)=Ncls1i∑Lcls(pi,pi∗)+λNreg1i∑pi∗Lreg(ti,ti∗)pi表示第i个anchor预测为真实标签的概率pi∗当为正样本时为,当为负样本时为0ti表示预测第i个anchor的边界框回归参数ti∗表示第i个anchor对应的GTBox的边界回归参数Ncls表示一个mini−batch中的样本数量256Nreg表示anchor位置的个数,约2400
简介:SSD网络是作者Wei Liu在ECCV 2016上发表的论文。对于输入尺寸300x300的网络使用Nvidia Titan X在VOC 2007测试集上达到74.3%mAP以及59FPS,对于512x512的网络,达到了76.9%mAP超越当时最强的Faster RCNN(73.2%mAP)。真正的实时
Faster RCNN存在的问题
表现:mAP:63.4% 45FPS 448x448
将一幅图像分成SxS个网格(grid cell),如果某个object的中心落在这个网格中,则这个网格就负责预测这个object
每个网格要预测B个bounding box,每个bounding box除了要预测位置之外,还要附带预测一个confidence值。每个网格还要预测C个类别的分数
YOLOv2的尝试:
Batch Normalization
High Resolution Classifier
Dimension Clusters聚类
Direct location prediction
Fine-Grained Features
Mosaic图像增强
CIOU Loss
GIoU、DIoU、CIoU
一个优秀的回归定位损失应该考虑到3种几何参数:
重叠面积 中心点距离 长宽比
C I o U = I o U − ( ρ 2 ( b , b g t ) c 2 + α v ) v = 4 π 2 ( arctan w g t h g t − arctan w h ) 2 α = v ( 1 − I o U ) + v L C I o U = 1 − C I o U C I o U=I o U-\left(\frac{\rho^{2}\left(b, b^{g t}\right)}{c^{2}}+\alpha v\right) \\v=\frac{4}{\pi^{2}}\left(\arctan \frac{w^{g t}}{h^{gt} }-\arctan \frac{w}{h}\right)^{2} \\\alpha=\frac{v}{(1-I o U)+v} \\L_{CIoU}=1-CIoU CIoU=IoU−(c2ρ2(b,bgt)+αv)v=π24(arctanhgtwgt−arctanhw)2α=(1−IoU)+vvLCIoU=1−CIoU
Focal Loss
Focal loss主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重
二 分 类 交 叉 熵 损 失 : C E ( p , y ) = { − log ( p ) if y = 1 − log ( 1 − p ) otherwise 为 了 方 便 , 用 p t 表 示 样 本 为 t r u e c l a s s 的 概 率 则 p t = { p if y = 1 1 − p otherwise C E ( p , y ) = C E ( p t ) = − log ( p t ) 引 入 调 制 系 数 ( 1 − p t ) γ F L ( p t ) = − ( 1 − p t ) γ log ( p t ) 二分类交叉熵损失:\mathrm{CE}(p, y)=\left\{\begin{array}{ll} -\log (p) & \text { if } y=1 \\ -\log (1-p) & \text { otherwise } \end{array}\right. \\为了方便,用p_t表示样本为true\ class的概率 \\则p_{\mathrm{t}}=\left\{\begin{array}{ll} p & \text { if } y=1 \\ 1-p & \text { otherwise } \end{array}\right. \\\mathrm{CE}(p, y)=\mathrm{CE}\left(p_{\mathrm{t}}\right)=-\log \left(p_{\mathrm{t}}\right) \\ 引入调制系数(1-p_t)^{\gamma} \qquad \mathrm{FL}\left(p_{\mathrm{t}}\right)=-\left(1-p_{\mathrm{t}}\right)^{\gamma} \log \left(p_{\mathrm{t}}\right) 二分类交叉熵损失:CE(p,y)={−log(p)−log(1−p) if y=1 otherwise 为了方便,用pt表示样本为true class的概率则pt={p1−p if y=1 otherwise CE(p,y)=CE(pt)=−log(pt)引入调制系数(1−pt)γFL(pt)=−(1−pt)γlog(pt)
两个重要性质: