このタスクでは、物体検出モデルYOLOv5を活用して、犬の検出を行います。
このコンテンツはVirtual box上のUbuntu OSでの作業を想定しています。まだ環境構築が済んでいない場合はUbuntuの基本設定のコンテンツを参考にセットアップをして下さい。
物体検出とは
物体検出とは、画像や動画の中から物体を検知する技術のことです。
物体検出は、画像や動画の中に特定の物体が確認された場合に位置や種類、個数を特定することができます。
製造業の外観検査、医療や建設業などに利用されることが多い技術で、身近な例では、スマホのカメラ、自動運転における歩行者の検知などにも利用されています。
YOLOv5 とは
YOLO(You Only Look Once)とは処理速度が他のモデルより高速な物体検出アルゴリズムの1つです。
YOLOには様々なバージョンがあり、現在では、YOLOv1〜v7まであります。(2022年10月時点)
本コンテンツで使用するYOLOv5は、処理速度、精度が高くバランスの良いモデルで、Pythonのオープンソース機械学習ライブラリのPyTorchを使用しています。
データセット
1. 画像の取得
Dog_images.zip こちらの100枚の犬の画像をダウンロード後、zipファイルを解凍します。
imagesフォルダとlabelsフォルダを作成し、ダウンロードした画像をimagesフォルダに格納してください。
※今回はkaggleからデータセットをダウンロードしたものを活用しますが、皆さんは検出したいものを決めてネット等から集めたものを使用しても構いません。
*Kaggleとは:企業とデータサイエンティストをつなぐ為のプラットフォームです。企業や大学がデータサイエンスに関する課題を出して、参加者が構築するモデルの精度を競い合うコンペティションが開かれています。
データ取得元:Kaggle Animal Faces
LabelImg インストール
1.インストールの仕方
Ubuntu Linuxの場合
1 2 |
pip3 install labelImg labelImg |
それができない場合は、
1 2 3 4 5 6 |
sudo apt-get install pyqt5-dev-tools git clone https://github.com/heartexlabs/labelImg.git cd labelImg sudo pip3 install -r requirements/requirements-linux-python3.txt make qt5py3 python3 labelImg.py |
その他OSの方はこちらをご覧ください
2.labelImgの使用方法
GIF動画を参考にラベル付けを行ってください。
1. ダウンロードした画像を含むディレクトリを開く
2. 保存先を変更するを選択し、Lablesディレクトリを指定する
3. 指定されたラベル名を使うをチェックし、ラベル名を入力(今回はdog)
4. 表示を選択し、自動で保存するを選択
5. PascalVOCをYOLOに変更
5. 犬を四角で囲う
6. 次の画像へ
※ショートカットキー
1 2 3 |
W: 短形を作成 A: 戻る D: 進む |
ラベル付けを行うと、以下のようにlabelsフォルダに.txtファイルが格納されます
注意
classes.txtには、オブジェクトのクラス番号が記載されています。
検出するオブジェクトは1つだけなので、触れる必要はありません。
ラベル付けが終わったら、classes.txtは削除するか、異なる場所においてください。学習するときにエラーが出る可能性があります。
訓練データと検証データ
ラベル付けが終わったら、以下のようなディレクトリ構造を作成します。
訓練データと検証データを以下のようにランダムに振り分けるプログラムを作成してください。
以下の割合で分割します。
1 |
train : 8 , valid :2 |
例
Image(100枚) : train:80枚 valid:20枚
label(100枚) : train:80枚 valid:20枚
Directory Structure
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
dataset_name/ ├── train │ ├── images │ │ ├── train0.jpg │ │ └── train1.jpg │ └── labels │ ├── train0.txt │ └── train1.txt └── valid ├── images │ ├── valid0.jpg │ └── valid1.jpg └── labels ├── valid0.txt └── valid1.txt |
YOLOv5環境構築
ここからは学習フェーズになります。
開発環境はローカルでも良いのですが、GPUを使いたいのでGoogle Colaboratory を使用することにします。
virtualbox上でdriveとcolabratoryを開く。
1. 画像データをGoogle Driveにアップロード
virtualbox上でドライブを開き、先程アップロードしたデータセットをアップロードする
2. colabratoryのランタイムというタブをクリックします。
3. ランタイムタイプの変更をクリックします。
4. GPUを選択し、保存する
5. ドライブをマウント
まず、セルに以下のコードを入力してください。
これは、Googleドライブにアップロードした画像データを使いたいためGoogleドライブをマントしています。
1 2 3 |
from google.colab import drive drive.mount('/content/drive') %cd "Google ドライブ内のパス" |
6.YOLOv5環境構築
YOLOv5をクローンします。 セルに次のコードを入力して実行します。
1 2 3 |
git clone https://github.com/ultralytics/yolov5.git cd yolov5 pip install -r requirements.txt |
7. 左側にYOLOv5フォルダが現れたら成功です。
8. データセット
下記のコマンドを使用してドライブにアップロードした画像を/content/drive/MyDrive/yolov5下に置に移動させましょう。
1 |
mv "folder path" /content/drive/MyDrive/yolov5 |
そうすると以下の用になります
9. yamlファイル作成
下記のコマンドを使用して/content/drive/MyDrive/yolov5下に data.yaml を作成しましょう
1 |
touch data.yaml |
そして、data.yamlの中身は以下のようにします。
data.yaml
1 2 3 4 5 |
train: /content/drive/MyDrive/yolov5/フォルダ名/train #学習の画像のパス val: /content/drive/MyDrive/yolov5/フォルダ名/valid #検証用画像のパス nc: 1 # クラスの数 names: [ 'dog' ] # クラス名 |
YOLOv5実行
YOLOv5(Training)
以下のコマンドはあくまでサンプルです。今回は、yolov5sという学習済みのモデルを使用します
1 |
python3 train.py --img 640 --batch 16 --epochs 100 --data "yaml file path" --weights yolov5s.pt |
YOLOv5(Inference)
先ほど学習させたモデルを活用して推論を行いましょう。
その前に、推論で行うためのテスト画像を用意しておきましょう。
用意するのが難しい場合は、検証用画像を使用しましょう。
–weight: 先ほど学習させたモデルを指定します。
1 |
python detect.py --source "test image file path" --weights best.pt |
下記のような推論結果が出たら成功です。
チャレンジ問題
1. 複数の物体を検出しましょう
2. 精度(mAP)を向上させましょう
あなたも、Avintonでこのような最先端技術を習得し活用してみませんか?
社員の成長を導きながら、AIやビッグデータなどの最先端技術をプロジェクトに活用していくことが私たちのビジョンです。Avintonの充実した技術研修でスキルアップを図り、あなたのキャリア目標を一緒に達成しませんか?