こんにちは!データインテリジェンスチームの吉田です。
今回は、2024年6月に公開された単眼深度推定モデル「Depth Anything V2*1」について詳しく紹介します。
本記事は連載記事です。Depth Anything*2の解説編と実践編、そして本記事の三部構成となっています!Depth Anythingの連載記事を執筆中にDepth Anything V2が公開されたため、せっかくなのでDepth Anything V2の解説もしよう!ということで追加の連載記事を書いています。以後、モデルを明確に区別するため従来のDepth Anythingを"V1"、Depth Anything V2を"V2"と呼称する場合があります。
本記事ではDepth Anything V2にバージョンアップしたことによって何が変わったのかを中心に解説してきたいと思います。
要約
Depth Anything V2になって変わった所
- 学習用データに合成画像を採用
- 学習方法を調整
- 新しい評価用データを作成(今回は省略)
- 推論速度そのままに精度がUP
Depth Anything V2になっても変わらない所
- 基本的なモデル構造
Depth Anything V2とは
Depth Anythingとは、Zero-shotで動作可能な単眼深度推定モデルです。ライセンスもApache-2.0 licenseと商用利用しやすいため、画像分析に活用することが可能です。前々回の記事で詳しく解説しているので、そもそも単眼深度推定とは?Depth Anythingとは?という方はこちらをご覧ください。
Depth Anything V2とは、V1同様、Zero-shotで動作可能な単眼深度推定モデルです。ライセンスは一部Apache-2.0 licenseとなっていますが、大部分がCC-BY-NC-4.0 licenseとなっているため、画像分析で活用する際には注意が必要です。
モデル構造
Depth Anything V2のモデル構造はV1と同じ構造です。EncoderにDINOv2 *3、DecoderにDPT(dence prediction transformer) *4を採用しています。つまり、Depth Anything V2は学習用データとその学習方法に工夫を凝らし単眼深度推定の精度を向上させています。
学習に用いられたデータの比較
V1の学習には約150万枚のラベル付き画像と約6200万枚ものラベルなし画像を使用していましたが、V2の学習には約60万枚の合成画像と約6200万枚ものラベルなし画像を使用します。まず、合成画像で教師モデルを学習し、その教師モデルを使ってラベルなし画像に擬似ラベル(pseudo label)を付与します。最終的に擬似ラベル付き画像のみを用いて生徒モデルの学習を行います。
https://depth-anything-v2.github.io/より引用
合成画像の問題点
論文では合成画像を学習に利用する際の2つの問題点を指摘しています。
実画像と合成画像でデータの分布にズレが存在する
近年のグラフィックエンジンは写真と見間違えるほど進化してきているが、実世界の画像と比べるとキレイ過ぎることが問題と指摘されています。実画像とセンサで取られた深度情報がノイズなどのランダム性を大きく含むことに対して、合成画像はノイズが全く含まれておらず、小さな穴や細い物体の深度情報が完璧に含まれています。この差を学習時に考慮する必要があるとされています。
Depth Anything V2 p4より図の一部を引用
合成画像に含まれるシーンには限りがある
合成画像で構成されるHypersim*5やVirtual KITTI*6といったデータセットには、リビングルームや道路といった場面の画像が多く含まれていますが、広範な現実世界のシーンをカバーできていません。対称的に、約6200万枚ものラベルなし画像は広範な現実世界のシーンをカバーしていると言えます。
学習方法の比較
V1とV2の学習方法に違いを比較した表が以下になります。
Depth Anything | Depth Anything V2 | |
---|---|---|
step1 | 150万枚のラベル付き画像で教師モデルを作成(Vit-L) | 60万枚の合成画像で教師モデルを作成(Vit-G) |
step2 | 教師モデルを使ってラベルなし画像に擬似ラベルを付与 | 教師モデルを使ってラベルなし画像に擬似ラベルを付与 |
step3 | ラベル付き画像と疑似ラベル付き画像で生徒モデルを学習 | 疑似ラベル付き画像のみで生徒モデルを学習 |
主な違いとして、以下の2点が挙げられます。
- 教師モデルのパラメータ数が増えたこと
- 生徒モデルの学習に合成画像を使わないこと
教師モデルの能力が上がることで精度が向上することは理解しやすいのですが、あえて合成画像を生徒モデルの学習に使わないことがDepth Anything V2の精度向上の要因の一つであるようです。
精度
(※指標の解説は省きます)
Depth Anything V2はMarigold*7やDepthFM*8と呼ばれる拡散モデルベースの手法よりも非常に高い精度と速度を誇ります。表には記載されていませんが、V1の精度(表右下のグラフの数値)は88.5%*9です。構造が同じ=速度も同じと考えると、学習用データと学習方法の工夫のみで8.3%もの精度向上ができたことになります。
画像中段がDepth Anything V2の推論結果です。被写体が細く複雑な構造体や透明な物体、そしてイラストだった場合にも頑健で繊細な深度情報が出力されていることがわかります。
https://depth-anything-v2.github.io/より引用
まとめ
Depth Anything V2の概要とV1との違いについて解説しました。このモデルは、従来のDepth Anythingや最新の拡散モデルベースの単眼深度推定手法と比較して非常に高い精度と汎用性を持っています。さまざまな視覚タスクに応用可能ですが、V1と違い、モデルの一部(Sのみ)しか商用利用不可のため、注意が必要です。
参考
*1:https://depth-anything-v2.github.io/
*2:https://depth-anything.github.io/
*3:DINOv2: A Self-supervised Vision Transformer Model
*4:Vision Transformers for Dense Prediction
*5:https://github.com/apple/ml-hypersim
*6:Proxy Virtual Worlds VKITTI 1 - Naver Labs Europe
*7:https://github.com/prs-eth/marigold
*8:https://github.com/CompVis/depth-fm
*9:Depth Anything V2 p7, Table 3.