令和6(2024)年度・課題研究の指導のための予備実験
AIモデル「MobileNet-SSD」の転移学習による「人物の顔検知(マスクの有無)」
使用機材 | Xavier NX AI-Computer(Nvidia) |
OS | Ubuntu 18.04 |
作業フォルダ | jetson-inference/python/training/detection/ssd/ |
データセット | maskface |
■ 事前準備1 docker の起動
作業エリアに移動
cd ~/jetson-inference |
「docker」の起動(管理者パスワードが必要)
docker/run.sh | 以後、管理者としての作業になるので要注意! |
■ 事前準備2 作業ディレクトリの作成(作成後、アクセス権を775に設定する)
データ用 | /data/maskface |
モデル用 | /models/maskface |
■ 事前準備3 「labels.txt」の作成
ラベルファイル data/maskface/labels.txt |
カテゴリ数は、2とする。
対象 | ラベル名 |
マスクなし | nonmask |
マスクあり | withmask |
背景 | PCroom |
■ 画像キャプチャソフト「camera-capture」の起動
作業エリアに移動
cd ~/jetson-inference/python/trainig/detection/ssd |
「camera-capture」の起動
camera-capture /dev/video0 |
■ 「camera-capture」の使い方
設定項目(Data Capture Control)
項目名 | 設定値 | 操作 | 備考 |
Dataset Type | Detection | に変更 | |
Dataset Path | data/maskface | を選択 | |
Class Labels | maskface/labels.txt | を選択 | |
Current Set | train val test | の中から一つ選択 | |
Current Class | |||
JPEG Quality | 90 | 画質を調節 |
また、「Save on Unfeeze」や「Clear on Unfeeze」のチェックをはずす
撮影の仕方(下記の動作を繰り返す、その際、訓練用かやラベル名の設定を変更する)
番号 | 動作 | 備考 |
1 | カメラを対象に向ける | |
2 | 「feeze」ボタンを押す | |
3 | トリミングを行う | |
4 | 「save」ボタンを押す |
■ 転移学習のためのデータセットは、訓練用30、評価用10、試験用5とする。
( 簡易学習用のデータセット 訓練用15、評価用5、試験用5 )
camera-capture を使用した場合のディレクトリ構造
分類 | ディレクトリ | ファイル | 意味・内容 |
モデル | models/maskface/ | labels.txt | ラベルファイル |
データ | data/maskface/Annotations | [name].xml | アノテーションファイル ・画像ファイル名 ・データセット ・ラベル名 ・切り取り情報 |
data/maskface/ImageSets/Main | test.txt | 試験用の画像ファイル名 | |
train.txt | 訓練用の画像ファイル名 | ||
trainval.txt | 訓練評価用の画像ファイル名 | ||
val.txt | 評価用の画像ファイル名 | ||
data/maskface/JPEGImages | [name].jpg | 全ての画像ファイル (切り取り前の原画像) |
目的 | 格納ディレクトリ(同一場所) | マスクなし・画像 | マスクあり・画像 | 計 |
訓練用 | data/maskface/JPEGImages | 15 | 15 | 30 |
評価用 | data/maskface/JPEGImages | 5 | 5 | 10 |
試験用 | data/maskface/JPEGImages | 5 | 5 | 10 |
■ 転移学習のコマンド
作業 | 転移学習 | Transfer Learning with PyTorch |
分野 | 物体検知 | Object Detection |
AIモデル | MobileNet-SSD | 高速な物体検知が可能 高い認識性能&軽量モデル |
データセット | maskface | data/maskface(オリジナル) |
camera-capture 使用時の 学習コマンド | python3 train_ssd.py | – – dataset-type=voc ※1 – – data=data/maskface – – model-dir=models/maskface – – epochs=30 |
※1 camera-capture を使用した場合の、データセット・タイプ
■ 学習済みデータの変換・転送のコマンド
作業 | 学習済みデータの onnx への転送 | ssd-mobilenet.onnx (for TensorRT ※2) |
転送コマンド | python3 onnx_export.py | – – model-dir=models/maskface |
※2 学習したデータを「AI-Computer」で処理できるように変換・転送する
■ 推論結果の格納ディレクトリ(基本的には不要)
入出力 | ディレクトリ |
入力用 | /data/maskface/Input/ |
出力用 | /data/maskface/Output/ |
■ 転移学習して作られた新たなモデルによる、推論のコマンド
作業 | 推論 | |
分野 | 物体検知 | Object Detection |
学習済みデータ | ssd-mobilenet.onnx | |
推論コマンド | detectnet | – – model=models/maskface /ssd-mobilenet.onnx – – labels=models/maskface/labels.txt – – input-blob=input_0 – – output-cvg=scores – – output-bbox=boxes |
標準入力(ビデオ) | 入力:/dev/video0 | 出力:画面表示 |
入出力データ | 入力:data/maskface/ Input/*.jpg | 出力:data/maskface/ Output/ |
■ 検出の結果
記事23での経験もあり、気持ち悪いほど順調に検出ができました。 また、新たな発見として、検出の精度が高いことから、他の点にも気づくことができました。具体的には、反応速度が非常に速いことに気付きました。 今回のモデルは、本人の「マスクをした顔」と「マスクを外した顔」の検出でした。この検出を行う際、マスクの付け外しをするのですが、瞬時に、バウンディングボックスの色が変わりました。(検出対象の変化) また、本人以外の人物が画面に入ると、認識率は低いですが、確実に顔を検出していました。それらの動作が予定通りではありましたが、気持ち良い反応でした。久しぶりの充実感を味わうことができました。 |