提出问题:
为了从数百万张图像中学习数千个物体,我们需要一个具有较大学习能力的模型。然而,对象识别任务的巨大复杂性意味着即使像ImageNet这样大的数据集也可能无法解决这个问题,所以我们的模型也应该有大量的先验知识来补偿我们没有的所有数据。
提出了CNN模型,CNN模型的优点:
- CNN的能力可以通过改变它们的深度和宽度来控制
- 可以对图像的性质(即统计数据的平稳性和像素的局部依赖性)做出强有力的、最正确的假设
- 与具有相似大小层的标准前馈神经网络相比,CNN的连接和参数要少得多,更容易训练
数据集:
ImageNet由可变分辨率的图像组成,而我们的系统需要一个恒定的输入维数。因此,我们将图像进行降采样到256×256的固定分辨率。给定一个矩形图像,我们首先重新将图像缩放,使较短的一侧长度为256,然后从结果图像中裁剪出中央的256×256补丁。没有以任何其他方式对图像进行预处理,除了从每个像素中减去训练集上的像素平均值。所以我们根据像素的(中心)原始RGB值来训练我们的网络。
结构:
- 包含8个学习层——5个卷积层和3个完全连接层。
- 使用ReLU非饱和非线性函数比传统的饱和非线性函数更快。
- 由于技术限制,采用两块GPU训练模型。
- 使用局部响应归一化(后被证明没有效果)。
- 使用重叠池化(stride=2<pool_size=3)
- 上下分别代表两块GPU,第二、第四和第五个卷积层只连接到位于同一个GPU上的上一层中的内核映射。完全连接层中的神经元与前一层中的所有神经元相连。
- ReLU非线性用在每个卷积层和全连接层的输出,响应归一化层在第一层和第二层卷积层后,最大池化层在1、2响应归一化化层后和第五个卷积层后。(ReLU--响应归一化--Max-pooling)
卷积过程:
输入图像大小为227*227的3通道彩色图像(查阅资料不知道为什么这里是227,用227计算确实是对的)
- 第一层卷积(卷积--ReLu--响应归一化--Max-pooling):
卷积核:11x11x3(共96个卷积核,我们以一个GPU为例,一个GPU有48个卷积核),stride=4,padding=0
output_size=(input_size+2xpadding-kernel_size)/stride+1=(227+2x0-11)/4+1=55
输出:55x55x48
激活函数:ReLU
池化:使用3x3,stride=2的池化单元进行最大重叠池化:
output_size=(input_size+2xpadding-pool_size)/stride+1=(55+2x0-3)/2+1=27
输出:27x27x48 -
第二层卷积(卷积--ReLu--响应归一化--Max-pooling):
卷积核:5x5x48(共256个卷积核,一个GPU有128个卷积核),stride=1,padding=2
output_size=(input_size+2xpadding-kernel_size)/stride+1=(27+2x2-5)/1+1=27
输出:27x27x128
激活函数:ReLU
池化:使用3x3,stride=2的池化单元进行最大重叠池化:
output_size=(input_size+2xpadding-pool_size)/stride+1=(27+2x0-3)/2+1=13
输出:13x13x128 -
第三层卷积(卷积--ReLu):
卷积核:3x3x256(第三层卷积用到了所有的前一层信息,所以通道数为256;共用384个卷积核,一个GPU分192个),stride=1,padding=1
output_size=(input_size+2xpadding-kernel_size)/stride+1=(13+2x1-3)/1+1=13
输出:13x13x192
激活函数:ReLU -
第四层卷积(卷积--ReLu):
卷积核:3x3x192(共384个卷积核,一个GPU有192个卷积核),stride=1,padding=1
output_size=(input_size+2xpadding-kernel_size)/stride+1=(13+2x1-3)/1+1=13
输出:13x13x192
激活函数:ReLU -
第五层卷积(卷积--ReLu--Max-pooling):
卷积核:3x3x192(共256个卷积核,一个GPU有128个卷积核),stride=1,padding=1
output_size=(input_size+2xpadding-kernel_size)/stride+1=(13+2x1-3)/1+1=13
输出:13x13x128
激活函数:ReLU
池化:使用3x3,stride=2的池化单元进行最大重叠池化:
output_size=(input_size+2xpadding-pool_size)/stride+1=(13+2x0-3)/2+1=6
输出:6x6x128 -
第六层全连接层(卷积--Dropout)
卷积核:6x6x256(共4096个卷积核,一个GPU有2048个卷积核),stride=0,padding=0
output_size=(input_size+2xpadding-kernel_size)/stride+1=(6+2x0-6)/1+1=1
输出:1x1x2048
激活函数:ReLU
Dropout:随机的断开全连接层某些神经元的连接,通过不激活某些神经元的方式防止过拟合。4096个神经元也被均分到两块GPU上进行运算。 -
第七层全连接层(全连接--Dropout)
全连接:输入为4096个神经元。
激活函数:ReLU。
Dropout:随机的断开全连接层某些神经元的连接,通过不激活某些神经元的方式防止过拟合。4096个神经元也被均分到两块GPU上进行运算。 -
第八层全连接输出层(全连接--Softmax)
全连接:输入为4096个神经元。
Softmax:这1000个神经元的运算结果通过Softmax函数中,输出1000个类别对应的预测概率值。
减少过拟合 :
- 数据增强,用了两种数据增强方法:
(1)在256*256图片上利用平移和翻转截取224*224大小的图片
(2)改变像素值 -
dropout
结果:
在ILSVRC-2010数据集上取得了比当时第一名更好的性能,在ILSVRC-2012比赛中获得了第一名。
定性评估:
- 不同的卷积核学习到的特征是不同的,这种专门化在每次运行中都会发生,并且独立于任何特定的随机权值初始化。
- 预测出的前五物体类型是合理的,可能受偏离、焦点、相似度影响。
- 考虑图像在最后的4096维隐藏层上所引起的特征激活,如果两幅图像产生的特征激活向量具有较小的欧几里得分离,我们可以说,更高级别的神经网络认为它们是相似的,这是一种图像检索的好方法。注意,在像素级检索到的训练图像通常不接近,例如,同样的狗会呈现出各种姿势。