概要
物体検出はコンピューター ビジョンの大きな分野であり、コンピューター ビジョンの「実際の」アプリケーションの中でも重要なアプリケーションの XNUMX つです。
オブジェクト検出は、画像分類ほど標準化されていません。これは主に、新しい開発のほとんどが、大規模なライブラリやフレームワークではなく、通常、個々の研究者、保守担当者、および開発者によって行われるためです。 必要なユーティリティ スクリプトを TensorFlow や PyTorch などのフレームワークにパッケージ化し、これまでの開発を導いた API ガイドラインを維持することは困難です。
これにより、オブジェクト検出がやや複雑になり、通常はより冗長になり (常にではありません)、画像分類よりも親しみにくくなります。
大衆にとって幸いなことに、Ultralytics は、他の研究開発チームによって YOLOv5 などの新しいバージョンに拡張された YOLOv7 を中心に、シンプルで非常に強力で美しいオブジェクト検出 API を開発しました。
この短いガイドでは、最先端の YOLOv7 を使用して、Python でポーズ推定 (キーポイント検出) を実行します。
キーポイントは、顔の一部、体の四肢など、さまざまなポイントにすることができます。ポーズ推定は、ポイントが人体の一部であるキーポイント検出の特殊なケースであり、高価な位置追跡ハードウェアの代わりに使用できます。無線ロボット制御を可能にし、AR と VR を通じて人間の自己表現の新時代を後押しします。
YOLOと姿勢推定
YOLO (一度しか見ない) は方法論であり、オブジェクト検出用に構築されたモデルのファミリーでもあります。 2015 年の開始以来、YOLOv1、YOLOv2 (YOLO9000)、および YOLOv3 は同じ作成者によって提案されており、ディープ ラーニング コミュニティはその後もオープンソース化の進歩を続けてきました。
Ultralytics の YOLOv5 は PyTorch での YOLO の最初の大規模な実装であり、これによりこれまで以上にアクセスしやすくなりましたが、YOLOv5 がそのような足場を獲得した主な理由は、その周りに構築された美しくシンプルで強力な API でもあります。 このプロジェクトは、不要な詳細を抽象化しながら、カスタマイズ可能性、実質的にすべての使用可能なエクスポート形式を可能にし、プロジェクト全体を効率的かつ可能な限り最適にする驚くべきプラクティスを採用しています.
YOLOv5 は依然として、オブジェクト検出モデルを構築するための主要なプロジェクトであり、YOLO メソッドを発展させることを目的とする多くのリポジトリは、YOLOv5 をベースラインとして開始し、同様の API を提供します (または単にプロジェクトをフォークしてその上に構築します)。 そのような場合です YOLOR (You Only Learned One Representation) YOLO方法論の最新の進歩であるYOLOR(同じ著者)の上に構築されたYOLOv7。
YOLOv7 は単なるオブジェクト検出アーキテクチャではありません。以前の YOLO モデルでは標準ではなかったバウンディング ボックス回帰だけでなく、キーポイント (スケルトン) を出力し、インスタンス セグメンテーションを実行できる新しいモデル ヘッドを提供します。 これは驚くべきことではありません。多くのオブジェクト検出アーキテクチャは、一般的なアーキテクチャが共有されているため、インスタンスのセグメンテーションやキーポイント検出タスクにも以前から転用されており、タスクによって出力が異なるからです。 驚くべきことではありませんが、インスタンスのセグメンテーションとキーポイント検出のサポートは、YOLO ベースのモデルの新しい標準になる可能性が高く、数年前に他のすべての XNUMX 段階検出器を実質的に凌駕し始めました.
これにより、XNUMX 段階検出器よりも単純なアーキテクチャで、インスタンスのセグメンテーションとキーポイント検出がこれまで以上に高速に実行されます。
モデル自体は、アーキテクチャの変更と、「景品の袋」と呼ばれるトレーニングの側面の最適化を通じて作成されました。これにより、推論コストを増やすことなく精度が向上しました。
YOLOv7 のインストール
先に進み、GitHub からプロジェクトをインストールしましょう。
! git clone https://github.com/WongKinYiu/yolov7.git
これにより、 yolov7
現在の作業ディレクトリの下のディレクトリ。基本的なプロジェクト ファイルを見つけることができます。
%cd yolov7
!ls
/Users/macbookpro/jup/yolov7
LICENSE.md detect.py models tools
README.md export.py paper train.py
cfg figure requirements.txt train_aux.py
data hubconf.py scripts utils
deploy inference test.py
注: Google Colab ノートブックは、呼び出した後でも、次のセルのメイン作業ディレクトリにリセットされます %cd dirname
であるため、操作を実行する各セルで呼び出し続ける必要があります。ローカルの Jupyter Notebook は変更を記憶しているため、コマンドを呼び出し続ける必要はありません。
特定の重みのセットでコードを実行すると、それらはダウンロードされ、このディレクトリに保存されます。 ポーズ推定を実行するには、そのタスクの事前トレーニング済み YOLOv7 モデルの重みをダウンロードする必要があります。これは、 /releases/download/
GitHub のタブ:
! curl -L https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-w6-pose.pt -o yolov7-w6-pose.pt
%cd ..
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 153M 100 153M 0 0 3742k 0 0:00:42 0:00:42 --:--:-- 4573k
/Users/macbookpro/jup
ダウンロードしました yolov7-w6-pose.pt
weights ファイルを使用して、ポーズ推定用のトレーニング済みモデルを読み込んで再構築できます。
YOLOv7 姿勢推定モデルの読み込み
ポーズ推定を実行するために必要なライブラリをインポートしましょう。
import torch
from torchvision import transforms
from utils.datasets import letterbox
from utils.general import non_max_suppression_kpt
from utils.plots import output_to_keypoint, plot_skeleton_kpts
import matplotlib.pyplot as plt
import cv2
import numpy as np
torch
& torchvision
簡単です – YOLOv7 は PyTorch で実装されています。 の utils.datasets
, utils.general
& utils.plots
モジュールはYOLOv7プロジェクトから来ており、モデルが推論を実行するための入力の前処理と準備に役立つメソッドを提供します。 それらの中には letterbox()
画像をパディングするには、 non_max_supression_keypoint()
モデルの初期出力で非最大抑制アルゴリズムを実行し、解釈用のクリーンな出力を生成するだけでなく、 output_to_keypoint()
& plot_skeleton_kpts()
キーポイントが予測されたら、実際に特定の画像にキーポイントを追加する方法。
ウェイトファイルからモデルをロードできます torch.load()
. GPU が利用可能かどうかを確認する関数を作成し、モデルをロードして推論モードにし、利用可能な場合は GPU に移動します。
def load_model():
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model = torch.load('yolov7/yolov7-w6-pose.pt', map_location=device)['model']
model.float().eval()
if torch.cuda.is_available():
model.half().to(device)
return model
model = load_model()
ベストプラクティス、業界で認められた標準、および含まれているチートシートを含む、Gitを学習するための実践的で実用的なガイドを確認してください。 グーグルGitコマンドを停止し、実際に 学ぶ それ!
モデルをロードしたら、 run_inference()
システム上のファイルを指す文字列を受け入れるメソッド。 このメソッドは、OpenCV を使用してイメージを読み取ります (cv2
)、パディング letterbox()
、それに変換を適用し、それをバッチに変換します (モデルはトレーニングされており、通常どおりバッチを想定しています)。
def run_inference(url):
image = cv2.imread(url)
image = letterbox(image, 960, stride=64, auto=True)[0]
image = transforms.ToTensor()(image)
image = image.unsqueeze(0)
output, _ = model(image)
return output, image
ここでは、変換された画像 (元の画像を抽出してその上にプロットするため) とモデルの出力を返しました。 これらの出力には 45900 個のキーポイント予測が含まれており、そのほとんどが重複しています。 オブジェクト検出予測 (多くのバウンディング ボックスが予測され、ある程度の信頼度と IoU しきい値が与えられると「折りたたまれます」) と同様に、これらの生の予測に Non-Max Suppression を適用する必要があります。 抑制後、元の画像に各キーポイントをプロットして表示できます。
def visualize_output(output, image):
output = non_max_suppression_kpt(output,
0.25,
0.65,
nc=model.yaml['nc'],
nkpt=model.yaml['nkpt'],
kpt_label=True)
with torch.no_grad():
output = output_to_keypoint(output)
nimg = image[0].permute(1, 2, 0) * 255
nimg = nimg.cpu().numpy().astype(np.uint8)
nimg = cv2.cvtColor(nimg, cv2.COLOR_RGB2BGR)
for idx in range(output.shape[0]):
plot_skeleton_kpts(nimg, output[idx, 7:].T, 3)
plt.figure(figsize=(12, 12))
plt.axis('off')
plt.imshow(nimg)
plt.show()
ここで、次のような入力画像について karate.jpg
メインの作業ディレクトリで、推論を実行し、非最大抑制を実行して、結果を次のようにプロットできます。
output, image = run_inference('./karate.jpg')
visualize_output(output, image)
この結果:
これは推測するのがかなり難しいイメージです! 右側の開業医の右腕の大部分が隠れています。モデルは、肘が曲がっていて腕の一部が前にあることを見逃して、体の右側に隠れていると推測したことがわかります。 . 左側の開業医の方がはるかにはっきりと見えており、足が隠れていても正しく推測されています。
実際のところ、後ろに座っている人、 カメラにはほとんど見えない 座っているときの腰の位置に基づいて、ポーズを正しく推定しているように見えます。 ネットワークに代わって素晴らしい仕事をしました!
まとめ
このガイドでは、YOLOR の上に構築された YOLO ファミリーの最新の進歩である YOLOv7 について簡単に説明し、ほとんどの YOLO ベースのモデルの標準的なオブジェクト検出機能を超えるインスタンス セグメンテーションとキーポイント検出機能をさらに提供します。 .
次に、リリースされたウェイト ファイルをダウンロードし、それらをロードしてモデルを構築し、人間のポーズ推定推論を実行して、印象的な結果を得る方法を調べました。
さらに先へ - コンピュータ ビジョンのための実用的な深層学習
あなたの好奇心旺盛な性質は、さらに先へ進みたいと思わせますか? 私たちは私たちをチェックアウトすることをお勧めします コース: 「Pythonによるコンピュータビジョンのための実践的な深層学習」.
別のコンピューター ビジョン コースですか?
MNIST 数字や MNIST ファッションの分類は行いません。 彼らはずっと前に彼らの役割を果たしました。 高度なブラックボックス アーキテクチャにパフォーマンスの負担を負わせる前に、あまりにも多くの学習リソースが基本的なデータセットと基本的なアーキテクチャに焦点を合わせています。
私たちが注目したいのは 謎解き, 実用性, 理解する, 直感 & 実際のプロジェクト. 学びたい の あなたは違いを生むことができますか? 私たちの脳が画像を処理する方法から、乳がんの研究レベルのディープ ラーニング分類器の作成、「幻覚」を起こすディープ ラーニング ネットワークまで、実際の作業を通じて原理と理論を教え、コンピュータビジョンを解決するためにディープラーニングを適用する専門家になるためのノウハウとツール。
内部には何がありますか?
- ビジョンの第一原理と、コンピューターに「見る」ことを教える方法
- コンピューター ビジョンのさまざまなタスクとアプリケーション
- あなたの仕事を楽にする貿易ツール
- コンピュータ ビジョンのためのデータセットの検索、作成、および利用
- 畳み込みニューラル ネットワークの理論と応用
- データセット内のドメイン シフト、共起、およびその他のバイアスの処理
- 転移学習と、他人のトレーニング時間と計算リソースを自分の利益のために利用する
- 最先端の乳がん分類器の構築とトレーニング
- 主流のアイデアに健全な懐疑心を適用し、広く採用されている手法の意味を理解する方法
- t-SNE と PCA を使用した ConvNet の「概念空間」の可視化
- 企業がコンピューター ビジョン技術を使用してより良い結果を達成する方法のケース スタディ
- 適切なモデル評価、潜在空間の可視化、モデルの注意の特定
- ドメイン調査の実施、独自のデータセットの処理、モデル テストの確立
- 最先端のアーキテクチャ、アイデアの進展、それらの独自性と実装方法
- KerasCV – 最先端のパイプラインとモデルを作成するための WIP ライブラリ
- 論文を解析して読み、自分で実装する方法
- 用途に応じた機種選定
- エンドツーエンドの機械学習パイプラインの作成
- Faster R-CNN、RetinaNet、SSD、YOLO を使用したオブジェクト検出のランドスケープと直感
- インスタンスとセマンティック セグメンテーション
- YOLOv5によるリアルタイム物体認識
- YOLOv5 オブジェクト検出器のトレーニング
- KerasNLP (業界で強力な WIP ライブラリ) を使用したトランスフォーマーの操作
- トランスフォーマーを ConvNets と統合して画像のキャプションを生成する
- DeepDream
- コンピューター ビジョンのためのディープ ラーニング モデルの最適化