AI Challenger: 对80个场景进行分类
- 使用TensorFlow 的slim模块实现网络的基础结构。
- 构建深度残差网络。
模型设计主要参考了VGG16和Inception-ResNet-V2的结果,并有所改进。
- 在制作TFRecord时,将输入数据尺寸统一为299x299x3
- 将激活函数变为Leaky relu 增加模型非线性能力。
- 加入BN层,可选择去掉dropout,增加模型稳定性,减少参数量
- 使用Global Pooling层替换传统的全连接dense层。
- 使用核为1x1的Conv2D替换全连接层。
- 调整网络深度,以适应当前数据集
- 对于相同的尺寸的输出特征图谱,每层必须含有相同数量的过滤器
- 如果特征图谱的尺寸减半,则过滤器的数量必须翻倍,以保持每层的时间复杂度
- 直接通过卷积层(stride=2)进行下采样,网络末端以全局的均值池化层结束
net = slim.batch_norm(net, is_training=True)
# Global Average Pooling
kernel_size = net.get_shape()[1:3]
if kernel_size.is_fully_defined():
net = slim.avg_pool2d(net, kernel_size, padding='VALID')
else:
net = tf.reduce_mean(net, [1, 2], keep_dims=True)
# dropout
if dropout_keep_prob != 1:
net = slim.dropout(net, dropout_keep_prob, is_training=True)
# Use conv2d instead of fully_connected layers.
net = slim.conv2d(net, 80, [1, 1])