コンピュータビジョン
機械が画像を読み、作る仕組み。畳み込みと受容野、ビジョントランスフォーマーと自己教師ありバックボーン、検出とセグメンテーション、画像の拡散モデル、そして動画の追加コストを解説します。
概要
コンピュータビジョンは、ピクセルを入力とする機械学習の分野です。画像の分類、画像中の物体の発見、すべてのピクセルへのラベル付け、テキストとの照合、そして2022年以降は説明文からの画像や動画の生成までを含みます。この分野は2012年に手設計の特徴量から畳み込みネットワークへ移り、2020年にビジョントランスフォーマーを加え、今ではほとんどの場合、事前学習済みバックボーンをファインチューニングします。このハブは、視覚タスクのためにモデルと学習レシピを選ぶ必要があり、内部で何が起きているかを知りたいエンジニアのためのページです。
これが重要なのは、視覚タスクにはテキストタスクにはない厳しい実務上の制約があるからです。画像は大きく、ラベルを描くのは高価で、推論はしばしばカメラ、スマートフォン、組み込みボード上で動かなければなりません。適切なバックボーンと適切な量のファインチューニングを選ぶことが、プロジェクトが予算に収まるかどうかを決めます。
重要な考え方
畳み込みと受容野
畳み込み層は、典型的には3×3の小さなフィルタを画像上でスライドさせ、すべての位置で同じ重み付き和を計算します。重み共有により、ある隅で学んだ特徴検出器がどこでも働き、局所性により、初期の層はエッジとテクスチャを見て、前の層の出力を入力とする後の層は、元画像のますます大きなパッチを見ます。そのパッチが受容野で、3×3の層ごとに2ピクセルずつ広がり、ストライドやプーリングのステップごとに倍増します。残差接続によって50層から150層のネットワークが学習可能になり、ImageNetで事前学習したResNet-50(25 Mパラメータ、2015年)は、数千枚のラベル付き画像をもつ新しい分類タスクの既定バックボーンとして今でも妥当です。
ビジョントランスフォーマーと事前学習済みバックボーン
ビジョントランスフォーマーは画像を通常16×16ピクセルのパッチに切り、各パッチをトークンとして埋め込み、言語モデルと同じ注意機構のスタックを走らせます。トランスフォーマーを参照してください。ViT-B/16(86 Mパラメータ、2020年、Apache-2.0の重み)には組み込みの局所性がないため、ゼロから学習するにはCNNよりはるかに多くのデータが必要ですが、そのデータがあればよりよくスケールします。実際には、応用タスクのためにどちらをゼロから学習する人もいません。DINOv2(ViT-gで1.1 Bパラメータ、Apache-2.0、2023年4月)などの自己教師ありバックボーンは、線形ヘッドだけでラベルなしに分類、検索、深度推定に使える特徴量を与え、CLIP(2021年)は画像エンコーダとテキストエンコーダを対にして、推論時にクラスを言葉で記述できるようにします。これがゼロショット分類です。timmとtorchvisionは数百の事前学習済みバックボーンを、モデルごとにライセンスを明記して提供しています。
検出とセグメンテーション
検出はクラスラベル付きのボックスを返します。Faster R-CNNなどの二段階検出器は領域を提案してから分類し、YOLOファミリーなどの一段階検出器はグリッド上のボックスを1パスで予測してリアルタイム用途を席巻し、DETR(2020年)は検出をトランスフォーマーによる集合予測として扱い、手設計のアンカーも非極大値抑制も使いません。セグメンテーションはピクセルにラベルを付けます。セマンティック(ピクセルごとに1クラス)、インスタンス(物体ごとに1マスク)、パノプティック(両方)です。U-Netは今でも医療・産業用セグメンタの多くの形であり、Segment Anything Model(ViT-H版で636 Mパラメータ、Apache-2.0、2023年4月)はクリックやボックスのプロンプトから、タスク固有の学習なしに任意の物体を分割し、SAM 2(2024年7月)はそれを動画に拡張しました。両タスクの指標はIoU閾値にわたる平均適合率で、0.5の単一閾値でのmAPは品質の差の大半を隠します。広く使われているUltralyticsのYOLO実装はAGPL-3.0であり、クローズドなプロダクトでは問題になることに注意してください。
画像と動画のための拡散モデル
拡散モデルはノイズの除去を学習します。学習では画像にランダムな強さのガウスノイズを加え、そのノイズを予測するようネットワークを学習します。生成は純粋なノイズから始め、ネットワークを数十回適用し、各ステップで少しずつノイズを取り除きます。潜在拡散は変分オートエンコーダの圧縮空間でこれを行い、手頃にしました。Stable Diffusion 1.5(860 MパラメータのU-Net、CreativeML OpenRAIL-Mライセンス、2022年10月)は、コンシューマGPUで512×512の画像を生成します。テキスト条件付けは凍結したテキストエンコーダから来ており、分類器不要ガイダンスは多様性とプロンプトへの忠実さをトレードオフします。新しいモデルはU-Netをトランスフォーマーに置き換えています。FLUX.1 [dev](12 Bパラメータ、2024年8月)は非商用ライセンスのオープンウェイトです。動画拡散はフレームを第3の軸として扱い時間方向の注意機構を加えますが、これによりメモリと計算量がフレーム数倍になります。動画モデルがどの品質水準でも画像より数年遅れる理由です。生成モデルのハブが数学と、音声および3Dの派生を扱います。
どこから始めるか
PyTorchで最初のニューラルネットワークから始め、次にMNIST CNNプロジェクトを作ってください。上の図のネットワークを28×28の画像で学習し、各フィルタが何を学んだかを示します。エンベディングと類似検索は、事前学習済みバックボーンを使った画像検索にそのまま応用できます。ディープラーニングのハブは、あらゆる視覚レシピが依存する正規化と拡張の選択を説明します。
ツールとプラットフォーム
| ツール | 用途 | ライセンス | プラットフォーム |
|---|---|---|---|
| torchvision | データセット、変換、事前学習済みの分類器と検出器 | BSD-3 | PyTorch |
| timm | 最大規模の事前学習済み画像バックボーン集 | Apache-2.0 | Hugging Face |
| Diffusers | 画像モデル向けの拡散パイプライン、スケジューラ、LoRA | Apache-2.0 | Hugging Face |
| Detectron2 | 検出とセグメンテーションの研究コード、Mask R-CNN | Apache-2.0 | Meta |
| Ultralytics | シンプルなAPIによるYOLOの学習とエクスポート | AGPL-3.0、商用ライセンスあり | オープンソース |
| OpenCV | 画像I/O、古典的な処理、カメラキャプチャ | Apache-2.0 | オープンソース |
| Albumentations | ボックスとマスクの整合を保つ高速なデータ拡張 | MIT | オープンソース |
よくある間違い
- 2,000枚の画像でバックボーンをゼロから学習する。事前学習済みのものをファインチューニングし、まずは凍結したバックボーンと線形ヘッドから始めてください。
- 学習時と推論時で異なる平均と標準偏差で正規化する、あるいはOpenCVとPILの間でRGBとBGRを取り違える。
- アスペクト比を保たずにリサイズし、学習時に見たことのない潰れた物体をモデルに見せる。
- 拡張した検証画像で評価する。拡張は学習時のみです。
- IoU 0.5でのmAPだけを報告する。下流のコードが依存するのはボックスの精度なので、0.5から0.95の平均も報告してください。
- ライセンスを読まずにAGPL-3.0の検出器をクローズドなプロダクトに組み込んで出荷する。
さらに深く
- He et al., Deep Residual Learning for Image Recognition, 2015。
- Dosovitskiy et al., An Image is Worth 16x16 Words, 2020。ViTの論文です。および Oquab et al., DINOv2, 2023。
- Carion et al., End-to-End Object Detection with Transformers, 2020。および Kirillov et al., Segment Anything, 2023。
- Ho, Jain and Abbeel, Denoising Diffusion Probabilistic Models, 2020。および Rombach et al., High-Resolution Image Synthesis with Latent Diffusion Models, 2021。
- Radford et al., Learning Transferable Visual Models From Natural Language Supervision, 2021。CLIPの論文です。
- torchvisionモデルドキュメント。事前学習済みの各重みについて精度、パラメータ数、ライセンスを一覧しています。