コンピューター ビジョンのオブジェクト検出テクノロジは、多くのアプリケーションに不可欠です。 ロボット工学、監視機器、自動運転車など、さまざまな分野で使用されています。 したがって、写真やビデオで特定のものを見つけて認識することができます。
最もよく知られているもののXNUMXつ オブジェクト識別アルゴリズムはYOLOです (You Only Look Once) モデルのセット。 これらのモデルは ウルトラリティクスLLC.
このシリーズの最新バージョンは YOLOv5 です。 また、市場で最も迅速かつ正確なオブジェクト識別モデルです。 新しいデータを一般化するモデルの能力が大幅に向上しました。 また、以前の反復よりもパフォーマンスを向上させる多くの機能が含まれています。
YOLOv5 は、単一の GPU で毎秒最大 1000 フレームの速度で画像を処理できるため、リアルタイム アプリケーションに最適です。
この記事では、YOLOv5 を紹介し、その適用分野の詳細について説明します。
YOLOの旅:YOLOからYOLOv5へ
ジョセフ・レドモン 他は、2016 年にオブジェクト識別モデルのセットである YOLO を最初に導入しました。最初の YOLO モデルは、リアルタイムでオブジェクトを識別することができました。 ただ、当時の他の機種に比べると精度は低かったです。
YOLO のいくつかのアップグレードされたバージョンが何年にもわたってリリースされました。 そして最後に、Ultralytics LLC が YOLO シリーズの最新版である YOLOv5 を作成しました。
YOLOv5 は、現在利用可能な最も正確で最速のオブジェクト識別モデルです。
重要な機能
アンカーボックス
YOLOv5 は、アンカー ボックスを使用して画像内のオブジェクトの境界ボックスを予測します。 モデルは、アンカー ボックスを使用して、さまざまな縦横比を持つ多くの事前定義されたボックスのどれが写真内のアイテムに最もよく一致するかを予測します。 これらは事前定義されたボックスです。
また、YOLOv5 が画像内のアイテムを正確に認識して検索できるようにします。
モザイク データの拡張
トレーニングの際、YOLOv5 はモザイクと呼ばれる方法を採用します。 データ増強. 新しいトレーニング画像を作成するために、モデルは複数の写真のパッチをランダムに組み合わせます。 その結果、モデルの回復力と信頼性が向上します。 したがって、新しいデータに一般化し、過剰適合を減らすことができます。
独自のトレーニング パイプライン
教師ありトレーニングとトレーニング トレーニングを組み合わせた独自のトレーニング パイプライン 教師なし学習 使用されている。
したがって、モデルはより小さなサンプルから学習し、ラベルのない入力を効果的に利用します。 これにより、モデルのパフォーマンスが向上し、新しい入力に一般化する能力が向上します。
残留層と非残留層
YOLOv5 のアーキテクチャは、残留レイヤーと非残留レイヤーを組み合わせています。 勾配がレイヤー全体に流れるようにすることで、残留レイヤーは、モデルが難しい特徴を学習するのを支援します。 また、非残余レイヤーにより、モデルは入力画像をより包括的に把握できます。 その結果、YOLOv5 はより正確かつ効果的に動作することができます。
YOLOv5の使い方
インストール
YOLOv5 のインストールは、pip を使用してすばやく完了することができます。 Pip は Python のパッケージ マネージャーです。 YOLOv5 をインストールする一般的な手順は次のとおりです。
1- PyTorch のインストール: YOLOv5 は PyTorch フレームワークに基づいているため、最初に PyTorch をインストールする必要があります。
pip install torch torchvision
2. CUDA のインストール: GPU で YOLOv5 を実行する場合は、CUDA をインストールする必要があります。
3. YOLOv5 をインストールします。PyTorch と CUDA をセットアップした後、次のコマンドを使用して YOLOv5 をダウンロードします。
pip install yolov5
4-YOLOv5 のインストールに続いて、事前トレーニング済みの重みをダウンロードする必要があります。 トレーニング済みの重みは、Ultralytics GitHub リポジトリで入手できます。
下にスクロールして、ウェブサイトの「ウェイト」部分に移動します。 ここにあるリストから事前トレーニング済みの重みをダウンロードできます。
5. すでにトレーニング済みで、ユース ケースに最適な重みを選択します。 重みが学習されたデータセットまたは特定の YOLOv5 バージョンを使用して、リストを絞り込むことができます。
6- 適切なウェイトを選択したら、その横にある「ダウンロード」ボタンをクリックしてウェイトを選択します。 ウェイトは、としてダウンロードできます。 .pt ファイル。
7- ダウンロードした重みをディレクトリに転送します。 これは、検出スクリプトが動作する場所です。
8- この時点で、検出スクリプトで事前にトレーニングされた重みを使用して、写真またはビデオでオブジェクト検出を実行できます。
データの準備
YOLOv5 で使用できるようにデータを準備するには、次のアクションを実行する必要があります。
1. データを収集する: 最初のステップは、必要な画像またはビデオ データを収集することです。 物体検出. 検出したいものは、写真またはビデオに存在する必要があります。
2- データのフォーマット: 写真を利用している場合は、スクリプトに写真をインポートするだけです。 ビデオを使用する予定がある場合は、ビデオを一連の写真に変換する必要があります。 OpenCV などのライブラリを使用して、ムービーからフレームを抽出できます。
import cv2
img = cv2.imread('path/to/image')
OpenCV ライブラリを使用すると、次のコマンドを使用してビデオを一連の画像に変換できます。
import cv2
cap = cv2.VideoCapture('path/to/video')
while True:
ret, frame = cap.read()
if not ret:
break
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
3. データにラベルを付ける: データセットを使用している場合は、データにラベルを付ける必要があります。 画像の各フレームで識別したいアイテムの周りに境界ボックスを描画します。 データにラベルを付けるプロセスです。 この操作を支援するために、LabelImg や RectLabel などのいくつかのツールを使用できます。
4- データにタグを付けた後、データをトレーニング セットとテスト セットに分割する必要があります。 これは、モデルのパフォーマンスを評価するために重要です。
5. 最後に、トレーニングまたはテストの前にデータを前処理する必要がある場合があります。 これには、写真やビデオのスケーリング、ピクセル値の標準化、またはデータ拡張のメソッドの使用が必要になる場合があります。
これらの手順を完了すると、データの準備が整います。
検出スクリプトを実行する
これは、画像を分析してオブジェクトを検出する検出スクリプトの図です。
import yolov5
import cv2
# Pre-trained weights should be loaded.
weights = 'path/to/weights.pt'
# Set the detection confidence level
conf_thres = 0.5
# Set the Non-Maxima Suppression (NMS) threshold
nms_thres = 0.5
# Create the detector object
detector = yolov5.YOLOv5(weights, conf_thres, nms_thres)
# Load the image
img = cv2.imread('path/to/image')
# Perform object detection
detections = detector.detect(img)
# Print the detections
for x1, y1, x2, y2, conf, cls_conf, cls_pred in detections:
print("Object:", classes[int(cls_pred)])
print("Confidence:", conf)
print("Bounding box:", (x1, y1, x2, y2))
後処理
非最大抑制は、オブジェクト検出 (NMS) で使用される最も頻繁な後処理手法の 2 つです。 NMS を使用して、同じオブジェクトの境界ボックスの重複を排除します。 検出に対して NMS を実行するには、OpenCV ライブラリの cvXNUMX.dnn.NMSBoxes() メソッドを使用できます。
NMS を使用して検出を後処理する方法の例を次に示します。
import cv2
# Perform Non-Maxima Suppression (NMS)
インデックス = cv2.dnn.NMSBoxes(検出、信頼度、conf_thres、nms_thres)
可視化
視覚化の場合、OpenCV のようなライブラリを再び使用できます。 ソース画像またはビデオで検出されたオブジェクトの周囲に境界ボックスを表示できます。 画像の境界ボックスを描画するには、cv2.rectangle() メソッドを使用します。 元の画像で検出を表示する方法は次のとおりです。
cv2をインポート
# Draw the bounding boxes on the image
インデックスの I の場合:
i = i[0]
x1, y1, x2, y2 = detections[i][0], detections[i][1], detections[i][2], detections[i][3]
cv2.rectangle(img, (x1, y1), (x2, y2), (255, 0, 0), 2)
cv2.putText(img, classes[class_ids[i]], (x1, y1), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
# Show the image
cv2.imshow("Object Detection", img)
cv2
アプリケーション
YOLOv5 は強力なオブジェクト識別モデルです。 したがって、多くの現実世界のシナリオでそれを利用できます。 最も顕著な用途の 5 つは、自動運転車です。 YOLOvXNUMX は、自動車や信号機などのアイテムをリアルタイムで識別できます。
監視システムでは、YOLOv5 を使用して、ライブ ビデオ ストリーム内のオブジェクトを認識および追跡できます。 さらに、YOLOv5 はロボティクスの優れた資産になる可能性があります。 ロボットが周囲を検出して理解するのに役立ちます。 これは、ナビゲーションや操作などのアクティビティにとって非常に重要です。
YOLOv5 は、小売、スポーツ、医療、セキュリティなど、オブジェクト検出を必要とするあらゆる業界でも利用できます。
まとめ
最後に、YOLOv5 は、YOLO ファミリの最新かつ洗練されたバージョンです。 物体検出 モデル
. また、利用可能な最も正確なオブジェクト検出モデルであると言っても過言ではありません。 その高い精度と速度のおかげで、オブジェクト検出プロジェクトに安全に選択できます。
レスキー・アグス
私は yolov5 とこの Web helpme を使用して検出車両に関する最初のジャーナルを作成し、それに関する情報を検索します。
AIにとても興味があります。
もしよろしければ、AIについてたくさん質問があります。
ありがとう