论文 | 备注 | time(ms) | mAP(%) |
---|---|---|---|
Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation | 利用CNN结果物体检测问题利用迁移学习思想缓解标注数据过少的问题 | 13000 | VOC 2012: 53.3 |
Fast R-CNN | 结合RCNN和SPPnet的改进版本实现detection流程端对端一体化训练 | 1830 | VOC 2012: 65.7 |
Faster R-CNN | 本文的主旨是将生成proposal的过程也使用神经网络处理共享了classification的中间卷积结果,大大减少了proposal过程的用时 | 198 | VOC 2012: 67.0 |
Faster R-CNN
总结
- 本文的主旨是将生成proposal的过程也使用神经网络处理,并且共享了classification的中间卷积结果,大大减少了proposal过程的用时
RPN网络结构
- 用一个n*n(本文用3)的卷积核在classification的最后一层卷积出来的feature map上滑动
- 以每个feature为中心生成3(不同尺寸)*3(不同比例)的定长proposal 特征vector(在训练时与图片边界产生交叉的proposal丢弃)
- 然后在这个vector后面接两个1*1卷积,得出两组结果
- 一组表示这个proposal有待检测物体的概率(2个数 softmax)
- 一组表示边界框的位置(4个数)
- 根据有物体的概率做NMS(阈值0.7)
- 这种生成proposal的方式具有平移不变性
网络训练
Fast R-CNN
Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation
Inception总结
论文 | 备注 | top5 error |
---|---|---|
Network In Network | 提出了1 x 1卷积核代替maxout 提供了更好的多filter聚合能力 | CIFAR-100 数据集 1 model; 1 crop; top1 error: 35.68% |
Going deeper with convolutions | 将NIN中子网络的概念更加泛化利用多个不同大小的filter抽取信息利用1 X 1卷积增加信息稠密程度减少计算量 | ILSVRC 2014 数据集1 model; 1 crop: 10.07%ensemble(7 models, 144 crops): 6.67% |
Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift | 提出并利用BN结构解决内部协变量漂移问题大幅提升网络训练速度 | LSVRC 2012 数据集ensemble(6 models, 144 crops): 4.94% |
Rethinking the Inception Architecture for Computer Vision | 提出了4个设计网络的原则 提出了用多个小卷积代替大卷积的方法 提出了用非对称卷积 提出了更高效的pooling方式——conv和pool并行计算然后concat到一起 提出新的正则化方式——标签平滑 |
LSVRC 2012 数据集 1 model; 1 crop:5.6% ensemble(4 models, 144 crops): 3.58% |
Inception-v4, Inception-ResNet and the Impact of Residual Connection on Learning | 在v3的基础上加了一些小改动提出v4与ResNet结合提出Inception-ResNet提出了当filter数量超过1000的时候防止训练崩溃的缩放残差方法 | ILSVRC 2012 数据集 1 model; 1 crop: Inception-v4: 5.0% Inception-ResNet-v1: 5.5% Inception-ResNet-v2: 4.9% Inception-v4 + 3 * Inception-ResNet-v2: 3.1% |
GAN总结
论文 | 备注 |
---|---|
Generative Adversarial Nets | GAN原始论文, 提出了对抗结构和原始优化目标函数 |
Conditional Generative Adversarial Nets | 加了条件作为额外的输入,可以用于给生成指定类别的图像和和图像打标签 |
Unsupervised representation learning with deep convolutional Generative Adersarial Networks | DCGAN, 提出一种新的生成器结构改善生成图像效果,并对训练出的模型的可视化做了探索 |
Towards Principled Methods for Training Generative Adversarial Networks | 首次从数学的角度聊GAN,分析了之前GAN中所存在的问题,提出了加噪声的解决方案 |
Wasserstein GAN | 提出了用Wasserstein距离代替JS散度的方案,解决了训练不稳定,模型坍塌的问题,并提供了一种模型训练进度的可量化指标 |
Wasserstein GAN
总结
- 文章首先说明了学习一个概率密度的传统方法使用KL散度
- 但是KL散度在两个低维流形的概率分布中不好使,因为他们没有无法忽视的重叠,从而散度是一个常数。通过加噪声可以补救这个问题,但是并不是一个好方法(对于GAN来说会使生成的图片模糊不清)
- 对于传统方法,目前的新方法是从一个固定分布$p(z)$随出一个随机变量$z$然后将$z$放入一个函数映射$g_\theta : z \rightarrow x$得到一个服从$P_\theta$分布的样本。
- 这样做有两个好处,一个是这种方式可以更合更低维度的分布
- 另外这种方式可以更加方便的生成新样本
- 接下来作者开始分析WGAN中使用Wasserstein距离代替原来JS散度的原因,从这种距离的性质入手
- 如果$g_\theta$是连续的那么$W(P_r, P_\theta)$也是连续的
- 如果$g$是K利普希茨连续,那么$W(P_r, P_\theta)$几乎在全部可导
- 上述两条性质对于JS散度不成立,所以我们选用Wasserstein距离代替KL散度
- 为了让$g_\theta$保持利普希茨连续,我们将网络中所有参数控制在[-0.01, 0.01]区间内
- 这个数值不宜太大,否则会使收敛速度过慢
- 不宜太小,否则可能会导致梯度消失
- 使用W距离后判别器损失函数为$-(f_w(x) - f_w(g_\theta(z)))$, 生成器损失函数为$-f_w(g_\theta(z))$
- 因为W距离连续可导,所以在交替训练的过程中可以将分类器训练至收敛,不必向以往一样两步分类器一步生成器
- WGAN的显著优势:
- 不会模型坍塌——W距离连续得到的另外一个好处是不会导致模型坍塌;对于原始损失函数来说,判别器的输出是个二分类结果,那么对于最优的分类器来说,生成器的最终结果只能是坍塌即生成真实图像训练样本;换成W距离后,判别器输出的是距离,是回归问题,不会导致坍塌
- WGAN提升了稳定性——由于我们在交替训练过程中可以把判别器训练到局部最优,判别器越精确,梯度也就越精确,训练也就越稳定
- 有实际意义的损失函数——WGAN的生成器损失函数可以当做模型训练进度的可量化指标,不用向以往一样人肉观察生成出来的样本来做判别模型好坏的标准;但是需要注意不能拿这个指标衡量不同结构的模型
- optimizer的选择:训练的时候由于交替训练,损失函数不要使用基于动量的(如Adam)optimizer,改用RMSProp,一般在这种梯度不稳定的情况下表现的不错
Introduction
- when we learn a probability distribution, This is often done by defining a parametric family of densities $P_\theta (\theta \in R^d)$ and finding the one that maximized the likelihood on our data, this amounts to minimizing the Kullback-Leibler divergence $KL(P_r||P_g)$
- but It is then unlikely that the model manifold and the true distribution’s support have a non-negligible intersection
- the typical remedy is to add a noise term to the model distribution
- the added noise term is clearly incorrect for the problem, but is needed to make the maximum likelihood approach work
now:
Towards Principled Methods for Training Generative Adversarial Networks
总结
- 本文主要是通过数学的方法分析现有GAN训练中存在的问题
- 先从KL散度入手——散度不对称对于两种不同的损失(真实分布存在而生成分布不存在;真实分布不存在而生成分布存在)给予了两种截然不同的惩罚
- 然后分析了训练过程不稳定的原因
- 当生成器的损失函数是$E_{x \sim P_r}[logD(x)] + E_{x \sim P_g}[log(1 - D(x))]$=$ 2JS(P_r||P_g) - 2log2$时,在分类器最优时,此损失函数是一个常数(低维流形理论JS散度一直为常数$log2$),根本没有梯度,所以随着存在梯度消失的问题
- 当生成器的损失函数是$-logD$ = $KL(P_g||P_r) - 2JS(P_r||P_g)$时有两个问题。第一个是两个散度的优化方向矛盾,一个是让两个分布尽量近一个是尽量远,导致训练方向不稳定;另外KL的散度加大了对于$P_r = 0 且 P_g = 1$的惩罚,导致模型坍塌
- 提出解决方案——给两个分布加噪音,使两个低维流形维度升高,产生重叠,从而使JS散度不为常数,之后慢慢将噪声去除
- 提出Wasserstein距离,但是没有过多讨论,留到下一篇Wasserstein GAN再说
Abstract
this paper is proposed to make theoretical steps towards fully understanding the training dynamics of GANs
three sections:
Unsupervised representation learning with deep convolutional Generative Adersarial Networks
总结
- 本文提出了一个对于GAN的另外的应用场景——使用模型的中间结果作为特征
- 首先提出了新的generator结构,在之前CNN的基础上做了优化;其中的trans_conv/deconv/反向卷积结构其实是等同于CNN中的反向传播求梯度过程,是在深层传来的梯度值得基础上左乘卷积核矩阵,详见此处
- 在训练GAN的时候提出了解决generator记忆样本问题的方法:将训练样本降维然后建hash表,对于所有生成出来的在hash表中有碰撞的样本全都舍弃
- 对于模型表达能力的证实
- 在无监督训练中,作为特征提取器超过了KNN的效果(CIFAR-10数据集)
- 在有监督训练中,作为特征提取器达到了最好的效果(SVHN数据集)
- 对于模型可视化的探索:
- 在z中做差值,可以观察到生成图像的渐变
- 对D中的filter做可视化
- 操作z以达到特定目的:
- 指定取消某个物体
- 通过z的向量运算,产生图像的运算
Abstract
in this paper we hope to help bridge the gap between the success of CNNs for supervised learning and unsupervised learning
Introduction
Conditional Generative Adversarial Nets
总结
- 在GAN的基础上加上了条件输入(对于D和G同时加)
- 目标函数改为$\underset {G} {min} \underset {D} {max}V(D,G) = E_{x \sim p_{data}(x)}[logD(x|y)] + E_{z \sim p_z(z)}[1 - log(D(G(z|y)))]$
- 如果没有对于条件的需求在实验中有CGAN的效果并不比GAN的效果好
- CGAN可以按照条件输入输出特定的随机值
- 给定一个数字输出特定数字的手写图片
- 给定一个图片输出该图片的tag 概率分布,取较大者作为图片的tag,实现自动化tagging
Abstract
this net can be constructed by adding condition information to both generator and discriminator
Introduction
Generative Adversarial Nets
总结
- 生成对抗网络由生成器G和分类器D组成,生成器G接受噪音生成样本,D负责区分这些样本是否是由D生成出来的
- D和G共同优化目标函数$\underset {G} {min} \underset {D} {max} V(D,G) = E_{x \sim p_{data}(x)}[log(D(x))] + E_{x \sim P_{g_z(z)}}[log(1 - D(g(z)))]$ 一个是让值尽量大,一个是让值尽量小,即所谓“对抗”
- 该目标函数会在$p_g = p_{data}$处收敛到最优,即生成分布与训练数据分布完全一致函数值为$-log4$
- 关于收敛性的证明:一个凸函数集合的上界的次梯度(可导的时候等于梯度)完全包含最后函数的梯度,所以在求导做梯度下降的时候整体仍然按照凸函数的性质收敛
- 使用Gaussian Parzen window(youtube视频)方法对模型进行评估, Parzen Window 其实是用已有数据到待测数据点的“距离”平均值来表示待测点出现在已有数据表示的分布上的概率(或者说在已有数据拟合出的概率密度函数上的值)
- 通用概率密度函数$P(x) = \frac {1} {n}\sum_{i = 1}^{n}\frac {1} {h^d}K(\frac {x - x_i} {h})$
- Parzen window中的核函数可以有多种,使用Gaussian核的就叫做Gaussian Parzen window$P(x) = \frac {1} {n} \sum^n_{i = 1}\frac {1} {h\sqrt {2\pi}^d}exp(-\frac 1 2(\frac {x - x_i} {h})^2 )$
- 算出概率之后再过一遍$score = -log(1 - P(x))$(猜测)
- 优点
- 不使用马尔科夫链
- 训练模型的时候不需要inference
- 可拟合sharp的分布
- 训练样本并不直接作用于G的训练,保证参数独立
- 可使用多种模型拟合G和D
- 缺点
- G和D需要同步训练(两次D一次G)
- 没有$p_g(z)$分布的显示表示
Abstract
propose a new framework for estimating generative models via adversarial process
simultaneously train two models:
Inception-v4, Inception-ResNet and the Impact of Residual Connection on Learning
总结
- 本文主要是受微软残差网络5的启发,提出新的结构
- 首先讨论了残差的作用
- 微软的文章5认为残差是组成“深”且“宽”的网络的关键
- 本文觉得不对,残差的效果主要体现在提高训练稳定性上
- 在v315的基础上,提出了一些改进方案,并没有说明改进的思路,只是说换了TensorFlow之后可以不做之前的妥协,所以有了v4
- 然后结合了Residual搞出了Inception-ResNet-v1(计算复杂度与v3相近)和其加强版Inception-ResNet-v2(计算复杂度与v4相近)
- 实践表明当网络filter数量超过1000的时候,训练会炸,即使调小学习率也不行,提出了减小残差传播的方法,因子在0.1~0.3左右
实验结果
ILSVRC 2012 数据集
- 1 model; 1 crop; top-5 error:
- Inception-v4: 5.0%
- Inception-ResNet-v1: 5.5%
- Inception-ResNet-v2: 4.9%
- ensemble(4 models; 144 crops); top-5 error:
- Inception-v4 + 3 * Inception-ResNet-v2: 3.1%
Rethinking the Inception Architecture for Computer Vision
总结
- 本文是按照前作20的思路继续走,寻找更加高效的计算结构
网络结构设计原则
文章提出了四点设计原则:
- 避免网络表达瓶颈,尤其是在前面几层
- 高维特征更容易处理
- 在低维嵌入上可以进行空间聚合不会或者只有少量的信息损失
- 平衡网络的深度和宽度
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
总结
- 提出问题:在神经网络的训练过程中,后面层的输入是前面网络的输出,所以在前面网络参数变动的时候,后面层的输入分布一直在变化,我们称这种现象为——内部协变量漂移。这种现象会干扰神经网络训练
- 本文提出的BN结构就是希望解决此问题,从而加速网络训练,提升训练稳定性
演变过程
- 传统稳定分布的方式是白化——去除特征之间的相关性然后把分布变为均值为0,方差为1的高斯分布
- 但是这种方式计算量过大且不能处处可导,所以做了两个简化
- 把每个特征分别做处理
- 使用mini-batch代替全体训练样本做处理
- 计算量大大降低之后,为了保持增加模型的拟合能力,我们引进了两个可学习参数$\gamma$和$\beta$使用公式$y^{(k)} = \gamma^{(k)}\hat x^{(k)} + \beta^{(k)}$来做变换
- 当$\gamma$等于方差且$\beta$等于均值时,等同于还原成原分布
Inference
Going deeper with convolutions
总结
- 提出了一个代号为Inception的神经网络结构,开头点出此结构的最大作用是提升计算资源的利用率
- 是NIN的deep版本
- 参考Serre et al. 15 用多个size的filter来抽取信息;有两个不同点
- 所有网络中的filter都是学习得来
- 重复使用Inception结构组成一个更深的网络
- 又参考了Lin et al. 12使用1 * 1的卷积核来提升模型的表达能力;并且可以减少维度,使在同等的计算资源下网络可以更深更宽,从而提升效果
- ILSVRC 2014 数据集
- 1 model; 1 crops; top5 error: 10.07%
- ensemble(7 models, 144 crops); top5 error: 6.67%
Inception 诞生的心路历程
- 现如今提升网络效果主要靠提升网络的宽度和深度;这么做有两个问题:
- 容易过拟合
- 计算资源需求快速增长
- 因为权重矩阵中有很多的0,因此人们提出从全连接结构改成稀疏链接结构的方式
- 后来证明不行,因为稀疏结构的查找开销太大盖过了计算开销的节省,还不如不用
- 后来提出了用网络结构解决此问题的方式——Inception