概要
物体検出はコンピューター ビジョンの大きな分野であり、コンピューター ビジョンの「実際の」アプリケーションの中でも重要なアプリケーションの XNUMX つです。 一方では、タスクを実行するロボットや自動運転車など、環境内でエージェントをナビゲートする自律システムを構築するために使用できますが、これには他の分野との交差が必要です。 ただし、異常検出 (ライン上の不良品など)、画像内のオブジェクトの位置特定、顔検出、およびオブジェクト検出の他のさまざまなアプリケーションは、他のフィールドと交差することなく実行できます。
オブジェクト検出は、画像分類ほど標準化されていません。これは主に、新しい開発のほとんどが、大規模なライブラリやフレームワークではなく、通常、個々の研究者、保守担当者、および開発者によって行われるためです。 必要なユーティリティ スクリプトを TensorFlow や PyTorch などのフレームワークにパッケージ化し、これまでの開発を導いた API ガイドラインを維持することは困難です。
これにより、オブジェクト検出がやや複雑になり、通常はより冗長になり (常にではありません)、画像分類よりも親しみにくくなります。 エコシステムに参加することの主な利点の XNUMX つは、優れたプラクティス、ツール、および使用方法に関する有用な情報を検索しない方法を提供することです。 オブジェクト検出を使用すると、ほとんどの人は、フィールドの風景についてさらに調査を行って、適切な把握を行う必要があります。
大衆にとって幸いなことに、Ultralytics は、YOLOv5 実装を中心に、シンプルで非常に強力で美しいオブジェクト検出 API を開発しました。
この短いガイドでは、MS COCO でトレーニングされた事前トレーニング済みの一連の重みを使用して、PyTorch で Ultralytics によって構築された YOLOv5 を使用して、Python でオブジェクト検出を実行します。
YOLOv5
YOLO (一度しか見ない) は方法論であり、オブジェクト検出用に構築されたモデルのファミリーでもあります。 2015 年の開始以来、YOLOv1、YOLOv2 (YOLO9000)、および YOLOv3 は同じ作成者によって提案されており、ディープ ラーニング コミュニティはその後もオープンソース化の進歩を続けてきました。
Ultralytics の YOLOv5 は PyTorch での YOLO の最初の大規模な実装であり、これによりこれまで以上にアクセスしやすくなりましたが、YOLOv5 がそのような足場を獲得した主な理由は、その周りに構築された美しくシンプルで強力な API でもあります。 このプロジェクトは、不要な詳細を抽象化しながら、カスタマイズ可能性、実質的にすべての使用可能なエクスポート形式を可能にし、プロジェクト全体を効率的かつ可能な限り最適にする驚くべきプラクティスを採用しています. 本当に、これはオープンソース ソフトウェアの実装の美しさと、それが私たちの住む世界にどのように力を与えているかを示す一例です。
このプロジェクトは、コンテキスト内のオブジェクトに関する主要なデータセットである MS COCO で事前にトレーニングされた重みを提供します。これは、一般的なオブジェクト検出システムのベンチマークと構築の両方に使用できますが、最も重要なのは、コンテキスト内のオブジェクトの一般的な知識をカスタムに転送するために使用できることです。データセット。
YOLOv5 によるオブジェクト検出
先に進む前に、次のことを確認してください。 torch
および torchvision
インストール済み:
! python -m pip install torch torchvision
YOLOv5 には、リポジトリ自体と次の例に示すように、詳細で実用的なドキュメントと美しくシンプルな API があります。
import torch
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
img = 'https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg'
results = model(img)
fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(results.render()[0])
plt.show()
のXNUMX番目の引数 hub.load()
メソッドは、使用したい重みを指定します。 間で任意の場所を選択することにより、 yolov5n
〜へ yolov5l6
– MS COCO の事前トレーニング済みの重みを読み込んでいます。 カスタム モデルの場合:
model = torch.hub.load('ultralytics/yolov5', 'custom', path='path_to_weights.pt')
いずれにせよ、入力をモデルに渡すと、返されたオブジェクトには結果を解釈するための便利なメソッドが含まれています。 render()
それらは、NumPy 配列を返します。 imshow()
電話。 これにより、適切にフォーマットされた結果が得られます。
結果をファイルとして保存
を使用して、推論の結果をファイルとして保存できます。 results.save()
方法:
results.save(save_dir='results')
これにより、まだ存在しない場合は新しいディレクトリが作成され、プロットしたばかりの同じ画像がファイルとして保存されます。
オブジェクトのトリミング
検出されたオブジェクトを個別のファイルとして切り取ることもできます。 私たちの場合、検出されたラベルごとに、多数の画像を抽出できます。 これは、 results.crop()
メソッド。 runs/detect/
ディレクトリ、 expN/crops
(実行ごとに N が増加する場合)、各ラベルに対してトリミングされた画像を含むディレクトリが作成されます。
results.crop()
Saved 1 image to runs/detect/exp2
Saved results to runs/detect/exp2
[{'box': [tensor(295.09409),
tensor(277.03699),
tensor(514.16113),
tensor(494.83691)],
'conf': tensor(0.25112),
'cls': tensor(0.),
'label': 'person 0.25',
'im': array([[[167, 186, 165],
[174, 184, 167],
[173, 184, 164],
出力ファイルの構造は、次の方法でも確認できます。
ベストプラクティス、業界で認められた標準、および含まれているチートシートを含む、Gitを学習するための実践的で実用的なガイドを確認してください。 グーグルGitコマンドを停止し、実際に 学ぶ それ!
! ls runs/detect/exp2/crops
! ls runs/detect/exp2/crops
オブジェクトのカウント
デフォルトでは、検出または印刷を実行すると、 results
オブジェクト – そのために推論が実行された画像の数を取得します results
オブジェクト (YOLOv5 は画像のバッチでも動作します)、その解像度、および検出された各ラベルの数:
print(results)
この結果:
image 1/1: 720x1280 14 persons, 1 car, 3 buss, 6 traffic lights, 1 backpack, 1 umbrella, 1 handbag
Speed: 35.0ms pre-process, 256.2ms inference, 0.7ms NMS per image at shape (1, 3, 384, 640)
スクリプトによる推論
または、検出スクリプトを実行することもできます。 detect.py
、YOLOv5リポジトリを複製することにより:
$ git clone https://github.com/ultralytics/yolov5
$ cd yolov5
$ pip install -r requirements.txt
そして実行します:
$ python detect.py --source img.jpg
または、URL、ビデオ ファイル、複数のファイルを含むディレクトリへのパス、特定のファイルにのみ一致するパス内のグロブ、YouTube リンク、またはその他の HTTP ストリームを指定できます。 結果は runs/detect
ディレクトリにあります。
さらに先へ - コンピュータ ビジョンのための実用的な深層学習
あなたの好奇心旺盛な性質は、さらに先へ進みたいと思わせますか? 私たちは私たちをチェックアウトすることをお勧めします コース: 「Pythonによるコンピュータビジョンのための実践的な深層学習」.
別のコンピューター ビジョン コースですか?
MNIST 数字や MNIST ファッションの分類は行いません。 彼らはずっと前に彼らの役割を果たしました。 高度なブラックボックス アーキテクチャにパフォーマンスの負担を負わせる前に、あまりにも多くの学習リソースが基本的なデータセットと基本的なアーキテクチャに焦点を合わせています。
私たちが注目したいのは 謎解き, 実用性, 理解する, 直感 および 実際のプロジェクト. 学びたい の あなたは違いを生むことができますか? 私たちの脳が画像を処理する方法から、乳がんの研究レベルのディープ ラーニング分類器の作成、「幻覚」を起こすディープ ラーニング ネットワークまで、実際の作業を通じて原理と理論を教え、コンピュータビジョンを解決するためにディープラーニングを適用する専門家になるためのノウハウとツール。
内部には何がありますか?
- ビジョンの第一原理と、コンピューターに「見る」ことを教える方法
- コンピューター ビジョンのさまざまなタスクとアプリケーション
- あなたの仕事を楽にする貿易ツール
- コンピュータ ビジョンのためのデータセットの検索、作成、および利用
- 畳み込みニューラル ネットワークの理論と応用
- データセット内のドメイン シフト、共起、およびその他のバイアスの処理
- 転移学習と、他人のトレーニング時間と計算リソースを自分の利益のために利用する
- 最先端の乳がん分類器の構築とトレーニング
- 主流のアイデアに健全な懐疑心を適用し、広く採用されている手法の意味を理解する方法
- t-SNE と PCA を使用した ConvNet の「概念空間」の可視化
- 企業がコンピューター ビジョン技術を使用してより良い結果を達成する方法のケース スタディ
- 適切なモデル評価、潜在空間の可視化、モデルの注意の特定
- ドメイン調査の実施、独自のデータセットの処理、モデル テストの確立
- 最先端のアーキテクチャ、アイデアの進展、それらの独自性と実装方法
- KerasCV – 最先端のパイプラインとモデルを作成するための WIP ライブラリ
- 論文を解析して読み、自分で実装する方法
- 用途に応じた機種選定
- エンドツーエンドの機械学習パイプラインの作成
- Faster R-CNN、RetinaNet、SSD、YOLO を使用したオブジェクト検出のランドスケープと直感
- インスタンスとセマンティック セグメンテーション
- YOLOv5によるリアルタイム物体認識
- YOLOv5 オブジェクト検出器のトレーニング
- KerasNLP (業界で強力な WIP ライブラリ) を使用したトランスフォーマーの操作
- トランスフォーマーを ConvNets と統合して画像のキャプションを生成する
- DeepDream
まとめ
この短いガイドでは、PyTorch を使用して構築された YOLOv5 でオブジェクト検出を実行する方法について説明しました。