GoogLeNetv1:Going deeper with convolutions
从GoogleNetv1开始,神经网络设计由类似VGGNet 关注深度转向"宽度"
什么是GoogleNetv1?
- GoogleNetv1中参考NIN网络,设计出多分支并行的模块Inception block
- 从GoogleNetv1开始,神经网络设计由类似VGGNet 关注深度转向”宽度“
GoogleNetv1 的网络结构?
- GoogleNetv1对网络的宽度进行了扩展,整个网络由3+3+3总共九个inception模块组成的,每个Inception有两层,加上开头的3个卷积层和输出前的FC层,总共22层
- 像NIN一样,网络使用全局池化(Global Pooling) 替代全连接层,作为分类层
GoogleNetv1的Inception block模块?
- 在Inception模块中,1×1、3×3、5×5卷积和3×3最大池化在输入端以并行方式执行,它们的输出堆叠在一起以生成最终输出
- 原始版本: 使用 3 种滤波器进行卷积,外加最大池化
- 降维版本: 考虑到神经网络训练耗时,在 3x3、5x5 前面使用 1x1 卷积核调整通道数
GoogleNetv1的损失函数?
- GoogleNetv1有2个辅助损失及1个最终损失,其中辅助损失30%进行梯度更新,每个损失都是计算交叉熵损失(CrossEntropyLoss)
GoogleNetv1的Inception block模块拼接特征的作用?
- 解释1: 在直观感觉上在多个尺度上同时进行卷积,能提取到不同尺度的特征。特征更为丰富也意味着最后分类判断时更加准确
- 解释2: 利用稀疏矩阵分解成密集矩阵计算的原理来加快收敛速度。举个例子图4左侧稀疏矩阵和一个2x2的矩阵进行卷积,需要对稀疏矩阵中的每一个元素进行计算;如果像图4右图那样把稀疏矩阵分解成2个子密集矩阵,再和2x2矩阵进行卷积,稀疏矩阵中0较多的区域就可以不用计算,计算量就大大降低
- 解释3:赫比(Hebbian)原理 指出预先把相关性强的特征汇聚,就能起到加速收敛的作用
GoogleNetv1的训练辅助分类器?
- 由于网络的深度相对比较大,能够在所有层保证梯度能传播是一个问题。对此增加了2个辅助分类器,在训练期间辅助分类器的权重为0.3,在预测时,这些层会被丢弃,这些层有助于解决梯度消失问题并提供正则化
GoogleNetv1如何应用在目标检测任务?
- 通过MultiBox和选择性搜索(SelectiveSearch,SS)方法得到一系列的候选框,将这些候选框输入到GoogLeNet神经网络中进行分类,得到最终的结果
Inception 系列网络结构?
- 在Inception出现之前,大部分CNN仅仅是把卷积层堆叠得越来越多,使网络越来越深,以此希望能够得到更好的性能。而Inception则是从网络的堆叠结构出发,提出了多条并行分支结构的思想,后续一系列的多分支网络结构均从此而来
- 目前Inception系列具体网络结构包括:Inceptionv1、 Inceptionv2、 Inceptionv3、 Inceptionv4、 Xception
什么是赫比(Hebbian)原理?
- 赫布认为“两个神经元或者神经元系统,如果总是同时兴奋,就会形成一种‘组合’,其中一个神经元的兴奋会促进另一个的兴奋”。比如狗看到肉会流口水,反复刺激后,脑中识别肉的神经元会和掌管唾液分泌的神经元会相互促进,“缠绕”在一起,以后再看到肉就会更快流出口水
- 用在Inception block中就是要把相关性强的特征汇聚到一起,把1x1,3x3,5x5的特征分开。因为训练收敛的最终目的就是要提取出独立的特征,所以预先把相关性强的特征汇聚,就能起到加速收敛的作用