Magicode logo
Magicode
0

AIの画像認識で自作データを作ってみよう~yolov5学習編~

6 min read
  • 前回までのあらすじ
    • Pythoのインストール
    • yolov5のgit clone
    • 推論の実行

前回の記事はこちら

YOLOv5で学習

1.labelimgの用意

学習のためのアノテーションツールをダウンロード

labelimgを使うことにします

labelImgを使用するに必要なライブラリーをインストール

labelImgに移動し、libsフォルダーの中にresources.pyを作成

pyrcc5にはPyQt5が必要となります

アノテーション用の名前編集
場所はdataの中にあります

predefined_classes.txt中身


dog
person
cat
tv
car
meatballs
marinara sauce
tomato soup
chicken noodle soup
french onion soup
chicken breast
ribs
pulled pork
hamburger
cavity


中身が上記のようになっているので、アノテーションしたい名前に変更

2.labelimgの使い方

下記の部分をYOLOに変更

VOCYOLO

ファイルを開くから画像を選択したら 右クリックから短形を作成を選択

アノテーションしたい部分(この場合は車)を囲んで

label(predefined_classesの中身)を選んだら、保存をクリック
新規の場合は保存先を選択して、保存完了

便利な設定&ショートカット

  • 大量の画像を処理したい場合

ディレクトリを開くから、アノテーションしたい画像が入ったフォルダーを選択

ついでに表示(V)から自動保存を選択しておくと、大量の画像をアノテーションする際に使いやすい
(していないと、毎回保存しますか? と聞かれる)

  • ショートカット一覧
    • dで次に進む
    • aで前に戻る
    • wで短形を作成する
    • Ctrl + dで短形の複製
    • Deleteで短形の削除

これらは非常によく使う

参考サイト

labelimgのインストール方法と使い方

https://laid-back-scientist.com/labelimg

ちなみに、アノテーションのコツの一つとして、テンプレートマッチングを利用して、アノテーションファイルを作成するというものがあります


アノテーションしたい画像をimages アノテーションしたい部分をtemplatesに入れて、うまく行けば アノテーションされたimage_sozai.txtが生成されます

それをlabelImgで確認すると……

エラーが起きます!

そのため、labelImgを起動してアノテーションを確認する前に、class.txtを作成しておいてください
中身はアノテーションの名前(なければpredefined_classes.txtと同じのでも入れておけばいいかと)

PS.目的に応じて変数str_posの0は任意の値に変更していただくよう、よろしくお願いします
大量にある場合は適当にfor文を駆使して編集してください

3.学習の準備

学習に必要なファイルはこのようになります

data.yamlの中身


train : train/images # 学習画像パス
val: valid/images # 検証用動画パス

nc: 2 # クラス数
names: ["dummy_1" , "dummy_2"] # クラス名


data(名前は何でもいい).yamlファイルを作成して、パスと学習させたいクラスを記載
train(学習)フォルダーとvalid(検証)フォルダーを用意
8:2の割合で画像とアノテーションしたテキストファイルをimagesフォルダーとlabelsフォルダーに分けて入れてください

Linuxの場合
python3で記述

  • 各項目
    • --cfg
    • --weights
    • --batch-size
    • --epochs

について

--cfg models/hub/yolov5n6.yaml
cfgは使いたいmodelの性能から選んで記載
性能表は下記参照

ちなみにyolov5sはyolov3の演算量が1/3で同等の性能だとか
基本的に我慢できる時間に応じて選べばいいかと
性能順にx>l>m>s>n
かかる時間はこの逆

--epochs 300
default(未入力)でも300に設定されてます
選ぶcfg次第では300もいかずに途中で終わります

--batch-size 8
defaultでは16
class数に応じて選べばいいとかどうとか――基本適当に書いてます

学習が進むと新たにtrainファイルができます

best.pt #一番結果の良かった重みファイル
last.pt #一番最後の重みファイル

ちなみに、途中で中断した場合
--weightsの場所にlast.ptを入れてやればおk

これで、途中から始められます

そして……最後に

運用するにあたってyolov5のdetect.pyを使いやすく編集しよう!
って内容を考えていましたが、あまりにも記事が長くなりすぎるので後回しです

新たに書きますので、そのときはぜひ覗いてください
とりあえず、これで学習ができれば、前回の記事と合わせて推論が出来るかと思いますのでAIを試して見てはいかがでしょうか

ではでは~

参考サイト

labelimgのインストール方法と使い方
https://laid-back-scientist.com/labelimg
YOLOv5を使った物体検出
https://www.alpha.co.jp/blog/202108_02

Discussion

コメントにはログインが必要です。