[論文解説]ConvNeXt v1/v2

# 論文概要

### 大まかなCVモデルのトレンド

```mermaid
---
title: 大まかなCVモデルのトレンド
---
graph TD
	subgraph C["Conv, 畳み込み系"]
	direction TB
  C1("ResNet\nMicrosoft, 2015")
	C2("EfficientNet\nGoogle, 2019")
	C3("ConvNeXt V1/V2\nMeta, 2022")
	end
	subgraph T["Transformer系"]
	direction TB
	T1("Vision Transformer\nGoogle, 2020")
	T2("Swin Transformer\nMicrosoft, 2021")

	end
	C1 -.-> C2
	C2 --> T1
	T1 -.-> T2
	T2 -.->|Transformer以外の要素を良いとこ取り| C3

	style C3 fill:#aff,stroke:blue,color:blue

```

<aside>
💡 自然言語の分野で使われたTransformerをCVにも応用したVision Transformer系のモデルが2020年台に台頭。ImageNetなどの分類タスクでConv系のモデルよりも性能が高かったため、研究が活発化。

ConvNeXtは、Vision Transformerなど最新の手法で用いられている細かな改善手法を取り入れて精度を高めたConv系統の次世代アーキテクチャ。ConvNeXtモデルは**分類モデル**であり、backboneとして物体検知やセグメンテーションにも活用も期待できる。

</aside>

---
# A ConvNet for the 2020s

著者：*Zhuang Liu, Facebook AI Research (FAIR), UC Berkeley*
arXiv：https://arxiv.org/abs/2201.03545
github：https://github.com/facebookresearch/ConvNeXt

備考：CVPR2022

<aside>
💡 ResNetベースにいくつかの改良を重ねてImageNetでのaccを改善

</aside>

- 膨大な事前学習を必要とするTransformerを使用していない
    - Swin-Tありきのモデル。Swin-Tの構造をかなり取り入れている
    - ImageNetのデータセットでSwin-Tを微妙に上回っている
    - 円の大きさは計算量（≒モデルの大きさ）を表しており、コンパクトながら精度が微小にSwin-Tより高い
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253735/392b4db3-742b-b396-41c8-8b1bc5da640f.png)

---
## ResNetの改善ポイント

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253735/d056c38f-95a5-37c4-0f3d-c73ccd1bcbcb.png)

- stageの割合変更：stageとはresblockのまとまり
- ReLUをGELUに変更

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253735/443b1ab8-d5a5-e4e0-84b7-64262a94ea67.png)

---
## ****ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders****

著者：*Sanghyun Woo, Meta AI*
arXiv：https://arxiv.org/abs/2201.03545
github：https://github.com/facebookresearch/ConvNeXt-V2

備考：CVPR2023

<aside>
💡 ConvNeXtをベースに改良を加えたモデル。

・自己教師あり学習のMasked Autoencoders(MAE)の要素を追加(FCMAE)
・特徴量崩壊を防ぐためのGRN層を追加

などでImageNet(画像分類), COCO(物体検知), ADE20K(セグメンテーション)のスコアを引き上げた。

</aside>

---
### FCMAE = Fully Convolutional Auto-Encoder

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253735/25dc47db-afc0-604d-40a6-6449365c3fcf.png)


- 入力画像をパッチ化
- あらかじめ規定した割合のpatchのうち、60%をmaskする（見えなくしてしまう）
    - Vision Transformer系の場合は、ここでAttentionスコアを計算してAttention領域を決める
- conv層を利用してencodeする
    - maskされたpatch数が多いため、かなり疎（sparse）な層が多数出てくる
- 比較的軽量なモデルを用いてdecodeする
- maskされた領域と、元々の画像とのMSE（最小二乗誤差）を計算する

---
### GRN = Global Response Normalization
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253735/9dc8135e-8886-75a0-9248-3ee0465a6079.png)

- 特徴消失対策としての技術
- ConvNeXtのV1(赤)は、特徴量が層を経るごとに消失してしまっていることがわかる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253735/76f59ae3-c826-275d-5c10-33096838f9e5.png)

- GRNを導入することで、特徴量は安定していじされている(青)

---
## ConvNeXt v1/v2モデルのラインナップ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253735/70d70a42-7ff0-58f6-496c-b6eef157d11c.png)

- Tinyは邦訳的に結構小さいのかと思いきやそこそこ中ぐらいの立ち位置の模様。
- YOLOXのmは25.3Mなので、NanoとTinyの中間ぐらいのサイズ感、YOLOXのXは99.1M

--
## 参考文献

convnext v1

- https://devblog.thebase.in/entry/2022/03/28/110000
- https://lab.mo-t.com/blog/convnext
- https://github.com/facebookresearch/ConvNeXt/tree/main

convnext v2

- https://zenn.dev/nudibranch/articles/f4ee569465716d#transfer-learning-experiments

transformer

- ****An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale,**** https://arxiv.org/abs/2010.11929