Two-Stage Object Detectors
領域提案と分類に焦点を当て、2段階物体検出器の仕組みを解説します。Ultralytics YOLO26のような最新モデルが現在リードしている理由を学びます。
2段階物体検出器は、画像内の項目を識別して位置を特定するためにコンピュータービジョンで使用される、高度なディープラーニング (DL)アーキテクチャの一種です。1回のパスで検出を実行する1段階物体検出器とは異なり、これらのモデルはタスクを領域提案と物体分類という2つの明確なフェーズに分けます。この分割アプローチは、高い位置特定精度を優先するために先駆的に導入され、人工知能 (AI)の発展において、これらの検出器を歴史的に重要なものにしました。「どこにあるか」と「何であるか」を分離することで、2段階検出器は、特に小さい物体や遮蔽された物体に対して、より高い精度を実現することが多い一方、通常は計算リソースの増加と推論レイテンシの低下を伴います。
2段階プロセス#
2段階検出器のアーキテクチャは、人間がシーンを注意深く精査する方法を模倣した、順次実行されるワークフローに基づいています。
-
領域提案: 第1段階では、モデルが入力画像をスキャンし、物体が存在する可能性のある領域を特定します。領域提案ネットワーク (RPN)と呼ばれるコンポーネントが、候補ボックスの疎な集合を生成します。これらは多くの場合、関心領域 (RoIs) と呼ばれます。この段階で背景の大部分を除外することで、ネットワークは関連する領域に処理能力を集中できます。
-
分類と精緻化: 第2段階では、モデルが畳み込みニューラルネットワーク (CNNs)を使用して、これらの候補領域から特徴を抽出します。次に、各領域に特定のクラスラベル(例: 「人物」、「車両」)を割り当て、物体をぴったり囲むようにバウンディングボックスの座標を精緻化します。
このアーキテクチャの代表的な例には、R-CNNファミリー、特にFaster R-CNNとMask R-CNNがあり、数年間にわたって学術ベンチマークの標準となっていました。
1段階検出器との比較#
2段階モデルと、Single Shot MultiBox Detector (SSD)やUltralytics YOLOシリーズなどの1段階物体検出器を区別すると理解しやすくなります。2段階モデルが領域を個別に処理して精度を優先するのに対し、1段階モデルは検出を単一の回帰問題として扱い、画像ピクセルをバウンディングボックスの座標とクラス確率に直接対応付けます。
歴史的には、これによりトレードオフが生じていました。2段階モデルはより高精度ですが低速で、1段階モデルはより高速ですが精度が低かったのです。しかし、現代の技術の進歩により、この差は曖昧になっています。YOLO26のような最先端モデルは現在、2段階検出器に匹敵する精度を実現するエンドツーエンドアーキテクチャを採用しながら、リアルタイム推論に必要な速度も維持しています。
実世界での利用例#
適合率と再現率を重視するため、2段階検出器は、処理速度そのものよりも安全性と詳細さが重要なシナリオで好まれることが多いです。
- 医療診断画像: 医療分野におけるAIでは、診断を見落とすことが重大な結果につながる可能性があります。2段階アーキテクチャは、医用画像解析で頻繁に使用され、X線画像やMRIスキャンにおける腫瘍などの異常を検出します。この複数ステップのプロセスにより、複雑な組織の背景に紛れた小さな病変を見落とさないようにし、放射線科医に信頼性の高い自動支援を提供できます。
- 高精度な産業検査: スマート製造では、自動目視検査システムがこれらのモデルを使用して、組立ライン上の微細な欠陥を特定します。例えば、タービンブレードの髪の毛ほどの亀裂を検出するには、2段階検出器が提供する高いIntersection over Union (IoU)精度が必要です。これにより、欠陥のない部品だけが生産の次の段階に進むことを保証できます。
最新の検出の実装#
2段階検出器は高精度なビジョンの基盤を確立しましたが、現代の開発者は、同等の性能を提供しながら、より容易なデプロイワークフローを実現する高度な1段階モデルを利用することが多くなっています。Ultralytics Platformは、これらのモデルのトレーニングとデプロイを簡素化し、データセットとコンピューティングリソースを効率的に管理します。
次のPython例では、ultralyticsを使用して最新の物体検出ワークフローを読み込み、推論を実行する方法を示します。従来の2段階アプローチと同様の高精度な結果を、より高い効率で実現できます。
from ultralytics import YOLO
# Load the YOLO26 model, a modern high-accuracy detector
model = YOLO("yolo26n.pt")
# Run inference on an image to detect objects
results = model("https://ultralytics.com/images/bus.jpg")
# Process results (bounding boxes, classes, and confidence scores)
for result in results:
result.show() # Display the detection outcomes
print(result.boxes.conf) # Print confidence scores








