Skip to content
This repository has been archived by the owner on Jan 24, 2024. It is now read-only.

Image Classification Tutorial #29

Merged
merged 11 commits into from
Jan 12, 2017
Merged

Conversation

qingqing01
Copy link
Contributor

@qingqing01 qingqing01 commented Dec 26, 2016

resolve #5

文档已完成~

Copy link
Collaborator

@Zrachel Zrachel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

已有部分改进需求

图3. 扰动图片展示
</p>

## 模型概览
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

模型概览中加一点图像分类历史吧,比如12年前,大家怎么做的,然后VGG和ResNet中间加个googlenet吧? issue里忘记说了

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done,增加了传统方法和GoogleNet的介绍。

./data/get_data.sh
```

### 数据提供器
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

就”提供数据给PaddlePaddle“吧,不用翻译了

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


在本教程中我们主要采用VGG和ResNet网络结构,在介绍这两个模型之前,我们首先简单介绍CNN网络结构。

### CNN
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CNN用 - ,不要用###,因为和VGG/RESNET不是平行关系

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

图3. 扰动图片展示
</p>

## 模型概览
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

模型概览里说一下图像分类的loss是多类交叉熵吧,提一下就好,之前有一章讲用MLP分类MNIST,会详细讲到softmax

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done




下图是训练的分类错误率曲线图:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

图片需要缩小


<center>![Training and testing curves.](image/plot.png)</center>

## 模型应用
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

模型应用中加上如果需要用比如resnet的图像feature怎么做吧

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

模型应用增加了预测和提取特征示例,并提供了一张特征可视化的图。

@@ -0,0 +1,43 @@
import os
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

缺copyright

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


## 背景介绍

图像相比文字能够提供更加生动、容易理解、有趣及更具艺术感的信息,是人们转递与交换信息的总要来源。在本教程中,我们专注于图像识别领域的重要问题之一 - 图像分类。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 图像相比文字能够提供更加生动有趣、容易理解及更具艺术感的信息
  2. 我们专注于图像识别领域的一个重要问题,即图像分类问题。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中重要的基本问题,也是图像检测、图像分割、物体跟踪、行为分析等其他高层视觉任务的基础。

图像分类在很多领域有广泛应用,包括安防领域的人脸识别、智能视频分析等,交通领域的交通场景识别,互联网领域基于内容的图像检索、相册自动归类,医学领域图像识别等。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

8行和10行可以合并成一段。包括安防领域的人脸识别和智能视频分析,交通领域的交通场景识别,互联网领域的基于内容的图像检索和相册自动归类,医学领域的图像识别等。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


一般来说,图像分类通过手工特征或特征学习方法对整个图像进行全部描述,然后使用分类器判别物体类别,因此如何提取图像的特征至关重要。在深度学习算法之前使用较多的是基于词包模型的物体分类方法,词包模型的基本框架包括底层特征学习、特征编码、空间约束、分类器设计、模型融合等多个阶段。

而基于深度学习的图像分类方法,其基本思想是通过有监督或无监督的方式学习层次化的特征描述,来对物体进行从底层到高层的描述。深度学习模型之一 — 卷积神经网络(CNN)近年来在图像领域取得了惊人的成绩,CNN直接利用图像像素信息作为输入,最大程度上保留了输入图像的所有信息,通过卷积操作进行特征的提取和高层抽象,模型输出直接是图像识别的结果。这种基于"输入-输出"直接端到端学习方法取了非常好的效果,得到了广泛的应用。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

深度学习模型中的卷积神经网络

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


<p align="center">
<img src="image/cifar.png"><br/>
图3. CIFAR10数据集
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

图标号错误。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中重要的基本问题,也是图像检测、图像分割、物体跟踪、行为分析等其他高层视觉任务的基础。图像分类在很多领域有广泛应用,包括安防领域的人脸识别和智能视频分析等,交通领域的交通场景识别,互联网领域基于内容的图像检索和相册自动归类,医学领域的图像识别等。


一般来说,图像分类通过手工特征或特征学习方法对整个图像进行全部描述,然后使用分类器判别物体类别,因此如何提取图像的特征至关重要。在深度学习算法之前使用较多的是基于词包模型的物体分类方法,词包模型的基本框架包括底层特征学习、特征编码、空间约束、分类器设计、模型融合等几个阶段。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

词包->词袋,第一处加”(Bag of Words)“

图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中重要的基本问题,也是图像检测、图像分割、物体跟踪、行为分析等其他高层视觉任务的基础。图像分类在很多领域有广泛应用,包括安防领域的人脸识别和智能视频分析等,交通领域的交通场景识别,互联网领域基于内容的图像检索和相册自动归类,医学领域的图像识别等。


一般来说,图像分类通过手工特征或特征学习方法对整个图像进行全部描述,然后使用分类器判别物体类别,因此如何提取图像的特征至关重要。在深度学习算法之前使用较多的是基于词包模型的物体分类方法,词包模型的基本框架包括底层特征学习、特征编码、空间约束、分类器设计、模型融合等几个阶段。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

词包模型的基本框架包括底层特征学习、特征编码、空间约束、分类器设计、模型融合等几个阶段。
->
词袋方法从自然语言处理中引入,即一句话可以用一个装了词的袋子表示其特征,袋子中的词为句子中的单词、短语或字。对于图像而言,词袋方法需要构建字典。最简单的词袋模型可以这样设计:

  1. 底层特征抽取:提取图像局部特征(可以用局部特征描述子,如SIFT)
  2. 特征编码:将提取到的底层特征聚类,得到特征字典。并将底层特征映射到这些类,得到Bag of words(features)特征编码。
  3. 分类器设计:选择不同分类器(如支持向量机、朴素贝叶斯等)对上面编码得到的特征进行分类。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这块没有大改,只在背景介绍中简单了提下传统方法的步骤,没有过多详细介绍,具体介绍在模型概览中。


一般来说,图像分类通过手工特征或特征学习方法对整个图像进行全部描述,然后使用分类器判别物体类别,因此如何提取图像的特征至关重要。在深度学习算法之前使用较多的是基于词包模型的物体分类方法,词包模型的基本框架包括底层特征学习、特征编码、空间约束、分类器设计、模型融合等几个阶段。

而基于深度学习的图像分类方法,其基本思想是通过有监督或无监督的方式学习层次化的特征描述,来对物体进行从底层到高层的描述。深度学习模型中的卷积神经网络(Convolution Neural Network, CNN)近年来在图像领域取得了惊人的成绩,CNN直接利用图像像素信息作为输入,最大程度上保留了输入图像的所有信息,通过卷积操作进行特征的提取和高层抽象,模型输出直接是图像识别的结果。这种基于"输入-输出"直接端到端学习方法取了非常好的效果,得到了广泛的应用。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

而基于深度学习的图像分类方法,其基本思想是通过有监督或无监督的方式学习层次化的特征描述
->
而基于深度学习的图像分类方法可以通过有监督或无监督的方式学习层次化的特征描述,从而取代了手工设计或选择图像特征的工作


## 模型概览

图像识别领域大量的研究成果都是建立在[PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/)、[ImageNet](http://image-net.org/)等公开的数据集上,这些数据集通常作为图像识别的基准测试。PASCAL VOC是2005建立的一个视觉挑战赛,ImageNet是2010年建立的大规模视觉识别竞赛(ILSVRC)的数据集,我们围绕这两个数据集一些论文介绍图像分类的模型。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这些数据集通常作为图像识别的基准测试-》很多图像识别算法通常在这些数据集上进行测试和比较

“我们围绕这两个数据集一些论文介绍图像分类的模型。”不通顺

图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中重要的基本问题,也是图像检测、图像分割、物体跟踪、行为分析等其他高层视觉任务的基础。图像分类在很多领域有广泛应用,包括安防领域的人脸识别和智能视频分析等,交通领域的交通场景识别,互联网领域基于内容的图像检索和相册自动归类,医学领域的图像识别等。


一般来说,图像分类通过手工特征或特征学习方法对整个图像进行全部描述,然后使用分类器判别物体类别,因此如何提取图像的特征至关重要。在深度学习算法之前使用较多的是基于词包模型的物体分类方法,词包模型的基本框架包括底层特征学习、特征编码、空间约束、分类器设计、模型融合等几个阶段。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

把“基本框架包括底层特征学习、特征编码、空间约束、分类器设计、模型融合等几个阶段”放到模型概述的“在2012年之前的传统图像分类模型中,”后面,适当组织语言。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done~

net = resnet_cifar10(data, depth=56)
```

resnet_cifar10的底层输入连接一层 `conv_bn_layer`,即卷积层、BN层、ReLu激活函数。 然后连接3组参数模块即下面配置3组 `layer_warp` ,每组采用图 9 左边残差模块组成,即由2层3x3卷积,各自连接BN层,然后再接ReLu激活函数,每组由若干残差模块堆积而成。最后对网络做Avg-Pooling并返回该层。 返回的网络在第3步接一层全连接层,因此,除过第一层卷积层和最后一层全连接层这2层外,要求3组 `layer_warp` 总的含参层数能够6 整除,即 `resnet_cifar10` 的 depth 要满足 $(depth - 2)% 6 == 0$ 。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2层3x3卷积
->
两层3x3卷积

resnet_cifar10的底层输入连接一层 `conv_bn_layer`,即卷积层、BN层、ReLu激活函数。 然后连接3组参数模块即下面配置3组 `layer_warp` ,每组采用图 9 左边残差模块组成,即由2层3x3卷积,各自连接BN层,然后再接ReLu激活函数,每组由若干残差模块堆积而成。最后对网络做Avg-Pooling并返回该层。 返回的网络在第3步接一层全连接层,因此,除过第一层卷积层和最后一层全连接层这2层外,要求3组 `layer_warp` 总的含参层数能够6 整除,即 `resnet_cifar10` 的 depth 要满足 $(depth - 2)% 6 == 0$ 。

```python
def conv_bn_layer(input,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

每个函数后面写下简单注释吧

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

没有在代码中写注释( 不太确定是写英文还是中文),单独列出了一段,对这几个函数做了解释。

sh train.sh
```

执行脚本 train.sh 进行模型训练, 其中指定配置文件、设备类型、线程个数、总共训练的轮数、模型存储路径等。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

移到代码上面

<img src="image/plot.png" width="400" ><br/>
图12. CIFAR10数据集
</p>

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

图中可见,运行到xxx个pass收敛,最终得到测试集上准确率达到xxx

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

图12的标题不对,请修改。CIFAR10数据集上XXX模型的分类错误率

传统图像分类方法由多个阶段构成,框架较为复杂,而端到端的CNN模型结构可一步到位,而且大幅度提升了分类准确率。本文我们介绍VGG、GoogleNet、ResNet三个经典的模型,基于CIFAR10数据集,介绍了如何使用PaddlePaddle配置和训练CNN模型,尤其是VGG和ResNet模型。最后介绍如何使用PaddlePaddle的API接口对图片进行预测和特征提取。而对于其他数据集比如ImageNet,配置和训练流程是同样的。


## 参考文献
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

都加一下链接吧

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

padding,
active_type=ReluActivation(),
ch_in=None):
tmp = img_conv_layer(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

层名不要都用tmp,换更直观一点的,如44行用img_conv就行。请修改resnet.py和vgg.py中所有用tmp的地方,这样文档中解释起来也方便。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vgg.py中的tmp都改了, resnet.py中只改了def resnet_cifar10中的,因为感觉代码中通常都用同一个名字写起来比较方便。


## 效果展示

图像分类包括通用图像分类、细粒度图像分类等。下图展示了通用图像分类效果,即模型可以正确识别图像上的主要物体。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

图1展示了XXX

</p>


下图展示了细粒度图像分类-花卉识别的效果,要求模型可以正确识别花的类别。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

图2展示了XXX

</p>


一个好的模型即要对不同类别识别正确,同时也应该能够对不同视角、光照、背景、变形或部分遮挡的图像正确识别(这里我们统一称作图像扰动),下图展示了一些图像的扰动,较好的模型会像聪明的人类一样能够正确识别。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 既要对XXX
  2. 。图3展示了XXX


图像识别领域大量的研究成果都是建立在[PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/)、[ImageNet](http://image-net.org/)等公开的数据集上,这些数据集通常作为图像识别的基准测试。PASCAL VOC是2005建立的一个视觉挑战赛,ImageNet是2010年建立的大规模视觉识别竞赛(ILSVRC)的数据集,我们围绕这两个数据集一些论文介绍图像分类的模型。

在2012年之前的传统图像分类模型中,底层特征提取是第一步,通常从图像中按照固定步长、尺度提取大量局部特征描述,通常采用的局部特征包括SIFT(Scale-Invariant Feature Transform, 尺度不变特征转换) \[[1](#参考文献)\]、HOG(Histogram of Oriented Gradient, 方向梯度直方图) \[[2](#参考文献)\]、LBP(Local Bianray Pattern, 局部二值模式) \[[3](#参考文献)\] 等,传统物体分类算法一般都采用多种特征描述子,防止丢失过多的有用信息。底层特征中包含了大量冗余与噪声,为了提高特征表达的鲁棒性,需要使用一种特征变换算法对底层特征进行编码,称作特征编码。特征编码算法包括向量量化编码 \[[4](#参考文献)\]、稀疏编码 \[[5](#参考文献)\]、局部线性约束编码 \[[6](#参考文献)\]、Fisher向量编码 \[[7](#参考文献)\] 等。特征编码之后一般会经过空间特征约束,也称作特征汇聚。特征汇聚是对每一维特征取最大值或者平均值,可以获得一定特征不变形的特征表达。一种常用的特征聚会方法即金字塔特征匹配提出将图像均匀分块,再分块内做特征汇聚。当这些步骤完整之后,一张图像可以用一个固定维度的向量进行描述,接下来就是经过分类器对图像进行分类,通常使用的分类器包括SVM(Support Vector Machine, 支持向量机)、随机森林等,而使用核方法的SVM是最为广泛的分类器,在传统图像分类任务上性能很好。例如ILSVRC 2010年挑战者采用SIFT和LBP特征,两个非线性编码器以及SVM分类器获得图像分类的冠军 \[[8](#参考文献)\]。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这一段按照 @Zrachel 的意见。在每一个步骤前再加编号。
2012年之前的传统图像分类模型通常含有以下几步:1)XXX。2)XXX。这样比较清楚。

net = resnet_cifar10(data, depth=56)
```

resnet_cifar10的底层输入连接一层 `conv_bn_layer`,即卷积层、BN层、ReLu激活函数。 然后连接3组参数模块即下面配置3组 `layer_warp` ,每组采用图 9 左边残差模块组成,即由2层3x3卷积,各自连接BN层,然后再接ReLu激活函数,每组由若干残差模块堆积而成。最后对网络做Avg-Pooling并返回该层。 返回的网络在第3步接一层全连接层,因此,除过第一层卷积层和最后一层全连接层这2层外,要求3组 `layer_warp` 总的含参层数能够6 整除,即 `resnet_cifar10` 的 depth 要满足 $(depth - 2)% 6 == 0$ 。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这段介绍请根据resnet_cifar10的def,按顺序介绍吧。把tmp名字换掉,介绍起来更清楚。介绍的时候可以用 · 。另外,可以先介绍resnet_cifar10的def,再在每一点中介绍其他的def

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@luotao1 这块重新组织了下。

<img src="image/plot.png" width="400" ><br/>
图12. CIFAR10数据集
</p>

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

图12的标题不对,请修改。CIFAR10数据集上XXX模型的分类错误率


## 模型应用

在训练完成后,模型会保存在路径 `output/pass-%05d` 下,例如第300个pass的模型会保存在路径 `output/pass-00299`。 脚本 `classify.py` 可以使用模型对图片进行预测或提取特征,注意该脚本默认使用模型配置为 `models/vgg.py`,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

可以使用脚本 classify.py 对图片进行预测或提取特征


<p align="center">
<img src="image/fea_conv0.png"><br/>
图13. CIFAR10数据集
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

图13太大了,且标题也不对


### 特征提取

可以按照下面方式对图片提取特征,和预测使用方式不同的是指定job类型为extract,并需要指定提取的层。`classify.py` 默认已第一层卷积特征为例提取特征,并给出了可视化图,如图10所示,VGG模型的第一层卷积有64个通道,图 13 展示的为每个通道的灰度图。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 默认以
  2. 如图10所示,不对吧。
  3. 图13展示了每个通道的灰度图

@qingqing01
Copy link
Contributor Author

@Zrachel @luotao1 按照comments已经都作了修改。

Copy link
Collaborator

@luotao1 luotao1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

还有一些小问题

@@ -8,23 +8,23 @@
图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中重要的基本问题,也是图像检测、图像分割、物体跟踪、行为分析等其他高层视觉任务的基础。图像分类在很多领域有广泛应用,包括安防领域的人脸识别和智能视频分析等,交通领域的交通场景识别,互联网领域基于内容的图像检索和相册自动归类,医学领域的图像识别等。


一般来说,图像分类通过手工特征或特征学习方法对整个图像进行全部描述,然后使用分类器判别物体类别,因此如何提取图像的特征至关重要。在深度学习算法之前使用较多的是基于词包模型的物体分类方法,词包模型的基本框架包括底层特征学习、特征编码、空间约束、分类器设计、模型融合等几个阶段
一般来说,图像分类通过手工特征或特征学习方法对整个图像进行全部描述,然后使用分类器判别物体类别,因此如何提取图像的特征至关重要。在深度学习算法之前使用较多的是基于词袋(Bag of Words)模型的物体分类方法,词袋方法从自然语言处理中引入,即一句话可以用一个装了词的袋子表示其特征,袋子中的词为句子中的单词、短语或字。对于图像而言,词袋方法需要构建字典。最简单的词袋模型框架可以设计为**底层特征抽取**、**特征编码**、**分类器设计**三个过程
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

词袋方法前面的逗号改句号。


而基于深度学习的图像分类方法,其基本思想是通过有监督或无监督的方式学习层次化的特征描述,来对物体进行从底层到高层的描述。深度学习模型中的卷积神经网络(Convolution Neural Network, CNN)近年来在图像领域取得了惊人的成绩,CNN直接利用图像像素信息作为输入,最大程度上保留了输入图像的所有信息,通过卷积操作进行特征的提取和高层抽象,模型输出直接是图像识别的结果。这种基于"输入-输出"直接端到端学习方法取了非常好的效果,得到了广泛的应用。
而基于深度学习的图像分类方法可以通过有监督或无监督的方式**学习**层次化的特征描述,从而带取代了手工设计或选择图像特征的工作。深度学习模型中的卷积神经网络(Convolution Neural Network, CNN)近年来在图像领域取得了惊人的成绩,CNN直接利用图像像素信息作为输入,最大程度上保留了输入图像的所有信息,通过卷积操作进行特征的提取和高层抽象,模型输出直接是图像识别的结果。这种基于"输入-输出"直接端到端学习方法取得了非常好的效果,得到了广泛的应用。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 而基于深度学习的图像分类方法,(加逗号)
  2. 从而取代,多了一个“带”
  3. 直接端到端的学习方法

@@ -33,7 +33,7 @@
</p>


一个好的模型即要对不同类别识别正确,同时也应该能够对不同视角、光照、背景、变形或部分遮挡的图像正确识别(这里我们统一称作图像扰动),下图展示了一些图像的扰动,较好的模型会像聪明的人类一样能够正确识别。
一个好的模型既要对不同类别识别正确,同时也应该能够对不同视角、光照、背景、变形或部分遮挡的图像正确识别(这里我们统一称作图像扰动),图3展示了一些图像的扰动,较好的模型会像聪明的人类一样能够正确识别。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

图3前面的逗号改句号。


在2012年之前的传统图像分类模型中,底层特征提取是第一步,通常从图像中按照固定步长、尺度提取大量局部特征描述,通常采用的局部特征包括SIFT(Scale-Invariant Feature Transform, 尺度不变特征转换) \[[1](#参考文献)\]、HOG(Histogram of Oriented Gradient, 方向梯度直方图) \[[2](#参考文献)\]、LBP(Local Bianray Pattern, 局部二值模式) \[[3](#参考文献)\] 等,传统物体分类算法一般都采用多种特征描述子,防止丢失过多的有用信息。底层特征中包含了大量冗余与噪声,为了提高特征表达的鲁棒性,需要使用一种特征变换算法对底层特征进行编码,称作特征编码。特征编码算法包括向量量化编码 \[[4](#参考文献)\]、稀疏编码 \[[5](#参考文献)\]、局部线性约束编码 \[[6](#参考文献)\]、Fisher向量编码 \[[7](#参考文献)\] 等。特征编码之后一般会经过空间特征约束,也称作特征汇聚。特征汇聚是对每一维特征取最大值或者平均值,可以获得一定特征不变形的特征表达。一种常用的特征聚会方法即金字塔特征匹配提出将图像均匀分块,再分块内做特征汇聚。当这些步骤完整之后,一张图像可以用一个固定维度的向量进行描述,接下来就是经过分类器对图像进行分类,通常使用的分类器包括SVM(Support Vector Machine, 支持向量机)、随机森林等,而使用核方法的SVM是最为广泛的分类器,在传统图像分类任务上性能很好。例如ILSVRC 2010年挑战者采用SIFT和LBP特征,两个非线性编码器以及SVM分类器获得图像分类的冠军 \[[8](#参考文献)\]。
在2012年之前的传统图像分类方法可以用背景描述中提到的三步完成,但通常完整建立图像识别模型一般包括底层特征学习、特征编码、空间约束、分类器设计、模型融合等几个阶段。1). **底层特征提取**,通常从图像中按照固定步长、尺度提取大量局部特征描述,采用的局部特征包括SIFT(Scale-Invariant Feature Transform, 尺度不变特征转换) \[[1](#参考文献)\]、HOG(Histogram of Oriented Gradient, 方向梯度直方图) \[[2](#参考文献)\]、LBP(Local Bianray Pattern, 局部二值模式) \[[3](#参考文献)\] 等,一般也采用多种特征描述子,防止丢失过多的有用信息。2). **特征编码**,底层特征中包含了大量冗余与噪声,为了提高特征表达的鲁棒性,需要使用一种特征变换算法对底层特征进行编码,称作特征编码。常用的特征编码包括向量量化编码 \[[4](#参考文献)\]、稀疏编码 \[[5](#参考文献)\]、局部线性约束编码 \[[6](#参考文献)\]、Fisher向量编码 \[[7](#参考文献)\] 等。3). **空间特征约束** 特征编码之后一般会经过空间特征约束,也称作**特征汇聚**。特征汇聚是指在一个空间范围内,对每一维特征取最大值或者平均值,可以获得一定特征不变形的特征表达。金字塔特征匹配是一种常用的特征聚会方法,这种方法提出将图像均匀分块,再分块内做特征汇聚。4). **通过分类器分类**,经过前面步骤之后一张图像可以用一个固定维度的向量进行描述,接下来就是经过分类器对图像进行分类,通常使用的分类器包括SVM(Support Vector Machine, 支持向量机)、随机森林等,而使用核方法的SVM是最为广泛的分类器,在传统图像分类任务上性能很好。这种方法在PASCAL VOC竞赛中的图像分类算法中被广泛使用[18]。[NEC实验室](http://www.nec-labs.com/)在ILSVRC2010中采用SIFT和LBP特征,两个非线性编码器以及SVM分类器获得图像分类的冠军 \[[8](#参考文献)\]。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这段太长了,1234改为如下:

  • 底层特征提取:通常从图像中按照固定步长、尺度提取大量局部特征描述。原文的逗号改成句号。
  • 特征编码:
  • 空间特征约束:再分块内做特征汇聚-》再在分块内做特征汇聚
  • 分类器分类:。通常使用的分类器包括SVM。(这句前面和后面的逗号都改句号)

NEC实验室在ILSVRC2010中通过采用SIFT和LBP特征、两个非线性编码器以及SVM分类器获得图像分类的冠军 [8]。


Alex Krizhevsky在2012年ILSVRC提出的CNN模型 \[[9](#参考文献)\] 取得了历史性的突破,效果大幅度超越传统方法,获得了ILSVRC 2012冠军,该模型被称作AlexNet这也是首次将深度学习用于大规模图像分类中,并使用GPU加速模型训练。从此,涌现了一系列CNN模型,不断的在ImageNet上刷新成绩,如图4展示。随着模型变得越来越深以及精妙的结构设计,Top-5的错误率也越来越低,目前降到了3.5%附近而在同样的ImageNet数据集上,人眼的辨识错误率大概在5.1%,也就是目前的深度学习模型的识别能力已经超过了人眼。
Alex Krizhevsky在2012年ILSVRC提出的CNN模型 \[[9](#参考文献)\] 取得了历史性的突破,效果大幅度超越传统方法,获得了ILSVRC2012冠军,该模型被称作AlexNet这也是首次将深度学习用于大规模图像分类中。从AlexNet之后,涌现了一系列CNN模型,不断的在ImageNet上刷新成绩,如图 4 展示。随着模型变得越来越深以及精妙的结构设计,Top-5的错误率也越来越低,降到了3.5%附近而在同样的ImageNet数据集上,人眼的辨识错误率大概在5.1%,也就是目前的深度学习模型的识别能力已经超过了人眼。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 涌现了一系列CNN模型,不断地在
  2. 如图4展示,4前后的空格去掉

@@ -437,15 +465,15 @@ Label of image/dog.png is: 5

### 特征提取

可以按照下面方式对图片提取特征,和预测使用方式不同的是指定job类型为extract,并需要指定提取的层。`classify.py` 默认已第一层卷积特征为例提取特征,并给出了可视化图,如图10所示,VGG模型的第一层卷积有64个通道,图 13 展示的为每个通道的灰度图
可以按照下面方式对图片提取特征,和预测使用方式不同的是指定job类型为extract,并需要指定提取的层。`classify.py` 默认以第一层卷积特征为例提取特征,并给出了可视化图,如图 14 所示,VGG模型的第一层卷积有64个通道,图 14 展示了每个通道的灰度图
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

并会画出了类似图14的可视化图。VGG模型的第一层卷积有64个通道,图14展示了每个通道的灰度图。

<img src="image/fea_conv0.png"><br/>
图13. CIFAR10数据集
<img src="image/fea_conv0.png" width="500"><br/>
图14. 卷积特征可视化图
</p>

## 总结
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本文我们首先介绍VGG、GoogleNet、ResNet三个经典的模型;然后基于CIFAR10数据集,介绍如何使用PaddlePaddle配置和训练CNN模型,尤其是VGG和ResNet模型;最后介绍如何使用PaddlePaddle的API接口对图片进行预测和特征提取。对于其他数据集比如ImageNet,配置和训练流程是同样的,大家可以自行进行实验。


<p align="center">
<img src="image/vgg16.png" width="500" ><br/>
<img src="image/vgg16.png" width="600" ><br/>
图6. 基于ImageNet的VGG16模型
</p>

### GoogleNet

GoogleNet \[[12](#参考文献)\] 在2014年ILSVRC的获得了冠军,在介绍该模型之前我们先来了解NIN(Network in Network)模型 \[[13](#参考文献)\],因为GoogleNet模型借鉴了NIN的一些思想。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

在介绍该模型之前我们先来了解NIN(Network in Network)模型 [13]和Inception模块,因为GoogleNet模型借鉴了NIN的一些思想,并由多组Inception模块组成。

Inception有中文么

图8. Inception模块
</p>

另外,GoogleNet在网络最后也没有采用传统的多层全连接层,而是像NIN网络一样采用了Avg-Pooling,与NIN不同的是,Avg-Pooling后面接了一层到类别数映射的全连接层。除了Inception模块和Avg-Pooling外,由于网络中间层特征也很有判别性,所以在中间层添加了两个辅助分类器,在后向传播中增强梯度并且增强正则化,而整个网络的损失函数是这个三个分类器的损失加权求和。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

97行放在99行后面介绍。注意:1)GoogleNet在网络最后没有采用传统的多层全连接层,而是像NIN一样采用了平均池化层。但与NIN不同的是,平均池化层后面又接了一层到类别数映射的全连接层。2)网络中间层(中间层是什么?)

97行再顺一下。看下是直接连在99行后面好,还是另起一行好。



### ResNet

ResNet \[[15](#参考文献)\] 是2015年ImageNet分类定位、检测比赛的冠军。针对训练卷积神经网络时加深网络导致准确度下降的问题,提出了采用残差学习。在已有设计思路(BN, 小卷积核,全卷积网络)的基础上,引入了残差模块。每个残差模块包含两条路径,其中一条路径是输入特征的直连通路,另一条路径对该特征做两到三次卷积操作得到该特征的残差,最后再将两条路径上的特征相加。残差模块如图 9 所示,左边是基本模块连接方式,右边是瓶颈模块连接方式。图 10 展示了50-152层网络连接示意图。ResNet成功的训练了上百乃至近千层的卷积神经网络,训练时收敛快,速度也较VGG有所提升
ResNet(Residual Network) \[[15](#参考文献)\] 是2015年ImageNet图像分类、图像物体定位和图像物体检测比赛的冠军。针对训练卷积神经网络时加深网络导致准确度下降的问题,ResNet提出了采用残差学习。在已有设计思路(BN, 小卷积核,全卷积网络)的基础上,引入了残差模块。每个残差模块包含两条路径,其中一条路径是输入特征的直连通路,另一条路径对该特征做两到三次卷积操作得到该特征的残差,最后再将两条路径上的特征相加。残差模块如图 10 所示,左边是基本模块连接方式,右边是瓶颈模块(Bottleneck)连接方式,Bottleneck多用于较深的网络中,如图 11 展示的50、101、152层网络连接示意图,这三个模型的区别在于每组中残差模块的重复次数,如图 11 的右上角所示。ResNet成功的训练了上百乃至近千层的卷积神经网络,训练收敛较快
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

另起一行:残差模块如图10所示,左边是基本模块连接方式,右边是瓶颈模块(Bottleneck)连接方式,瓶颈模块多用于较深的网络中。图11展示了50、101、152层网络连接示意图,这三个网络的区别在于每组中残差模块的重复次数不同(见图右上角)。由于ResNet训练收敛较快,因此成功地训练了上百乃至近千层的卷积神经网络。

Copy link
Collaborator

@Zrachel Zrachel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

需要修改小问题


<p align="center">
<img src="image/variations.png" width="550" ><br/>
图3. 扰动图片展示
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

所有图片,如果不是自己的,要加来源注释


图像识别领域大量的研究成果都是建立在[PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/)、[ImageNet](http://image-net.org/)等公开的数据集上,很多图像识别算法通常在这些数据集上进行测试和比较。PASCAL VOC是2005年发起的一个视觉挑战赛,ImageNet是2010年发起的大规模视觉识别竞赛(ILSVRC)的数据集,在本章中我们基于这些竞赛的一些论文介绍图像分类模型。

在2012年之前的传统图像分类方法可以用背景描述中提到的三步完成,但通常完整建立图像识别模型一般包括底层特征学习、特征编码、空间约束、分类器设计、模型融合等几个阶段。1). **底层特征提取**,通常从图像中按照固定步长、尺度提取大量局部特征描述,采用的局部特征包括SIFT(Scale-Invariant Feature Transform, 尺度不变特征转换) \[[1](#参考文献)\]、HOG(Histogram of Oriented Gradient, 方向梯度直方图) \[[2](#参考文献)\]、LBP(Local Bianray Pattern, 局部二值模式) \[[3](#参考文献)\] 等,一般也采用多种特征描述子,防止丢失过多的有用信息。2). **特征编码**,底层特征中包含了大量冗余与噪声,为了提高特征表达的鲁棒性,需要使用一种特征变换算法对底层特征进行编码,称作特征编码。常用的特征编码包括向量量化编码 \[[4](#参考文献)\]、稀疏编码 \[[5](#参考文献)\]、局部线性约束编码 \[[6](#参考文献)\]、Fisher向量编码 \[[7](#参考文献)\] 等。3). **空间特征约束** 特征编码之后一般会经过空间特征约束,也称作**特征汇聚**。特征汇聚是指在一个空间范围内,对每一维特征取最大值或者平均值,可以获得一定特征不变形的特征表达。金字塔特征匹配是一种常用的特征聚会方法,这种方法提出将图像均匀分块,再分块内做特征汇聚。4). **通过分类器分类**,经过前面步骤之后一张图像可以用一个固定维度的向量进行描述,接下来就是经过分类器对图像进行分类,通常使用的分类器包括SVM(Support Vector Machine, 支持向量机)、随机森林等,而使用核方法的SVM是最为广泛的分类器,在传统图像分类任务上性能很好。这种方法在PASCAL VOC竞赛中的图像分类算法中被广泛使用[18]。[NEC实验室](http://www.nec-labs.com/)在ILSVRC2010中采用SIFT和LBP特征,两个非线性编码器以及SVM分类器获得图像分类的冠军 \[[8](#参考文献)\]。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

再分块内做特征汇聚-》再在分块内取最大值或平均值

- 非线性变化: 卷积层、全连接层后面一般都会接非线性变化层,例如Sigmoid、Tanh、ReLu等来增强网络的表达能力,在CNN里最常用的为ReLu激活函数。
- Droupout \[[10](#参考文献)\] : 在模型训练阶段随机让一些隐层节点权重不工作,提高网络的泛化能力,一定程度上防止过拟合。

另外,在训练过程中由于每层参数不断更新,会导致下一次输入分布发生变化,这样导致训练过程需要精心设计超参数。2015年Sergey Ioffe和Christian Szegedy提出的Batch Normalization(BN)算法 \[[14](#参考文献)\],BN算法是每个batch对网络中的每一层的特征做归一化,使得每层分布相对稳定,起到一定的正则作用,同时也弱化了超参数的设计。经过实验证明,BN加速了模型收敛过程,在后来较深的模型中被广泛使用。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2015年Sergey Ioffe和Christian Szegedy提出的Batch Normalization(BN)算法 [14],BN算法是每个batch对网络中的每一层的特征做归一化,
->
如2015年Sergey Ioffe和Christian Szegedy提出的Batch Normalization(BN)算法 [14]中,对每个batch对网络中的每一层的特征做归一化,

@qingqing01
Copy link
Contributor Author

qingqing01 commented Jan 11, 2017

@luotao1 @Zrachel 已按照comments逐一修改 :)

还有个问题网上截取的图片,来源是加上url连接吗?

@Zrachel
Copy link
Collaborator

Zrachel commented Jan 11, 2017

@qingqing01 是的,paper中找不到的图加url来源,也放在参考文献里,以[5]形式写在图几的描述后面

- 卷积(Convolution)层: 通过卷积操作提取底层到高层的特征,发掘出图片局部关联性质和空间不变性质。
- 池化(Pooling)层: 是一种降采样操作,通过取卷积得到特征图中局部区块的最大值(Max-Pooling)或平均值(Avg-Pooling)来达到降采样的目的,并在做这个过程中获得一定的不变性。
- 全连接(Fully-Connected, 简称FC)层: 输入层到隐藏层的神经元是全部连接的。
- 非线性变化: 卷积层、全连接层后面一般都会接非线性变化层,例如Sigmoid、Tanh、ReLu等来增强网络的表达能力,在CNN里最常使用的为ReLu激活函数。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReLu ==> ReLU

另外可以加一个连接 https://en.wikipedia.org/wiki/Rectifier_(neural_networks)


另外,在训练过程中由于每层参数不断更新,会导致下一次输入分布发生变化,这样导致训练过程需要精心设计超参数。如2015年Sergey Ioffe和Christian Szegedy提出了Batch Normalization(BN)算法 \[[14](#参考文献)\]中,每个batch对网络中的每一层特征都做归一化,使得每层分布相对稳定。BN算法不仅起到一定的正则作用,而且弱化了超参数的设计。经过实验证明,BN算法加速了模型收敛过程,在后来较深的模型中被广泛使用。

接下来我们主要介绍VGG,GooleNet和ResNet网络结构。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GooleNet ==> GoogleNet


### CNN

传统CNN包含卷积层、全连接层等组件,并采用softmax多类别分类器和多类交叉熵损失函数,一个典型的卷积神经网络如图5所示,我们首先了解CNN网络结构的一些基本组件。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

我们首先了解CNN网络结构的一些基本组件

是不是改成

我们先介绍用来构造CNN的常见组件

图5. CNN网络示例
</p>

- 卷积(Convolution)层: 通过卷积操作提取底层到高层的特征,发掘出图片局部关联性质和空间不变性质。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

如果写

卷积层(convolution layer):执行卷积操作,从输入中提取高阶特征。卷积是一种在图像处理领域广泛使用了多年的操作,它能利用图片的局部关联和空间不变性。

能否更清晰一些?

</p>

- 卷积(Convolution)层: 通过卷积操作提取底层到高层的特征,发掘出图片局部关联性质和空间不变性质。
- 池化(Pooling)层: 是一种降采样操作,通过取卷积得到特征图中局部区块的最大值(Max-Pooling)或平均值(Avg-Pooling)来达到降采样的目的,并在做这个过程中获得一定的不变性。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

如果写

池化层(pooling layer):执行降采样(downsample)操作。通常取卷积层的输出图像中的局部区块的最大值(max-pooling)或者均值(avg-pooling)。降采样也是图像处理中常见的一种操作,可以帮助我们滤掉对分类不那么重要的高频信息。

不知道能否更清晰一点?


- 卷积(Convolution)层: 通过卷积操作提取底层到高层的特征,发掘出图片局部关联性质和空间不变性质。
- 池化(Pooling)层: 是一种降采样操作,通过取卷积得到特征图中局部区块的最大值(Max-Pooling)或平均值(Avg-Pooling)来达到降采样的目的,并在做这个过程中获得一定的不变性。
- 全连接(Fully-Connected, 简称FC)层: 输入层到隐藏层的神经元是全部连接的。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

如果写

全连接层(fully-connected layer,或者 fc-layer):执行一种输入到输出的变化,其中每个输出值都是用所有输入值计算得到的。全连接层是deep learning中常见的一种组件,通常其输出体现输入信息中的一些隐含但重要的因素。

不知道可否更清晰一点?

- 非线性变化: 卷积层、全连接层后面一般都会接非线性变化层,例如Sigmoid、Tanh、ReLu等来增强网络的表达能力,在CNN里最常使用的为ReLu激活函数。
- Dropout \[[10](#参考文献)\] : 在模型训练阶段随机让一些隐层节点权重不工作,提高网络的泛化能力,一定程度上防止过拟合。

另外,在训练过程中由于每层参数不断更新,会导致下一次输入分布发生变化,这样导致训练过程需要精心设计超参数。如2015年Sergey Ioffe和Christian Szegedy提出了Batch Normalization(BN)算法 \[[14](#参考文献)\]中,每个batch对网络中的每一层特征都做归一化,使得每层分布相对稳定。BN算法不仅起到一定的正则作用,而且弱化了超参数的设计。经过实验证明,BN算法加速了模型收敛过程,在后来较深的模型中被广泛使用。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

如果我们用英语括号,那么"Batch Normalization"和"(BN)“之间应该有一个空格;如果我们用中文括号,则不需要。

- 非线性变化: 卷积层、全连接层后面一般都会接非线性变化层,例如Sigmoid、Tanh、ReLu等来增强网络的表达能力,在CNN里最常使用的为ReLu激活函数。
- Dropout \[[10](#参考文献)\] : 在模型训练阶段随机让一些隐层节点权重不工作,提高网络的泛化能力,一定程度上防止过拟合。

另外,在训练过程中由于每层参数不断更新,会导致下一次输入分布发生变化,这样导致训练过程需要精心设计超参数。如2015年Sergey Ioffe和Christian Szegedy提出了Batch Normalization(BN)算法 \[[14](#参考文献)\]中,每个batch对网络中的每一层特征都做归一化,使得每层分布相对稳定。BN算法不仅起到一定的正则作用,而且弱化了超参数的设计。经过实验证明,BN算法加速了模型收敛过程,在后来较深的模型中被广泛使用。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里

弱化了超参数的设计

是不是想说

弱化了对刁钻的超参数设计的依赖

- 1). **底层特征提取**,通常从图像中按照固定步长、尺度提取大量局部特征描述。常用的局部特征包括SIFT(Scale-Invariant Feature Transform, 尺度不变特征转换) \[[1](#参考文献)\]、HOG(Histogram of Oriented Gradient, 方向梯度直方图) \[[2](#参考文献)\]、LBP(Local Bianray Pattern, 局部二值模式) \[[3](#参考文献)\] 等,一般也采用多种特征描述子,防止丢失过多的有用信息。
- 2). **特征编码**,底层特征中包含了大量冗余与噪声,为了提高特征表达的鲁棒性,需要使用一种特征变换算法对底层特征进行编码,称作特征编码。常用的特征编码包括向量量化编码 \[[4](#参考文献)\]、稀疏编码 \[[5](#参考文献)\]、局部线性约束编码 \[[6](#参考文献)\]、Fisher向量编码 \[[7](#参考文献)\] 等。
- 3). **空间特征约束** 特征编码之后一般会经过空间特征约束,也称作**特征汇聚**。特征汇聚是指在一个空间范围内,对每一维特征取最大值或者平均值,可以获得一定特征不变形的特征表达。金字塔特征匹配是一种常用的特征聚会方法,这种方法提出将图像均匀分块,在分块内做特征汇聚。
- 4). **通过分类器分类**,经过前面步骤之后一张图像可以用一个固定维度的向量进行描述,接下来就是经过分类器对图像进行分类。通常使用的分类器包括SVM(Support Vector Machine, 支持向量机)、随机森林等。而使用核方法的SVM是最为广泛的分类器,在传统图像分类任务上性能很好。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

如果有点的话,"1)."这些是不是不要了,底层特征提取后面加冒号,其他也是类似修改。

- 3). **空间特征约束** 特征编码之后一般会经过空间特征约束,也称作**特征汇聚**。特征汇聚是指在一个空间范围内,对每一维特征取最大值或者平均值,可以获得一定特征不变形的特征表达。金字塔特征匹配是一种常用的特征聚会方法,这种方法提出将图像均匀分块,在分块内做特征汇聚。
- 4). **通过分类器分类**,经过前面步骤之后一张图像可以用一个固定维度的向量进行描述,接下来就是经过分类器对图像进行分类。通常使用的分类器包括SVM(Support Vector Machine, 支持向量机)、随机森林等。而使用核方法的SVM是最为广泛的分类器,在传统图像分类任务上性能很好。

这种方法在PASCAL VOC竞赛中的图像分类算法中被广泛使用[18]。[NEC实验室](http://www.nec-labs.com/)在ILSVRC2010中采用SIFT和LBP特征,两个非线性编码器以及SVM分类器获得图像分类的冠军 \[[8](#参考文献)\]。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[18]参考文献没跳转


<p align="center">
<img src="image/vgg16.png" width="600" ><br/>
<img src="image/vgg16.png" width="700" ><br/>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

图可以拉宽点


GoogleNet模型是由多组Inception模块堆积组成,Inception模块如下图8所示,高层输出是4组不同卷积核大小的特征连接起来,3个黄色1x1卷积是降维的作用,所谓的降维就是减少了通道数。引入1x1卷积的原因是如果去掉这几层,会发现Max-Pooling不会改变特征通道数的大小,这样3个蓝色卷积和Max-Pooling特征连接后会导致特征的通道数较大,经过几层这样的模块堆积会导致通常数越来越大,参数和计算量都会增大。因此引入1x1卷积进行降维,同时在NIN模型中提到1x1卷积也可以修正线性特征
Inception模块如下图7所示,图(a)是最简单的设计,输出是3个卷积层和一个池化层的特征拼接,这样设计的缺点是池化层不会改变特征通道数,拼接后会导致特征的通道数较大,经过几层这样的模块堆积会导致通道数越来越大,参数和计算量随之增大。为了改善这个缺点,图(b)引入3个1x1卷积层进行降维,所谓的降维就是减少通道数,同时如NIN模型中提到的1x1卷积也可以修正线性特征
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

一些小修:

Inception模块如下图7所示。图(a)是最简单的设计,输出是3个卷积层和一个池化层的特征拼接。图(a)的缺点是池化层不会改变特征通道数,拼接后会导致这个通道数较大,经过几层这样的模块堆积后,这个通道数会越来越大,导致参数和计算量也随之增大。为了改善这个缺点,图(b)引入3个1x1卷积层进行降维,所谓的降维就是减少通道数。

最后一句话中线性特征是啥?

</p>

另外,GoogleNet在网络最后也没有采用传统的多层全连接层,而是像NIN网络一样采用了Avg-Pooling,与NIN不同的是,Avg-Pooling后面接了一层到类别数映射的全连接层。除了Inception模块和Avg-Pooling外,由于网络中间层特征也很有判别性,所以在中间层添加了两个辅助分类器,在后向传播中增强梯度并且增强正则化,而整个网络的损失函数是这个三个分类器的损失加权求和。
GoogleNet由多组Inception模块堆积而成,另外,在网络最后也没有采用传统的多层全连接层,而是像NIN网络一样采用了均值池化层,与NIN不同的是,池化层后面接了一层到类别数映射的全连接层。除了这两个特点之外,由于网络中间层特征也很有判别性,GoogleNet在中间层添加了两个辅助分类器,在后向传播中增强梯度并且增强正则化,而整个网络的损失函数是这个三个分类器的损失加权求和。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

一些小修:

+GoogleNet由多组Inception模块堆积而成。另外,在网络最后也没有采用传统的多层全连接层,而是像NIN网络一样采用了均值池化层;但与NIN不同的是,池化层后面接了一层到类别数映射的全连接层。除了这两个特点之外,由于网络中间层特征也很有判别性,因此GoogleNet在中间层添加了两个辅助分类器,并在后向传播中增强梯度和正则化,整个网络的损失函数就是这个三个分类器的损失加权求和。


<p align="center">
<img src="image/googlenet.jpeg" ><br/>
图9. GoogleNet
图8. GoogleNet[12]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

图中的参考文献无法跳转

ResNet(Residual Network) \[[15](#参考文献)\] 是2015年ImageNet图像分类、图像物体定位和图像物体检测比赛的冠军。针对训练卷积神经网络时加深网络导致准确度下降的问题,ResNet提出了采用残差学习。在已有设计思路(BN, 小卷积核,全卷积网络)的基础上,引入了残差模块。每个残差模块包含两条路径,其中一条路径是输入特征的直连通路,另一条路径对该特征做两到三次卷积操作得到该特征的残差,最后再将两条路径上的特征相加。残差模块如图 10 所示,左边是基本模块连接方式,右边是瓶颈模块(Bottleneck)连接方式,Bottleneck多用于较深的网络中,如图 11 展示的50、101、152层网络连接示意图,这三个模型的区别在于每组中残差模块的重复次数,如图 11 的右上角所示。ResNet成功的训练了上百乃至近千层的卷积神经网络,训练收敛较快。
ResNet(Residual Network) \[[15](#参考文献)\] 是2015年ImageNet图像分类、图像物体定位和图像物体检测比赛的冠军。针对训练卷积神经网络时加深网络导致准确度下降的问题,ResNet提出了采用残差学习。在已有设计思路(BN, 小卷积核,全卷积网络)的基础上,引入了残差模块。每个残差模块包含两条路径,其中一条路径是输入特征的直连通路,另一条路径对该特征做两到三次卷积操作得到该特征的残差,最后再将两条路径上的特征相加。

残差模块如图9所示,左边是基本模块连接方式,由两个输出通道数相同的3x3卷积组成。右边是瓶颈模块(Bottleneck)连接方式,之所以称为瓶颈,是因为上面的1x1卷积用来降维(图示例即256->64),下面的1x1卷积用来升维(图示例即64->256),这样中间3x3卷积的输入和输出通道数都较小(图示例即64->64)。图10展示了50、101、152层网络连接示意图,所使用是瓶颈模块。这三个模型的区别在于每组中残差模块的重复次数不同(见图右上角)。ResNet训练收敛较快,成功的训练了上百乃至近千层的卷积神经网络。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 从图10开始的几句话,放在图9后面介绍。
  2. 所使用是瓶颈模块,这句话不通。

@@ -218,13 +225,13 @@ settings(
regularization=L2Regularization(0.0005 * 128),)
```

通过 `learning_rate_decay_a` 、`learning_rate_decay_b` 和 `learning_rate_schedule ` 指定学习率调整策略,这里采用离散指数的方式调节学习率,计算公式如下, `num_samples_processed` 代表已经处理过的累计总样本数。
通过 `learning_rate_decay_a` (简写a) 、`learning_rate_decay_b` (简写b) 和 `learning_rate_schedule ` 指定学习率调整策略,这里采用离散指数的方式调节学习率,计算公式如下, `n` 代表已经处理过的累计总样本数,$lr_{0}$ 即为 `settings` 里设置的 `learning_rate`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

因为下面是公式,所以228行中的a,b,n都用$a$,$b$,$n$来表示

@@ -368,6 +375,17 @@ def layer_warp(block_func, ipt, features, count, stride):
tmp = block_func(tmp, features, 1)
return tmp

```

`resnet_cifar10` 的连接结构主要由以下几个过程。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

主要有,笔误

@luotao1 luotao1 merged commit ba151ec into PaddlePaddle:develop Jan 12, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

图像分类
4 participants