AlphaTree : 从新手到深度学习应用工程师

100天AI计划  收藏
0 / 352

map_title_.png

AlphaTree : 从新手到深度学习应用工程师

从 AI 研究的角度来说,AI 的学习和跟进是有偏向性的,更多的精英是擅长相关的一到两个领域,在这个领域做到更好。而从 AI 应用工程师的角度来说,每一个工程都可能涉及很多个 AI 的方向,而他们需要了解掌握不同的方向才能更好的开发和设计。

但是 AI 中每一个领域都在日新月异的成长。而每一位研究人员写 paper 的风格都不一样,相似的模型,为了突出不同的改进点,他们对模型的描述和图示都可能大不相同。为了帮助更多的人在不同领域能够快速跟进前沿技术,我们构建了“AlphaTree 计划”,每一篇文章都会对应文章,代码,然后进行图示输出。

在面试到一些同学的时候,他们总是信誓旦旦的表示要转深度学习,但是存在能推导公式,但是一到深入理念,或者工程项目细节就两眼一抹黑。有没有一个项目,能一个一个项目帮助大家理解深度学习的发展的同时也提高应用能力。

基于这种想法,邀请了几位资深程序员加入这个项目。希望丰富的资源能够帮助到大家。

版权申明:CC-BY-NC-SA 知识共享-署名-非商业性-相同方式共享

其他:

由于 GitHub 和某些原因,alphatree 项目中的图 在这里展示总会出现不稳定的情况。而且能够一起贡献的小伙伴也不多。 另外 alphatree 由于资源整合得比较多,所以有的小伙伴不知道如何学习。

所以我们做了两件事情:

1 加入 AI 千集 以 AI 应用为目的 的一个社区。
AI 应用能改变世界。 AI 千集为学习者提供了一个交流社区,和一些学习工具,包括论文推荐系统,论文一键翻译等等。

现在在试运行中。关于你能来做什么,可以看这篇
https://aiqianji.com/blog/topic/18

2 在筹备 AI100 天计划
整理发布 Alphatree 过程中,细化介绍了一部分重要的论文,然后一些基础算法,和大家一起写一起运行。
这是专栏 https://aiqianji.com/blog/topics/node/6

另外 攒了大量的资源,但是不太有精力维护社群。大家可以有需求来网站回帖。 https://aiqianji.com/blog/topic/65

不知道需要什么资源的也可以关注公众号,有个积分商城 注册就有积分,其他所有参与活动也可以挣积分,包括发帖,看文章等等。 然后自己换取就行。 会慢慢的上资源

qr


深度学习基础:物体分类篇 object classification

深度学习在解决分类问题上非常厉害。让它声名大噪的也是对于图像分类问题的解决。也产生了很多很经典的模型。其他方向的模型发展很多都是源于这各部分,它是很多模型的基础工作。因此我们首先了解一下它们。

object classification

从模型的发展过程中,随着准确率的提高,网络结构也在不断的进行改进,现在主要是两个方向,一是深度,二是复杂度。此外还有卷积核的变换等等。

深度神经网络的发展要从经典的 LeNet 模型说起,那是 1998 年提出的一个模型,在手写数字识别上达到商用标准。之后神经网络的发展就由于硬件和数据的限制,调参的难度等各种因素进入沉寂期。

到了 2012 年,Alex Krizhevsky 设计了一个使用 ReLu 做激活函数的 AlexNet 在当年的 ImageNet 图像分类竞赛中(ILSVRC 2012),以 top-5 错误率 15.3% 拿下第一。 他的 top-5 错误率比上一年的冠军下降了十个百分点,而且远远超过当年的第二名。而且网络针对多 GPU 训练进行了优化设计。从此开始了深度学习的黄金时代。

大家发表的 paper 一般可以分为两大类,一类是网络结构的改进,一类是训练过程的改进,如 droppath,loss 改进等。

之后网络结构设计发展主要有两条主线,一条是 Inception 系列(即上面说的复杂度),从 GoogLeNet 到 Inception V2 V3 V4,Inception ResNet。 Inception module 模块在不断变化,一条是 VGG 系列(即深度),用简单的结构,尽可能的使得网络变得更深。从 VGG 发展到 ResNet ,再到 DenseNet ,DPN 等。

最终 Google Brain 用 500 块 GPU 训练出了比人类设计的网络结构更优的网络 NASNet,最近训出了 mNasNet。

此外,应用方面更注重的是,如何将模型设计得更小,这中间就涉及到很多卷积核的变换。这条路线则包括 SqueezeNet,MobileNet V1 V2 Xception shuffleNet 等。

ResNet 的变种 ResNeXt 和 SENet 都是从小模型的设计思路发展而来。

输入:图片 输出:类别标签

模型名 AlexNet ZFNet VGG GoogLeNet ResNet
初入江湖 2012 2013 2014 2014 2015
层数 8 8 19 22 152
Top-5 错误 16.4% 11.2% 7.3% 6.7% 3.57%
Data Augmentation + + + + +
Inception(NIN) +
卷积层数 5 5 16 21 151
卷积核大小 11,5,3 7,5,3 3 7,1,3,5 7,1,3
全连接层数 3 3 3 1 1
全连接层大小 4096,4096,1000 4096,4096,1000 4096,4096,1000 1000 1000
Dropout + + + + +
Local Response Normalization + + +
Batch Normalization +

ILSVRC2016 2016 年的 ILSVRC,来自中国的团队大放异彩:

CUImage(商汤和港中文),Trimps-Soushen(公安部三所),CUvideo(商汤和港中文),HikVision(海康威视),SenseCUSceneParsing(商汤和香港城市大学),NUIST(南京信息工程大学)包揽了各个项目的冠军。

CUImage(商汤科技和港中文):目标检测第一; Trimps-Soushen(公安部三所):目标定位第一; CUvideo(商汤和港中文):视频中物体检测子项目第一; NUIST(南京信息工程大学):视频中的物体探测两个子项目第一; HikVision(海康威视):场景分类第一; SenseCUSceneParsing(商汤和港中文):场景分析第一。

其中,Trimps-Soushen 以 2.99% 的 Top-5 分类误差率和 7.71% 的定位误差率赢得了 ImageNet 分类任务的胜利。该团队使用了分类模型的集成(即 Inception、Inception-ResNet、ResNet 和宽度残差网络模块的平均结果)和基于标注的定位模型 Faster R-CNN 来完成任务。训练数据集有 1000 个类别共计 120 万的图像数据,分割的测试集还包括训练未见过的 10 万张测试图像。

ILSVRC 2017 Momenta 提出的 SENet 获得了最后一届 ImageNet 2017 竞赛 Image Classification 任务的冠军, 2.251% Top-5 错误率

模型总览 <- 之前展示所有模型的主页挪到这里来了。点这里 点这里


模型索引:

Week1 基本结构 LeNet AlexNet NIN VGG GoogleNet
Week2 ResNet 之后的基本结构 ResNet Inception V3 SENet Inception-Resnet-V2 DenseNet

allmodel

Week4 超大模型结构 PolyNet SENet NasNet

深度学习应用

轻量级模型 & 剪枝 物体检测 Object Detection 物体分割 Object Segmentation OCR
人脸检测 Face Detection 人脸识别 Face Recognition 肢体检测 Pose Detection(coming soon) 3D(coming soon)

ObjectDetection&Seg

物体分类(物体识别)解决的是这个东西是什么的问题(What)。而物体检测则是要解决这个东西是什么,具体位置在哪里(What and Where)。 物体分割则将物体和背景进行区分出来,譬如人群,物体分割中的实例分割则将人群中的每个人都分割出来。 输入:图片 输出:类别标签和 bbox(x,y,w,h) pic1


GAN 基础

参考 Mohammad KHalooei 的教程,我也将 GAN 分为 4 个 level,第四个 level 将按照应用层面进行拓展。 这里基础部分包括 Gan 的定义,GAN 训练上的改进,那些优秀的 GAN.具体可以参见 GAN 对抗生成网络发展总览

GAN 的定义 Level 0: Definition of GANs

Level Title Co-authors Publication Links
Beginner GAN : Generative Adversarial Nets Goodfellow & et al. NeurIPS (NIPS) 2014 link
Beginner GAN : Generative Adversarial Nets (Tutorial) Goodfellow & et al. NeurIPS (NIPS) 2016 Tutorial link
Beginner CGAN : Conditional Generative Adversarial Nets Mirza & et al. -- 2014 link
Beginner InfoGAN : Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets Chen & et al. NeuroIPS (NIPS) 2016

模型结构的发展:

ganmodule


CGAN LAPGAN IcGAN ACGAN SemiGan /SSGAN InfoGan

GAN 训练上的改进 Level1:Improvements of GANs training

然后看看 loss、参数、权重的改进:

Level Title Co-authors Publication Links
Beginner LSGAN : Least Squares Generative Adversarial Networks Mao & et al. ICCV 2017 link
Advanced Improved Techniques for Training GANs Salimans & et al. NeurIPS (NIPS) 2016 link
Advanced WGAN : Wasserstein GAN Arjovsky & et al. ICML 2017 link
Advanced WGAN-GP : improved Training of Wasserstein GANs 2017 link
Advanced Certifying Some Distributional Robustness with Principled Adversarial Training Sinha & et al. ICML 2018 link code

Loss Functions:

LSGAN(Least Squares Generative Adversarial Networks)

LS-GAN - Guo-Jun Qi, arxiv: 1701.06264

[2] Mao et al., 2017.4 pdf

https://github.com/hwalsuklee/tensorflow-generative-model-collections https://github.com/guojunq/lsgan

用了最小二乘损失函数代替了 GAN 的损失函数,缓解了 GAN 训练不稳定和生成图像质量差多样性不足的问题。

但缺点也是明显的, LSGAN 对离离群点的过度惩罚, 可能导致样本生成的'多样性'降低, 生成样本很可能只是对真实样本的简单模仿和细微改动。

WGAN

WGAN - Martin Arjovsky, arXiv:1701.07875v1

WGAN: 在初期一个优秀的 GAN 应用需要有良好的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。

为啥难训练? 令人拍案叫绝的 Wasserstein GAN 中做了如下解释 : 原始 GAN 不稳定的原因就彻底清楚了:判别器训练得太好,生成器梯度消失,生成器 loss 降不下去;判别器训练得不好,生成器梯度不准,四处乱跑。只有判别器训练得不好不坏才行,但是这个火候又很难把握,甚至在同一轮训练的前后不同阶段这个火候都可能不一样,所以 GAN 才那么难训练。

https://zhuanlan.zhihu.com/p/25071913

WGAN 针对 loss 改进 只改了 4 点: 1.判别器最后一层去掉 sigmoid 2.生成器和判别器的 loss 不取 log 3.每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数 c 4.不要用基于动量的优化算法(包括 momentum 和 Adam),推荐 RMSProp,SGD 也行

https://github.com/martinarjovsky/WassersteinGAN

WGAN-GP

Regularization and Normalization of the Discriminator:

wgangp

WGAN-GP:

WGAN 的作者 Martin Arjovsky 不久后就在 reddit 上表示他也意识到没能完全解决 GAN 训练稳定性,认为关键在于原设计中 Lipschitz 限制的施加方式不对,并在新论文中提出了相应的改进方案--WGAN-GP ,从 weight clipping 到 gradient penalty,提出具有梯度惩罚的 WGAN(WGAN with gradient penalty)替代 WGAN 判别器中权重剪枝的方法(Lipschitz 限制):

[1704.00028] Gulrajani et al., 2017,improved Training of Wasserstein GANspdf

Tensorflow 实现:https://github.com/igul222/improved_wgan_training

pytorch https://github.com/caogang/wgan-gp

GAN 的实现 Level 2: Implementation skill

Title Co-authors Publication Links size FID/IS
Keras Implementation of GANs Linder-Norén GitHub link
GAN implementation hacks Salimans paper & Chintala World research link paper
DCGAN : Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks Radford & et al. ICLR 2016 link paper 64x64 human
ProGAN:Progressive Growing of GANs for Improved Quality, Stability, and Variation Tero Karras 2017 paper link 1024x1024 human 8.04
SAGAN:Self-Attention Generative Adversarial Networks Han Zhang & Ian Goodfellow 2018.05 paper link 128x128 obj 18.65/52.52
BigGAN:Large Scale GAN Training for High Fidelity Natural Image Synthesis Brock et al. ICLR 2019 demo paper link 512x512 obj 9.6/166.3
StyleGAN:A Style-Based Generator Architecture for Generative Adversarial Networks Tero Karras 2018 paper link 1024x1024 human 4.04

指标:

1 Inception Score (IS,越大越好) IS 用来衡量 GAN 网络的两个指标:1. 生成图片的质量 和 2. 多样性

2 Fréchet Inception Distance (FID,越小越好) 在 FID 中我们用相同的 inception network 来提取中间层的特征。然后我们使用一个均值为 μμ 方差为 ΣΣ 的正态分布去模拟这些特征的分布。较低的 FID 意味着较高图片的质量和多样性。FID 对模型坍塌更加敏感。

FID 和 IS 都是基于特征提取,也就是依赖于某些特征的出现或者不出现。但是他们都无法描述这些特征的空间关系。

物体的数据在 Imagenet 数据库上比较,人脸的 progan 和 stylegan 在 CelebA-HQ 和 FFHQ 上比较。上表列的为 FFHQ 指标。

具体可以参见 GAN 对抗生成网络发展总览

GAN 的应用 Level 3: GANs Applications

3-1 GANs Applications in CV

图像翻译 (Image Translation) 超分辨率 (Super-Resolution) 图像上色(Colourful Image Colorization)
图像修复(Image Inpainting) 图像去噪(Image denoising) 交互式图像生成

特殊领域与应用

漫画 (comic、anime、manga) 换脸 (face changing)

3-2 GANs Applications in Video

3-3 GANs Applications in NLP/Speech


NLP (comging soon)


BIG DATA(comging soon)

一树一获者,谷也;一树十获者,木也;一树百获者;人也。 希望我们每一个人的努力,能够建立一片森林,为后人投下一片树荫。

每一位加入的作者,都可以选取植物的名称来表示自己,然后 logo 和名字将会作为自己的署名。

我希望,这终将成为一片森林。

此外,关于深度学习系统中模型结构要怎样设计,特定的任务要不要加入特定的结构和方法,Yann LeCun 和 Christopher Manning 有一个讨论 ,大家可以看一看 https://youtu.be/fKk9KhGRBdI 雷锋网有介绍 https://www.leiphone.com/news/201804/6l2mAsZQCQG2qYbi.html