Skip to main content

画像を収集、ラベル付けしてPyTorchでYOLOv5オブジェクト検出モデルをトレーニングする

このチュートリアルでは、カスタムYOLOv5モデルを段階的にトレーニングするためのデータセットの準備方法について説明します。
Created on April 19|Last edited on April 20
このレポートは、Dave Daviesによる「Collect and Label Images to Train a YOLOv5 Object Detection Model in PyTorch」の翻訳です。



YOLOv5チュートリアルシリーズのパート2へようこそ!
このシリーズのパート1をまだチェックしていない場合は、最初にパート1を読むことをお勧めします。パート1では、 WindowsおよびGoogleColabで実際のオブジェクトを検出するためのYOLOv5をインストールする方法について説明しており、私たちはこのレポートで読者がこの内容を完了したと仮定しています。
環境を設定したら、データセットの準備を行うことができます。

目次



はじめに

私たちは、日々機械やロボットが自ら学び、人間の介入や明示的なプログラミングを必要とせずに改善を続けているのを目の当たりにしています。
あなたは今まで、次のような疑問を持ちませんでしたか:
✓ 自動運転車はどのようにして外界を視認し、安全に運転することができるのか?
✓ Facebookはどのようにして画像であなたを認識し、自動的にタグ付けすることができるのか?
✓ アルゴリズムはどのようにして医療画像から病気を診断できるのか?
✓ 作物はどのように分析され、熟れ方の度合いに基づいてさまざまなカテゴリに分類されるのか?
コンピュータビジョン分野は急速に発展しており、場合によっては多くの視覚的課題を解決する上で人間を上回ることさえあります。コンピュータビジョン分野は急速に発展しており、場合によっては多くの視覚的課題を解決する上で人間を上回ることさえあります。
コンピュータビジョンは多くのタスクをカバーしていますが、ここではより人気のある3つに焦点を当てていきます。
  1. 画像分類
  2. 画像セグメンテーション
分類、ローカリゼーション、検出、セグメンテーションの違い。
前のチュートリアルと同様に、今回も主にオブジェクトの検出に焦点を当てていきます。

オブジェクト検出とは?

オブジェクト検出とは、分類とローカリゼーションを組み合わせて、画像やビデオに存在するオブジェクトの場所を決定します。
これは教師あり機械学習モデルの一種であり、アルゴリズムに画像とそれぞれのラベルを含む訓練されたデータセットを提供する必要があります。 単純に見えるかもしれませんが、ディープラーニングモデルは一般的にはトレーニングのために大量のデータを必要とします。つまり、モデルはラベル付けされていない画像に何が含まれているかを判別する前に、多くの例を必要とします。
しかし、人間と同様、モデルに与える情報は、量と同じくらい質が重要です。 データの質が高いほど、結果は良いものになります。
グラフは、データ量の増加がパフォーマンスをどのように向上させるかを示しています。

トレーニング画像の収集

このチュートリアルでは、カスタムモデルをトレーニングするためのデータ収集のさまざまなアプローチに焦点を当てていきます。
以下に可能なオプションの一部を紹介します:

パブリックデータセット


無料で簡単にデータセットにアクセスできる場所をいくつか紹介します。
  1. Google Dataset Search: Googleはこの検索エンジンを立ち上げ、研究者が簡単かつ迅速にデータセットにアクセスできるようにしました。2500万以上のデータセットが含まれています。
  2. Kaggle Datasets: Kaggleは、データサイエンスコミュニティがあらゆる種類の機械学習データセットにアクセスするのをサポートしています。 このタスクのための最良のリソースの1つとなります。
  3. UCI Machine Learning Repository: 1987年に作成されたこのUCIページは、世界最古の無料データセットリポジトリの1つです。
  4. Visual Data: 名前の通り、この検索エンジンにはコンピュータビジョン専用のデータセットが含まれています。 分類、画像セグメンテーション、画像処理に関連するデータセットをお探しの場合に最適なソースになります。
  5. Papers With Code: コードとデータセットを含む、無料およびオープンソースの研究プロジェクトのためのコミュニティです。

データ拡張

画像が限られている場合は、データ拡張技術を活用することができます。
このプロセスでは、既存のデータセットを新たに取得した外部データで拡張します。たとえば、トリミング、反転、回転、コントラストと明るさの変更などです。
この手法を使用すると、ほとんどのオブジェクト検出モデルの観点から、新しい画像のように機能するため、既存の小さなトレーニングデータのサイズを拡張できます。

無料のオンライン画像

聞いたことがあるかもしれませんが、インターネットにはたくさんの画像があります。リソースの豊富なユーザーは、簡単なスクレーパーを作成して、目的のデータセットの画像を収集できます。

写真を撮る

別の選択肢は何でしょうか? カメラを手に取り、写真を撮りましょう。これをスケールアウトするのは難しいですが、特定のタスクに必要な正確な画像をキャプチャできます。

ラベリングツールを使用したデータのラベリング

現在、オブジェクト検出に利用できる注釈付きデータは限られています。 そのことは障壁になるかもしれません。
上記のリソースから注釈付きデータセットを見つけることができない場合は、自分で作成する必要があります。
GitHubには、無料で画像に注釈を付けるために使用できる多くのツールがあります。
より人気のあるものには以下のものが挙げられます:
有料ツール:
私は、OpenCVを搭載したOpenLabelingのオープンソースレポジトリを使用していきます。 ただし、データにラベル付けする前に、異なる境界ボックス形式があることを理解する必要があります。
次のような形式があります:
各フォーマットは、境界ボックス座標の特定の表現を使用します。 YOLOv5と他のYOLOネットワークは同じ名前の2つのファイルを使用しますが、ファイルの拡張子は異なります。
1つのファイルはjpeg画像ファイルで、もう1つは.txtテキストファイルで、画像内のラベルに関する情報が格納されています。
行数は、画像に存在するオブジェクトの数を示します。 各行には5つのパラメータがあります:
  • オブジェクトクラスのインデックス
  • (x, y) 境界ボックスの中心を表す座標(xとyは各パラメータ)
  • 境界ボックスの幅
  • 境界ボックスの高さ。
座標と境界ボックスの寸法は、画像寸法のパーセンテージとして0から1の間で正規化されます。
OpenLabelingツールを使用して画像にラベルを付けます。

GitHubからラベリングレポジトリを取得する

First you need to download and unzip the labeling repo from GitHub.
こちらのリンクからダウンロードできます https://github.com/ivangrov/ModifiedOpenLabelling

ダウンロードが完了したら、フォルダを抽出します。

画像フォルダにラベルを付ける必要があります。

前述したように、YOLOフォーマットの各画像のラベルは、同じ名前で作成されますが、bbox_txtフォルダには.txt拡張子が付きます。

変更されたOpen Labelingツールを実行するには、requirements.txtファイルに必要なライブラリがインストールされていることを確認してください。
これを行うには、フォルダの場所を開き、アドレスバーにcmd <enter>を入力して、次のように入力してください:
pip install -r requirements.txt

ツールを起動するには、run.pyファイルを実行します。次のように入力してください:
python run.py

これにより、以下のようになるはずです:

上部のスライドウィンドウバーを使用して画像を切り替えます。

これらのショートカットキーを使用してナビゲートできます。

Class.txtファイルにクラス数が指定されています。 私たちの場合、closed door、opened door、bus、numberの4つのクラスがあります。

画像に描画するすべての境界ボックスが自動的に.txtファイルに追加されます


データをトレーニングと検証に分割する:

ラベル付けが完了すると、データをトレーニングセットと検証セットに分割します。
分割の比率はtrain_test_split.pyファイルに記載されており、特定のニーズに応じて変更できます。
コマンドプロンプトに次のように入力して、train_test_split.pyを実行してください:
python train_test_split.py
これにより、custom_datasetディレクトリが作成され、trainフォルダとvalフォルダにデータが分割されます。

次のように表示されます:

カスタムデータセットフォルダをYolov5フォルダにコピーします(チュートリアル1で作成済み)。


データ用のYAMLファイルの作成:

YAMLファイルを作成する前に、次のような質問に答えることから始めます:

YAMLファイルとは?

YAMLファイルは、YAML( YAML Ain't A Markup Language)で書かれたドキュメントです。 これらは通常、構成ファイルに使用されます。

YAMLファイルの作成

yolov5-masterのデータフォルダに移動し、custom_data.yamlという名前の新しいファイルを作成します。

最後にcustom_data.yamlを編集します。
trainとval pathsを更新します。
train: custom_dataset/train/
val: custom_dataset/val/

# number of classes
nc: 4

# class names
names: ['closed_door', 'opened_door', 'bus', 'number']
これにより、以下のようになるはずです:

その後、忘れずに保存するようにしてください。

W&Bアーティファクトを使用してデータセットをアップロード

まだ作成していない場合は、数分の時間を割いて無料のW&Bアカウントを作成する必要があります。
その後、すばやくW&Bプロジェクトを作成することができます:

以下を使用してW&BをYOLOにインストールします:
pip install wandb

次に、次のコマンドを使用してW&Bにログインします:
wandb login
注意:次のようなエラーが発生した場合: 'wandb' is not recognized as an internal or external command, operable program or batch file. 'wandb'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。 PythonのインストールパスにScriptsディレクトリが追加されていない可能性があります。 こちらのパート1で、これを行う方法について説明しました。 回避策は簡単で、次のように入力するだけです: python -m wandb login
それでは、データセットを記録しましょう。 次のように入力してください:
python utils/loggers/wandb/log_dataset.py --project YOLO --data data/custom_dataset.yaml
プロジェクト名を必ず独自の名前に変更してください。
その結果…

これで、あなたのW&Bアーティファクトで安全・健全なアーティファクトを見つけることができます。
それらすべてを簡単に見つける1つの方法は、val.tableにあります。

同僚と共有したい方に便利なヒント:この表とその他の多くの機能をインタラクティブにレポートに埋め込むことができます。

id
train_image
Classes
name
1
2
3
投稿やビデオを通じて、より詳しく学ぶ方もいらっしゃいます。 フォローするのに問題がある場合、またはご質問がある場合は、以下のコメントでお知らせください。この素晴らしいビデオはW&BのIvan Goncharovによるものです。

ウォークスルー動画


Iterate on AI agents and models faster. Try Weights & Biases today.
File<(table)>