アルゴリズムの調査にPapersWithCode を使う

## タイトル変更
変更前のタイトル「PapersWithCode でステレオマッチングを調べてみる。」
機械学習分野でのアルゴリズム調査の１例であるので、より多くの人に読んでもらいたいので、タイトルを変更しました。
再度、タイトルを変えました。「PapersWithCodeを使ったアルゴリズム」というように誤読できることに気づいたからです。

## はじめに
PapersWithCode　は、各種アルゴリズムについて、starの数とpaperのpdf とcodeのgithuh 紹介しているサイトである。

ステレオマッチングの分野は年間に発表されるコードの数が多く、自力での調査が限られる。
そこで、PapersWithCodeを使ってstar の多い実装を調査することにした

## この記事の目的
- PapersWithCode を使って、特定のタスクについての最新の実装の状況を見定めるやり方を示すこと。


## 調査例

`paperswithcode stereo matching` のキーワードでgoogle 検索すると次のURLが見つかった。

https://paperswithcode.com/task/stereo-matching-1/latest


![Screenshot from 2024-08-16 15-52-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/e35d1c3c-bfa9-eb3f-48c7-a0fd9596232c.png)

★の数が812個もあってCVPR2023 で採択された論文であることが分かる。

[Deep Learning of Partial Graph Matching via Differentiable Top-K](https://openaccess.thecvf.com/content/CVPR2023/papers/Wang_Deep_Learning_of_Partial_Graph_Matching_via_Differentiable_Top-K_CVPR_2023_paper.pdf)

![Screenshot from 2024-08-16 16-03-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/ae429fe3-3781-4af8-de96-d0e1d88e0dd6.png)

[pdf](https://openaccess.thecvf.com//content/CVPR2023/papers/Wang_Deep_Learning_of_Partial_Graph_Matching_via_Differentiable_Top-K_CVPR_2023_paper.pdf)

[code](https://github.com/Thinklab-SJTU/ThinkMatch)


![Screenshot from 2024-08-16 21-06-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/08668e09-4e7e-eb69-d131-5f09d9e508e5.png)
図2. 部分グラフマッチングのための深層学習パラダイム。入力画像はCNNに送られ、特徴を抽出し、入力グラフを構築する。GMネットワークは特徴を持つグラフに基づく二重ストキャスティック行列を予測し、続いて微分可能なtop-kアルゴリズムが実行される。   インライアの数kは、我々の提案する注意融合集約ネットワークによって推定される。


ちがった。これはステレオマッチングではなかった。

----

次のものは★の数が509個の論文でこれもCVPR2023に採択されている。


![Screenshot from 2024-08-16 16-24-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/cbe44173-96fd-49e3-3f23-6c739e8d07ea.png)


![Screenshot from 2024-08-16 16-21-38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/7de6e6d4-5ac0-f27f-0ed9-360b371dc4f3.png)

[Iterative Geometry Encoding Volume for Stereo Matching](https://openaccess.thecvf.com//content/CVPR2023/papers/Xu_Iterative_Geometry_Encoding_Volume_for_Stereo_Matching_CVPR_2023_paper.pdf)

リカレント全対フィールド変換（RAFT）は、マッチングタスクにおいて大きな可能性を示している。しかし、全対相関は非局所的な幾何学的知識を欠き、イリーポーズ領域における局所的な曖昧性に取り組むことが困難である。本論文では、ステレオマッチングのための新しいディープネットワークアーキテクチャであるIGEV-Stereo(Iterative Geometry Encoding Volume)を提案する。提案するIGEV-Stereoは、局所的なマッチングの詳細だけでなく、ジオメトリとコンテキスト情報をエンコードする複合ジオメトリエンコーディングボリュームを構築し、視差マップを更新するためにそれを反復的にインデックス化する。収束を早めるために、ConvGRUs反復のための正確な開始点を回帰するためにGEVを利用する。我々のIGEV-Stereoは、KITTI 2015および2012（Reflective）において、全ての公開手法の中でランク付けされ、上位10手法の中で最速である。さらに、IGEV-Stereoはデータセット横断的な汎化が強く、推論効率も高い。また、我々のIGEVをマルチビューステレオ（MVS）、すなわちIGEV-MVSに拡張し、DTUベンチマークにおいて競争力のある精度を達成した。コードはhttps://github.com/gangweiX/IGEV。
DeepL による和訳

[pdf](https://openaccess.thecvf.com/content/CVPR2023/papers/Xu_Iterative_Geometry_Encoding_Volume_for_Stereo_Matching_CVPR_2023_paper.pdf)

[code](https://github.com/gangweix/igev)

## MIT License だ。
業務での利用も可能だ。

出力がdisparity(視差)もしくはdepth(深度)データであることを確認しよう。

![IGEV-Stereo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/2e45f1d9-44c4-c462-fdcd-35ecdf0bfc20.png)


動作環境を確認する。
NVIDIA RTX 3090
Python 3.8
Pytorch 1.12
とある。
Cudaが使える環境だとなんとかなりそうだ。


```
Pretrained models can be downloaded from google drive
```
リンクをたどるとPretrained model がgoogle driveからダウンロードできる。
ブラウザからダウンロードできる。

gdown コマンドを使えば、シェルスクリプトやDockerfile の中でダウンロードができる。

```
gdown --fuzzy --folder https://drive.google.com/drive/folders/1yqQ55j8ZRodF1MZAI6DAXjjre3--OYOX?usp=drive_link
```



https://github.com/gangweix/igev?tab=readme-ov-file#comparison-with-raft-stereo


![Screenshot from 2024-08-16 20-50-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/a922219b-a1b4-13aa-4f88-6f6de13de465.png)

使用するメモリ量や動作環境での実行速度が示されている。

Demosには、画像ペアを指定することで、結果を表示する例、動画を入力として結果を表示する例とが予め準備されている。

```.sh:
python demo_imgs.py \
--restore_ckpt pretrained_models/sceneflow/sceneflow.pth \
-l=path/to/your/left_imgs \
-r=path/to/your/right_imgs
```

```.sh:
python demo_video.py \
--restore_ckpt pretrained_models/sceneflow/sceneflow.pth \
-l=path/to/your/left_imgs \
-r=path/to/your/right_imgs
```

## 自分の用途に対して十分な状況だろうか
- 2023、2024年の時点の実装は、数年前の実装に比べて性能が向上している可能性が高い。
- 対応点がとれない画素に対しても、欠損点ではなくdisparity（視差）が算出されている。
- 細かい領域に対してもdisparity（視差）が適切に導出されている。
#### 未確認の項目
- 透明物体（例：ワイングラス）での視差の算出
- 反射があって映り込みがある物体での視差の算出
- 前景の物体と背景との境界でのartifactの有無
　これがあると、物体の３次元領域の切り出しに影響します。
　ないに越したことがありません。

## 他の実装を調べてみる。
その論文の中で比較しているのは、著者がその時点で一番良いと思っているはずの実装だ。
[RAFT-Stereo](https://github.com/princeton-vl/RAFT-Stereo)

pdf [RAFT-Stereo: Multilevel Recurrent Field Transforms for Stereo Matching](https://arxiv.org/pdf/2109.07547)

![](https://camo.githubusercontent.com/95339710db5073d4a917d2bac165e110449ded7fa5e1405849255338cb989a41/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f6e597178626d4164474467564a326c51594b2f67697068792e676966)

![](https://camo.githubusercontent.com/a674b6f547a0dba841012b7078e73eab08d16b42fb23e58279a0c934df05332b/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f7938684435534e68315148633879434742762f67697068792e676966)

みてごらん、これだって、こんなにいい結果になっている。

GPUの種類の制約、画像の大きさの条件、フレームレートと遅延時間の方が重要だったりはしないか、


### bestではなくacceptable を目指そう
- 最新の実装の全てを調査することはできない。
- 利用目的の範囲で十分な実装になっていれば、それで十分だろう。

## [補足：disparity(視差) からdepth(深度）への変換](https://qiita.com/nonbiri15/items/57e8e202df2a0d73de6c#%E8%A3%9C%E8%B6%B3disparity%E8%A6%96%E5%B7%AE-%E3%81%8B%E3%82%89depth%E6%B7%B1%E5%BA%A6%E3%81%B8%E3%81%AE%E5%A4%89%E6%8F%9B)