GroundingDINOによる検出 Colab プログラム
【概要】GroundingDINOを用いた物体検出システムの利用ガイドと技術解説。建築異常、道路インフラ、医療・安全設備など6つの専門分野に特化した検出モードを提供し、Google Colab上で画像から対象物を自動検出する。テキストプロンプトによるゼロショット物体検出により、事前学習なしで任意の物体を検出可能。実験・研究の基礎スキルと実践的なレポート作成方法も解説する。
Colabのページ(ソースコードと説明): https://colab.research.google.com/drive/1ANPMe_8lkV5V-sa6fe7miJHDO546Uzlf?usp=sharing
【目次】
プログラム利用ガイド
1. このプログラムの利用シーン
建物の保守点検、道路インフラの維持管理、施設内の安全設備配置確認、飲食店の衛生検査など、専門的な検査業務を画像から自動化するためのツールである。検出対象となる物体や状態を事前に学習させる必要がなく、6つの専門分野から選択するだけで、該当する異常や設備を自動検出できる。Google Colab上で動作するため、特別なソフトウェアのインストールは不要である。
2. 主な機能
- 専門分野別の検出モード選択: 6つの検出モード(建築異常、道路インフラ、医療・安全設備、セキュリティ・防災、飲食店衛生、有用情報)から用途に応じて選択できる。
- 自動物体検出: 選択したモードに応じて、画像内の対象物体を自動検出し、バウンディングボックスで囲んで表示する。
- 検出結果の可視化: 元画像と検出結果を並べて表示し、各検出物体には日本語のクラス名と信頼度スコアが付与される。
- 統計情報の表示: 総検出数、クラス別の検出数、個別検出の詳細(種類、信頼度、面積)をテキストで出力する。
- サンプル画像とユーザー画像の両方に対応: プログラムが用意したサンプル画像で動作確認した後、自分の画像をアップロードして検出できる。
3. 基本的な使い方
- Colabページでコードセルを実行
Colabのページ(ソースコードと説明): https://colab.research.google.com/drive/1ANPMe_8lkV5V-sa6fe7miJHDO546Uzlf?usp=sharing
セルを順番に実行する。実行すると6つの検出モードのメニューが表示される。
- 検出モードの選択:
表示されたメニューから1から6の数字を入力し、Enterキーを押す。例えば、建築物の劣化を調べたい場合は「1」を入力する。
- ライブラリのインストール待機:
必要なライブラリとモデルファイルが自動的にダウンロードされる。この処理には数分かかる場合がある。
- サンプル画像での動作確認:
選択したモードに対応するサンプル画像が自動的に読み込まれ、検出結果が表示される。元画像と検出結果の2つの画像が左右に並んで表示される。
- ユーザー画像のアップロード:
「ファイルを選択」ボタンが表示されるので、検出したい画像ファイル(JPEG、PNGなど)を選択してアップロードする。
- 結果の確認:
アップロードした画像に対する検出結果が表示される。画像の下に統計情報(検出数、クラス別集計、詳細リスト)が出力される。
4. 便利な機能
- 検出モードの特徴理解: 各モードには専門的な検出クラスが設定されている。例えば、建築異常モードでは「ひび割れ」「剥がれ」「錆」など21種類、道路インフラモードでは「路面の穴」「標識の損傷」など15種類を検出できる。プログラム実行時に検出対象の一覧が表示されるため、モード選択前に確認できる。
- 検出感度の調整: プログラム内のBOX_THRESHOLD変数(初期値0.25)を変更することで、検出の厳格さを調整できる。値を大きくすると確実性の高い検出のみが残り、小さくするとより多くの候補を検出する。
- 検出クラスのカスタマイズ: MODE_CLASSES辞書を編集することで、検出対象を追加・削除できる。英語のクラス名と日本語表示名を対応付けて登録する。
- 複数画像の連続処理: ユーザー画像のアップロード部分を繰り返し実行することで、複数の画像を順次処理できる。各画像の検出結果は個別に表示される。
- 統計情報の活用: 出力される統計情報には、検出されたすべての物体の種類、信頼度、面積が含まれる。この情報を記録することで、検査結果の定量的な分析が可能になる。
プログラムコードの説明
1. 概要
このプログラムは、Google Colab環境で動作するGroundingDINOベースの物体検出システムである。6つの専門領域(建築異常、道路インフラ、医療・安全設備、セキュリティ・防災、飲食店衛生、有用情報)に特化した検出モードを備え、テキストプロンプトによって任意の物体を検出する。ユーザーはモード選択後、サンプル画像またはアップロード画像から対象物体を自動検出し、バウンディングボックス付きの可視化結果と統計情報を得ることができる。
2. 主要技術
GroundingDINO
IDEA Researchが2023年に発表したオープンセット物体検出モデルである[1]。Transformerベースの検出器DINOに言語モデルを統合し、テキストによる物体指定を可能にした。画像とテキストのモダリティ融合により、事前学習に含まれない任意のカテゴリを検出できる。特徴強化器、言語誘導クエリ選択、クロスモダリティデコーダの3段階アーキテクチャを採用し、COCOデータセットにおけるゼロショット転移で52.5 APを達成した[1]。
ゼロショット物体検出
学習時に観測されなかったクラスを推論時に検出する技術である[2]。従来の物体検出が固定されたクラスセットに限定されるのに対し、ゼロショット検出は補助情報(テキスト記述や属性)を通じて未知クラスを認識する。GroundingDINOはこの手法を採用し、自然言語による物体記述を入力として受け付けることで、事前定義されたカテゴリに依存しない汎用的な検出を実現している。
3. 技術的特徴
- 言語誘導による物体検出
テキストプロンプトを入力として物体検出を行う。プログラムでは各モードに対応する英語の物体名をドット区切りで連結したプロンプト(例:"crack . hole . dent . scratch")を生成し、これをGroundingDINOに入力する。
- ドメイン特化型検出モード
6つの応用分野に最適化された検出クラスセットを事前定義する。建築異常モードでは21種類の劣化・損傷パターン、道路インフラモードでは15種類の保全対象、医療・安全設備モードでは18種類の設備を検出対象とする。各モードは辞書構造(MODE_CLASSES)で管理され、英語クラス名と日本語表示名の対応付けを保持する。
- 双閾値による検出制御
バウンディングボックスの信頼度閾値(BOX_THRESHOLD)とテキストマッチングの信頼度閾値(TEXT_THRESHOLD)の2つのパラメータで検出感度を調整する。プログラムではいずれも0.25に設定されており、適度な検出精度と再現率のバランスを実現している。
- 日本語対応の可視化システム
japanize-matplotlibライブラリを用いて、検出結果を日本語で表示する。元画像と検出結果を左右に並べた2列表示を採用し、各バウンディングボックスには日本語のクラス名と信頼度スコアをラベル表示する。
4. 実装の特色
プログラムはGoogle Colab環境に最適化されており、以下の機能を実装している:
- 対話的なモード選択インターフェース(標準入力による1から6の選択)
- 自動依存関係インストール(transformers、supervision、GroundingDINO)
- 事前学習済みモデルの自動ダウンロード(groundingdino_swint_ogc.pth)
- URLからのサンプル画像読み込み(各モードに対応した6種類のPexels画像)
- ファイルアップロード機能(google.colabのfiles.upload()を使用)
- 統計情報の出力(総検出数、クラス別検出数、個別検出の詳細情報)
- Supervisionライブラリによるアノテーション可視化(BoxAnnotator、LabelAnnotator)
5. 参考文献
[1] Liu, S., Zeng, Z., Ren, T., Li, F., Zhang, H., Yang, J., Li, C., Yang, J., Su, H., Zhu, J., & Zhang, L. (2023). Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection. arXiv preprint arXiv:2303.05499. https://arxiv.org/abs/2303.05499
[2] Bansal, A., Sikka, K., Sharma, G., Chellappa, R., & Divakaran, A. (2018). Zero-shot object detection. In Proceedings of the European Conference on Computer Vision (ECCV) (pp. 384-400).
実験・研究スキルの基礎:Google Colabで学ぶGroundingDINO実験
1. 実験・研究のスキル構成要素
実験や研究を行うには、以下の5つの構成要素を理解する必要がある。
1.1 実験用データ
このプログラムでは画像ファイルが実験用データである。自分で撮影した建築物、道路、施設などの写真1枚を用意する。
1.2 実験計画
何を明らかにするために実験を行うのかを定める。
入門者向け計画例:
- 同じ写真を6つの異なる検出モードで処理し、それぞれ何が検出されるかを観察する
- 各モードで検出される物体の種類と数を記録し、モード間の違いを比較する
- 検出結果から、各モードがどのような用途に適しているかを考察する
- 検出された物体のクラス名と実際の画像内容が一致しているかを確認する
- 信頼度スコアの高い検出と低い検出を比較し、その違いの理由を考える
1.3 プログラム
実験を実施するためのツールである。このプログラムはGroundingDINOモデルと6つの専門分野別検出モードを使用している。
- プログラムの機能を理解して活用することが基本である
- 同じ画像でもモードを変えると異なる結果が得られることを体験できる
- GroundingDINOはテキストプロンプトによる物体検出を行うため、指定したクラスに応じて検出対象が変わる
1.4 プログラムの機能
このプログラムは検出モードを選択することで、画像から特定の種類の物体を自動検出する。
6つの検出モード:
- モード1:建築異常検出 - ひび割れ、剥がれ、錆など23種類の劣化・損傷を検出
- モード2:道路インフラ検査 - 路面の穴、標識の損傷など15種類の道路設備を検出
- モード3:医療・安全設備検出 - AED、車椅子、消火器など18種類の設備を検出
- モード4:セキュリティ・防災設備検出 - 防犯カメラ、警報器など16種類の設備を検出
- モード5:飲食店衛生検査 - 食べ物の残骸、油汚れなど14種類の衛生問題を検出
- モード6:有用情報検出 - 看板、案内板、標識など25種類の情報表示を検出
出力情報:
- 元画像(左側)と検出結果画像(右側)の並列表示
- 検出された物体を囲むバウンディングボックスと日本語のクラス名および信頼度スコア
- 統計情報(総検出数、クラス別検出数、個別検出の詳細情報)
検出の仕組み:
- 選択したモードに応じて検出対象クラスのリストが自動生成される
- GroundingDINOがテキストと画像を照合して、指定されたクラスに該当する物体を検出する
- 検出結果は信頼度スコア付きで表示される(0.0から1.0、高いほど確実)
1.5 検証(結果の確認と考察)
プログラムの実行結果を観察し、各モードの特徴と検出結果の意味を考察する。
基本認識:
- 同じ画像でもモードを変えると検出される物体が変わる。これは各モードが異なる目的を持つためである
- 検出結果が「正しい」「間違っている」かは、画像の内容とモードの目的によって判断する
- 実験とは条件を変えて結果を観察し、その理由を考えることである
観察のポイント:
- 各モードで何個の物体が検出されたか
- どのモードで最も多く検出されたか、最も少なかったか
- 検出された物体は実際に画像内に存在するか
- 存在しない物体が検出された(誤検出)場合、それは何か
- 存在する物体が検出されなかった(見逃し)場合、それは何か
- 信頼度スコアが高い検出と低い検出の違いは何か
- 自分が使いたい用途にはどのモードが適しているか
2. 間違いの原因と対処方法
2.1 プログラムのミス(人為的エラー)
プログラムがエラーで停止する
- 原因:必要なライブラリがインストールされていない、モデルファイルのダウンロード失敗
- 対処方法:エラーメッセージを確認する。ランタイムを再起動して最初から実行する
画像がアップロードできない
- 原因:ファイル形式が対応していない、ファイルサイズが大きすぎる
- 対処方法:JPEG形式またはPNG形式の画像を使用する。画像サイズが10MB以下であることを確認する
モデルのダウンロードに時間がかかる
- 原因:初回実行時にGroundingDINOモデル(約600MB)をダウンロードしている
- 対処方法:これは正常な動作である。数分待つ。2回目以降は高速に動作する
2.2 期待と異なる結果が出る場合
どのモードでも何も検出されない
- 原因:画像に検出対象となる物体が含まれていない、または画像が不鮮明
- 対処方法:建物、道路、設備などが明瞭に写っている別の画像を試す
明らかに存在する物体が検出されない
- 原因:選択したモードの検出対象に含まれていない、または物体が小さすぎる
- 対処方法:別のモードを試す。例えば「消火器」はモード3で検出されるがモード1では検出されない
存在しない物体が検出された(誤検出)
- 原因:類似した形状や色の物体を誤認識している
- 対処方法:これはAIの限界である。信頼度スコアが低い(0.3以下)検出は誤検出の可能性が高い
同じ物体に複数の矩形が表示される
- 原因:複数のクラスが同一物体を検出している
- 対処方法:これは正常な動作である。例えば「crack(ひび割れ)」と「scratch(傷)」は類似しているため重複することがある
3. 実験レポートのサンプル
注意:以下の実験結果は説明のための架空の例です。実際に実験を行う際は、自分で得た結果を記入してください。
6つの検出モードによる同一画像の分析比較
実験目的:
1枚の建物外観写真を6つの異なる検出モードで処理し、各モードがどのような物体を検出するかを観察することで、モード間の特徴と用途の違いを理解する。
実験計画:
オフィスビルの入口を撮影した写真(看板、防犯カメラ、AED、スロープ、壁面が写っている)を用意し、プログラムを6回実行して各モードでの検出結果を記録する。各モードで検出された物体の種類、数、信頼度を表にまとめ、モード間の違いを分析する。
実験方法:
同じ画像ファイルを使用し、モード選択のみを変更してプログラムを実行する。各実行後に以下を記録する:
- 検出された物体の総数
- 検出されたクラス名(日本語)のリスト
- 最も信頼度の高かった検出とそのスコア
- 誤検出と思われる結果(実際には存在しない物体)
- 見逃しと思われる結果(実際には存在するのに検出されなかった物体)
実験結果:
| モード | 検出総数 | 検出されたクラス | 最高信頼度 | 誤検出 | 見逃し |
|---|---|---|---|---|---|
| 1. 建築異常 | xxx | xxxx(x)、xxxx(x) | x.xx | xxxx | xxxx |
| 2. 道路インフラ | xxx | xxxx | x.xx | xxxx | xxxx |
| 3. 医療・安全設備 | xxx | xxxx(x)、xxxx(x) | x.xx | xxxx | xxxx |
| 4. セキュリティ・防災 | xxx | xxxx(x) | x.xx | xxxx | xxxx |
| 5. 飲食店衛生 | xxx | xxxx | x.xx | xxxx | xxxx |
| 6. 有用情報 | xxx | xxxx(x)、xxxx(x)、xxxx(x) | x.xx | xxxx | xxxx |
考察:
- (例文)モード6(有用情報検出)が最も多くの物体を検出した。ビルの入口には看板や案内表示が多数存在するため、このモードが最も適していた
- (例文)モード4(セキュリティ・防災)は防犯カメラを検出し、高い信頼度スコアを示した。小型の防犯カメラも正確に検出できることが確認できた
- (例文)モード3(医療・安全設備)はAEDとスロープを正しく検出した。入口のバリアフリー設備の確認に有効であることが分かった
- (例文)モード1(建築異常)は壁面の汚れや変色を検出したが、影を「汚れ」と誤検出した。建物外観の劣化調査には使えるが、照明条件に注意が必要である
- (例文)モード2(道路インフラ)とモード5(飲食店衛生)は検出数が少なかった、または検出されなかった。これは画像に道路や厨房が写っていないためであり、モードが目的に合致していないことを示す
- (例文)同じ画像でもモードによって検出される物体が全く異なることが明確に確認できた。これは各モードが特定の用途に特化して設計されているためである
結論:
(例文)1枚の画像から得られる情報は、使用する検出モードによって大きく異なる。本実験のオフィスビル入口写真では、案内情報の抽出にはモード6、防犯設備の確認にはモード4、バリアフリー設備の確認にはモード3が最も適していた。実際の業務では、目的に応じて適切なモードを選択することが重要である。また、複数のモードを組み合わせることで、1枚の画像から多面的な情報を抽出できる可能性が示された。今後の発展として、検出されなかった物体(例:非常口サイン)を検出するために、MODE_CLASSES辞書に新しいクラスを追加する実験が考えられる。