Interface編集部

ailia SDKを試す<第9回> Depth-Anythingで単眼深度推定
今回は,1枚の画像から奥行きを推定して深度画像を生成するサンプル・プログラムdepth_anythingを紹介します.depth_anythingは,深度推定モデルDepth-Anything(https://github.com/LiheYoung/Depth-Anything)をAilia SDK上で動作させるためのサンプルです.このDepth-Anythingは,大規模な未ラベル画像データを活用することで既存モデルを超える汎化性能を実現した,シンプルかつ強力な単眼深度推定モデルです.ゼロ・ショット性能においては,相対深度推定でMiDaS v3.1を,メトリック深度推定ではZoeDepthを上回る成果を報告しています(注1).
今回は,サンプル・プログラムdepth_anythingを用いた検証として,実行環境の構築から推定結果の確認までを順に紹介し,あわせて,実際にどのような深度画像が得られるのかを確認します.
ーーーー
注1:https://depth-anything.github.io/?utm_source=chatgpt.com
●実行環境
今回の検証で使用したシステム構成を表1に示します.
名称 | 内容 |
---|---|
OS | Windows11 Pro |
CPU | AMD Ryzen5 3600 |
RAM | 32GB |
GPU | NVIDIA GeForce RTX 3060 12GB |
Python | python-3.10.11-amd64 |
ailia-SDK | Version 1.5.0.0 |
ailia-models | v1.4.0 https://github.com/axinc-ai/ailia-models |
cuda | Built on Tue_May_27_02:24:01_Pacific_Daylight_Time_2025 |
表1 システム構成一覧
●環境構築してDepth-Anythingを動かしてみる
本サンプルの環境構築手順をリスト1に示します.
******
> python –version
Python 3.10.11
> git clone https://github.com/axinc-ai/ailia-models.git
> cd ailia-models
> python -m venv .venv <―― Pythonの仮想環境 作成
> .venv\Scripts\activate <―― 仮想環境 で作業してください
> python -m pip install –upgrade pip
> pip install setuptools wheel
# matplotlib、scikit-image、pillow に関しては依存するバージョンがあります
> pip install matplotlib==3.8
> pip install “scikit-image<0.20” “pillow<10”
> pip install -r requirements.txt
******
リスト1 環境構築手順
次にサンプルを実行します(リスト2).
******
(.venv) PS depth_anything> python depth_anything.py
INFO arg_utils.py (13) : Start!
INFO arg_utils.py (163) : env_id: 3
INFO arg_utils.py (166) : VulkanDNN-NVIDIA GeForce RTX 3060 (FP16)
INFO model_utils.py (74) : Downloading onnx file… (save path: depth_anything_vits14.onnx)
INFO model_utils.py (80) : ======================= 100.00% ( 96661KB )]
INFO model_utils.py (82) : Downloading prototxt file… (save path: depth_anything_vits14.onnx.prototxt)
INFO model_utils.py (88) : ======================= 100.00% ( 249KB )]
INFO model_utils.py (89) : ONNX file and Prototxt file are prepared!
INFO license.py (81) : ailiaへようこそ。ailia SDKは商用ライブラリです。特定の条件下では、無償使用いただけますが、原則として有償ソフトウェアです。詳細は https://ailia.ai/license/ を参照してください。
INFO depth_anything.py (109) : Start inference…
INFO depth_anything.py (90) : saving result to output.png
INFO depth_anything.py (134) : Script finished successfully.
(.venv) PS depth_anything>
******
リスト2 サンプルの実行
初回実行時には必要なモデル・ファイルが自動的にダウンロードされます.そのため,インターネットに接続された環境で実行してください.
使用したサンプル画像を入力したところ,depth_anythingの公式リポジトリ(README.md)に掲載されている例と同一の深度画像を得ることができました(図1).
図1 サンプルの実行結果
この結果から,初期動作確認として環境構築が正しく行われており,モデルの推論処理も正常に機能していることを確認できました.
●さまざまな画像を入力して推定結果を確認
さまざまなシーンを想定した画像を入力し,深度推定の結果を確認します.なお.評価にあたっては,推定が適切に行われているかを目視で確認できるよう,独自に検証ツールdepth_extractor.htmlを作成しました(図2).
図2 簡易深度推定検証ツール(depth_extractor.html)
このツールでは,スライダを操作して表示したい深度の範囲を指定でき,想定通りに深度が割り当てられているかを直感的に確認できます.
▲1,自然風景
自然風景(水辺)の写真を入力し,川面付近の深度が適切に推定されるかを確認します.川面(水の表面)は周囲の風景の映り込みや水面の波による乱反射の影響で,深度推定が難しいシーンと考えられます.しかし本モデルでは,川面付近のみを抽出した深度画像を得ることができ,想定通りの動作を確認できました(図3).
図3 自然風景画像を入力した場合の推定結果
▲2,桜並木
桜並木の道の画像を入力し,特定の深度位置を抽出できるかを確認します.この写真は,桜が上から覆いかぶさるように並び,トンネル状の景観を形成しています.そのため,道の明暗が複雑に入り組んでおり,もし深度判定が明るさの変化に依存している場合は誤判定が発生する可能性があります.
しかし実際には,道の中間地点のみを抽出した深度画像を得ることができ,想定通りの結果を確認できました(図4).
図4 桜並木画像を入力した場合の推定結果
▲3,AI生成画像
AIで生成した画像に対して深度推定を行い,適切に判断できるかを確認します.使用したのは,前回の記事(https://interface.cqpub.co.jp/ailia008/)で作成した次の2種類の画像です.
******
・画像1:工事現場の前に立つ白衣の女性(フォトリアル調)
・画像2:アニメ調の犬
******
画像1は構図に遠近法が用いられており,特に奥に描かれたビルと隣接するビルの深度が正しく判定されるかを確認します.画像2は奥行き表現が曖昧なアニメ調であり,正面を向いた犬の頭部が手前と判定されるかどうかが注目点です.
結果として,いずれの画像からも想定通りの深度情報を抽出できました(図5).AI生成画像に対しても深度推定が十分に機能することを確認できました.
図5 AI生成画像を入力した場合の推定結果
●GPUの有効化を確認
本サンプルでは,最も実行時間がかかるオプション-ec vitlを指定して動作確認を行いました.実行環境を切り替えた際の処理時間は表2の通りです.
オプション | 実行環境 | 処理時間 [s] |
---|---|---|
–env_id=0 | CPU 実行 | 39.6 |
–env_id=1 | CPU-IntelMKL | 35.1 |
–env_id=2 | VulkanDNN – NVIDIA GeForce RTX 3060 (FP32) | ERR |
–env_id=3 | VulkanDNN – NVIDIA GeForce RTX 3060 (FP16) | 2.8 |
表2 実行環境による処理時間の変化
RTX 3060(FP32)ではエラーが発生しましたが,RTX 3060(FP16)では問題なく動作し,CPU実行と比較して 処理時間が約1/14に短縮される高速化を確認できました.出力結果の内容もCPU実行と同等であり,depth_anythingにおいてGPUが有効に機能していることを確認できました.
●まとめ
今回は,単眼深度推定モデルDepth-Anythingをailia SDK上で動作させるサンプルのdepth_anythingを検証し次を確認できました.
*******
・環境構築から動作確認までスムーズに行え,公式リポジトリと同じ出力を得られる
・GPU(RTX 3060,FP16)を利用することで,CPU実行の約1/14に処理時間を短縮できるなど,実用的な性能が得られる
・自然風景やAI生成画像といった多様な入力に対しても,想定通りの深度推定が可能である
*******
深度推定は,ロボティクスやAR/VR,3D再構成など幅広い分野に応用が期待されます.ailia SDKを活用することで,こうした最先端技術を手元の環境で容易に試せる点は大きな魅力といえるでしょう.ぜひ読者の皆さんも今回の内容を参考に,独自の応用に挑戦してみてください.
氏森 充(うじもり・たかし)
約30年間,(株)構造計画研究所にてIoT,ビッグデータ,機械学習,AI関連のシステム開発や実務応用に従事.退職後はLLM(大規模言語モデル)関連の情報収集や技術動向の調査・発信に注力し,雑誌「Interface」でもLLM技術に関する記事を執筆中.