V-Trainingは現在、2種類のモデル訓練モードを提供しております。それは「Classification」(対象を認識し、その分類を返却)と「Detection」(Yolov3アルゴリズムを採用し、画像中の対象の位置を認識し、線枠を描画)です。ユーザーは利用シーンに応じて自由に利用を選択できます。以下は、二つのモードのモデル訓練方法を紹介します。
ファームウェアファイルを指定する必要があるユーザーは、Kflashを選択してファームウェアを書き込むことができます。
1.下記のリンクから、自分のオペレーティングシステムに対応するKflash_GUI書き込みツールをダウンロードしてください。
2.デバイスをTpye-Cデータケーブルでコンピュータに接続し、ダブルクリックで書き込みツールKflash_GUIアプリケーションを起動し、対応のデバイスポート、開発ボードの種類(M5StickV)、ファームウェアプログラム、ボーレートを選択します。ダウンロードをクリックして書き込みを開始します。
3.コマンドライン操作に慣れているユーザーは、Kflashをファームウェア書き込みツールとして選択することもできます。 詳細をこちらから確認
モデル訓練には大量の訓練素材画像が必要です。M5StickVとUnitVのハードウェアの違いから、素材の撮影方法も異なります。実際に使用するハードウェアに応じて、下記の説明を参考に撮影してください。
撮影素材にSDカードが必要です。ユーザーはboot-M5StickVプログラムの圧縮包をダウンロードし、SDカードに圧縮包内のすべてのファイルを解凍して置きます(M5StickVはSDカードの選型に制限を設けています、 サポートするタイプをこちらから確認 )
SDカードを電源投入前に挿入し、画像素材を保存します。左側の電源ボタンを長押しで電源を入力し、画面にTrainingという文字が表示されたら撮影プログラムに正常に入力できました。
画面上部のナビゲーションバーはリアルタイムで現在のClass番号と撮影した画像数を表示します。HOMEボタンを押下で画像撮影を開始し、本体の右側のボタンはClass番号を切り替えに使います。
現在プログラムはユーザー撮影用の10組のClassを提供しており、各組のClassは一種の認識対象を表します。よりよい訓練効果を得るため、ユーザーは3組以上のClass(3種以上の認識対象)を撮影しなければなりません。認識の正確率を確保するため、各組のClass撮影素材枚数は35枚以上でなければクラウド訓練は通過されません。素材の数量が多ければ多いほど、認識訓練の効果は良くなり、認識率も高くなります
boot-UnitVプログラムはUnitV用の画像素材撮影プログラムで、モデル訓練前の素材収集に使用します。
撮影した訓練素材はSDカードに保存されます。したがって、bootプログラムを実行前に、SDカードをUnitVのカードスロットに挿入してください。(注意: UnitVはSDカードの選型に制限を設けています、 サポートするタイプをこちらから確認 )
MaixPy IDEを起動し、UnitVデバイスを接続します。「ファイルを開く」をクリックし、既にダウンロードしたboot.pyファイルを開きます。運行ボタンをクリックします。運行が成功したら、MaixPy IDEの右上隅でカメラの画面をリアルタイムで監視できます。
IDE上のカメラ画面を参考に撮影操作を行います。Aボタンを押下で画像撮影を開始し、Bボタンを押下でClass番号を切り替えします。出力ログは各操作のClass番号と撮影した画像数を対応します。下の「シリアルモニター」をクリックし、ログ出力を確認します。
現在プログラムはユーザー撮影用の10組のClassを提供しており、各組のClassは一種の認識対象を表します。よりよい訓練効果を得るため、ユーザーは3組以上のClass(3種以上の認識対象)を撮影しなければなりません。認識の正確率を確保するため、各組のClass撮影素材枚数は35枚以上でなければクラウド訓練は通過されません。素材の数量が多ければ多いほど、認識訓練の効果は良くなり、認識率も高くなります
訓練素材を撮影する際、撮影環境の光
注意:識別の正確率を確保するため、各Classの撮影素材枚数は35枚以上にする必要があります。否則、クラウド訓練を通過させることはできません。素材の数が多いほど、識別訓練の効果は良くなり、識別率も高まります。
素材撮影が完了したら、M5StickVをシャットダウンし、SDカードを取り出し、读卡器を用いてSDカード中の画像素材("train"、"vaild"の2つのフォルダー)をパソコン端末にコピーします。
"train"、"vaild"の2つのフォルダー内のClass番号フォルダーのディレクトリは一致を保ちます。Classを切り替えして素材を撮影する時、プログラムは"train"、"vaild"の中にClass番号が一致のフォルダーを同時に作成し、保存ルールに従って撮影した画像をそれぞれ"train"、"vaild"の各自のディレクトリ下のClassフォルダーに保存します。
圧縮打包前に、画像内容の正確性を検査する以外に、必ず"train"、"vaild"の2つのフォルダー中の同じClass番号ディレクトリ内の素材画像の合計枚数が35枚以上であるかを確認してください。合計枚数が35枚未満のClass番号ディレクトリは、自ら削除するかバックアップ処理を施してください。検査作業を完了したら、次にやるべきは素材ファイルの圧縮です。"train"、"vaild"の2つのフォルダーを圧縮ツールを用いて"zip"形式の圧縮ファイルに圧縮します。
こちらをクリックしてデータアップロードページにアクセスしてください ,個人のメールアドレスを入力し、ファイルをアップロードしてください(アップロードファイルのサイズは200MB以内に制限され、zip形式でなければなりません)。
アップロードが成功すると、ファイルはリクエストキューに入り、ページの左下の表格は現在のキューの状況を表示します。
訓練が完了したら、プログラムファイルのダウンロードアドレスは予約したメールアドレス宛に送信されます。メール中のダウンロードアドレスをコピーし、プログラムファイルをローカルにダウンロードし、SDカードにコピーします。
SDカードをM5StickVに挿入し、電源を入れると自動的にプログラムを実行します。
既定のプログラムは物体をClass番号順に識別し、画面上に表示します。ユーザはboot.pyファイルを編集し、表示情報を変更することができます。
UnitVは画面を統合していないため、ユーザは自らの需要に基づき、既存のプログラムを編集することができます。識別データの出力を実現するか、識別成功後の対応機能を実行するか。例えば、識別情報をシリアルポートから出力するなど。
以下はシリアルポート出力プログラムを追加したbootプログラムの一部内容のコメント、完全なプログラムではありません。実際の使用は訓練返却したbootプログラムファイルを基に編集してください
...
task = kpu.load("/sd/c33723fb62faf1be_mbnet10_quant.kmodel")//载入模型文件
labels=["1","2","3","4","5","6"] #该列表对应训练素材时的Class顺序,分别对应每一个识别物,你也可以将列表内的元素,修改成其他字符串字段.
while(True):
img = sensor.snapshot()
fmap = kpu.forward(task, img)
plist=fmap[:]
pmax=max(plist)
max_index=plist.index(pmax)
a = lcd.display(img)
if pmax > 0.95://判断对象的识别率是否大于95%
lcd.draw_string(40, 60, "Accu:%.2f Type:%s"%(pmax, labels[max_index].strip()))
print(labels[max_index])//将所识别的对象名称通过串口打印出来。
....
上記の分類モード訓練の方法と似たように、検出モード(Yolov3)中もカメラを用いて素材を撮影する必要があります(ここは分類モード中の撮影プログラムを引き続き使用することができます)異なる点は、該訓練モード中、同一画像画面内に複数の識別対象を許容する点です。したがって、
撮影が完了したら、ラベル付けツールLabelIMGを利用して素材中の識別対象にラベルを付与し、ラベルファイルを生成します。ユーザはPython環境を自ら設置し、コマンドラインから下記の指示を実行し、pipパッケージ管理ツールを利用してLabelIMGをインストールすることができます。
pip install LabelIMG
インストールが完了したら、コマンドラインで「LabelIMG」を実行し、ラベル付けツールを起動します。
LabelIMG
1.ラベル付けツールをYoloモードに切り替え--->2.画像保存ディレクトリを開く--->3.ラベルファイル保存ディレクトリを選択--->自動保存モードを設定。
「W」キーを押下し、対象の境界線を描画し始め、対象に名前を付けます。(名前を追加後、リストに記録が追加され、以降のラベル付け中は直接選択使用可能、重複入力は不要)、次のボタンをクリックし、画像を切り替え、素材のラベル付けを全て完了まで続行。
ラベルファイルの追加以外、v-training.configの設定ファイルを手動で追加する必要があります。これは訓練サービスに、今回の訓練中に含まれる識別対象の数を伝達するためです。(上記の図例のケースでは、2つの識別対象をラベル付けしたので、設定ファイル中はカテゴリ数を2と記述します。形式は下記の通り。)
{
"classes":2
}
以上の操作を完了後、全ての素材を同一フォルダに配置し、下記のディレクトリ構造を参考に。全てのファイルを選択し、zip形式の圧縮ファイルに圧縮し、訓練用のアップロードに使用。
folder----------------------
|--v-training.config
|--1.jpg
|--1.txt
|--2.jpg
|--2.txt
.....
以上の操作を完了後、全ての素材を同一フォルダに配置し、下記のディレクトリ構造を参考に。全てのファイルを選択し、zip形式の圧縮ファイルに圧縮し、訓練用のアップロードに使用。
素材の圧縮包のアップロードやモデルのダウンロード方法は、上記の分類モード訓練の操作を参照してください。検出モードの訓練が完了後、boot.pyとxxxx.modelファイルが返却されます。これをSDカードにコピーし、SDカードを機器に挿入し、電源を入力すると、識別プログラムが起動します。
解答: zip圧縮ファイル内はtrainとvalid(vaildも可)の2つのフォルダしか含まれてい 各フォルダの中、数字1から10の間の数値で命名されたいくつかのサブフォルダが存在します。trainとvalidのフォルダ内のサブフォルダの数は等しく、サブフォルダの名前も、数字1から始まる対応関係です。
解答: ご使用のtrainやvalidのフォルダ内の写真が不足しています。より多くの写真を追加するか、誤って追加したクラスを削除する必要があります。
解答: 申し訳ありません、単一のクラスはサポートされていません。trainとvalidのフォルダ内には、最低2つ以上のクラスフォルダが必要です。
解答: システムは画像の読み込み中にエラーが発生しました。おそらく、該当の画像を交換する必要があります。