帰ってきたResNet！最新の画像認識モデル「ResNet-RS」を解説！

**オミータです。[ツイッター](https://twitter.com/omiita_atiimo)で人工知能のことや他媒体の記事など** を紹介していますので、人工知能のことをもっと知りたい方などは **[@omiita_atiimo](https://twitter.com/omiita_atiimo)をご覧ください！**
他にも次のような記事を書いていますので興味があればぜひ！

> * [2019年最強の画像認識モデルEfficientNet解説](https://qiita.com/omiita/items/83643f78baabfa210ab1)
> * [画像認識の最新SoTAモデル「Noisy Student」を徹底解説！](https://ai-scholar.tech/articles/treatise/noisy-student-ai-379)
> * [わずか1%のラベルでImageNet高精度「SimCLR」解説](https://ai-scholar.tech/articles/image-recognition/simclr-ai-400)
> * [2020年超盛り上がり！自己教師あり学習の最前線まとめ！](https://qiita.com/omiita/items/a7429ec42e4eef4b6a4d)
> * [SoTAを総なめ！衝撃のオプティマイザー「SAM」爆誕&解説！](https://qiita.com/omiita/items/f24e4f06ae89115d248e)



# 帰ってきたResNet！最新の画像認識モデル「ResNet-RS」を解説！

2012年に登場したAlexNetが与えた衝撃に匹敵するほどの影響力を持つモデルに**ResNet**があります。ResNetの登場以降はWideResNetやResNeXt、DenseNetなどResNetのアーキテクチャを発展させることでさらなる高い汎化性能を獲得してきました。2019年には、EfficientNet([拙著記事](https://qiita.com/omiita/items/83643f78baabfa210ab1))のような複雑なモデルや2021年3月にはそのバージョン2となるEfficientNetV2([拙著記事](https://qiita.com/omiita/items/1d96eae2b15e49235110))も登場しています。今回紹介する論文は、**学習方法**と**スケールアップ方法**を工夫することでResNetをSoTAレベルの性能にまで向上させています。ここで用いられている学習のテクニックたちは**ResNetのみならず他のモデルにも使えるものばかり**です。これらのテクニックを用いて学習されたResNetを**ResNet-RS**(re-scaled ResNet)と呼んでいます。それでは性能を爆上げする10個のテクニックを見ていきましょう！

![rnrs_fig1](https://i.imgur.com/HKu0eAm.png)

> 画像: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)

**本記事の流れ**:

- **忙しい方へ**
- **ImageNetにおける改善方法の小まとめ**
- **ResNet-RSの説明**
- **ResNet-RSの実験結果**
- **まとめと所感**
- **参考**


> 原論文: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)
> 公式実装: [TensorFlow](https://github.com/tensorflow/tpu/tree/master/models/official/resnet/resnet_rs)


## 0. 忙しい方へ

* ResNet-RSは、ResNetの**学習手法**と**スケールアップ手法**をそれぞれを改善し、**EfficientNetよりも2.1~3.3倍(GPU)も速い**よ
* **学習手法**は以下だよ
    * **テクニックたち**(DropoutやLabel smoothingなど（Table1))
    * 小さな重み減衰率$4e-5$
* **スケールアップ方法**は以下だよ
    * **モデルの深さは過学習が起こった時にスケールアップ**(起こっていないなら**幅**をスケールアップ)
    * 画像サイズはすぐに大きくしすぎない
* 半教師あり学習、転移学習、動画分類にも有効だよ
* **ベースラインとしてこれからはResNet-RSを用いるべき**だよ

![rnrs_tab1](https://i.imgur.com/wKzAlT0.png)

> 画像: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)

## 1. ImageNetにおける改善方法の小まとめ

ResNet-RSに入る前にまず、これまでの研究で行われた画像認識モデルの改善方法について簡単にまとめたいと思います。これらの手法は以下の4つに分類することができます。それぞれの代表例も簡単に列挙しました。これまでの研究ではアーキテクチャにおける改善が盛んに行われてきましたが、本論文では **「学習および正則化手法」** と **「スケールアップの方法」** に注目しています。これらによって**EfficientNetよりも1.7 - 2.7倍も速いResNet-RS**が完成しています。

1. **アーキテクチャ**
    * 人間による改善: [AlexNet](https://papers.nips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf)や[ResNet](https://arxiv.org/abs/1512.03385)など
    * 自動探索: [NasNet](https://arxiv.org/abs/1707.07012)や[EfficientNet](https://qiita.com/omiita/items/83643f78baabfa210ab1)など
    * 畳み込み以外のモジュール: Self-AttentionやLambda層など
2. **学習および正則化手法**
    * ドロップアウト
    * ラベルスムージング
    * Stochastic Depth
    * Dropback
    * データ水増し手法
    * 学習率スケジューラ
3. **スケールアップの方法**
    * 深さ: ResNet-18やResNet-101など
    * 幅: [Wide ResNet](https://arxiv.org/abs/1605.07146)など
    * 入力画像のサイズ: [EfficientNet](https://qiita.com/omiita/items/83643f78baabfa210ab1)など(\*)
4. **学習データの増加**
    * 事前学習: [ViT](https://qiita.com/omiita/items/0049ade809c4817670d7)や[NFNets](https://arxiv.org/abs/2102.06171)など
    * 半教師あり学習: [Noisy Student](https://ai-scholar.tech/articles/treatise/noisy-student-ai-379)など
    * 疑似ラベル: [Meta pseudo-labels](https://arxiv.org/abs/2003.10580)など


(\*) EfficientNetは深さ、幅、入力画像のサイズ(解像度)の3つをお互いにバランスさせながらスケールアップさせています(=**複合スケーリング**(compound scaling))。詳しくは[こちら](https://qiita.com/omiita/items/83643f78baabfa210ab1#3-compound-model-scaling%E8%A4%87%E5%90%88%E3%83%A2%E3%83%87%E3%83%AB%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0)を参照してください。

## 2. ResNet-RSの説明

ここでは本題のResNet-RSについて説明していきます。前述した通り、次の2つについて説明していきます。

1. **学習手法の改善**
2. **スケールアップ方法の改善**

ResNet-RSでは主に学習方法とスケールアップ方法に着目していると繰り返し述べていますが、**実はアーキテクチャにも少しだけ変更**を加えています。といっても新しいものを考案している訳ではなく、既に存在する**2つの手法**を取り入れているだけです。学習手法の改善とスケールアップ方法の改善について述べる前にアーキテクチャにおける変更はとても簡単なので先に触れておきます。アーキテクチャにおける2つの手法は以下の2つです。

* **SEブロック**[[Hu, J.(CVPR'18)]](https://arxiv.org/abs/1709.01507): チャネル方向のAttentionを計算してくれる(とされている)ブロック。詳細は[こちら](https://qiita.com/omiita/items/77dadd5a7b16a104df83#squeeze-and-excitation%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB)。
* **ResNet-D**[[He, T.(2018)]](https://arxiv.org/abs/1812.01187): ResNetの改良版
    1. 1層目を3つの3x3畳み込みに変更
    2. 2層目を削除し、その次の層を`stride=2`
    3. Residualブロックにおいて`stride=2`の位置を変更
    4. Residualブロックにおいて平均プーリングを導入

ResNet-Dは、文字だけではわかりづらいので上述した4点を下図に示しました。

![rnrs_rnd](https://i.imgur.com/fRvkOdp.png)


そして最終的なResNet-RSのアーキテクチャは下の表で表されています。左表が各ステージのブロックの数を表しており、右表がResNet-RS-101のアーキテクチャになっています。

![rnrs_architecture](https://i.imgur.com/uAOC37N.png)

> 画像: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)

それでは本題の学習手法の改善とスケールアップ手法の改善について見てみましょう。

### 2.1 学習手法の改善
#### 2.1.1 テクニックたち

![rnrs_tab1](https://i.imgur.com/V1vUue3.png)

> 画像: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)

ここでモデルはResNet-200を用いており、ImageNetを90エポック学習させています。入力画像サイズは256x256です。上表を見ると、**アーキテクチャを変えずとも3.2%ものゲイン**が得られていることがわかります。また、アーキテクチャにSEブロックやResNet-Dなどの変更を加えると分類精度がさらに上がっていることがわかります。

ちなみに、エポック数を350まで伸ばした時とドロップアウトを用いた時のゲインがマイナスになっていることが分かります。エポック数に関しては、この時点でまだ正則化手法を組み込んでいないためです。また、ドロップアウトに関しては重み減衰率が大きい($1e-4)$ためです。次項では重み減衰率について考えます。

#### 2.1.2 重み減衰率の大きさ

![rnrs_tab2](https://i.imgur.com/vilyegE.png)

> 画像: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)

前項では、ラベルスムージングやStochastic Depthなどの多くの正則化手法を加えました。そのため重み減衰(Weight Decay)の値が大きいと正則化がかかりすぎてしまうと考えられます。重み減衰率の値としてよく用いられる値として$1e-4$があります。ここではこれを少し小さくした$4e-5$と比較しています。上表がその結果です。モデルにはResNet-50とResNet-200を用いています。上表からわかることは次の2つです。

* RandAugmentとラベルスムージング(RA-LS)を用いる時は重み減衰率は大きいままで良い。
* RandAugmentとラベルスムージングに加え、Stochastic Depthやドロップアウト(RA-LS-SD-DO)などを用いる時は**重み減衰率は小さい方が良い**。


### 2.2 スケールアップ方法の改善

![rnrs_fig3](https://i.imgur.com/XDHzAby.png)

> 画像: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)

上の表では左からエポック数を10、100、350とした場合のImageNetの分類精度を示しています。ここで確かめたいことは、**最適なスケールアップ方法は学習設定(エポック数)に依存する**ということです。青色が深さを、赤色が幅をスケールアップした場合の結果で、入力画像のサイズ(Res)が同じものは線で繋がっています。

この図は、エポック数が10(左図)の時とエポック数が350(右図)の時を見比べるとわかりやすいです。まず、エポック数が10(左図)の時を見ると同じ画像サイズでは赤線の方が青線よりも高い分類精度となっていることがわかります。一方でエポック数が350の時(右図)は逆に青線の方が赤線の方よりも高い分類精度となっています。これらのことから、**過学習を起こしていない時(エポック数が少ない)は幅をスケールアップし、過学習を起こしている時(エポック数が多い)は深さをスケールアップするのが良い**、ということが言えそうです。このように最適なスケールアップの方法は学習設定にも依存しています。

![rnrs_fig2](https://i.imgur.com/0ntliSo.png)

> 画像: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)

続いて、上図ですが、横軸がFLOPs数で縦軸がImageNetに対するエラー率(低ければ良い)を示しています。各点の色は入力画像のサイズを表しており、各入力画像サイズに対して様々な大きさのモデルを用意し実験していることがわかります。上図からは画像サイズが小さい点たち(青色や水色)よりも画像サイズが大きい点たち(黄色や橙色)の方が平均して低いエラー率を獲得していることがわかります。ただ、橙色の点たちと赤色の点たちのエラー率はあまり変わっておらず、**画像サイズが大きすぎてもあまりゲインがない**ことがわかります。このことから、モデルをスケールアップしても画像サイズを急激には大きくすべきではないことがわかります。

これらをまとめた次の2つがまさに今回のスケールアップで用いるスケールアップ方法です
。
1. **過学習なら深さ、過学習でないなら幅をスケールアップ**
2. **解像度の大きさはゆっくりスケールアップ**

それでは学習方法とスケールアップ方法を用いた実験の結果を見ていきましょう。

## 3. ResNet-RSの実験結果

1. ResNet-RSとEfficientNetの比較
2. EfficientNet-RS
3. 半教師あり学習
4. 転移学習
5. 動画分類


### 3.1 ResNet-RSとEfficientNetの比較

![rnrs_fig4](https://i.imgur.com/VGzdDMO.png)

> 画像: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)

**ResNet-RSは1.7-2.7倍も速い学習時間で、EfficientNetと同じ分類精度を達成**できています。EfficientNetと比べ、学習時間が半分未満になると考えると驚異的に時間短縮ができることがわかります。

ちなみに、モデルの速度を評価するときは**FLOPs**、モデルのメモリ消費を評価する時には**パラメータ数**がよく用いられてきましたが、**これらの指標はそれぞれモデルの速度とメモリ消費を正確に表しているわけではありません**。このことが実験的にまとめられているのが下表です。緑がパラメータ数および実際のメモリ消費、紫がFLOPs数と実際の学習時間(Latency)を示しています。

![rnrs_tab3](https://i.imgur.com/VBFNosn.png)

> 画像: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)

ResNet-RSはEfficientNetと比べ、パラメータ数は3.8倍も大きいですが**メモリ消費は2.3倍も小さい**です。また、FLOPs数においてもResNet-RSが1.8倍も大きいですが実際の**学習時間は2.7倍も速い**ことがわかります。

### 3.2 EfficientNet-RS

![rnrs_fig5](https://i.imgur.com/a8lQ5pA.png)

> 画像: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)

2.2で、画像サイズは急に大きくしすぎない方が良いことがわかりました。これをEfficientNetに適用させてみます。EfficientNetとEfficientNet-RSで用いる画像サイズの一部を下表にまとめました。上表の**緑色の破線がEfficientNet-RSの結果を示しており、オリジナル(橙色)よりも高い分類精度を示している**ことがわかります。ただ、ResNet-RS(青色)はそれよりも高い性能となっています。

||Eff|Eff-RS|
|:--:|:--:|:--:|
|B4|380|192 ~ 256|
|B5|456|256 ~ 288|
|B6|528|256 ~ 320|

### 3.3 半教師あり学習

ここでは、ラベルあり画像に加え大量のラベルなし画像も用いることにします。ラベルあり画像は今まで通り120万枚のImageNetの画像を用い、ラベルなし画像は1,300万枚も用います。ラベルなし画像たちにはEfficientNet-L2(ImageNet分類精度88.4%)によって疑似ラベルが付与されます。つまり、**ラベルあり画像と大量の疑似ラベルあり画像を全て学習に用いたときの分類精度**を見ています。下表がその結果になっています。なんと、**ResNet-RSはEfficientNetよりもV100で5.5倍も早い**ことがわかります(TPUでは4.7倍)。

![rnrs_tab4](https://i.imgur.com/tpKe7Nl.png)

> 画像: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)

### 3.4 転移学習

![rnrs_tab5](https://i.imgur.com/BGnj9hX.png)

> 画像: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)

ここでは、本論文で提案した学習方法をRSと呼んでいます。RSで学習したモデルが汎用的な表現を学習できているかを見てみます。比較として、通常の教師あり学習(Supervised)と自己教師あり学習であるSimCLRおよびSimCLRv2を用います。教師あり学習では、単にImageNetで学習させるだけです。ここで自己教師あり学習が出てくるのは、近年自己教師あり学習が事前学習として高い性能を示しているためです。(参照:[2020年超盛り上がり！自己教師あり学習の最前線まとめ！](https://qiita.com/omiita/items/a7429ec42e4eef4b6a4d))

転移学習先として、画像分類(CIFAR-100)、物体検出(Pascal)、セマンティックセグメンテーション(Pascal/ADE)、深度推定(NYU)の4つのタスクを行っています。性能を公平に比較するため、提案手法であるRSもオリジナルのResNetを用いており、ResNet-DおよびSEモジュールのようなアーキテクチャに変化を加えるようなテクニックは用いていません。上表から言えることは次の2つです。

1. **RSは教師あり学習よりも常に良い**。
2. **SimCLRには10個中5個で、SimCLRv2には10個中8個でRSの方が高い性能**を示している。

### 3.5 動画分類

![rnrs_tab6](https://i.imgur.com/qKIZomk.png)

> 画像: ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)

画像分類の学習に対してかなり有効なRSを、動画分類の学習にも用いた場合を見てみます。ここではモデルに3D-ResNetを、データセットにはKinetics-400を用いています。3D-ResNetとは、時間軸を考慮させるために3D畳み込みで構成されたResNetのことです。**動画分類にもRSは非常に有効で全部で4.8%ものゲイン**があることがわかります。画像分類以外にもこういったテクニックたちが有効なのは面白いですね。

## 4. まとめと所感

本記事では最新のResNetである、ResNet-RSについて見てきました。ResNet-RSがEfficientNetと同程度の性能に2~3倍も速く到達することがわかりました。これまで使われてきたテクニックたちを用いたり正しくスケールアップするだけでResNetの性能がここまで上がるのは驚きです。特に**テクニックたちはResNetのみならず他のモデルおよびタスクにも有効**なことが本論文の実験からわかっているので積極的に用いていきたいですね。特別な実装もあまり必要がないので、これからはResNet-RSをベースラインとして用いてみてください！

**Twitterで人工知能のことや他媒体の記事などを紹介していますので[@omiita_atiimo](https://twitter.com/omiita_atiimo)もご覧ください。**

こちらもどうぞ：
> * [2019年最強の画像認識モデルEfficientNet解説](https://qiita.com/omiita/items/83643f78baabfa210ab1)
> * [画像認識の最新SoTAモデル「Noisy Student」を徹底解説！](https://ai-scholar.tech/articles/treatise/noisy-student-ai-379)
> * [わずか1%のラベルでImageNet高精度「SimCLR」解説](https://ai-scholar.tech/articles/image-recognition/simclr-ai-400)
> * [2020年超盛り上がり！自己教師あり学習の最前線まとめ！](https://qiita.com/omiita/items/a7429ec42e4eef4b6a4d)
> * [SoTAを総なめ！衝撃のオプティマイザー「SAM」爆誕&解説！](https://qiita.com/omiita/items/f24e4f06ae89115d248e)


## 4. 参考
* ["Revisiting ResNets: Improved Training and Scaling Strategies", Bello, I., Fedus, W., Du, X., Cubuk, E., Srinivas, A., Lin, T., Shlens, J.,  Zoph, B., (2021)](https://arxiv.org/abs/2103.07579)
原論文