写真1枚で高精度な3D画像簡単作成やってみた【3】。勝手にdepthのみ 別の手法（intel-isl のMiDaS他）。

#最初にアウトプット

**勝手にdepthのみ feat. intel-isl の。**の結果です。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635153/a6b6b1b2-aec9-4ea6-5a8d-f0ba10e2c37b.gif" width=480>

ここでは、下記の２つのgithubのアウトプットを混ぜています。
前者に対して、depthの算出のみ後者に置き換えています。
深い意味はありません。良い結果が得られることを期待しましたが、
とりあえず、**あまり良いことは起きていません。**

|役割分担|github|
|:---:|:---|
|depth以外|https://github.com/vt-vl-lab/3d-photo-inpainting<br>1枚の写真から3D画像が作成できる|
|depth|https://github.com/intel-isl/MiDaS<br>1枚の写真からdepthを算出できる|

#概要
**写真1枚で**
**高精度な3D画像↓　簡単作成**できるよう。

[写真1枚で高精度な3D画像簡単作成やってみた【1】。(depthがPNGで編集できるようになりましたよ。)](https://qiita.com/torinokaijyu/items/aca0dc6fb038dcd023d7)
の記事参照。

ここでは、

|**depthは、本来の処理を使わずに変わりに、替わりに、<br>intel-islのgithubのを使って作成（PNG)し、それを採用してみた**<br>（↑これが手順のすべて）|
|:---|

⇒　**勝手に、コラボレーション**
⇒⇒　**いいとこどりが、できないかと**

以下が、本来のものの論文とgithub。

https://arxiv.org/pdf/2004.04727.pdf
論文『3D Photography using Context-aware Layered Depth Inpainting』
Meng-Li Shih1　さんら

githubは、以下。
https://github.com/vt-vl-lab/3d-photo-inpainting

**depthの情報（PNG)を作成するために使った**
intel-islのgithubは、以下。
https://github.com/intel-isl/MiDaS


#結果

上で、一番最初に示したものが、**結果**です。
オリジナル（＝　 intel-isl のMiDaS　に置換えていないの）は、
[写真1枚で高精度な3D画像簡単作成やってみた【1】。(depthがPNGで編集できるようになりましたよ。)](https://qiita.com/torinokaijyu/items/aca0dc6fb038dcd023d7)
の記事参照。

ちょっと、条件がずれているのかな？**良くはないです**
**ただ、よくなっている部分もある。**気がする。

#結果追加
「depthをintel-islに置き換え」の**なし**と**あり**の結果を比較。
⇒　少し、**ありが良い気もします**。しかし、まだまだ、あちこち破綻してますね。
⇒⇒　もう少し、丁寧な処理だと、うまくいくのかな？？（いや、今の技術の限界か？）

（１）サンプル１
＜元（depthをintel-islに置き換えなし）＞
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635153/dd0245b9-9bac-93fc-eb1e-3fd449bd49e6.gif" width=480>


　
＜depthをintel-islに**置き換え**＞
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635153/db77af28-74ec-105f-7b61-76324b47a2de.gif" width=480>

（２）サンプル２
＜元（depthをintel-islに置き換えなし）＞
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635153/e4742a0f-ff20-a43c-3663-81b31c584c67.gif" width=480>


＜depthをintel-islに**置き換え**＞
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635153/b75646dd-c822-ab6e-d428-3ff991cdbad5.gif" width=480>

#更に別のdepth estimationを使ってみた。(2020/06/13)
githubは、以下。
https://github.com/ialhashim/DenseDepth
[High Quality Monocular Depth Estimation via Transfer Learning (arXiv 2018)]

※処理都合により画像の範囲を少し変更しています。

![ダウンロードci_other.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635153/81f8c4e0-5909-4fd0-8efe-785d949d9f03.gif)

![ダウンロードjump_other.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635153/232c7054-4667-e776-fadc-15084f30350e.gif)

![ダウンロードdog_other.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635153/e64ce250-3124-75dd-2ad2-89974cfcea19.gif)

⇒　depth estimationの手法にかかわらず、共通の問題等もみえる。
　　尚、もともと、隠れている領域は、別の問題。

※上記のgithubは、室内を重視しているので、室内で試してみた。（少し良いかも）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635153/a1342419-c399-3804-8c65-c09213690a79.gif" width=480>

↓↓　比較（元々のdepth)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/635153/b3977f33-058c-7584-8ef5-b847dc9f5905.gif" width=480>



#役立つかもしれない情報
・全面が壁のような画像の場合、垂直面がうまく検出できないような気がする。
　　（簡単だと思うので、不思議。）depthの手法をいくつか試したが、いまの
ところ良いものに出会ってない。


#今後
もう少し、別途、丁寧に検討したいと思います。
素朴に、以下、２つわからない。

* PNGの絶対値。（なんとなく雰囲気のわかるグレースケールになっていたので良しとした。）
* 垂直面（壁）とか水平面が簡単にわからないのかな。。。（なぜ、うまく認識できないのだろうか？）

また、将来的には、depth estimationは更に強力なものが出るのはないか。

コメントなどあれば、お願いします。

参考。
[写真1枚で高精度な3D画像簡単作成やってみた【2】。(depthをnumpyで加工してみる)](https://qiita.com/torinokaijyu/items/e761c00c87d6a00b8c30)
上に記載していますが、念のため↓
[写真1枚で高精度な3D画像簡単作成やってみた【1】。(depthがPNGで編集できるようになりましたよ。)](https://qiita.com/torinokaijyu/items/aca0dc6fb038dcd023d7)

:star:[写真1枚で高精度な3D画像簡単作成やってみた【0】。(空間の捉え方を確認した)](https://qiita.com/torinokaijyu/items/d93b83b6a135f1b9a660)

:new:[写真1枚で高精度な3D画像簡単作成やってみた【-1】。(隠れた領域が、本当に見えるのか？)](https://qiita.com/torinokaijyu/items/20a5a478881c9d00f9ac)

#役立つかもしれない情報（一連の記事【-1】～【3】総合）
【1】
・GFORCE GTX1050Ti（専用GPUメモリ4.0GB)では、
  **GPUのメモリ不足で動かない場合あり**。
　これは、**画像サイズに依存するのではなく**、
　おそらく、画像の中身で3Dの表現に必要なメモリ量の関係か何か。
　解決策、見つけていません。パラメータ変更等でなんとかなるのかも。
  赤い車ので、専用GPUメモリ3.4GB程度、白のは2.7GB程度使用されていました。
　このメモリ問題に関しては、とりえず、Google Colabとかを使うのがいいのでは？
・PNGによるdepth情報の編集を示しましたが、確か、デフォルトはnumpy?。
　そのデータ(numpy)をガタガタ扱うのができる方は、そちらを編集するのもありかも。
・PNGで表現されたdepthの情報は、どこかで正規化されている気がする。PNGのdepthのレンジを
　　変更しても結果が同じだった気がする。:star:

【3】
・全面が壁のような画像の場合、垂直面がうまく検出できないような気がする。
　　（簡単だと思うので、不思議。）depthの手法をいくつか試したが、
　　いまのところ良いものに出会ってない。