3次元のための「いい実装が満たすべき条件」

ロボットであろうと自律移動の分野であろうと、３次元を理解することは必須だ。
そのことを考えた時の「いい実装」は何を満たすべきなのか。

## いい実装とは
- 問題の設定がよい
    - その問題が解決すれば、実用性が高まる。
    - 再利用性が高い。

入力としては、時系列のRGBデータ（単眼もしくはステレオカメラ・複数カメラ）
出力としては、個々のフレームに対応する点群データ、点群データの信頼度のデータ
物体領域としてのセグメンテーションを含むこと

## フレームの扱い
#### 扱いやすさの選択肢その１： 単一フレームでの推定ができる。
- 利点：
    - 枠組みが簡単になる。単一フレームで処理ができるので、単一フレームで結果が出せる。他の処理と組合せやすい。
    - 単一フレームで評価できるので、評価が簡単になる。
    - 多様性のあるデータを処理する時に、独立なデータを増やしやすい。
- 欠点：
    - 時系列的に安定しない。精度が出にくい。 
- 単一フレームで可能な出力
- 単一の視点位置からのdepth画像、もしくはそれを変換した点群データになる。
#### 扱いやすさの選択肢その２： 複数フレームでのベイズ的な推定ができる。
- 利点：
    - 複数フレームの情報を使うので、時系列的に安定しやすい。
    - 対象物とカメラ間の相対的な移動を検出できる。
    - ベイス推定を用いることで、それまでに観測した範囲だけを使って、尤もらしい値を返すことができる。
- 欠点：
    - 複数フレームを使う分だけ処理が複雑になりやすい。 
- [BDIS: Bayesian Dense Inverse Searching Method for Real-Time Stereo Surgical Image Matching](https://github.com/JingweiSong/BDIS-v2)
医療分野でのステレオ計測の論文


- [Stereo Matching Using Belief Propagation](https://courses.cs.duke.edu/cps296.1/spring05/handouts/Sun%20Zheng%20Shum%202003.pdf) 2003年　とても古い

#### 扱いやすさの選択肢その３：
- 独立性のある十分な数のデータがある。
- 利点：
    - 十分にまんべんなく収集されたデータを使うので、３Dの復元が容易になっていることが期待される。
    - 十分に数が集まってから復元に着手するので、無駄な作業が発生しない。
- 欠点：
    - 一度に大量のデータを処理するために、メモリの消費量・計算量が大規模になってしまう。
    - リアルタイム性を求めることはできない。
    -  

「NeRF」(Neural Radiance Fields)は、さまざまな角度から撮影した複数の写真から、自由視点画像を生成する技術
は、これに該当する。

[3D Gaussian Splatting]
などがこれに該当します。

それぞれのアプローチで得られるものが異なってくる。



束縛条件：
単一フレームでの奥行きの算出には誤差を含むことを前提としていること。
ベイズ推定の考えを取り込んでいること。

論文例：
[ProDepth: Boosting Self-Supervised Multi-Frame Monocular Depth with Probabilistic Fusion](https://arxiv.org/pdf/2407.09303v1)

## 条件の組み合せ

| |mono camera |stereo camera |
|---|----|-----|
| each frame | (1) | (2) |
| multi frame | (3) | (4) |
| multi view | (5) | (6) |

(1) 単眼深度（depth）推定
- paperswithcode [Monocular Depth Estimation](https://paperswithcode.com/task/monocular-depth-estimation)

　 [depth-anything](https://depth-anything.github.io/)
　 depth-anything-v2
　最近、伸びている分野。単眼カメラでdepthを算出できる。
　学習によって単眼カメラの画像からdepthを推定するもの。
　（ライブラリ自体は視差相当量を出すものになっている。そのため深度の絶対値は不明である）

(2) stereo libraries
  従来は、ステレオ計測の手法によって算出されるもの。近年は対応点がとれない領域に対しての深層学習（もしくはViT）によって推測されるものになっている。
(3) Dynamic-multiframe-depth

単一フレームでの単眼深度推定では、時系列としての安定性が欠けている場合が多いです。
そのため、移動方向や速度を算出するには、不安定すぎて使いものにならない。
人が対象物への絶対的な深度を推定できているとは、私には思えない。
できているのは、対象物間の深度の大小関係、深度の時系列的な安定性であると思う。
そのできている範囲の中でコーヒカップの位置と自分の手の位置とを評価し、
自分の手の位置を補正するように動かす。

- [Dynamic-multiframe-depth](https://github.com/ruili3/dynamic-multiframe-depth)
- [ProDepth: Boosting Self-Supervised Multi-Frame Monocular Depth with Probabilistic Fusion](https://github.com/Sungmin-Woo/ProDepth)
- [Generating Consistent Long Depth Sequences for Open-world Videos](https://depthcrafter.github.io/)
pdf [DepthCrafter: Generating Consistent Long Depth Sequences for Open-world Videos](https://depthcrafter.github.io/pdf/DepthCrafter.pdf)

https://x.com/NaveenManwani17/status/1831426496797536512


(4) 調査中
[Fast Multi-frame Stereo Scene Flow with Motion Segmentation](https://taniai.space/projects/cvpr17_fsf/)
pdf [Fast Multi-frame Stereo Scene Flow with Motion Segmentation](https://arxiv.org/pdf/1707.01307)

注意：multi-frame でのデータセットの例が、圧倒的に車載カメラに偏っている。
そのため、ロボットの頭部で見る画像がロボットの歩行や頭部の姿勢変化によって変わるような動画での例が
少なそうである。

(6)
- [Generalizable Novel-View Synthesis using a Stereo Camera](https://jinwonjoon.github.io/stereonerf/)

本論文では、特に多視点ステレオカメラ画像を対象とした、一般化可能なビュー合成アプローチを初めて提案する。近年のステレオマッチングが正確な形状予測を実証していることから、我々はステレオマッチングを新規ビュー合成に導入し、高品質な形状再構成を実現する。この目的のため、本論文では、ステレオマッチングをNeRFベースの一般化可能なビュー合成アプローチに統合する、StereoNeRFと呼ばれる新しいフレームワークを提案する。StereoNeRFは、ノービュー合成においてステレオマッチングを効果的に利用するための3つの主要コンポーネント、すなわち、ステレオ特徴抽出器、奥行きガイド付き平面掃引、ステレオ奥行き損失、を備える。さらに、StereoNVSデータセットを提案する。StereoNVSデータセットは、実シーンと合成シーンの両方を含む、初のステレオカメラ画像のマルチビューデータセットである。我々の実験結果は、StereoNeRFが一般化可能なビュー合成において、これまでのアプローチを凌駕していることを示している。

DeepL.com（無料版）で翻訳しました。


###### これらに組み合せたいもの
open vocabularyによるセグメンテーション
例：[Grounded-Segment-Anything](https://github.com/IDEA-Research/Grounded-Segment-Anything)
何を知りたくて、画像上のどこにあって、空間上のどこにということになると
Grounded-Segment-Anything　は使いたくなる。

###### これらに組み合せたいもの2
自己視点画像で、自分の腕・手領域のセグメンテーションと、手が扱っている対象物についてのセグメンテーション
[自己視点画像について調査中](https://qiita.com/nonbiri15/items/c75477edd4716fa7e528)


## 身体性

- 身体性をもとに、自己教師あり学習を実現できること
    - あるいは、人によるアノテーションを最小限に抑えられること

- 透明物体を解釈できること
- 反射の多い物体を解釈できること

- 問題の定式化がよい
    - 最小化する量が明解である
    - 拘束条件が明確である
    - 何が得られるのかが明確である
    - 関連分野の進展を取り込みやすい
- アルゴリズム
    - 従来の実装に比べて性能がいい理由が明確である
    - 従来の実装に比べて改善される対象が何かが明確である
    - ネットワーク構造
    - ネットワーク構造は、データの流れを示す。ネットワークの個々の層は、直前の層の出力から与えられた情報にしかアクセスできない。限定的な情報にしかアクセスできない。
- 得られた結果が良好であるのか判断しやすい
    - 例：目視での判定がしやすい
    - データセット全体での評価がしやすい
    - 評価指標がはっきりしている
    - 逆に言うと、目視での判定が困難な結果を出力する推論の枠組には限界がある。
    - その限界を超える性能を期待しないことが必要になる。（２０歳未満と、２０歳以上とを画像だけで区別することを求めてはいけない。明らかに区別がつく場合もあるが、区別がつかない場合があることを前提とした評価の枠組みにすること）
- 利用できる範囲が明確である
	- その範囲では安心して使うことができる。
	- できない内容についての理由が明確である。
	- 例：性能が出にくい状況での誤差の上限が抑えられている。
	- 例：人の認知能力と同程度にまで間違いの上限が抑えられている。
	- 例：人の認知能力と同程度であれば十分な事例としては、乗車券での「大人」、「小人」の区別であろう。人が区別できないレベルで画像認識が間違えても問題がないものだろう。
- データセットが目的の範囲で十分に多様である
    - 例：対象物の多様性
    - 例：背景の多様性
    - 例：視野の方向の多様性
- ソースコード
    - ソースが公開されていて、実装をトレースできる
- 入出力が明解である
- train
    - 学習用・評価用のデータセットの与え方が明確である
    - データを拡張する際の、データの取得方法・アノテーションの方法などについてたどれる
        - アノテーションのルールが明確に示されている。
        - 半教師あり学習などで、人手によるアノテーションを減らせること
        - あるいは、自己教師あり学習を使えること
    - 標準化されたデータ形式を使っている
    - 学習用・評価用のデータセットが公開されている
    - 学習を再現できる
- 推論
    - pre-trained のモデルが公開されてる
    - 入力データへの過度の想定がない
        - 例：人による補助的な入力を必要とする
- 実装
    -  不要なライブラリのimportをなくしてある
    -  OS依存性を減らしてある
    - 高速化が考えられている（GPUの利用）
    - 読みやすいコードの記述
    - ドキュメンテーションコメントが嘘になっていない
    - 
- ドキュメント
    - installする手順、実行する手順にしたがって、実行までたどり着ける
    
# いい実装かどうかに他人の判断状況を利用する
- github 上でのStarの数が少ないものを除外する。
- paperwithcode をみる


## 妄想

対象物の種類ごとに物体検出器があったときには、同じような特徴量の算出を、対象物ごとの物体検出器で実行しているという無駄があった。
・深度推定とopen vocalurary でインスタンスセグメンテーションとしているときでは、かなり共通の特徴量をそれぞれに用いているのではないかと推測する。例えば、物体の輪郭の位置の情報は、両者で共通に用いていそうな気がする。
　だから、ある段階からは、両者を統合して、使用するリソースの量を減らしつつ精度を向上させることができて不思議がない。

ロボットがモノをつかむ動作をするには、見えていない部分も含めた推定が必要になるのではなかろうか。
 ![Screenshot from 2024-09-21 22-22-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83761/c4d0ec07-f157-94db-5378-f0304f9e1f16.png)
三次元再構成（東京大学大学院 情報理工学系研究科『知能情報論』）　から引用。



## 参考記事
[三次元再構成（東京大学大学院 情報理工学系研究科『知能情報論』）](https://speakerdeck.com/pfn/20240613-utokyo-intelligent-informatics)

pdf [3 次元画像計測におけるステレオマッチングの基礎から最先端まで](https://www.omron.com/jp/ja/technology/omrontechnics/2021/OMT_Vol53_No2_008JP.pdf)