yolo3でオリジナルデータの学習にチャレンジする。(labelimgによるアノテーションファイルの作成)

0

    yolo3でオリジナルデータの学習にチャレンジする。(labelimgによるアノテーションファイルの作成)

     

    JUGEMテーマ:電子工作


    顔の学習に成功して気を良くしたので今度はオリジナルデータの作成をしてみたいと思います。
    学習してもらうのは招き猫これです。

     


    クラスは1つなのでクラスの番号は0で名前はmanekinekoとします。

    アノテーション作成支援ツールの labelimg を活用してyolo3の学習データを作成して学習する事例です。
     

    参考ページ
    https://haitenaipants.hatenablog.com/entry/2018/06/09/235950
    いつもありがとうございます。


    ■必要なもの

     

    python 3.6
    PyQt5
    labelimg 

     

    ■環境

     

     Windows10
     Anaconda

     

    ■Anacondaの環境を作成

     

    Anacondaを起動してEnvironments→Createをクリック
    作成する環境の名前を入力
     labelImg
    作成したlabelImgという環境のTermialを開く

     

    ■PyQt5をインストール

     

    pip install PyQt5

     

    ・バージョンを表示してみる

     

    pyrcc5 -version

    pyrcc5 v5.12

     

    ■labelimgのインストール

     

    ・githubから


    https://github.com/tzutalin/labelImg
    clone or download をクリックしてZIPをダウンロード

     

    ・ZIPを展開

     

     

    ・展開したlabelImg-masterにcdする

     

    cd labelImg-master

     

    ・インストール?


    pyrcc5 -o resources.py resources.qrc
    何も表示されないがエラーにもならないのでOK?

     

    ■labelimgを起動

     

    python labelImg.py

    エラーになる。
    ModuleNotFoundError: No module named 'lxml'

     

    ■xmlのライブラリをインストール


    参考ページ
    https://techacademy.jp/magazine/19063

     

    pip install requests
    pip install lxml

     

    ■labelimgを起動

     

    python labelImg.py

     

    ■画面が起動した。

     


    ■画面の使い方

     

    ・保存を自動化するためにメニュー View→AutoSaveModeにしておく
    ・クラスは一つだけなのでメニュー View→SingleClassModeにしておく
    ・OpenDirをクリックしてディレクトリ指定すると右下の所に一覧が出て
     1枚目の画像が表示される
    ・yoloの形式で出力する場合は左側のPascalVOC⇔YOLOの切り替えボタンでYOLOにしておく
    ・保存すると該当のディレクトリにclasses.txtが出来るんですがプログラムと連携できてないようで。
     多分バグでしょう。
    ・右上のUser default labelをチェックしてラベルを付けておくclassが一つの場合はdogにしちゃう。
     そうすれば自動的にclassは0になって作成される。
    ・wを押して該当の部分(□)をマウスでドラッグして指定する
    ・dを押して(自動保存して)次のファイルへ移る
    ・aを押すと前のファイルへ移る

     


    ■その他のコマンド


    参考
    http://demura.net/misc/14350.html

    Ctrl + u     ディレクトリからすべての画像ファイルを読み込む
    Ctrl + r     アノテーションのディレクトリを変更
    Ctrl + s     保存
    Ctrl + d     現在のラベルと矩形をコピー
    Space     現在の画像を検証したとフラグをつける
    w     矩形の生成
    d     次の画像
    a     前の画像
    del     選択した矩形の消去
    Ctrl++     ズームイン
    Ctrl?     ズームアウト
    ↑→↓←     矢印キー:選択した矩形の移動


    ■labelImg使って招き猫のデータを効率よく作成

     

     使用した画像数は118
     labelimgで指定した矩形の数は約350
     所要時間は2時間ぐらいかな。
     肩コッタ。

     

    結果的にubuntuのdarknet配下に以下の様に配置

     

    ※ここから先は前の記事※http://miha.jugem.cc/?eid=207で作った
     ubuntu上での操作になります。

     

    darknet
    ├── manekineko
    │    ├── classes.txt
    │    ├── DSC_0001.JPG
    │    ├── DSC_0001.txt
    │    ├── DSC_0002.JPG
    │    ├── DSC_0002.txt
    │    ├── DSC_0003.JPG
    │    ├── DSC_0003.txt
     省略
    │    ├── DSC_0118.JPG
    │    ├── DSC_0118.txt
    │    ├── test.txt
    │    └── train.txt
    ├── cfg
    │    ├── manekineko.data
    │    ├── manekineko.names
    │    └── yolov3.cfg
    └── darknet53.conv.74

     

    ■test.txtの中身

     

        manekineko/DSC_0010.JPG
        manekineko/DSC_0020.JPG
        manekineko/DSC_0030.JPG
        manekineko/DSC_0040.JPG
        manekineko/DSC_0050.JPG
        manekineko/DSC_0060.JPG
        manekineko/DSC_0070.JPG
        manekineko/DSC_0080.JPG
        manekineko/DSC_0090.JPG
        manekineko/DSC_0100.JPG
        manekineko/DSC_0115.JPG

     

    ■train.txtの中身

     

        manekineko/DSC_0001.JPG
        manekineko/DSC_0002.JPG
        manekineko/DSC_0003.JPG
        省略
        manekineko/DSC_0118.JPG
    ※jpgファイルは全部で118その中で11をtest.txt、残りの107をtrain.txtにする


    ■manekineko.dataの中身


        classes = 1
        train  = manekineko/train.txt
        valid  = manekineko/test.txt
        names = cfg/manekineko.names
        backup = backup/
        
    ■manekineko.namesの中身

     

        manekineko

     

    ■yolov3.cfgの中身

     

     classesは顔の時と同じ1なので、yolov3.cfgは前の記事と変更なし
      →前の記事※http://miha.jugem.cc/?eid=207

     

    ■darknet53.conv.74の中身

     

     https://pjreddie.com/media/files/darknet53.conv.74
     から持ってくる。顔の時と同じ

     

    ■学習

     

        ./darknet detector train cfg/manekineko.data cfg/yolov3.cfg darknet53.conv.74

      
    ・翌朝

     

     avg lossの数字を確認すると0.061
     すごい低い値になっていました。

     

    backupの中のyolov3_last.weightsファイルを取り出す。

     

    ■chainer+yolo3で顔認識

     

    ※ここから先はいつも使っているwindows10+anacondaの環境での操作になります。
     参考記事はhttp://miha.jugem.cc/?eid=189とhttp://miha.jugem.cc/?eid=190

     

    □chainerで読み込めるnpzの形式に変更する

     

    copy yolov3_last.weights yolo3-manekineko_final.weights
    python darknet2npz.py --model yolo_v3 --n-fg-class 1 yolo3-manekineko_final.weights yolo3-manekineko_final.weights.npz

     

    □classの一覧ファイルの作成

     

    yolo3-manekineko.list
    以下の内容で作成

    manekineko

     

    □実行!!

     

    python yolo3.py --pretrained-model yolo3-manekineko_final.weights.npz --class_num 1 --class_list yolo3-manekineko.list 0


    □実行結果

     


    100%で認識しています。
    こういった人などに比べて単純なものは120枚の画像で350矩形の学習ぐらいでも結構大丈夫みたいです。

     

     


    スポンサーサイト

    0
      • 2019.10.22 Tuesday
      • -
      • 07:28
      • -
      • -
      • by スポンサードリンク


      PR

      calendar

      S M T W T F S
        12345
      6789101112
      13141516171819
      20212223242526
      2728293031  
      << October 2019 >>

      selected entries

      categories

      archives

      recent comment

      recent trackback

      profile

      search this site.

      others

      mobile

      qrcode

      powered

      無料ブログ作成サービス JUGEM