記事23 転移学習「物体検出」DS:tochiko

 令和6(2024)年度・課題研究の指導のための予備実験
 AIモデル「MobileNet-SSD」の転移学習による「人物の顔検知(複数人)

使用機材Xavier NX AI-Computer(Nvidia)
OSUbuntu 18.04
作業フォルダjetson-inference/python/training/detection/ssd/
データセットtochiko

■ 事前準備1 docker の起動

<作業エリアに移動>

cd ~/jetson-inference

<「docker」の起動>(管理者パスワードが必要)

docker/run.sh以後、管理者としての作業になるので要注意!

■ 事前準備2 作業ディレクトリの作成(作成後、アクセス権を775に設定する)

データ用/data/tochiko
モデル用/models/tochiko

■ 事前準備3 「labels.txt」の作成

ラベルファイル(学習用) data/tochiko/labels.txt

カテゴリ数は、5個とする。

対象ラベル名
生徒AstudentA
生徒BstudentB
生徒CstudentC
教師AteacherA
教師BteacherB
背景(PC室)background

data/tochiko/labels.txt の内容

studentA
studentB
studentC
teacherA
teacherB
(background)

■ 画像キャプチャソフト「camera-capture」の起動

<作業エリアに移動>

cd ~/jetson-inference/python/trainig/detection/ssd

<「camera-capture」の起動>

camera-capture /dev/video0

■ 「camera-capture」の使い方

<項目設定>(Data Capture Control

項目名設定値操作備考
Dataset TypeDetectionに変更
Dataset Pathdata/tochikoを選択
Class Labelstochiko/labels.txtを選択
Current Settrain val testの中から一つ選択
Current Class
JPEG Quality90画質を調節

また、「Save on Unfeeze」や「Clear on Unfeeze」のチェックをはずす

<撮影の仕方>

下記の動作を繰り返す、その際、訓練・評価・試験の切り替えや、ラベル名の設定を変更する

番号動作備考
カメラを対象に向ける
「feeze」ボタンを押す
トリミングを行う
「save」ボタンを押す

■ 転移学習のためのデータセットは、訓練用評価用試験用を準備する。

camera-capture を使用した場合のディレクトリ構造

分類ディレクトリファイル意味・内容
モデルmodels/tochiko/labels.txtラベルファイル
データdata/tochiko/Annotations[name].xmlアノテーションファイル
・画像ファイル名
・データセット
・ラベル名
・切り取り情報
data/tochiko/ImageSets/Maintest.txt試験用の画像ファイル名
train.txt訓練用の画像ファイル名
trainval.txt訓練評価用の画像ファイル名
val.txt評価用の画像ファイル名
data/tochiko/JPEGImages[name].jpg全ての画像ファイル
(切り取り前の原画像
目 的格納ディレクトリ(同一場所生徒1生徒2生徒3教師1教師2背景
訓練用data/tochiko/JPEGImages232620233031153
評価用data/tochiko/JPEGImages44444424
試験用data/tochiko/JPEGImages44444424
合 計313428313839201

■ 転移学習コマンド

作業転移学習Transfer Learning with PyTorch
分野物体検知Object Detection
AIモデルMobileNet-SSD高速な物体検知が可能
高い認識性能&軽量モデル
データセットtochikodata/tochiko(オリジナル)
camera-capture
使用時の
学習コマンド
python3
train_ssd.py
– – dataset-type=voc ※1
– – data=data/tochiko
– – model-dir=models/tochiko
– – epochs=30

※1 camera-capture を使用した場合の、データセット・タイプ


■ 学習済みデータの変換・転送コマンド

作業学習済みデータの
onnx への転送
ssd-mobilenet.onnx
(for TensorRT ※2
転送コマンドpython3
onnx_export.py
– – model-dir=models/tochiko

※2 学習したデータを「AI-Computer」で処理できるように変換・転送する

<学習結果の有効な利用法

 学習の結果は、各 Epoch 毎に、ファイルに保存される。保存されるファイル名には、学習の成果である「Loss 値」がファイル名に含まれる。従って、転送前に、一番学習結果の良い(Loss値の低い)ファイルを残して、それ以外は、消去する方法も考えられる。


■ 推論結果の格納ディレクトリ(基本的には不要)

入出力ディレクトリ
入力用/data/tochiko/Input/
出力用/data/tochiko/Output/

■ 転移学習して作られた新たなモデルによる、推論コマンド

作業推論
分野物体検知Object Detection
学習済みデータssd-mobilenet.onnx
推論コマンドdetectnet– – model=models/tochiko
  /ssd-mobilenet.onnx
– – labels=models/tochiko/labels.txt ※3
– – input-blob=input_0
– – output-cvg=scores
– – output-bbox=boxes
標準入力(ビデオ入力:/dev/video0出力:画面表示
入出力データ
入力:data/tochiko/
Input/*.jpg
出力:data/tochiko/
Output/

※3 ラベルファイル(推論用) models/tochiko/labels.txt の内容に注意!

学習表示用ラベル適用






BACKGROUND(BG)
studentA
studentB
studentC
teacherA
teacherB
PCroom
無検出用(自動で追加される):置き換え
生徒A
生徒B
生徒C
教師A
教師B
背景(PC室):置き換え

■ 認識結果

 結論から言うと、最初は、検出が上手くできなかった
下記に示すような対策が必要と考えられる。

No.具体的な対策対応状況
models/tochiko/labels.txtに、
backgroundを追加
済み
背景映像(PC室)」を加えて学習する済み
人物画像の撮影での工夫
・撮影角度の固定
・撮影大きさの統一
今後
個人の特徴が現れるような撮影に気を遣う今後
2024年7月25日現在

 


 今回のモデルの特徴、学習の経緯


 今回のモデルは、もともと、「画像・分類」を行うことからスタートしました。従って、学習用の画像は、デジタルカメラで撮影したものです。これらの画像を、通常の「分類の学習」を行って、「人物」を認識させようと考えていました。しかし、まったく認識できませんでした。

 まず、撮影した画像は、「背景」を含めて「全身」の画像だったことが、原因であると思われます。画像の特性上、分類の学習では、「人物の特徴」を学習できなかったことが考えられます。また、分類という学習方法が、認識に適さなかったと思われます。

 そこで、写真内の人物の「顔」だけを抽出して認識させようとしましたが、結局、「画像・分類」では無理であることに気付きました。「物体・検出」が適していることはわかっていましたが、当時のわたしには、「物体・検出」の学習の技術が無かったので、あきらめていました。
 

 その後、「物体・検出」の学習方法も習得して、これらのデータを用いた、「顔」の検出をやってみたいと思いました。それが、今回のモデルとなります。結論から言うと、残念ながらあまり上手くはいきませんでした。理由についてお話したいと思います。

 すこし、技術的なお話になります。

 一般的に、「物体・検出」の際は、「camera-capture」というアプリケーションを使用して、学習用に適した形式のデータを作成します。この形式のデータを使った場合、撮影の「こつ」さえ分かれば、非常に正確に検出できます。

 しかしながら、今回の場合は、通常のデジカメの画像から、「camera-capture」で生成される「voc形式」のデータを手作業で作成しました。その手作業自体には何の問題もないのですが、さきほど触れた、撮影の「こつ」が考慮されていないため、検出が上手く機能しませんでした。

 具体的には、撮影データの規格(大きさ、向き)を合わせることが重要です。そのことにより、物体の特徴を学習しやすくなります。
 
タイトルとURLをコピーしました