リードを付けて犬を散歩させると、あなた、私、そして他の人々が毎日文明的な家になり、文明化されたコミュニティの構築に役立ちます。YOLOv3 に基づいて、公共のシナリオでリードなしで犬を散歩させるための検出および識別システムを開発および構築します。

犬の散歩は毎日チェックする必要があります。犬は本来活発で活発な生き物です。一日散歩をしないと不快に感じます。犬の散歩で最も重要なことはリードを保つことです。リードをしっかりと握ることは、犬の飼い主にとって必須のコースです。犬の散歩中、飼い主の手に付いているリードは、犬の命と健康にとってより重要な障壁となります。日常の地域生活の中で、外出時にリードを付けずに犬を散歩させる習慣や、文明や道徳観を持たない犬の散歩に遭遇することは誰でも多かれ少なかれあると思います。 「犬はおとなしいので噛まない」といういわゆるレトリックは、甘やかしてリードを持たない理由にはなりません。

このような現象を技術的な観点から考慮したり、介入したりすることはできるのでしょうか? 理論的には実現可能だと思います。この記事の主な目的は、リードなしの犬の散歩という文脈において、技術的手段に基づいてこのタイプの行動介入を分析する実現可能性を探ることです。ここでは主に YOLOv3 に基づいて対応する目標を開発および構築します検出モデル、私たちの設計の当初の目的は、将来的には、そのような技術的手段を道端、川、コミュニティ、戸口などにある利用可能なビデオカメラと組み合わせて、犬の散歩のリアルタイムのインテリジェントな計算と分析を実行できるようにすることを考慮することです。対象物が映像に映る 問題が見つかった場合、音声ブロードキャストで問題を通知することができる それでも修正されない場合は、フォローアップ処理のために現在の期間のビデオを関連部門に送信することができる もちろん、これらはより偏ったものですビジネス アプリケーション レベルであり、開発者によって決定されるものではありませんが、ここで重要なことは、これは私たちが見たり考えたりしたことに基づいて開発および構築される実用的な性質のプロジェクトであるということです。

対応する開発実践については、前の記事ですでに実行していますので、興味があれば、ご自身で読んでください。

「リードをつけて犬を散歩させることは、あなたと私にとって、文明的なコミュニティを構築するための文明的な家です。私たちは、DETR (DEtection TRansformer) に基づいて、公共の場でリードを付けずに犬を散歩させるための検出および識別システムを開発および構築しています。」

まずエフェクトの例を見てみましょう。

ここには有効なデータ セットがありません。対応するシナリオでデータ セットをインターネットからクロールして、データに手動でラベルを付けることを選択します。ここでは、犬と犬のリードという 2 つの主要なラベル付けオブジェクトについて話し合い、合意します。川での釣りが禁止されているシーンでも、データのラベル付け戦略を活用します。

次にデータセットを見てみましょう。

この記事では、モデルの開発に、よりクラシックで古い YOLOv3 を選択します。YOLOv3 (You Only Look Once v3) は、ターゲット検出アルゴリズム モデルです。YOLO シリーズ アルゴリズムの 3 番目のバージョンです。このアルゴリズムは、ターゲット検出タスクを単一のニューラル ネットワークの回帰問題に変換することにより、リアルタイムのターゲット検出の機能を実現します。

YOLOv3 の主な利点は次のとおりです。

リアルタイム パフォーマンス: YOLOv3 は、ターゲット検出タスクをエンドツーエンドの回帰問題に変換する単一段階の検出方法を採用しているため、検出速度が速くなります。従来の 2 段階の手法 (Faster R-CNN など) と比較して、YOLOv3 は高い精度を維持しながらリアルタイム検出を実現できます。

マルチスケール特徴融合: YOLOv3 では、さまざまなレベルの特徴マップ上で検出することで、さまざまなスケールのターゲットを効果的に検出できるマルチスケール特徴融合メカニズムが導入されています。これにより、YOLOv3 は大規模な変更が含まれるシーンを処理する際に、より優れたパフォーマンスを発揮できるようになります。

グローバル コンテキスト情報: YOLOv3 は、ネットワーク構造にグローバル コンテキスト情報を導入し、より大きな受容野を持つコンボリューション カーネルを使用することで、画像全体の意味情報をよりよく理解し、モデルのターゲット認識能力を向上させることができます。

シンプルなネットワーク構造: YOLOv3 のネットワーク構造は比較的単純で、畳み込み層が 75 層とプーリング層が 5 層しかないため、モデルのトレーニングとデプロイが容易になり、モデル サイズが小さくなります。

YOLOv3 にはいくつかの欠点もあります。

小さなターゲットの検出能力が低い: YOLOv3 はより大きな受容野とダウンサンプリング操作を使用するため、小さなターゲットの検出能力は比較的弱くなります。シーン内に多数の小さなターゲットがある場合、YOLOv3 は検出を見逃したり、誤検出したりする可能性があります。

位置決め誤差が大きくなる: YOLOv3 はターゲット検出タスクを回帰問題に変換するため、特徴マップが粗くなり、受容野が大きくなると位置決め誤差が大きくなる可能性があります。これは、より高精度のターゲット位置決めが必要な場合、YOLOv3 が特定の制限を受ける可能性があることを意味します。

YOLOv3 は YOLO シリーズのマイルストーンモデルであり、継続的な進化と発展により、性能面で YOLOv5 などのモデルと比較することは困難ではありますが、大きな貢献をしてきたことは否定できません。

この記事では、次のように yolov3-tiny モデルを選択します。

# parameters
nc: 2  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple
 
# anchors
anchors:
  - [10,14, 23,27, 37,58]  # P4/16
  - [81,82, 135,169, 344,319]  # P5/32
 
# YOLOv3-tiny backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [16, 3, 1]],  # 0
   [-1, 1, nn.MaxPool2d, [2, 2, 0]],  # 1-P1/2
   [-1, 1, Conv, [32, 3, 1]],
   [-1, 1, nn.MaxPool2d, [2, 2, 0]],  # 3-P2/4
   [-1, 1, Conv, [64, 3, 1]],
   [-1, 1, nn.MaxPool2d, [2, 2, 0]],  # 5-P3/8
   [-1, 1, Conv, [128, 3, 1]],
   [-1, 1, nn.MaxPool2d, [2, 2, 0]],  # 7-P4/16
   [-1, 1, Conv, [256, 3, 1]],
   [-1, 1, nn.MaxPool2d, [2, 2, 0]],  # 9-P5/32
   [-1, 1, Conv, [512, 3, 1]],
   [-1, 1, nn.ZeroPad2d, [0, 1, 0, 1]],  # 11
   [-1, 1, nn.MaxPool2d, [2, 1, 0]],  # 12
  ]
 
# YOLOv3-tiny head
head:
  [[-1, 1, Conv, [1024, 3, 1]],
   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, Conv, [512, 3, 1]],  # 15 (P5/32-large)
 
   [-2, 1, Conv, [128, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 8], 1, Concat, [1]],  # cat backbone P4
   [-1, 1, Conv, [256, 3, 1]],  # 19 (P4/16-medium)
 
   [[19, 15], 1, Detect, [nc, anchors]],  # Detect(P4, P5)
  ]

トレーニング構成データ ファイルは次のようになります。

# path
train: ./dataset/images/train/
val: ./dataset/images/test/


# number of classes
nc: 2

 
# class names
names: ['dog', 'rope']

デフォルトの 100 エポックの反復計算では、ターミナル ログ出力は次のようになります。

トレーニングが完了するのを待ってから、全体的な結果の詳細を確認してください。

【データ分布の可視化】

[PR Curve]
Precision-Recall Curve (Precision-Recall Curve) は、二値分類モデルのパフォーマンスを評価するために使用される視覚化ツールです。さまざまなしきい値での適合率と再現率の関係をプロットすることで、さまざまなしきい値におけるモデルのパフォーマンスを理解するのに役立ちます。
適合率とは、正の例として予測されたサンプルの数に対する、正の例として正しく予測されたサンプルの数の比率を指します。再現率とは、実際に正の例であるサンプルの数に対する、正の例として正しく予測されたサンプルの数の比率を指します。
適合率-再現率曲線をプロットする手順は次のとおりです。
さまざまなしきい値を使用して、予測された確率をバイナリ クラス ラベルに変換します。通常、予測確率がしきい値より大きい場合、サンプルは正の例として分類され、そうでない場合は負の例として分類されます。
しきい値ごとに、対応する適合率と再現率が計算されます。
同じグラフ上に各しきい値での適合率と再現率をプロットして、適合率と再現率の曲線を作成します。
曲線の形状と傾向に基づいて、必要なパフォーマンス要件を達成するために適切なしきい値を選択できます。
適合率-再現率曲線は、モデルのパフォーマンスのより包括的な分析を提供し、不均衡なデータセットを扱い、ポジティブな予測に重点を置くシナリオに特に適しています。曲線下面積 (AUC) は、モデルのパフォーマンスを評価する指標として使用できます。AUC 値が高いほど、モデルのパフォーマンスが向上します。
適合率と再現率の曲線を観察することで、適合率と再現率のバランスポイントを検討するためのニーズに応じて適切なしきい値を選択できます。特定のビジネス ニーズとコストのトレードオフに応じて、曲線上で適切な動作点またはしきい値を選択できます。

【トレーニングの見える化】

【バッチ例】

興味があれば、ぜひ自分で試してみてください!

おすすめ

転載: blog.csdn.net/Together_CZ/article/details/135336356