删减修改整体内容

This commit is contained in:
Tan 2018-11-11 19:45:58 +08:00
parent 948711e867
commit 40d1a3ff15
1 changed files with 267 additions and 190 deletions

View File

@ -1,65 +1,68 @@
[TOC]
# 第四章 经典网络
## 4.1 LetNet5
一种典型的用来识别数字的卷积网络是LeNet-5。
## 4.1.1 模型结构
### 4.1.1 模型结构
![](./img/ch4/image1.png)
## 4.1.2 模型结构
LeNet-5共有7层,不包含输入每层都包含可训练参数每个层有多个Feature Map每个FeatureMap通过一种卷积滤波器提取输入的一种特征然后每个FeatureMap有多个神经元。
### 4.1.2 模型结构
LeNet-5共有7层(不包含输入层)每层都包含可训练参数每个层有多个Feature Map每个FeatureMap通过一种卷积滤波器提取输入的一种特征然后每个FeatureMap有多个神经元。
1. C1层是一个卷积层
输入图片32 \* 32
卷积核大小5 \* 5
卷积核种类6
输出featuremap大小28 \* 28 32-5+1
神经元数量28 \* 28 \* 6
可训练参数5 \* 5+1 \* 6每个滤波器5 \* 5=25个unit参数和一个bias参数一共6个滤波器
连接数5 \* 5+1 \* 6 \* 28 \* 28
- C1层是一个卷积层
输入图片32 \* 32
卷积核大小5 \* 5
卷积核种类6
输出featuremap大小28 \* 28 32-5+1
神经元数量28 \* 28 \* 6
可训练参数5 \* 5+1 \* 6每个滤波器5 \* 5=25个unit参数和一个bias参数一共6个滤波器
连接数5 \* 5+1 \* 6 \* 28 \* 28
2. S2层是一个下采样层
输入28 \* 28
采样区域2 \* 2
采样方式4个输入相加乘以一个可训练参数再加上一个可训练偏置。结果通过sigmoid
采样种类6
输出featureMap大小14 \* 1428/2
神经元数量14 \* 14 \* 6
可训练参数2 \* 6和的权+偏置)
连接数2 \* 2+1 \* 6 \* 14 \* 14
S2中每个特征图的大小是C1中特征图大小的1/4
- S2层是一个下采样层
输入28 \* 28
采样区域2 \* 2
采样方式4个输入相加乘以一个可训练参数再加上一个可训练偏置。结果通过sigmoid
采样种类6
输出featureMap大小14 \* 1428/2
神经元数量14 \* 14 \* 6
可训练参数2 \* 6和的权+偏置)
连接数2 \* 2+1 \* 6 \* 14 \* 14
S2中每个特征图的大小是C1中特征图大小的1/4
3. C3层也是一个卷积层
输入S2中所有6个或者几个特征map组合
卷积核大小5 \* 5
卷积核种类16
输出featureMap大小10 \* 10
C3中的每个特征map是连接到S2中的所有6个或者几个特征map的表示本层的特征map是上一层提取到的特征map的不同组合
存在的一个方式是C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。 则可训练参数6 \* 3 \* 25+1+6 \* 4 \* 25+1+3 \* 4 \* 25+1+25 \* 6+1=1516
连接数10 \* 10 \* 1516=151600
- C3层也是一个卷积层
输入S2中所有6个或者几个特征map组合
卷积核大小5 \* 5
卷积核种类16
输出featureMap大小10 \* 10
C3中的每个特征map是连接到S2中的所有6个或者几个特征map的表示本层的特征map是上一层提取到的特征map的不同组合
存在的一个方式是C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。 则可训练参数6 \* 3 \* 25+1+6 \* 4 \* 25+1+3 \* 4 \* 25+1+25 \* 6+1=1516
连接数10 \* 10 \* 1516=151600
4. S4层是一个下采样层
输入10 \* 10
采样区域2 \* 2
采样方式4个输入相加乘以一个可训练参数再加上一个可训练偏置。结果通过sigmoid
采样种类16
输出featureMap大小5 \* 510/2
神经元数量5 \* 5 \* 16=400
可训练参数2 \* 16=32和的权+偏置)
连接数16 \* 2 \* 2+1 \* 5 \* 5=2000
S4中每个特征图的大小是C3中特征图大小的1/4
- S4层是一个下采样层
输入10 \* 10
采样区域2 \* 2
采样方式4个输入相加乘以一个可训练参数再加上一个可训练偏置。结果通过sigmoid
采样种类16
输出featureMap大小5 \* 510/2
神经元数量5 \* 5 \* 16=400
可训练参数2 \* 16=32和的权+偏置)
连接数16 \* 2 \* 2+1 \* 5 \* 5=2000
S4中每个特征图的大小是C3中特征图大小的1/4
5. C5层是一个卷积层
输入S4层的全部16个单元特征map与s4全相连
卷积核大小5 \* 5
卷积核种类120
输出featureMap大小1 \* 15-5+1
可训练参数/连接120 \* 16 \* 5 \* 5+1=48120
- C5层是一个卷积层
输入S4层的全部16个单元特征map与s4全相连
卷积核大小5 \* 5
卷积核种类120
输出featureMap大小1 \* 15-5+1
可训练参数/连接120 \* 16 \* 5 \* 5+1=48120
6. F6层全连接层
输入c5 120维向量
计算方式计算输入向量和权重向量之间的点积再加上一个偏置结果通过sigmoid函数
可训练参数:84 \* (120+1)=10164
## 4.1.3 模型特性
- F6层全连接层
输入c5 120维向量
计算方式计算输入向量和权重向量之间的点积再加上一个偏置结果通过sigmoid函数
可训练参数:84 \* (120+1)=10164
### 4.1.3 模型特性
- 卷积网络使用一个3层的序列卷积、池化、非线性——这可能是自这篇论文以来面向图像的深度学习的关键特性
- 使用卷积提取空间特征
- 使用映射的空间均值进行降采样
@ -67,88 +70,179 @@ S4中每个特征图的大小是C3中特征图大小的1/4
- 多层神经网络MLP作为最终的分类器
- 层间的稀疏连接矩阵以避免巨大的计算开销
# 4.2 AlexNet
## 4.2.1 模型结构
## 4.2 AlexNet
### 4.2.1 模型介绍
AlexNet在2012年ILSVRC竞赛中赢得了第一名其Top5错误率为15.3%。AlexNet模型证明了CNN在复杂模型下的有效性并且在可接受时间范围内部署GPU得到了有效结果。
### 4.2.2 模型结构
![](./img/ch4/image2.jpeg)
## 4.2.2 模型解读
### 4.2.3 模型解读
1. conv1阶段DFDdata flow diagram
AlexNet共8层前五层为卷积层后三层为全连接层。
1. **conv1阶段**
![](./img/ch4/image3.png)
    
第一层输入数据为原始的227 \* 227 \* 3的图像这个图像被11 \* 11 \* 3的卷积核进行卷积运算卷积核对原始图像的每次卷积都生成一个新的像素。卷积核沿原始图像的x轴方向和y轴方向两个方向移动移动的步长是4个像素。因此卷积核在移动的过程中会生成(227-11)/4+1=55个像素(227个像素减去11正好是54即生成54个像素再加上被减去的11也对应生成一个像素)行和列的55 \* 55个像素形成对原始图像卷积之后的像素层。共有96个卷积核会生成55 \* 55 \* 96个卷积后的像素层。96个卷积核分成2组每组48个卷积核。对应生成2组55 \* 55 \* 48的卷积后的像素层数据。这些像素层经过relu1单元的处理生成激活像素层尺寸仍为2组55 \* 55 \* 48的像素层数据。 这些像素层经过pool运算(池化运算)的处理池化运算的尺度为3 \* 3运算的步长为2则池化后图像的尺寸为(55-3)/2+1=27。 即池化后像素的规模为27 \* 27 \* 96然后经过归一化处理归一化运算的尺度为5 \* 5第一卷积层运算结束后形成的像素层的规模为27 \* 27 \* 96。分别对应96个卷积核所运算形成。这96层像素层分为2组每组48个像素层每组在一个独立的GPU上进行运算。 反向传播时每个卷积核对应一个偏差值。即第一层的96个卷积核对应上层输入的96个偏差值。
  
2. conv2阶段DFDdata flow diagram
- 输入图片227 \* 227 \* 3
- 卷积核大小11* 11 *3
- 卷积核数量96
- 滤波器stride4
- 输出featuremap大小(227-11)/4+1=55 (227个像素减去11然后除以4生成54个像素再加上被减去的11也对应生成一个像素)
- 输出featuremap大小55 \* 55
- 共有96个卷积核会生成55 \* 55 \* 96个卷积后的像素层。96个卷积核分成2组每组48个卷积核。对应生成2组55 \* 55 \* 48的卷积后的像素层数据。
- 这些像素层经过relu1单元的处理生成激活像素层尺寸仍为2组55 \* 55 \* 48的像素层数据。
- 这些像素层经过pool运算的处理池化运算尺度为3 \* 3运算的步长为2则池化后图像的尺寸为(55-3)/2+1=27。 即池化后像素的规模为27 \* 27 \* 96
- 然后经过归一化处理归一化运算的尺度为5 \* 5第一卷积层运算结束后形成的像素层的规模为27 \* 27 \* 96。分别对应96个卷积核所运算形成。这96层像素层分为2组每组48个像素层每组在一个独立的GPU上进行运算。
- 反向传播时每个卷积核对应一个偏差值。即第一层的96个卷积核对应上层输入的96个偏差值。
2. **conv2阶段**
![](./img/ch4/image4.png)
    
第二层输入数据为第一层输出的27 \* 27 \* 96的像素层为便于后续处理每幅像素层的左右两边和上下两边都要填充2个像素27 \* 27 \* 96的像素数据分成27 \* 27 \* 48的两组像素数据两组数据分别再两个不同的GPU中进行运算。每组像素数据被5 \* 5 \* 48的卷积核进行卷积运算卷积核对每组数据的每次卷积都生成一个新的像素。卷积核沿原始图像的x轴方向和y轴方向两个方向移动移动的步长是1个像素。因此卷积核在移动的过程中会生成(27-5+2 \* 2)/1+1=27个像素。(27个像素减去5正好是22在加上上下、左右各填充的2个像素即生成26个像素再加上被减去的5也对应生成一个像素)行和列的27 \* 27个像素形成对原始图像卷积之后的像素层。共有256个5 \* 5 \* 48卷积核这256个卷积核分成两组每组针对一个GPU中的27 \* 27 \* 48的像素进行卷积运算。会生成两组27 \* 27 \* 128个卷积后的像素层。这些像素层经过relu2单元的处理生成激活像素层尺寸仍为两组27 \* 27 \* 128的像素层。
这些像素层经过pool运算(池化运算)的处理池化运算的尺度为3 \* 3运算的步长为2则池化后图像的尺寸为(57-3)/2+1=13。 即池化后像素的规模为2组13 \* 13 \* 128的像素层然后经过归一化处理归一化运算的尺度为5 \* 5第二卷积层运算结束后形成的像素层的规模为2组13 \* 13 \* 128的像素层。分别对应2组128个卷积核所运算形成。每组在一个GPU上进行运算。即共256个卷积核共2个GPU进行运算。
反向传播时每个卷积核对应一个偏差值。即第一层的96个卷积核对应上层输入的256个偏差值。
3. conv3阶段DFDdata flow diagram
- 输入图片27 \* 27 \* 96第一层输出
- 为便于后续处理每幅像素层的左右两边和上下两边都要填充2个像素
- 27 \* 27 \* 96的像素数据分成27 \* 27 \* 48的两组像素数据两组数据分别再两个不同的GPU中进行运算。
- 卷积核大小5 \* 5 \* 48
- 滤波器stride1
- 输出featuremap大小卷积核在移动的过程中会生成(27-5+2 \* 2)/1+1=27个像素。(27个像素减去5正好是22在加上上下、左右各填充的2个像素即生成26个像素再加上被减去的5也对应生成一个像素)行和列的27 \* 27个像素形成对原始图像卷积之后的像素层。共有256个5 \* 5 \* 48卷积核这256个卷积核分成两组每组针对一个GPU中的27 \* 27 \* 48的像素进行卷积运算。会生成两组27 \* 27 \* 128个卷积后的像素层。
- 这些像素层经过relu2单元的处理生成激活像素层尺寸仍为两组27 \* 27 \* 128的像素层。
- 这些像素层经过pool运算(池化运算)的处理池化运算的尺度为3 \* 3运算的步长为2则池化后图像的尺寸为(57-3)/2+1=13。 即池化后像素的规模为2组13 \* 13 \* 128的像素层
- 然后经过归一化处理归一化运算的尺度为5 \* 5
- 第二卷积层运算结束后形成的像素层的规模为2组13 \* 13 \* 128的像素层。分别对应2组128个卷积核所运算形成。每组在一个GPU上进行运算。即共256个卷积核共2个GPU进行运算。
- 反向传播时每个卷积核对应一个偏差值。即第一层的96个卷积核对应上层输入的256个偏差值。
3. **conv3阶段**
![](./img/ch4/image5.png)
    
第三层输入数据为第二层输出的2组13 \* 13 \* 128的像素层为便于后续处理每幅像素层的左右两边和上下两边都要填充1个像素2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有192个卷积核每个卷积核的尺寸是3 \* 3 \* 256。因此每个GPU中的卷积核都能对2组13 \* 13 \* 128的像素层的所有数据进行卷积运算。卷积核对每组数据的每次卷积都生成一个新的像素。卷积核沿像素层数据的x轴方向和y轴方向两个方向移动移动的步长是1个像素。因此运算后的卷积核的尺寸为(13-3+1 \* 2)/1+1=1313个像素减去3正好是10在加上上下、左右各填充的1个像素即生成12个像素再加上被减去的3也对应生成一个像素每个GPU中共13 \* 13 \* 192个卷积核。2个GPU中共13 \* 13 \* 384个卷积后的像素层。这些像素层经过relu3单元的处理生成激活像素层尺寸仍为2组13 \* 13 \* 192像素层共13 \* 13 \* 384个像素层。
- 第三层输入数据为第二层输出的2组13 \* 13 \* 128的像素层
- 为便于后续处理每幅像素层的左右两边和上下两边都要填充1个像素
- 2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有192个卷积核每个卷积核的尺寸是3 \* 3 \* 256。因此每个GPU中的卷积核都能对2组13 \* 13 \* 128的像素层的所有数据进行卷积运算。
- 移动的步长是1个像素。
- 运算后的卷积核的尺寸为(13-3+1 \* 2)/1+1=1313个像素减去3正好是10在加上上下、左右各填充的1个像素即生成12个像素再加上被减去的3也对应生成一个像素每个GPU中共13 \* 13 \* 192个卷积核。2个GPU中共13 \* 13 \* 384个卷积后的像素层。这些像素层经过relu3单元的处理生成激活像素层尺寸仍为2组13 \* 13 \* 192像素层共13 \* 13 \* 384个像素层。
4. conv4阶段DFDdata flow diagram
4. **conv4阶段DFD**
![](./img/ch4/image6.png)
    
第四层输入数据为第三层输出的2组13 \* 13 \* 192的像素层为便于后续处理每幅像素层的左右两边和上下两边都要填充1个像素2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有192个卷积核每个卷积核的尺寸是3 \* 3 \* 192。因此每个GPU中的卷积核能对1组13 \* 13 \* 192的像素层的数据进行卷积运算。卷积核对每组数据的每次卷积都生成一个新的像素。卷积核沿像素层数据的x轴方向和y轴方向两个方向移动移动的步长是1个像素。因此运算后的卷积核的尺寸为(13-3+1 \* 2)/1+1=1313个像素减去3正好是10在加上上下、左右各填充的1个像素即生成12个像素再加上被减去的3也对应生成一个像素每个GPU中共13 \* 13 \* 192个卷积核。2个GPU中共13 \* 13 \* 384个卷积后的像素层。这些像素层经过relu4单元的处理生成激活像素层尺寸仍为2组13 \* 13 \* 192像素层共13 \* 13 \* 384个像素层。
5. conv5阶段DFDdata flow diagram
- 第四层输入数据为第三层输出的2组13 \* 13 \* 192的像素层
- 为便于后续处理每幅像素层的左右两边和上下两边都要填充1个像素
- 2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有192个卷积核每个卷积核的尺寸是3 \* 3 \* 192。因此每个GPU中的卷积核能对1组13 \* 13 \* 192的像素层的数据进行卷积运算。
- 移动的步长是1个像素。
- 运算后的卷积核的尺寸为(13-3+1 \* 2)/1+1=1313个像素减去3正好是10在加上上下、左右各填充的1个像素即生成12个像素再加上被减去的3也对应生成一个像素每个GPU中共13 \* 13 \* 192个卷积核。2个GPU中共13 \* 13 \* 384个卷积后的像素层。
- 这些像素层经过relu4单元的处理生成激活像素层尺寸仍为2组13 \* 13 \* 192像素层共13 \* 13 \* 384个像素层。
5. **conv5阶段**
![](./img/ch4/image7.png)
    
第五层输入数据为第四层输出的2组13 \* 13 \* 192的像素层为便于后续处理每幅像素层的左右两边和上下两边都要填充1个像素2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有128个卷积核每个卷积核的尺寸是3 \* 3 \* 192。因此每个GPU中的卷积核能对1组13 \* 13 \* 192的像素层的数据进行卷积运算。卷积核对每组数据的每次卷积都生成一个新的像素。卷积核沿像素层数据的x轴方向和y轴方向两个方向移动移动的步长是1个像素。因此运算后的卷积核的尺寸为(13-3+1 \* 2)/1+1=1313个像素减去3正好是10在加上上下、左右各填充的1个像素即生成12个像素再加上被减去的3也对应生成一个像素每个GPU中共13 \* 13 \* 128个卷积核。2个GPU中共13 \* 13 \* 256个卷积后的像素层。这些像素层经过relu5单元的处理生成激活像素层尺寸仍为2组13 \* 13 \* 128像素层共13 \* 13 \* 256个像素层。
2组13 \* 13 \* 128像素层分别在2个不同GPU中进行池化(pool)运算处理。池化运算的尺度为3 \* 3运算的步长为2则池化后图像的尺寸为(13-3)/2+1=6。 即池化后像素的规模为两组6 \* 6 \* 128的像素层数据共6 \* 6 \* 256规模的像素层数据。
- 第五层输入数据为第四层输出的2组13 \* 13 \* 192的像素层
- 为便于后续处理每幅像素层的左右两边和上下两边都要填充1个像素
- 2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有128个卷积核每个卷积核的尺寸是3 \* 3 \* 192。因此每个GPU中的卷积核能对1组13 \* 13 \* 192的像素层的数据进行卷积运算。
- 移动的步长是1个像素。
- 因此,运算后的卷积核的尺寸为(13-3+1 \* 2)/1+1=1313个像素减去3正好是10在加上上下、左右各填充的1个像素即生成12个像素再加上被减去的3也对应生成一个像素每个GPU中共13 \* 13 \* 128个卷积核。2个GPU中共13 \* 13 \* 256个卷积后的像素层。
- 这些像素层经过relu5单元的处理生成激活像素层尺寸仍为2组13 \* 13 \* 128像素层共13 \* 13 \* 256个像素层。
- 2组13 \* 13 \* 128像素层分别在2个不同GPU中进行池化(pool)运算处理。池化运算的尺度为3 \* 3运算的步长为2则池化后图像的尺寸为(13-3)/2+1=6。 即池化后像素的规模为两组6 \* 6 \* 128的像素层数据共6 \* 6 \* 256规模的像素层数据。
6. fc6阶段DFDdata flow diagram
6. **fc6阶段**
![](./img/ch4/image8.png)
    
第六层输入数据的尺寸是6 \* 6 \* 256采用6 \* 6 \* 256尺寸的滤波器对第六层的输入数据进行卷积运算每个6 \* 6 \* 256尺寸的滤波器对第六层的输入数据进行卷积运算生成一个运算结果通过一个神经元输出这个运算结果共有4096个6 \* 6 \* 256尺寸的滤波器对输入数据进行卷积运算通过4096个神经元输出运算结果这4096个运算结果通过relu激活函数生成4096个值并通过drop运算后输出4096个本层的输出结果值。 由于第六层的运算过程中,采用的滤波器的尺寸(6 \* 6 \* 256)与待处理的feature map的尺寸(6 \* 6 \* 256)相同即滤波器中的每个系数只与feature map中的一个像素值相乘而其它卷积层中每个滤波器的系数都会与多个feature map中像素值相乘因此将第六层称为全连接层。 第五层输出的6 \* 6 \* 256规模的像素层数据与第六层的4096个神经元进行全连接然后经由relu6进行处理后生成4096个数据再经过dropout6处理后输出4096个数据。
7. fc7阶段DFDdata flow diagram
- 第六层输入数据的尺寸是6 \* 6 \* 256
- 采用6 \* 6 \* 256尺寸的滤波器对第六层的输入数据进行卷积运算
- 共有4096个6 \* 6 \* 256尺寸的滤波器对输入数据进行卷积运算通过4096个神经元输出运算结果
- 这4096个运算结果通过relu激活函数生成4096个值
- 通过drop运算后输出4096个本层的输出结果值。
- 由于第六层的运算过程中,采用的滤波器的尺寸(6 \* 6 \* 256)与待处理的feature map的尺寸(6 \* 6 \* 256)相同即滤波器中的每个系数只与feature map中的一个像素值相乘而其它卷积层中每个滤波器的系数都会与多个feature map中像素值相乘因此将第六层称为全连接层。
- 第五层输出的6 \* 6 \* 256规模的像素层数据与第六层的4096个神经元进行全连接然后经由relu6进行处理后生成4096个数据再经过dropout6处理后输出4096个数据。
7. **fc7阶段**
![](./img/ch4/image9.png)
    
第六层输出的4096个数据与第七层的4096个神经元进行全连接然后经由relu7进行处理后生成4096个数据再经过dropout7处理后输出4096个数据。
8. fc8阶段DFDdata flow diagram
- 第六层输出的4096个数据与第七层的4096个神经元进行全连接
- 然后经由relu7进行处理后生成4096个数据再经过dropout7处理后输出4096个数据。
8. **fc8阶段**
![](./img/ch4/image10.png)
    
第七层输出的4096个数据与第八层的1000个神经元进行全连接经过训练后输出被训练的数值。
## 4.2.3模型特性
- 第七层输出的4096个数据与第八层的1000个神经元进行全连接经过训练后输出被训练的数值。
### 4.2.4 模型特性
- 使用ReLU作为非线性
- 使用dropout技术选择性地忽略训练中的单个神经元避免模型的过拟合
- 重叠最大池化overlapping max pooling避免平均池化average pooling的平均效应
- 使用NVIDIA GTX 580 GPU减少训练时间
- 当时GPU比CPU提供了更多的核心可以将训练速度提升10倍从而允许使用更大的数据集和更大的图像。
# 4.3 可视化ZFNet-反卷积
## 4.3.1 基本的思想及其过程
    [Visualizing and Understanding Convolutional Networks](https://arxiv.org/pdf/1311.2901.pdf)可视化技术用到了多层反卷积网络,即卷积操作的逆过程;同时进行了分类器输出的敏感性分析,即通过阻止部分输入图像来揭示哪一部分对于分类是重要的。由于反卷积是一种非监督学习,因此只能作为已经训练过的卷积网的探究,不能用作任何学习用途。
## 4.3 可视化ZFNet-转置卷积
### 4.3.1 基本的思想及其过程
## 4.3.2 卷积与反卷积
- 可视化技术揭露了激发模型中每层单独的特征图。
- 可视化技术允许观察在训练阶段特征的演变过程且诊断出模型的潜在问题。
- 可视化技术用到了多层解卷积网络,即由特征激活返回到输入像素空间。
- 可视化技术进行了分类器输出的敏感性分析,即通过阻止部分输入图像来揭示那部分对于分类是重要的。
- 可视化技术提供了一个非参数的不变性来展示来自训练集的哪一块激活哪个特征图,不仅需要裁剪输入图片,而且自上而下的投影来揭露来自每块的结构激活一个特征图。
- 可视化技术依赖于解卷积操作,即卷积操作的逆过程,将特征映射到像素上。
### 4.3.2 卷积与转置卷积
    
下图为卷积过程
@ -157,73 +251,72 @@ S4中每个特征图的大小是C3中特征图大小的1/4
<img src="./img/ch4/image11.GIF"/>
<img src="./img/ch4/image12.png"/>
</center>
&nbsp;&nbsp;&nbsp;&nbsp;
卷积过程
下图为转置卷积过程
<center>
<img src="./img/ch4/image13.png"/>
<img src="./img/ch4/image14.png"/>
</center>
&nbsp;&nbsp;&nbsp;&nbsp;
**非池化**池化操作是非可逆的但是我们可以用一组转换变量switch在每个池化区域中通过记录最大值的位置来获得一个近似值。在反卷积网络中非池化操作使用这些转换来放置上述最大值的位置保存激活的位置其余位置都置0。
&nbsp;&nbsp;&nbsp;&nbsp;
下面首先介绍转置卷积中涉及到的几种操作:
**反池化操作**池化操作是非可逆的但是我们可以用一组转换变量switch在每个池化区域中通过记录最大值的位置来获得一个近似值。在转置卷积网络中反池化操作使用这些转换来放置上述最大值的位置保存激活的位置其余位置都置0。
**激活函数**卷积网中使用非线性的ReLU来确保所有输出值总是正值。在反卷积网中也利用了ReLU。
&nbsp;&nbsp;&nbsp;&nbsp;
**反卷积**:为了实现反卷积,反卷积网络使用相同卷积核的转置作为新的卷积核进行计算。
**转置卷积**:为了实现转置卷积,转置卷积网络使用相同卷积核的转置作为新的卷积核进行计算。
![](./img/ch4/image15.jpeg)
&nbsp;&nbsp;&nbsp;&nbsp;
上图左半部分是一个反卷积层右半部分为一个卷积层。反卷积层将会重建一个来自下一层的卷积特征近似版本。图中使用switc来记录在卷积网中进行最大池化操作时每个池化区域的局部最大值的位置经过非池化操作之后原来的非最大值的位置都置为0。
上图左半部分是一个转置卷积层右半部分为一个卷积层。反卷积层将会重建一个来自下一层的卷积特征近似版本。图中使用switch来记录在卷积网中进行最大池化操作时每个池化区域的局部最大值的位置经过非池化操作之后原来的非最大值的位置都置为0。
## 4.3.3 卷积可视化
### 4.3.3 卷积可视化
&nbsp;&nbsp;&nbsp;&nbsp;
预处理网络对输入图片进行预处理裁剪图片中间的256x256区域并减去整个图像每个像素的均值然后用10个不同的对256x256图像进行224x224的裁剪中间区域加上四个角落以及他们的水平翻转图像对以128个图片分的块进行随机梯度下降法来更新参数。起始学习率为0.01动量为0.9当验证集误差不再变化时时手动调整学习率。在全连接网络中使用概率为0.5的dropout并且所有权值都初始化为0.01偏置设为0。
预处理网络对输入图片进行预处理裁剪图片中间的256x256区域并减去整个图像每个像素的均值然后用10个不同的对256x256图像进行224x224的裁剪中间区域加上四个角落以及他们的水平翻转图像对以128个图片分的块进行随机梯度下降法来更新参数。起始学习率为0.01动量为0.9当验证集误差不再变化时时手动调整学习率。在全连接网络中使用概率为0.5的dropout并且所有权值都初始化为0.01偏置设为0。
&nbsp;&nbsp;&nbsp;&nbsp;
特征可视化:当输入存在一定的变化时,网络的输出结果保持不变。下图即在一个已经训练好的网络中可视化后的图。在可视化结果的右边是对应的输入图片,与重构特征相比,输入图片之间的差异性很大,而重构特征只包含那些具有判别能力的纹理特征。
特征可视化:当输入存在一定的变化时,网络的输出结果保持不变。下图即在一个已经训练好的网络中可视化后的图。在可视化结果的右边是对应的输入图片,与重构特征相比,输入图片之间的差异性很大,而重构特征只包含那些具有判别能力的纹理特征。
![](./img/ch4/image18.jpeg)
&nbsp;&nbsp;&nbsp;&nbsp;
由上图可以看到第二层应对角落和其他边缘或者颜色的结合;第三层有更加复杂的不变性,捕捉到了相似的纹理;第四层显示了特定类间显著的差异性;第五层显示了有显著构成变化的整个物体。
由上图可以看到第二层应对角落和其他边缘或者颜色的结合;第三层有更加复杂的不变性,捕捉到了相似的纹理;第四层显示了特定类间显著的差异性;第五层显示了有显著构成变化的整个物体。
&nbsp;&nbsp;&nbsp;&nbsp;
训练时的特征演变过程:当输入图片中的最强刺激源发生变化时,对应的输出特征轮廓发生剧烈变化。经过一定次数的迭代以后,底层特征趋于稳定,但更高层的特征则需要更多的迭代次数才能收敛,这表明:只有所有层都收敛时,这个分类模型才是有效的。
训练时的特征演变过程:当输入图片中的最强刺激源发生变化时,对应的输出特征轮廓发生剧烈变化。经过一定次数的迭代以后,底层特征趋于稳定,但更高层的特征则需要更多的迭代次数才能收敛,这表明:只有所有层都收敛时,这个分类模型才是有效的。
![](./img/ch4/image19.jpeg)
&nbsp;&nbsp;&nbsp;&nbsp;
**特征不变性:** 一般来说,小的变化对于模型的第一层都有非常大的影响,但对于最高层的影响却几乎没有。对于图像的平移、尺度、旋转的变化来说,网络的输出对于平移和尺度变化都是稳定的,但却不具有旋转不变性,除非目标图像时旋转对称的。下图为分别对平移,尺度,旋转做的分析图。
**特征不变性:** 一般来说,小的变化对于模型的第一层都有非常大的影响,但对于最高层的影响却几乎没有。对于图像的平移、尺度、旋转的变化来说,网络的输出对于平移和尺度变化都是稳定的,但却不具有旋转不变性,除非目标图像时旋转对称的。下图为分别对平移,尺度,旋转做的分析图。
![](./img/ch4/image20.jpeg)
&nbsp;&nbsp;&nbsp;&nbsp;
上图按行顺序分别为对5类图像进行不同程度的垂直方向上的平移、尺度变换、旋转对输出结果影响的分析图。按列顺序分别为原始变换图像第一层中原始图片和变换后的图片的欧氏距离第7层中原始图片和变换后的图片的欧氏距离变换后图片被正确分类的概率图。
上图按行顺序分别为对5类图像进行不同程度的垂直方向上的平移、尺度变换、旋转对输出结果影响的分析图。按列顺序分别为原始变换图像第一层中原始图片和变换后的图片的欧氏距离第7层中原始图片和变换后的图片的欧氏距离变换后图片被正确分类的概率图。
&nbsp;&nbsp;&nbsp;&nbsp;
可视化不仅能够看到一个训练完的模型的内部操作,而且还能帮助选择好的网络结构。
可视化不仅能够看到一个训练完的模型的内部操作,而且还能帮助选择好的网络结构。
## 4.3.4 ZFNe和AlexNet比较
### 4.3.4 ZFNet和AlexNet比较
&nbsp;&nbsp;&nbsp;&nbsp;
ZFNet的网络结构实际上与AlexNet没有什么很大的变化差异表现在AlexNet用了两块GPU的稀疏连接结构而ZFNet只用了一块GPU的稠密连接结构同时由于可视化可以用来选择好的网络结构通过可视化发现AlexNet第一层中有大量的高频和低频信息的混合却几乎没有覆盖到中间的频率信息且第二层中由于第一层卷积用的步长为4太大了导致了有非常多的混叠情况因此改变了AlexNet的第一层即将滤波器的大小11x11变成7x7并且将步长4变成了2下图为AlexNet网络结构与ZFNet的比较。
ZFNet的网络结构实际上与AlexNet没有什么很大的变化差异表现在AlexNet用了两块GPU的稀疏连接结构而ZFNet只用了一块GPU的稠密连接结构同时由于可视化可以用来选择好的网络结构通过可视化发现AlexNet第一层中有大量的高频和低频信息的混合却几乎没有覆盖到中间的频率信息且第二层中由于第一层卷积用的步长为4太大了导致了有非常多的混叠情况因此改变了AlexNet的第一层即将滤波器的大小11x11变成7x7并且将步长4变成了2下图为AlexNet网络结构与ZFNet的比较。
![](./img/ch4/image2.jpeg)
![](./img/ch4/image21.jpeg)
# 4.4 VGG
## 4.4.1 模型结构
## 4.4 VGGNet
### 4.4.1 模型结构
![](./img/ch4/image22.jpeg)
## 4.4.2 模型特点
### 4.4.2 模型特点
1. 整个网络都使用了同样大小的卷积核尺寸3 \* 3和最大池化尺寸2 \* 2
@ -235,12 +328,12 @@ ZFNet的网络结构实际上与AlexNet没有什么很大的变化差异表
2. VGGNet在训练时有一个小技巧先训练级别A的简单网络再复用A网络的权重来初始化后面的几个复杂模型这样训练收敛的速度更快。在预测时VGG采用Multi-Scale的方法将图像scale到一个尺寸Q并将图片输入卷积网络计算。然后在最后一个卷积层使用滑窗的方式进行分类预测将不同窗口的分类结果平均再将不同尺寸Q的结果平均得到最后结果这样可提高图片数据的利用率并提升预测准确率。在训练中VGGNet还使用了Multi-Scale的方法做数据增强将原始图像缩放到不同尺寸S然后再随机裁切224*224的图片这样能增加很多数据量对于防止模型过拟合有很不错的效果。
# 4.5 Network in Network
## 4.5.1 模型结构
## 4.5 Network in Network
### 4.5.1 模型结构
![](./img/ch4/image23.jpeg)
## 4.5.2 模型创新点
### 4.5.2 模型创新点
&nbsp;&nbsp;&nbsp;&nbsp;
论文的创新点:
@ -256,8 +349,8 @@ ZFNet的网络结构实际上与AlexNet没有什么很大的变化差异表
&nbsp;&nbsp;&nbsp;&nbsp;
抽象:指得到对同一概念的不同变体保持不变的特征。
&nbsp;&nbsp;&nbsp;&nbsp;
一般用CNN进行特征提取时其实就隐含地假设了特征是线性可分的可实际问题往往是难以线性可分的。一般来说我们所要提取的特征一般是高度非线性的。在传统的CNN中也许我们可以用超完备的滤波器来提取各种潜在的特征。比如我们要提取某个特征于是我就用了一大堆的滤波器把所有可能的提取出来这样就可以把我想要提取的特征也覆盖到然而这样存在一个缺点那就是网络太恐怖了参数太多了。
&nbsp;&nbsp;&nbsp;&nbsp;
一般用CNN进行特征提取时其实就隐含地假设了特征是线性可分的可实际问题往往是难以线性可分的。一般来说我们所要提取的特征一般是高度非线性的。在传统的CNN中也许我们可以用超完备的滤波器来提取各种潜在的特征。比如我们要提取某个特征于是我就用了一大堆的滤波器把所有可能的提取出来这样就可以把我想要提取的特征也覆盖到然而这样存在一个缺点那就是网络太恐怖了参数太多了。
&nbsp;&nbsp;&nbsp;&nbsp;
我们知道CNN高层特征其实是低层特征通过某种运算的组合。所以论文就根据这个想法提出在每个局部感受野中进行更加复杂的运算提出了对卷积层的改进算法MLP卷积层。这里也不知道是否有道理因为在后面的深层网络没有提出此种说法还是按照传统的cnn方法使用多个滤波器去学习同一特征的不同变体。MLP中的激活函数采用的是整流线性单元即ReLU:maxwx+b,0)。
@ -282,14 +375,14 @@ MLP的优点
&nbsp;&nbsp;&nbsp;&nbsp;
在采用了微神经网络后让局部模型有更强的抽象能力从而让全局平均池化能具有特征图与类别之间的一致性同时相比传统CNN采用的全连接层不易过拟合因为全局平均池化本身就是一种结构性的规则项PS:经典CNN容易过拟合并严重依赖用dropout进行规则化
# 4.6 GoogleNet
## 4.6.1 模型结构
## 4.6 GoogleNet
### 4.6.1 模型结构
![](./img/ch4/image25.jpeg)
![](./img/ch4/image26.png)
## 4.6.2 Inception 结构
### 4.6.2 Inception 结构
![](./img/ch4/image27.jpeg)
@ -308,8 +401,8 @@ MLP的优点
![](./img/ch4/image28.jpeg)
# 4.7 Inception 系列
## 4.7.1 Inception v1
## 4.7 Inception 系列
### 4.7.1 Inception v1
&nbsp;&nbsp;&nbsp;&nbsp;
相比于GoogLeNet之前的众多卷积神经网络而言inception v1采用在同一层中提取不同的特征使用不同尺寸的卷积核并提出了卷积核的并行合并也称为Bottleneck layer如下图
@ -331,12 +424,12 @@ MLP的优点
如表所示,实现的网络仍有一层全连接层,该层的设置是为了迁移学习的实现(下同)。
在之前的网络中,最后都有全连接层,经实验证明,全连接层并不是很必要的,因为可能会带来以下三点不便:
- 网络的输入需要固定
- 参数量多
- 易发生过拟合
- 网络的输入需要固定
- 参数量多
- 易发生过拟合
实验证明将其替换为平均池化层或者1x1卷积层不仅不影响精度还可以减少。
## 4.7.2 Inception v2
### 4.7.2 Inception v2
在V1的基础之上主要做了以下改进
@ -376,7 +469,7 @@ MLP的优点
&nbsp;&nbsp;&nbsp;&nbsp;
如表inception v2相比inception v1在imagenet的数据集上识别误差率由29%降为23.4%。
## 4.7.3 Inception v3
### 4.7.3 Inception v3
&nbsp;&nbsp;&nbsp;&nbsp;
inception模块之间特征图的缩小主要有下面两种方式
@ -407,7 +500,7 @@ figure 6' 17/8之间的特征图尺寸缩小
![](./img/ch4/image45.png)
## 4.7.4 Inception V4
### 4.7.4 Inception V4
&nbsp;&nbsp;&nbsp;&nbsp;
其实做到现在Inception模块感觉已经做的差不多了再做下去准确率应该也不会有大的改变。但是谷歌这帮人还是不放弃非要把一个东西做到极致改变不了Inception模块就改变其他的。
@ -431,7 +524,7 @@ Inception v4中的reduction模块分别为reduction A reduction B
&nbsp;&nbsp;&nbsp;&nbsp;
最终得到的Inception v4结构如下图。
## 4.7.5 Inception-ResNet-v2
### 4.7.5 Inception-ResNet-v2
&nbsp;&nbsp;&nbsp;&nbsp;
ResNet的结构既可以加速训练还可以提升性能防止梯度消失Inception模块可以在同一层上获得稀疏或非稀疏的特征。有没有可能将两者进行优势互补呢
@ -465,7 +558,7 @@ Inception-ResNet-v2中的reduction模块分别为reduction A reduction B
最终得到的Inception-ResNet-v2网络结构如图(stem模块同Inception v4)。
![](./img/ch4/image63.png)
# 4.8 ResNet及其变体
## 4.8 ResNet及其变体
&nbsp;&nbsp;&nbsp;&nbsp;
自从AlexNet在LSVRC2012分类比赛中取得胜利之后深度残差网络Deep Residual Network可以说成为过去几年中在计算机视觉、深度学习社区领域中最具突破性的成果了。ResNet可以实现高达数百甚至数千个层的训练且仍能获得超赞的性能。
@ -475,7 +568,7 @@ Inception-ResNet-v2中的reduction模块分别为reduction A reduction B
&nbsp;&nbsp;&nbsp;&nbsp;
自从2015年ResNet进入人们的视线并引发人们思考之后许多研究界人员已经开始研究其成功的秘诀并在架构中纳入了许多新的改进。本文分为两部分第一部分我将为那些不熟悉ResNet的人提供一些相关的背景知识第二部分我将回顾一些我最近读过的关于ResNet架构的不同变体及其论文的相关阐述。
## 4.8.1 重新审视ResNet
### 4.8.1 重新审视ResNet
&nbsp;&nbsp;&nbsp;&nbsp;
根据泛逼近性原理universal approximation theorem我们知道如果给定足够的容量一个具有单层的前馈网络足以表示任何函数。然而该层可能是巨大的且网络可能容易过度拟合数据。因此研究界有一个共同的趋势即我们的网络架构需要更深。
@ -498,13 +591,13 @@ ResNet的核心思想是引入所谓的“恒等映射identity shortcut conne
![](./img/ch4/image52.png)
## 4.8.2 残差块
### 4.8.2 残差块
&nbsp;&nbsp;&nbsp;&nbsp;
[Deep Residual Learning for Image Recognition](https://arxiv.org/pdf/1512.03385v1.pdf)的作者认为,堆积网络层数不应该降低网络性能,因为我们可以简单地在当前网络上堆积身份映射(层不做任何事情),并且所得到的架构将执行相同的操作。这表明,较深的模型所产生的训练误差不应该比较浅的模型高。他们假设让堆积层适应残差映射比使它们直接适应所需的底层映射要容易得多。下图的残差块可以明确地使它做到这一点。
![](./img/ch4/image53.png)
## 4.8.3 ResNet架构
### 4.8.3 ResNet架构
&nbsp;&nbsp;&nbsp;&nbsp;
事实上ResNet并不是第一个利用short cut、Highway Networks引入门控近路连接的。这些参数化门控制允许多少信息流过近路shortcut。类似的想法可以在长短期记忆网络LSTM单元中找到其中存在参数化的忘记门其控制多少信息将流向下一个时间步。因此ResNet可以被认为是Highway Networks的一种特殊情况。
@ -517,7 +610,7 @@ ResNet的核心思想是引入所谓的“恒等映射identity shortcut conne
![](./img/ch4/image54.png)
## 4.8.4 ResNeXt
### 4.8.4 ResNeXt
&nbsp;&nbsp;&nbsp;&nbsp;
S. XieR. GirshickP. DollarZ. Tu和 K. He在[Aggregated Residual Transformations for Deep Neural Networks](http://openaccess.thecvf.com/content_cvpr_2017/papers/Xie_Aggregated_Residual_Transformations_CVPR_2017_paper.pdf)中提出了一个代号为ResNeXt的ResNet变体它具有以下构建块
@ -540,7 +633,7 @@ S. XieR. GirshickP. DollarZ. Tu和 K. He在[Aggregated Residual Transfo
实际上,“分割-变换-合并”通常是通过点分组卷积层来完成的它将其输入分成特征映射组并分别执行正常卷积其输出被深度级联然后馈送到1x1卷积层。
## 4.8.5 ResNet作为小型网络的组合
### 4.8.5 ResNet作为小型网络的组合
&nbsp;&nbsp;&nbsp;&nbsp;
[Deep Networks with Stochastic Depth](https://arxiv.org/pdf/1603.09382.pdf)提出了一种反直觉的方式训练一个非常深层的网络通过在训练期间随机丢弃它的层并在测试时间内使用完整的网络。Veit等人有一个更反直觉的发现我们实际上可以删除一些已训练的ResNet的一些层但仍然具有可比性能。这使得ResNet架构更加有趣该论文亦降低了VGG网络的层并大大降低了其性能。
@ -556,7 +649,7 @@ S. XieR. GirshickP. DollarZ. Tu和 K. He在[Aggregated Residual Transfo
![](./img/ch4/image61.png)
## 4.8.6 ResNet中路径的特点
### 4.8.6 ResNet中路径的特点
&nbsp;&nbsp;&nbsp;&nbsp;
最后作者研究了ResNet中路径的特点
@ -567,38 +660,22 @@ S. XieR. GirshickP. DollarZ. Tu和 K. He在[Aggregated Residual Transfo
![](./img/ch4/image62.png)
&nbsp;&nbsp;&nbsp;&nbsp;
调查路径长度与经过其的梯度大小之间的关系同时获得长度为k的路径的梯度幅度作者首先将一批数据馈送给网络随机抽取k个残差块。当反向传播梯度时它们仅传播到采样残余块的权重层。b表明随着路径变长梯度的大小迅速下降。
调查路径长度与经过其的梯度大小之间的关系同时获得长度为k的路径的梯度幅度作者首先将一批数据馈送给网络随机抽取k个残差块。当反向传播梯度时它们仅传播到采样残余块的权重层。b表明随着路径变长梯度的大小迅速下降。
&nbsp;&nbsp;&nbsp;&nbsp;
我们现在可以将每个路径长度的频率与其预期的梯度大小相乘以了解每个长度的路径对于训练有多少帮助c所示。令人惊讶的是大多数贡献来自长度为9至18的路径但它们仅占总路径的一小部分a所示。这是一个非常有趣的发现因为它表明ResNet并没有解决长路径上的梯度消失问题而是通过缩短其有效路径ResNet实际上能够实现训练非常深度的网络。
我们现在可以将每个路径长度的频率与其预期的梯度大小相乘以了解每个长度的路径对于训练有多少帮助c所示。令人惊讶的是大多数贡献来自长度为9至18的路径但它们仅占总路径的一小部分a所示。这是一个非常有趣的发现因为它表明ResNet并没有解决长路径上的梯度消失问题而是通过缩短其有效路径ResNet实际上能够实现训练非常深度的网络。
&nbsp;&nbsp;&nbsp;&nbsp;
答案来源:[ResNet有多大威力最近又有了哪些变体一文弄清](http://www.sohu.com/a/157818653_390227)
# 4.9 为什么现在的CNN模型都是在GoogleNet、VGGNet或者AlexNet上调整的
## 4.9 为什么现在的CNN模型都是在GoogleNet、VGGNet或者AlexNet上调整的
&nbsp;&nbsp;&nbsp;&nbsp;
问题来源:[知乎问题](https://www.zhihu.com/question/43370067?sort=created)
&nbsp;&nbsp;&nbsp;
### [精选回答1作者Jianping Shi](https://www.zhihu.com/question/43370067/answer/128904008)
&nbsp;&nbsp;&nbsp;&nbsp;1. 那是因为你看到的大部分是公开的论文公开的论文需要一个标准的baseline及在baseline上改进的比较因此大家会基于一个公认的baseline开始做实验大家才比较信服。常见的比如各种检测分割的问题都会基于VGG或者Resnet101这样的基础网络。而这类型paper很多就会有种业内只有这几个模型的错觉
&nbsp;&nbsp;&nbsp;&nbsp;2. 发表论文的同学多数是在校的phd同学首先大家有强大的科研压力和ddl的压力时间和精力只允许大家在有限的范围探索。因此基于vision问题的特性进行各种模型和算法方案的改进肯定是更有novelty也是更符合发paper的思路所以有限的精力就放在了另外的方面而继续沿用目前VGG/GoogleNet/AlexNet/Resnet这样的baseline
&nbsp;&nbsp;&nbsp;&nbsp;3. 进行基本模型的改进需要大量的实验和尝试很有可能投入产出比比较小。能做到Kaiming ResNet这样的工作真是需要大量的实验积累加强大的灵感真是偶像。我们大部分人自己的实验过程很多之前预想的可能会work的idea经过尝试可能提升有限失望脸没法毕业怎么办。基于我们今年参与ImageNet的经历来讲对于深度学习很大部分可以提升性能的点在于一些对于细节的精确把握。因此你可以看到许多排名靠前的队伍最后讲的关键技术点似乎都是tricks。而这样精确细节的把握是需要大量的时间和计算资源的往往在学校不可行。因此有大量计算资源的比如香港中文大学我司商汤科技公安三所海康等成绩靠前。PS我们之后会公布我们今年参加ImageNet Scene Parsing比赛拿到第一的技术方案paper+code+model实际构成是一些insights可以写paper的技术点加大量的tricks好像不太容易写paper。敬请期待。
&nbsp;&nbsp;&nbsp;&nbsp;4. 如果所有人的目标都是ImageNet/VOC/Kitti/Cityscapes这种标准数据库拼性能的话大家会慢慢收敛到比较大的网络比如你提到的这些。但是实际上也有很多讨论不同模型结构和计算性能的文章拿Kaiming偶像的文章[Convolutional Neural Networks at Constrained Time Cost](https://arxiv.org/pdf/1412.1710.pdf)[Efficient and Accurate Approximations of Nonlinear Convolutional Networks](https://arxiv.org/abs/1411.4229)举例都是分析深入浅出的好的文章。但是由于不符合发paper一定要state-of-the-art且可比较的性能的基本法因此之后follow在这样的网络结构上继续做的人就很有限。
&nbsp;&nbsp;&nbsp;&nbsp;5. **在实际的应用场景中,其实是有大量的非标准模型的配置。** 比如我司在做的人脸关键点tracking可以在低端的android手机上达到5ms的运行速度很差的手机和CPU速度差约50倍CPU和GPU速度差约10-20倍。。基于的也是深度学习的网络比如我们自己团队做的人像分割也可以在PC的CPU上达到接近800fps的速度。这些所有的深度学习的网络结构研究基于的目标是能够在限制的环境中达到最优的性能同时会兼顾各种平台不同的优化方案调整网络结构。其中的黑科技非常多主要是对基础网络的结构改进肯定不会是VGG/AlexNet/GoogleNet/ResNet152这种庞然大物。这些技术也是大家在玩FaceU各种直播平台的贴纸和之后其他的酷炫产品时已经不知不觉已经享用到的深度学习的成果。不过由于是正在赚钱的产品也是因为大家非常忙懒的写paper暂时没有对学术界公开这些技术背后的网络结构。不过欢迎大家来实习亲自参与和实现这些改变未来的技术
### [精选回答2作者孔涛](https://www.zhihu.com/question/43370067/answer/129040676)
&nbsp;&nbsp;&nbsp;&nbsp;1. **这些网络都是一些知名的研究机构设计出来的为领域提供了一个baseline** 。做深度学习的相关研究一个很重要的点在于将自己的方法和其他人的方法进行对比。对比的时候就要讲究公平性的问题。在ResNet出来之前多数研究者在基于VGG做相关领域的研究这样在相同的网络深度下就检验自身提出的东西的有效性了。还有整个科研界对于VGG、AlexNet、ResNet这些网络有一个基本的认识你提出的方法在这种baseline下能到什么样的效果大家心里有数比如在目标检测这个任务中基于VGG的网络在COCO上边最多能做到27%-28%的mAP而ResNet就可以做到30以上这样就便于对比和评价了。再比如一开始用于语义分割的FCN是基于VGG的ResNet出来之后很容易的变成基于ResNet的这也侧面说明了方法的有效性。
&nbsp;&nbsp;&nbsp;&nbsp;2. 这个领域只有一小部分人是在研究分类的网络结构,**其他的应用的研究者** ,包括视觉、自然语言等**更专注于本领域的内部知识** 在一个base网络的基础之上进行修改以验证自己方法的有效性。而这些网络正好提供了这样的baseline所以何乐而不为呢。自己设计的网络结构有可能也会达到很好的效果但这就偏离了自己本身的研究点。当然如果一个人足够厉害比如这篇文章(YOLO: Real-Time Object Detection),作者完全是自己设计、训练的网络结构,这也是完全没有问题的。**研究来讲,最终的准确率只是追求的一个方面** 。更重要的,是提供解决问题的一个新途径、思路或者方法。如果大家都去拼准确率、拼机器、搞更深的模型,这个领域就不会发展到现在这个地步了。另外,很多高校,根本就没有这种条件来做这样的事情。
&nbsp;&nbsp;&nbsp;&nbsp;3. **科研与工业应用的区别。** 科研界基本上都在这些现有的模型的基础之上做一些改进,而实际的应用中会遇到各种各样的问题(数据标注、计算资源、效率等)。据我所知,一些机构在实际场景中,都在训练适合于自己应用的模型,这些模型可以达到相当好的性能。而这些涉及到商业的东西并没有放出来供大家使用。
- 评测对比为了让自己的结果更有说服力在发表自己成果的时候会同一个标准的baseline及在baseline上改进而进行比较常见的比如各种检测分割的问题都会基于VGG或者Resnet101这样的基础网络。
- 时间和精力有限:在科研压力和工作压力中,时间和精力只允许大家在有限的范围探索。
- 模型创新难度大:进行基本模型的改进需要大量的实验和尝试,并且需要大量的实验积累和强大灵感,很有可能投入产出比比较小。
- 资源限制:创造一个新的模型需要大量的时间和计算资源,往往在学校和小型商业团队不可行。
- &nbsp;&nbsp;&nbsp;&nbsp;在实际的应用场景中,其实是有大量的非标准模型的配置。&nbsp;