Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
minLevel1
maxLevel7

はじめに

アノテーションツール labelImgを使って、モデルの作成からi-PRO用AIモデルへの変換までを行いました。

i-PRO用AIモデルに関しては先にこちらの概要をお読みください。

labelImgは一例であり、i-PROの推奨ツールではありません。

labelImgの環境構築


Python3をインストールする

アノテーションツール(labelImg)のインストールに必要なPython3をインストールします。

以下サイトからインストーラーをダウンロードします。

インストール時、labelImgのサポートが3.6~3.9でしたので、3.9をダウンロードしました。

https://www.python.org/downloads/

インストールを実行します。

この時、「Add Python 3.9 to PATH」にチェックを入れてください。

Image RemovedImage Added

Disalbe path length limitが表示されたら、クリックして長いパスが設定できるようにします。

アノテーションツール(labelImg)をインストールする

DOSプロンプトを開いて、インストールを実行します。

Code Block
pip install labelImg

アプリのインストール先を確認します。

Code Block
pip show labelImg
Info

インストール先フォルダにデフォルトで表示されるラベル名を定義しておくと便利です。

インストール先フォルダ

 インストール先フォルダ/data/predefined_classes.txt

Image Removed
Image Added

アノテーションを行う


labelImgでアノテーションを行います。

アノテーションする画像を準備します。

今回はテスト用にi-PROカメラの画像を準備しました。(チュートリアルとしてお使いいただけます?)

DOSプロンプトからツールを起動します。

Code Block
labelImg

メニューで、出力形式をYOLOに変更します。

入力・出力フォルダを指定します。

  Open Dirでjpegのあるフォルダを指定

  Change Save Dirでアノテーション情報(txt)の出力先を指定

Info

以下を設定すると便利です。

  • Auto Save modeを有効にする

  • 今回はiproのタグだけつけるので、Single Class Modeを有効にする

Image Modified

タグをつけるタグをつけます。

Create Rect Box(ショートカットキー w)で枠を設定して、タグにiproを入力

  1. Image Removed

    これを繰り返す(次の画像 d / 前の画像 a)

    使用したjpegファイル(ipro_jpg.zip)と出力されたテキストファイル(ipro_txt.zip)

Info Info
View file
nameipro_txt.zip
View filenameipro_jpg.zip

で枠を設定して、タグに「ipro」を入力します。

  1. Image Added

これを繰り返します。

学習データを作成する


アノテーションしたデータを使って学習データを作成します。

参考: https://laid-back-scientist.com/yolo-v5#toc4

アノテーションしたデータを以下のフォルダ構成で配置します。

 val : 評価データ 

 trains : 検証データ

 test : テストデータ

各フォルダに.jpgとそのファイルに対応する.txtを配置します。

Image AddedImage Added

機械学習環境構築


学習環境を構築します。

性能が高くないPCでも学習ができるように、Googleの提供するWebブラウザで利用する無料のPython実行環境Google Colabを利用します。

Google Colabをセットアップする

Google Colabにアクセスし、Googleアカウントでログインします。

Colaboratory へようこそ - Colaboratory (google.com)

ノートブックを新規作成します。

Image Added

 名称を変更します。

Image Added

動作確認のためにPythonコードを入力して実行ボタンを押下し、結果が表示されればOKです。

最初のコード実行時に環境が割り当てられるので、時間がかかります。

Image Added

 GPUの使用を設定します。

ランタイム - ランタイムのタイプを変更 - GPU と設定します。

この設定は最初の1度だけでよいです。

Image Added

 

Image Added

 

Googleドライブをマウントします。

この作業は環境がリセットされる度実行してください。

Image Added

  YOLOv5をインストールする

Google Colabで操作します。

この作業は環境がリセットされる度実行してください。

インストールコマンドを実行します。

Code Block
!git clone https://github.com/ultralytics/yolov5  
%cd /content/yolov5/
!pip install -qr requirements.txt

機械学習実行


学習用データを配置する

Google Driveに学習用データをコピーします。

マイドライブ直下にコピーしてください。

Image Added

Google Colab側からマウントしたドライブを見ると、このようになります。

Image Added

Google Colabのフォルダツリー上で右クリックして、「パスをコピー」すると実際のパス名が分かります。

/content/drive/MyDrive/ai

Image Added

 Google Driveに学習結果出力先フォルダを作成しておきます。

Image Added

学習を開始する

学習用コマンドを実行します。

Code Block
!python train.py --img 416 --batch 16 --epochs 500 --data 
/content/drive/MyDrive/ai/data/yolov5/ipro/ipro.yaml --weights yolov5s.pt --project 
/content/drive/MyDrive/ai/data/yolov5/ipro/output

実行はyolov5フォルダでおこないます。

学習済みモデルは、指定したフォルダ配下 exp/weights の中に作成されます。

学習を複数実行すると、exp, exp2と名前が変わっていきます。

学習結果をグラフで確認します。

Code Block
%load_ext tensorboard(これはGoogle Colab接続中1回やればよい)
%tensorboard --logdir /content/drive/MyDrive/ai/data/yolov5/ipro/output
Image Added

precision : 予測結果のうちの正解した割合(誤検出しない確率)

recall : 正解した予測結果が実際の正解のうちの割合(見逃さない確率)

モデルを検証する

作成した学習モデルを使用して、テストデータからiproが検知できるか確認してみます。

Code Block
!python detect.py --source /content/drive/MyDrive/ai/data/yolov5/ipro/test --weights 
/content/drive/MyDrive/ai/data/yolov5/ipro/output/exp/weights/best.pt --img 416 --conf 0.6 --name 
trained_exp --exist-ok --save-conf

/content/yolov5/runs/detect/trained_expに出力されます。

モデルをONNX形式に変換する

学習モデルをonnx形式に変換します。

Code Block
!python export.py --img 416 --weights 
/content/drive/MyDrive/ai/data/yolov5/ipro/output/exp/weights/best.pt --include onnx --opset 11 --batch 1

変換結果は、PyTorchのモデルと同じフォルダに拡張子 .onnx で出力されます。

i-PRO用モデルへの変換


ONNXモデルの構造確認

AIモデル変換ツールで使用するsetting.confにパラメータを設定するため、ONNXモデルの構造を確認します。

onnxモデルの名前は学習内容がわかるように名前を変更しておきます。

best.onnx -> iprocamera.onnx

機械学習モデルのビジュアライズツール(netron)でモデル図を確認します。

https://netron.app/

open modelでファイルを指定して開きます。

Image AddedImage Added

 左上のハンバーガーメニューからFindを選択(Ctrl+F)します。

Image AddedImage Added

 transposeで検索し、その上にあるConvのノードをクリックすると、このような3つのノードが確認できます。

Image Added

OUTPUTSのところに表示されるname:をメモしておきます。

これはsetting.confのOUT_LAYERとして記載します。

Image Added

/model.24/m.0/Conv_output_0,/model.24/m.1/Conv_output_0,/model.24/m.2/Conv_output_0

AIモデル変換ツールを実行する

AIモデル変換ツールの環境構築および使い方はこちらをご参照ください。

学習に使用したjpegファイルをdockerの以下フォルダに配置します。

Code Block
~/conversion/iprocamera_img

onnxファイルをdockerのyolov5用のフォルダに配置します。

Code Block
sample/yolov5/models/iprocamera.onnx

変換用設定ファイル(setting.conf)の記述を変更します。

OUT_LAYERには、netronで確認したレイヤー名を列挙します。

Code Block
NET_NAME=iprocamera
DRA_IMAGE_DIR=../../iprocamera_img
OUT_LAYER=/model.24/m.0/Conv_output_0,/model.24/m.1/Conv_output_0,/model.24/m.2/Conv_output_0
Info

IN_DATA_WIDTH, IN_DATA_HEIGHTについては、

今回INPUTデータを416でモデル生成したのでデフォルト値のままで使用していますが、

異なるデータサイズであれば変更してください。

変換コマンドを実行します。

Code Block
./onnx_conversion.sh setting.conf

変換が終了すると、以下ファイルが作成されます。

 最適化されたonnxファイル : sample/yolov5/models/iprocamera_surgery.onnx

 カメラ実行用ファイル : out/iprocamera/MIX/iprocamera_surgery.onnx/iprocamera_cavalry.bin

アプリへ組み込み


サンプルアプリyuv_yolov5_appに組み込み、カメラ上で実行させます。

サンプルアプリのビルド

バイナリファイルを以下にコピーします。

data/cnn/

main.cをモデルに合わせて編集します。

Code Block
#define NETNAME "iprocamera_cavalry.bin"
#define LAYERNAMEOUT_CONV1037 "/model.24/m.2/Conv_output_0"
#define LAYERNAMEOUT_CONV1017 "/model.24/m.1/Conv_output_0"
#define LAYERNAMEOUT_CONV997 "/model.24/m.0/Conv_output_0"
#define TOTAL_CLS (1)
char const *names[] = {"ipro"};

configuration.txtをモデルに合わせて編集します。

Code Block
APPLICATION yuv_yolov5_ipro_app
APPNAME0 YUV&YOLOv5 i-PRO Application

Makefileを編集します。

実行ファイル名を変更したので、Makefileもそれに合わせて変更します。

Code Block
PROG_NAME= yuv_yolov5_ipro_app

アプリをビルドします。

Code Block
make

アプリを実行する

ビルドして作成されたアプリ yuv_yolov5_ipro_app_V1_0_ambaCV2X.extをカメラにインストールします。

アプリ画面にアクセスします。

カメラで画像を映してみると、枠が出てiproと表示されました。

Image Added