YOLO/Darknetの学習向け教師データ準備
「教師データの間違いはないように!」
画像検出や画像認識では、教師データが必要となります。対象の難しさにもよりますが、数百・数千枚という画像が必要となります。
本サイトで紹介しているめざましじゃんけん画像検出システムでは、YOLO/Darknetを利用しており、教師データのラベリングに、LabelImgを利用しました。
ラベリングのイメージですが、左の画像において、この対象が「janken_won」ですよ、この対象が「janken_goo」ですよと、実際の画像を用いて、検出させたい対象にレベルをつけて、機械学習時の教師データとして登録します。
一つの画像ファイルに、一つのラベリング情報を記録したテキストファイルを準備します。
以下が、ラベリング情報を記載したテキストファイルとなります。
オブジェクト(クラス)番号 オブジェクトの中心X座標 オブジェクトの中心Y座標 オブジェクトの幅 オブジェクトの高さ
3 0.501563 0.351042 0.365625 0.056250 6 0.571875 0.303125 0.140625 0.031250
クラス番号は、「janken_won」や「janken_goo」などの学習対象の分類番号となります。LabelImgを利用する際は、「classes.txt」というファイルを作成し、学習させたい対象の定義を行います。
LabelImgインストール
インストール方法は、色々な方法があります。
準備したPythonの実行環境にも依存すると思います。
- Anaconda環境への導入
- 通常のWindows環境へ導入
ここでは、通常のWindows環境への導入方法を紹介します。
PythonをWindows環境にインストールします。リンクより必要ファイルをダウンロードし、インストールを実行して下さい。
インストールしたPythonのpip3コマンドを用いて、「PyQt5」および「lxml」をインストールします。
C:\Users\user\AppData\Local\Programs\Python\Python37>pip3 install pyqt5 Collecting pyqt5 Downloading https://files.pythonhosted.org/packages/3b/d3/76670a331935f58f9a2ebd53c6e9b670bbf15c458fa6993500af5d323160/PyQt5-5.13.0-5.13.0-cp35.cp36.cp37.cp38-none-win_amd64.whl (49.7MB) 100% |████████████████████████████████| 49.7MB 128kB/s Collecting PyQt5_sip<13,>=4.19.14 (from pyqt5) Downloading https://files.pythonhosted.org/packages/cf/c8/1e9eda4ba09a84fc528d4c87001de2d7a8cbbe04c2a834af3eb81a0ecd88/PyQt5_sip-4.19.18-cp37-none-win_amd64.whl (51kB) 100% |████████████████████████████████| 61kB 6.8MB/s Installing collected packages: PyQt5-sip, pyqt5 Successfully installed PyQt5-sip-4.19.18 pyqt5-5.13.0 C:\Users\user\AppData\Local\Programs\Python\Python37>pip3 install lxml Collecting lxml Downloading https://files.pythonhosted.org/packages/c6/22/a43126b87020c325fac159bb3b7f4e7ea99e7b2594ce5b8fa23cfa6ee90d/lxml-4.3.4-cp37-cp37m-win_amd64.whl (3.6MB) 100% |████████████████████████████████| 3.6MB 6.9MB/s Installing collected packages: lxml Successfully installed lxml-4.3.4
GitHubよりLabelImgをダウンロードし、https://github.com/tzutalin/labelImg
labelImg-master.zipを解凍したフォルダまたはGitHubをクローンしたフォルダへコマンドラインで移動し、以下のコマンドを実行します。
pyrcc5 -o line/resources.py resources.qrc
インストールは以上となります。
LabelImg起動
以下のコマンドラインより、LabelImgを起動します。
1行目も2行目も起動コマンドとなります。
IMAGE_PATHには、学習対象画像フォルダ、PRE-DEFINED CLASS FILEには、学習させたい対象の分類(クラス)定義ファイル「classes.txt」を指定します。
python labelImg.py
python labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]
めざましじゃんけん画像システムの「classes.txt」は、以下となっております。
上からゼロとなり、クラス0がjanken_active、クラス1がjanken_goo、・・・、クラス6がjanken_drawと全7クラスを画像検出対象としています。
janken_active janken_goo janken_choki janken_pa janken_won janken_lose janken_draw
LabelImgの利用方法は、画像つきで各種サイトで紹介されております。
特に共有しておきたいポイントは、以下です。
- YOLO向けのテキストファイル出力を設定する
- 絶対にラベル指定を間違えない
- 「D」「W」「A」のショートカットキーを利用する
- 基本的に「Auto Save Mode」「Single Class Mode」でラベリングを基本に作業実施
ラベリングが完了すると、用意した画像ファイルと対にラベリング情報の記載されたテキストファイルが作成されます。