物体検出アルゴリズム「YOLO」を使ってみよう~事前学習済みモデルの試運転からファインチューニングまで~
「YOLO」って何者???
物体検知用のアルゴリズム、他のアルゴリズムに比べて高速に検知できる
デフォルトでいくつかの物体を検知できる:80種類、人とかバスとか猫とか
追加学習で任意の物体を検知させることも可能
画像のみならず動画にも適用できる
Pythonで使うことができる
環境
Ubuntu 22.4
Python
YOLO v8
/icons/hr.icon
仮想環境を準備する
ライブラリの依存関係を破壊しないために、仮想環境内で実行するのが鉄則
今回はvenvを利用
仮想環境の作成
専用のディレクトリを準備(今回はyolo_test)
以下のコマンドを実行
cd ./yolo_test
python -m venv 仮想環境名 ※仮想環境名は任意(今回はvenv)
仮想環境を有効にする
「yolo_test」ディレクトリで以下のコマンドを実行
source venv/bin/activate
※「venv/bin/activate」の「venv」の箇所は、設定した仮想環境名を入力
仮想環境を無効にする場合は以下のコマンドを実行
deactivate
事前学習済みモデルをダウンロードする
githubのリポジトリをクローンして使用する
以下のコマンドを実行する
git clone https://github.com/ultralytics/ultralytics
(途中、追記予定)
ファインチューニングでオリジナルのモデルを作る
事前学習済みモデルで分類可能なオブジェクト以外のものを検出できるようにする
学習用、検証用の画像をそれぞれディレクトリに保存
アノテーション後は画像とそれに対応するテキストファイルのペアが手元に残る
このペアを、学習用:検証用=7:3くらいの割合になるように分割
下記のようなディレクトリ構成を例にデータを分割
学習用は「train」、検証用は「val」に保存
例えば「images」にテキストファイルを入れてしまうと、動かない(ので、保存先には十分留意する)
code:ディレクトリ構成
ultralytics
|
-----datasets
|
|
| |
| -----train
| | |-----1.jpg
| | |-----2.jpg
| |
| ------val
| |-----101.jpg
| |-----102.jpg
|
-----train
| |-----1.txt
| |-----2.txt
|
-----val
|-----101.txt
|-----102.txt
.yamlファイルを作成
作業ディレクトリ内に作成
ファイル名はなんでもいい
ここには画像が保存されているディレクトリと検出するカテゴリについての情報を記述する
(例)ultralytics/dataset.yaml
code:dataset.yaml
# Path
path: /path/to/your/img # データセットのルートディレクトリのpathを書く
train: images/train # train images (relative to 'path')
val: images/val # val images (relative to 'path')
# Classes
nc: 3 # 検出するクラス数を書く
学習実行用のpythonファイルを作成
学習を実行するためのプログラムを記述
ここには学習時のハイパーパラメータなどを記述する
下記の例は初期設定時の値である
(例)yolo_train.py
code:python
from ultralytics import YOLO
model = YOLO("yolov8l.pt")
model.train(data="dataset.yaml", epochs=100, batch=8, workers=4, degrees=90.0) # .yamlファイルの指定とハイパーパラメータの設定を記述
オリジナルYOLOを使う
学習完了後の重みを使うことで、オリジナルの物体検出が可能となる
pythonで実行する
「save_crop=True」で検出箇所を自動で切り抜くことが可能
(例)yolo_test_original.py
code:python
from ultralytics import YOLO
model = YOLO('./runs/detect/train5/weights/last.pt') # 作成した重みファイルを指定する
model("./predict/0627/test1",save=True, save_crop=True, conf=0.2, iou=0.5)