0%

CNN图像分类学习记录(二)——AlexNet

2012----AlexNet----Imagenet classification with deep convolutional neural networks_ILSVRC2012

作者说,为了提高分类精确度,需要收集更多标注数据,需要更强大的模型,还需要更好的技术防止过拟合,这应该是2012年人们面对的挑战。

AlexNet提出了很多新的特性,能够使得训练时间更短,并且提出一些防止过拟合的新方法。AlexNet有8个层,5个卷积层,3个全连接层。

AlexNet使用了ReLU,f(x) = max(0, x) , 这么简单的函数,但是效果很好,比tanh,sigmoid要快很多。

AlexNet使用LRN(Local Response Normalization)层是用来做归一化的。

使用了有重叠的max-pooling。

使用了Dropout防止过拟合,同时做了很多数据增强的事情。

AlexNet结构:

  1. 输入是3*224*224
  2. conv1: kernel(96*3*11*11,stride=4 padding=2), output(96*55*55), active(ReLU)
    1. LRN
    2. max_pool(size=3, stride=2 ), output(96*27*27)
  3. conv2: 256*96*5*5 padding=2, group = 2, active(ReLU)
    1. LRN
    2. max_pool(size=3, stride=2 ), output(256*13*13)
  4. conv3: kernel(384*256*3*3 padding=1), output(384*13*13), active(ReLU)
  5. conv4: kernel(384*384*3*3 padding=1, group = 2), output(384*13*13), active(ReLU)
  6. conv5: kernel( 256*384*3*3 padding=1, group = 2), output(256*13*13), active(ReLU)
    1. max_pool(size=3, stride=2 ), output(256*6*6)
  7. fc6: (256*6*6, 4096), dropout
  8. fc7: (4096, 4096),dropout
  9. fc8: (4096, num_classes)

计算机领域还是得动手做一下,才能更清楚的明白。网上很多人说AlexNet输入图片是227*227,其实就是224*224,只是加了padding=2,最后一列和最后一行被抛弃了。

而且我才发现,alexnet的conv实际是分开两部分了,幸好pytorch的conv2d函数有groups这个参数,否则还真不知道该怎么去实现。

但是在alex上跑cifar,还是比较容易overfitting,cifar的top1 accuracy只能到46%左右。