CNNの今までのモデルたちを2行でまとめていく

公開:2021/02/23
更新:2021/02/24
6 min読了の目安(約5800字TECH技術記事

自分の勉強のためにもDeepLearningのベースモデルとなるCNNのアーキテクチャを3行ごとでまとめてみる(随時修正あり)

画像認識系タスクは Object Recognition < Object Deteciton < Semantic Segmentation < Instance Segmentation < Panoptic Segmentation の順に難しくなる。

ここでは、画像認識 (Object Recognition, Image Recognition)で使われるようなベースモデルをそれぞれ2行くらいでまとめていく

AlexNet (2013)

ImageNet classification with deep convolutional neural networks

https://proceedings.neurips.cc/paper/2012/hash/c399862d3b9d6b76c8436e924a68c45b-Abstract.html

  1. DeepLearningの火付け役 ImageNetの大会で圧倒的一位
  2. ReLU, Dropoutなどの学習の効率化

実は当時のGPUのメモリ性能的に1つのGPUに全部乗り切らなかったので、2つのGPUにモデルを分けて使用されていた(これが実質Group Convに近い働きになっていた)

Network In Network (2013)

Network In Network https://arxiv.org/abs/1312.4400

  1. ネットワークの中にネットワークという考え方
  2. 今でこそよく使われるMLP(Multi Layer Perceptron)を使わないでクラス分類を行う Global Average Poolingを提案

GoogLeNet v1 (2014)

Going Deeper with Convolutions

https://arxiv.org/abs/1409.4842

  1. ImageNetの大会2014で優勝 22層というでかいネットワーク
  2. Inceptionという特徴マップの多様性をとる構造とauxilary lossという複数層へのlossを適用した(実質的に勾配消失問題へ取り組んだ?)

VGG (2014)

Very Deep Convolutional Networks for Large-Scale Image Recognition https://arxiv.org/abs/1409.1556

  1. ImageNetの大会2014で2位 16層という19層のネットワーク タスクによっては今でも愛されるコスパの良さ
  2. conv3x3を重ねることででかいカーネルのconvより良い働きをすることを主張

実装してみた >> https://github.com/yoyoyo-yo/DeepLearningMugenKnock/blob/master/notes_pytorch/ImgRec/VGG_cifar10_pytorch.ipynb

ResNet (2015)

Deep Residual Learning for Image Recognition https://arxiv.org/abs/1512.03385

  1. ImageNetの大会2015で優勝 最大152層のでかでかネットワーク
  2. 今のCNNの発展を支えたskip connectionで学習を効率化

実装してみた >> https://github.com/yoyoyo-yo/DeepLearningMugenKnock/blob/master/notes_pytorch/ImgRec/ResNet_cifar10_pytorch.ipynb

SqueezeNet (2016)

SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size https://arxiv.org/abs/1602.07360

  1. Fire moduleによってパラメータを削減
  2. AlexNetと同じ精度をモデルサイズを1/510にして実現

Fireモジュールは最初にconv(1x1)を行い、その後にconv(1x1)とconv(3x3)をそれぞれ適用した結果をchannel方向に繋げた構造。最初のconv(1x1)をsqueeze layer、後のconv(1x1)とconv(3x3)をexpand layerと呼ぶそう。

ResNeXt (2016)

Aggregated Residual Transformations for Deep Neural Networks https://arxiv.org/abs/1611.05431

  1. ImageNetの大会2016で2位
  2. ResNetを拡張して、convの複数パスを提案

実装してみた >> https://github.com/yoyoyo-yo/DeepLearningMugenKnock/blob/master/notes_pytorch/ImgRec/ResNeXt_cifar10_pytorch.ipynb

Xception (2016)

Xception: Deep Learning with Depthwise Separable Convolutions https://arxiv.org/abs/1610.02357

  1. Inception-v3より精度のいいCNN
  2. Depthwise ConvとPointwise Convを合わせたSeparableConvolutionによるResNetブロックの拡張

実装してみた >> https://github.com/yoyoyo-yo/DeepLearningMugenKnock/blob/master/notes_pytorch/ImgRec/Xception_cifar10_pytorch.ipynb

DenseNet (2016)

Densely Connected Convolutional Networks https://arxiv.org/abs/1608.06993

  1. convを全部連結することで勾配消失問題への解決を図り学習を効率化した
  2. パラメータ数も減らした

実装してみた >> https://github.com/yoyoyo-yo/DeepLearningMugenKnock/blob/master/notes_pytorch/ImgRec/DenseNet_cifar10_pytorch.ipynb

MobileNet v1 (2017)

MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications https://arxiv.org/abs/1704.04861

  1. SeparableConvにより計算コストを削減
  2. モバイルでも動かすことを想定したネットワーク

普通は Dk x Dk x チャンネルの掛け算になるconv操作を、

  1. 入力チャンネルごとにカーネルを1個ずつ用意し掛け算する(Depth wise conv)
  2. カーネルサイズ1のカーネルをチャンネル全体で掛け算する(Separable conv)
    の二段階にすることで、通常のconvに近似した操作を少ない計算量で実現する。

実装してみた >> https://github.com/yoyoyo-yo/DeepLearningMugenKnock/blob/master/notes_pytorch/ImgRec/MobileNet_v1_cifar10_pytorch.ipynb

SEResNeXt (2017)

Squeeze-and-Excitation Networks https://arxiv.org/abs/1709.01507

  1. ResNeXtにSqueezeExtensionのパスを追加
  2. ResNeXtよりちょっと計算コストが増えたが精度をあげた

実装してみた >> https://github.com/yoyoyo-yo/DeepLearningMugenKnock/blob/master/notes_pytorch/ImgRec/SEResNeXt_cifar10_pytorch.ipynb

MobileNet v2 (2018)

WiP

MobileNetV2: Inverted Residuals and Linear Bottlenecks https://arxiv.org/abs/1801.04381

mobilenetv1から構造が少し変わり、

  1. poins-wise conv
  2. depth-wise conv
  3. point-wise conv
    の構造になった。

実装してみた >> https://github.com/yoyoyo-yo/DeepLearningMugenKnock/blob/master/notes_pytorch/ImgRec/MobileNet_v2_cifar10_pytorch.ipynb

MobileNet v3 (2018)

WiP

Searching for MobileNetV3: https://arxiv.org/abs/1905.02244

  • MobileNetv2にSEブロックを追加した
  • classification, detection, segmentationで精度、速度を向上

EfficientNet (2019)

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks https://arxiv.org/abs/1905.11946

  • MobileNetv3のブロックのモデルパラメータをさらに修正(最適化と言える?)
  • 精度は当時No1、速さも申し分ないまさにefficient

実装してみた >> https://github.com/yoyoyo-yo/DeepLearningMugenKnock/blob/master/notes_pytorch/ImgRec/EfficientNet_cifar10_pytorch.ipynb

ViT (Vision Transformer)

NFNet