> For the complete documentation index, see [llms.txt](https://nakamura-shogo.gitbook.io/dev-wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nakamura-shogo.gitbook.io/dev-wiki/cv/aiml_cv_classification/cspnet.md).

# CSPNet

* 題名: CSPNET: A NEW BACKBONE THAT CAN ENHANCE LEARNING CAPABILITY OF CNN
* 論文: <https://arxiv.org/abs/1911.11929>
* 実装例:
  * 著者のリンクにはシェルしかない。
    * <https://github.com/WongKinYiu/CrossStagePartialNetworks>

## 概要

* DenseNetの更なる高速化。安価なGPUで動作することを念頭に改良。
* ベースレイヤを2つに分割し、2つのパスで伝搬する情報を効率化している。
* これは他のネットワークに容易に適用可能で、計算量を10～20%削減し、さらに精度を向上させることができた。

## 特徴

### 改良点

* DenseNetの場合、同じ勾配が様々なパラメータの更新に重複して使用される。

![](https://3294144247-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmH8NcJCWxXCHFaEhW1uq%2Fuploads%2Fgit-blob-8752845cfa131274bf857561a3624f445f1c3b1a%2Fcspnet_densenet_forward_formula.png?alt=media)

![](https://3294144247-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmH8NcJCWxXCHFaEhW1uq%2Fuploads%2Fgit-blob-ffa7494d53f0a16e1efd8886d71fc7cc56927df4%2Fcspnet_densenet_parameter_update_formula.png?alt=media)

* CSPNetの場合、ベースの入力をすることで、勾配の重複するチャンネルを削減する。

![](https://3294144247-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmH8NcJCWxXCHFaEhW1uq%2Fuploads%2Fgit-blob-bbb9c2f43c5bd39fcba6e6ba644cd5c8600cab17%2Fcspnet_parameter_update_formula.png?alt=media)

* 正直、微分の話は理解ができていないが、以下に分割していると理解。
  * x\_0'': ブロック全体をスキップするチャンネル
  * x\_0': ブロック内をDenseNetで通過するチャンネル
* 分割方法は、単純にチャンネルを半分にするものと考えられる。

### CSPNetの構成

* CSPNetでは以下の３パターンを定義している。( (a)は従来のDenseNetと同じ)

![](https://3294144247-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmH8NcJCWxXCHFaEhW1uq%2Fuploads%2Fgit-blob-aaaa38479b521e21c1f1c8c34945c462f4e75e66%2Fcspnet_block_architecture.png?alt=media)

* 実験の結果、(d) Fusion Lastは、計算コストを大幅に下げ、top-1精度が0.1%程度しか低下しなかった。

![](https://3294144247-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmH8NcJCWxXCHFaEhW1uq%2Fuploads%2Fgit-blob-1ebf0d8f5a278bbfc3eb9d2f1fc8e7bc0634ab67%2Fcspnet_result_apply_to_peleenet.png?alt=media)

### CSPNetの適用

* CSPNetは、ResNetやResNeXtにも適用できる。
* チャンネル数が半分となるためボトルネック層も不要となる。

![](https://3294144247-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmH8NcJCWxXCHFaEhW1uq%2Fuploads%2Fgit-blob-141bad285c2eb86e6ac4a1d4b4468c20f15705a2%2Fcspnet_apply_resnet.png?alt=media)

### 物体検知向け

* EFMという特徴量のfusionを提案しているが、割愛。

## 結果

![](https://3294144247-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FmH8NcJCWxXCHFaEhW1uq%2Fuploads%2Fgit-blob-1fb8d7ed28fa62ffd6a7d6191aa56d3519af1600%2Fcspnet_result_imagenet.png?alt=media)

## 参考

* 解説とPyTorch実装例
  * <https://pystyle.info/pytorch-densenet/>
* 解説、その後の使われ方についても言及有
  * <https://cvml-expertguide.net/terms/dl/cnn-backbone/densenet/>
* 解説
  * <https://ichi.pro/kurosu-sute-ji-bubun-nettowa-ku-cspnet-64805303419044>
  * <https://qiita.com/mshinoda88/items/c7e0967923e3ed47fee5#4-cross-stage-partial-networkcspnet>
* CIOについての論文
  * <https://arxiv.org/pdf/1909.00948.pdf>
  * なんかCSPNetの論文と少し計算方法が違う気がするが...
  * 等差数列の和になっているのは確か
    * <https://www.kwansei.ac.jp/hs/z90010/sugakua/suuretu/tousasum/tousasum.htm>
