(論文メモ)Benchmark Analysis of Representative Deep Neural Network Architectures

#はじめに
[IEEE Access](https://ieeexplore.ieee.org/document/8506339)に掲載された学習モデルのベンチマーク論文である。[論文で作成したコードも公開されている](https://github.com/CeLuigi/models-comparison.pytorch)。
推論時のメモリ使用量や計算量観点で、効率的な学習モデルな何かという文脈で調査が行われている。また、計算効率の観点から、VGGではなくResNetが使われるのか分かる。

#動作環境
##[システム1](https://www.nvidia.com/en-us/geforce/products/10series/titan-x-pascal/)
- Core i7-7700 @3.6GHz
- 16GB DDR4 RAM 2400MHz
- NVIDIA Titan X Pascal GPU with 3840 CUDA cores
- Ubuntu 16.04

##[システム2](https://developer.nvidia.com/embedded/jetson-tx1)
- NVIDIA Jetson TE1 board with 64-bit ARM A57 CPU @2GHz
- 4GB LPDDR4 1600MHz
- NVIDIA Maxwell GPU with 256 CUDA cores
- JetPack-2.3 SDK

[40の深層学習モデル](https://github.com/CeLuigi/models-comparison.pytorch/wiki/Deep-neural-network-architectures)をベンチマークした。画像サイズは、224x224から331x331を用いた(モデルによって相違する)。

## 性能指標
以下の5つを性能指標として用いた。

- 精度(accuracy)としては、[Top-1およびTop-5](https://news.mynavi.jp/article/architecture-373/)を用いた。
- モデルの複雑度(model complexity)を確認した。これは、学習モデルを保存した際のファイルサイズを基にしている。
- メモリ使用量(memory usage)も確認した。バッチ数は、1から64までで確認した。
- 計算複雑性(computational complexity) FLOPSベースで測定した。(nvprofで測定?)
- 推論時間(inference time)

#実験結果
##精度とモデルや計算の複雑度
ImageNet-1kをベースに精度とモデルや計算の複雑度を見るための[プロット(Fig.1)](https://arxiv.org/pdf/1810.00736.pdf#page=3)である。縦軸が精度、横軸が計算量である。例えば、VGGの計算効率が悪いのがわかる。また、モデルの複雑度と精度は線形の関係にはない。

##精度とパラメータ数の相関
パラメータ単位あたりの精度の高さを見るための[プロット(Fig.2)](https://arxiv.org/pdf/1810.00736.pdf#page=4)である。モデルにより精度を実現するパラメータ効率が異なる。

##メモリ使用量とモデルの複雑度について
Titan Xpでのモデルの複雑度(パラメータ数)から、メモリ使用量は[推測できる(Fig.4)](https://arxiv.org/pdf/1810.00736.pdf#page=7)。パラメータ数とメモリ使用量は、ほぼ線形の関係にある。ただし、2つのグループに分かれる。

##推論時間について
バッチサイズを1から64まで変えて、[推論時間を、Titan XpおよびJetson TX1で測定した(Table1)。](https://arxiv.org/pdf/1810.00736.pdf#page=6)Titan Xpでは、SEResNet-154以外はリアルタイム性を実現している。なお、Jetson TX1の空欄はメモリ不足により測定できなかったバッチサイズである。

##推論時間と精度について
Titan XpとJetson TX1について、[推論時間と精度の関係を調べた(Fig.3)。](https://arxiv.org/pdf/1810.00736.pdf#page=7)計算能力の高いTitan Xpでは、ほとんどのモデルでリアルタイム性が出ている。しかし、組み込み向けのJetson TX1では、MobileNet等の一部のモデルでしか性能を達成できない。

##バッチサイズを変えた場合のメモリ使用量について
[Titan Xpでバッチサイズを変えてメモリ使用量を確認した(Table2)](https://arxiv.org/pdf/1810.00736.pdf#page=7)。バッチサイズ1の時に、どんなに小さいモデルでもGPUのメモリを0.6GB以上消費する。とはいえ、大きいモデルでも1.5GB以内で収まっている。

##制約条件を考慮したモデルのランキング
メモリ使用量と推論時間の制約の組合せで、[精度の高いモデルをランキングした(Table3)](https://arxiv.org/pdf/1810.00736.pdf#page=8)。Titan Xpの場合、Dual Path Networks (DPN)が省メモリでの速度と精度の点で優れている。Jetson TX1は、組み込み向けで計算能力が異なり、違うモデル(MobileNet)等が優れている。

#参考資料
##論文
- [(IEEE Access)Benchmark Analysis of Representative Deep Neural Network Architectures](https://arxiv.org/abs/1810.00736)
- それ以前の論文
   - [An Analysis of Deep Neural Network Models for Practical Applications](https://arxiv.org/abs/1605.07678)
      - [ICLR2017でのレビュー結果](https://openreview.net/forum?id=Bygq-H9eg)
      - [日本語による概略の説明](https://www.ml-papers.com/entry/An_Analysis_of_Deep_Neural_Network_Models_for_Practical_Applications)
      - [(ICLR2016)Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding](https://arxiv.org/abs/1510.00149)
          - [日本語による概略の説明](https://taku-buntu.hateblo.jp/entry/2019/01/16/113434) 
- モデルに関する論文
   - [Dual Path Networks(DPN)](https://arxiv.org/abs/1707.01629)

##計測に用いたWikiやコード
- [Wiki/Home](https://github.com/CeLuigi/models-comparison.pytorch/wiki)
- [CeLuigi/models-comparison.pytorch]
(https://github.com/CeLuigi/models-comparison.pytorch)

##ハードウェア
- [NVIDIA TITAN X](https://www.nvidia.com/en-us/geforce/products/10series/titan-x-pascal/)
- [Jetson TX1 Module](https://developer.nvidia.com/embedded/jetson-tx1)