スポンサーリンク

PythonでYOLOv3をオリジナル画像で学習させる方法ご紹介。

YOLO
スポンサーリンク

今回の記事はPythonでYOLOv3をオリジナル画像で学習させる方法をご紹介する記事です。初心者にもわかりやすいように画像付きで説明してきますので是非参考にして下さい。

スポンサーリンク

PythonのYOLOv3環境

まずは、Pythonの実行環境を準備します。私は最新のPythonをインストールしました。

Python 3.9.4

私の実行環境はMacですが、Windowsでも動くことを確認しています。

まずは仮想環境を作成します。

#Mac
Python3 -m venv env
source env/source/activate

#Windows
Python -m venv env
cd env/Scripts
activate
cd ../..

次にWindowsの方はバッシュコマンドを使用するためにWindows for gitをインストールし、バッシュを使用できるようにして下さい。

仮想環境に入れれば後はpipで必要なライブラリをインストールします。

!pip install numpy matplotlib terminaltables pillow tqdm torch torchvision torchaudio pytorchyolo

以上でPython環境構築は終了です。また、この環境はAnacondaで行っても問題ないです。私がAnacondaが嫌いなだけです。

では次にgitでライブラリをインストールします。

git clone https://github.com/eriklindernoren/PyTorch-YOLOv3

現在のフォルダ構成は下記のようになっていればOKです。

プロジェクトフォルダ   
  ├── PyTorch-YOLOv3    
  └── env 

これでプロジェクトの環境構築完了です。

YOLOv3の事前学習モデルダウンロード

ここからはwgetコマンドとシェルスクリプトが使える場合はMacの場合と同じように操作を行い、使用できない場合はWindowsの方と同様に操作をして下さい。

PyTorch-YOLOv3/weights/download_weights.sh

PyTorch-YOLOv3フォルダのファイル書き換え

全作業は下記のようになっています。

  • custom.dataにクラス数を記載
  • classes.namesの名前一覧を作成
  • yolov3-custom.cfgのクラス数を作成
  • 訓練用データを配置
  • labelsフォルダにラベルデータを配置

順番に説明していきます。

custom.dataにクラス数を記載

まずはクラス数や訓練画像のフォルダパスなどを記載しているファイルのcustom.dataを編集します。

classes= 1
train=data/custom/train.txt
valid=data/custom/valid.txt
names=data/custom/classes.names

これを下記のように修正します。

# Macの場合
classes= ○ ←識別するクラス数
train=data\custom\train.txt
valid=data\custom\valid.txt
names=data\custom\classes.names

# Windowsの場合
classes= ○
train=フルパス¥PyTorch-YOLOv3¥data¥custom¥train.txt ←Windows用のパスの書き方に変更
valid=フルパス¥PyTorch-YOLOv3¥data¥custom¥valid.txt
names=フルパス¥PyTorch-YOLOv3¥data¥custom¥classes.names

classes.namesの名前一覧を作成

例)person、bicyle、carに分けるときは下記のように「PyTorch-YOLOv3/data/custom/classes.names」ファイルを書き換える。

train
↓
person
bicycle
car

yolov3-custom.cfgのクラス数を作成

既存の「PyTorch-YOLOv3\config\yolov3-custom.cfg」ファイルを一度削除してから下記を実行します。

PyTorch-YOLOv3/config/create_custom_model.sh ◯←クラス数

訓練用データを配置

訓練用のデータはVottなどを使って、アノテーションデータを配置して下さい。YOLO形式のアノテーションデータはVottでは出力できませんが、簡単な変換方法でPascalVOC形式をYOLO形式に変換できるのでその方法で作成可能です。詳しくは下記記事を参考にデータを変換してみてください。

VottでYOLO形式のデータを作成する方法ご紹介。

これで画像などのパスを記載したテキストファイルの「train.txt」「valid.txt」、アノテーションした座法などを記載している「xmlファイル」を変換した「labelファイル」が出力されます。

これらを「PyTorch-YOLOv3/data/custom」に保存していきます。

labelファイル → PyTorch-YOLOv3/data/custom/labelsフォルダ以下
train.txt → PyTorch-YOLOv3/data/custom/train.txtと置き換え
valid.txt → PyTorch-YOLOv3/data/custom/valid.txtと置き換え
画像 → PyTorch-YOLOv3/data/custom/imagesフォルダ以下

これでデータ配置は完了です。

オリジナル画像で学習

学習は下記コマンドで実行可能です。

python PyTorch-YOLOv3/pytorchyolo/train.py \
    -m PyTorch-YOLOv3/config/yolov3-custom.cfg \
    -d PyTorch-YOLOv3/config/custom.data \
    -e 2 \
    --pretrained_weights PyTorch-YOLOv3/weights/darknet53.conv.74 \

# -m yolov3-custom.cfgパス
# -d custom.dataのパス
# -e エポック数
# --pretrained_weights 重さ
# その他引数は「-h」で確認可能(PCスペックによって画像サイズ、バッチサイズを調整)

ファイルが見つからないなどのエラーがある場合は全てフルパスに置き換えて試してください。

学習が始まれば「PyTorch-YOLOv3」と同フォルダに「checkpoints」というフォルダが作成され、その中に「yolov3_ckpt_○.pth」(○には数字が入ります。)というファイルが作成され、これが重みとなります。最も数字が大きいものが学習が最も進んだモデルです。

オリジナル画像で学習したモデルで物体検出

学習した重みを使って画像を物体検出してみます。

今回はPyTorch-YOLOv3と同フォルダにtargetというフォルダを作成して、その中に「target/images」と「target/output」というフォルダを作成しました。

プロジェクトフォルダ
 |--PyTorch-YOLOv3
 |--env
 |--output
 |--target
 |     |--images ←物体検出をかける画像
 |     |--output ←物体検出をおこなった画像が格納されるフォルダ
 |--checkpoints

準備ができれば下記コマンドで物体検出をおこなってみます。

python PyTorch-YOLOv3/pytorchyolo/detect.py \
    -m PyTorch-YOLOv3/config/yolov3-custom.cfg \
    -w checkpoints/yolov3_ckpt_○.pth \
    -i target/images \
    -c PyTorch-YOLOv3/data/custom/classes.names \
    -o target/output \
    --conf_thres 0.85

# -m モデル定義パス
# -w 重さパス(学習モデルの場合は一番数字の大きいものを採用)
# -i 物体検出画像パス
# -c 名前一覧パス
# -o 出力パス
# --conf_thres 0.85 精度が85%より上で検出したもののみを出力します。
# その他引数は「-h」で確認可能(PCスペックによって画像サイズ、バッチサイズを調整)

正常に完了すれば「target/output」に物体検出を行い、四角で検出した物体を囲んだ画像が出力されます。

では今回の記事は以上です。YOLO以外にも「Object Detection API」というtensorflowベースの物体検出をおこなったりもしております。興味あれば是非サイト内見て行って下さい。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

YOLO
スポンサーリンク
スポンサーリンク
ともぶろぐ

コメント

タイトルとURLをコピーしました