画像認識・検出のまとめ(発表用)

 こちらのページは、主に「Xavier NX」を使用して行った、「画像認識・検出」にかかわる内容をまとめてみました。内容は、一部「Xavier NX」のページと被るものになります。


[2024/07/30]

 先日、「画像認識」並びに「画像検出」にかかわる研究・実践がひと段落しました。それを受けて、今までの内容を簡単にまとめておきたいと思います。

1 研究の目的

 人工知能の技術を用いた画像処理には、様々なものが存在しますが、大きくは、「画像分類」、「物体検知」、「領域区分」などがあります。

 「画像分類」は、ある写真を見せて、それが何かを判別(認識)させるような技術です。「物体検知」は、動画の中に、あらかじめ学習した物体があるか検知(検出)させる技術です。これが、多くの人が見る機会のある技術で、「顔認証」などが良い例です。

 「領域区分」は、与えられた画像や動画において、その部分がどの領域かを区分けする技術です。ベースには、「物体検知」の技術が使われています。具体例としては、人物の全体像から、「頭」「胴体」「腕」「足」などの領域を区分するイメージです。

 実際の応用場面は、自動車の「自動運転」などです。例えば、車が前に進む際、「道路」をトレースする必要があり、そのためには、「道路」の領域を認識する必要があります。

 今回の研究の目的は、こうした技術を「実際に実践」してみることです。まずは、書籍やブログなどを参考にして、すでに準備された「データセット」を用いて「学習」し、その学習結果を用いて「推論」してみます。

 それができたなら、「オリジナル」のデータセットを作成して、それを用いて「学習(転移学習)」を行い、「推論」してみることです。

2 研究の概要

 研究の目的で述べたように、人工知能の技術を用いた画像処理には「様々なタイプ」があります。さらに、自分で「データセット」を準備するのは、かなりの手間がかかります。従って、毎年、一つ一つ、ゆっくりと取り組むことにしました。

(1)研究・実践の経緯

番号カテゴリデータセット研究概要結果年度
画像分類cat_dog犬猫の分類良好に動作2022
画像分類tochiko★人物の分類動作せず2022
物体検知fruitフルーツの検出良好に動作2022
物体検知tools★文房具の検出良好に動作2023
画像分類tegata★
tegata2★
tegata3★
手形の分類
・データセットの拡大
・画像の規格化
動作不安定
動作
精度向上
2023
物体検知tochiko2★人の顔の検出(複数人)動作せず2024
物体検知maskface★人の顔の検出(マスク)良好に動作2024
物体検知face★
kao
人の顔の検出(複数人
・データセット拡大
2024
領域区分—–2025
★印は、オリジナルのデータセット

(2)人工知能の処理の流れ

 下記に人工知能「機械学習」の手順を示します。

1 問題の明確化(目的の明確化 社会の問題を解決する):手法の選択
2 データを入手する(大量のデータが入手可能
3 データの内容を十分に分析する
4 データを適切に加工するデータセットの作成
5 いくつかのモデルを試す優秀なモデルの登場):学習(転移学習)
6 最良のモデルを選び微調整を繰り返す
7 稼働推論

 上記の青の部分が、第3次人工知能ブームの牽引役になりました。実際は、「ブーム」という言葉は終わりを告げ、既に実用化の段階を経て「必須」の技術となっています。

3 使用する機材並びにソフト

使用機材並びにソフト

Xavier NX AIコンピュータ(Nvidia製) 2021年5月に購入
購入後の作業

主記憶装置となる MicroSDカードに、OSとなるイメージを書き込む
・MicroSDカードを本体に差し込み、本体を起動する
・ソフトウェアのアップデート
・ブラウザ(Google Chrome)の設定/メールの設定/ブックマークの設定
・使用環境の設定
(画面解像度/倍率、表示アイコン、ターミナルソフトの設定等)
ネットワークストレッジ(NAS-1ST)への接続
・ユーザ、グループの設定
・深層学習(機械学習)の総合動作環境(L4T-ML)の構築
(「L4T R32.5.0-py3/JetPack 4.5」コンテナのダウンロード実行)
・言語学習プログラムを、Jupyter Notebook で実行(Non-GPU環境)
 

主記憶装置を MicroSDカードから、SSD(新規購入&増設)に変更する → 超高速動作
・本体をケース(新規購入&工作)に入れる → スイッチが使用可能
・深層学習のデモプログラムの実行 → パフォーマンスの確認
・さまざまな学習プログラムの実行環境(ソフトウェアのインストール&設定)の構築
プリンターの設定

4 研究の詳細

 今回は、「8.人の顔の検出(複数人)DS:face」の実践に、チャレンジしてみました。

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

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

■ 事前準備1 docker の起動

作業エリアに移動

cd ~/jetson-inference

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

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

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

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

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

ラベルファイル data/face/labels.txt

カテゴリ数は、とする。

対象ラベル名
生徒1student1
生徒2student2
生徒3student3
生徒4student4
生徒5student5
背景PCroom

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

作業エリアに移動

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

「camera-capture」の起動

camera-capture /dev/video0

■ 「camera-capture」の使い方

設定項目(Data Capture Control

項目名設定値操作
Dataset TypeDetectionに変更
Dataset Pathdata/faceを選択
Class Labelsface/labels.txtを選択
Current Settrain val testの中から一つ選択
(Current Class)トリミング時に、
現れた「ラベル」の中から選択する
JPEG Quality95画質を調節

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

撮影の仕方(下記の動作を繰り返す、必要に応じて、訓練用かやラベル名の設定を変更する)

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

■ 転移学習のためのデータセットは、訓練用30評価用10試験用5(最終)とする。

 簡易学習用のデータセット 訓練用15評価用5試験用5×5人分

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

分類ディレクトリファイル意味・内容
モデルmodels/face/labels.txtラベルファイル
データdata/face/Annotations[name].xmlアノテーションファイル
・画像ファイル名
・データセット
・ラベル名
・切り取り情報
data/face/ImageSets/Maintest.txt試験用の画像ファイル名
train.txt訓練用の画像ファイル名
trainval.txt訓練評価用の画像ファイル名
val.txt評価用の画像ファイル名
data/face/JPEGImages[name].jpg全ての画像ファイル
(切り取り前の原画像

■ 簡易学習時の撮影枚数

目的格納ディレクトリ(同一場所生徒1生徒2生徒3生徒4生徒5
訓練用data/face/JPEGImages151515151575
評価用data/face/JPEGImages5555525
試験用data/face/JPEGImages5555525
合計2525252525125

■ 転移学習コマンド

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

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


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

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

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


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

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

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

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

5 学習と推論の結果

 当初の予定を変更して、予備的なデータ収集と学習と推論、並びに、本格的なデータ収集と学習と推論の二段階に分けて、実験を行った。

1.予備的な実験

項目実験値備考
サンプル数4人5人から1人減
一人当たりの
写真数
訓練用 9
評価用 5
試験用 5
訓練用を15から6減
流れを理解することを
優先した
撮影方法正面、上下左右が基本
訓練用は中間を入れる
人物ごとの撮影方法を
統一する
学習回数30回(Epochs)時間およそ5分
推論結果後半2人の認識を行えない
前半の二人はかろうじて認識
認識精度は低い
予備的な実験の考察
 当初の予定では、高い認識精度は期待できないものの、試験用の写真では、ある程度、4人とも認識することを期待していた。
 しかし、残念ながら、後半の二人に関しては、どの写真や映像を使っても、一切、認識することができなかった。

 この結果の理由としては、前半の二人と、後半の二人の撮影日が異なり、後半の撮影の際の設定に、誤りがあったことが予想される。具体的には、「仮想環境」の設定をしていなかった可能性がある。このため、物理的には撮影を行ったが、学習に生かされなかった可能性がある。
 同じ実験を再度やることも考えたが、今回の反省を踏まえて、本実験を行うことにした。

 

2.本格的な実験

項目実験値備考
サンプル数4人予備的な実験と同じ
一人当たりの
写真数
訓練用 13
評価用 5
試験用 5
訓練用を当初の15に近い
13とした。これは、
撮影の角度により決まった
撮影方法正面、上下左右に加えて
斜め方向を加えた
顔の傾きも統一するように
心がけた
学習回数30回(Epochs)時間およそ10分
推論結果
本格的な実験の考察

6 まとめ

 昨今、個人の顔認識の技術は特別なものではない。オフィスばかりでなく、ホームユースにおいても、入退室管理や、開錠のための個人の特定は普通に行われている。

 一方、この技術を用いた、プライバシーの侵害なども問題となっている。特に、世界的に、監視カメラの意図的な普及により、映画の世界のようなことが現実になりつつある。

 今回の課題研究により、単なる1ユーザとして、顔認識の技術を利用するのではなく、開発者の立場に立って、データの収集から学習の過程をすべて自分たちの手で行えたことは、人工知能の技術を理解するうえで、非常に意義深いものとなった。

 今後は、現在、AIの主流となっている「生成AI」について、ただ、使うのではなくて、開発者の立場で学習していきたいと思う。

7 今後の研究

 画像認識には、最後に残る「領域区分」の分野があります。本来であれば、こちらの研究(実践)を、行うべきなのかもしれません。

 しかし、「画像認識」の分野はここで一旦休憩して、「音声認識」の分野に切り替えたいと思います。理由は、この「音声認識」が、私が人工知能の研究をやろうと思った「きっかけ」だからです。

 当初、簡単に見えた「音声認識」の分野は、実践レベルでは「画像認識」より難易度が高いことが分かりました(これは、あくまでも個人的な感想です)。

 今回、「画像認識」の実践経験を経たことで、書籍にたよれば、何とか「音声認識」の実践できると思い、チャレンジしてみようと思いました。


 さて、この音声認識です、「聾者の会話」の音声認識が、最終目標です。

 ここに至った経緯を、簡単にお話しておきます。
 私は聾学校に6年間勤務した経験があります。聾学校に勤務したての頃、聾者である生徒の声を聴いて、何を言っているのか理解できずに苦しんだ経験があります。

 ところが、ベテランの先生方は、その発音を聞いて理解できるのです。単に「慣れ」なのかなと思いましたが、「あ!」、これも「学習」の一つだと「ピン」ときました。

 それならば、人工知能の技術を用いて、生徒の声を「学習」して、テキストの形で出力できないか考えました。もちろん、当時から「音声認識」の技術は日進月歩の勢いで進歩していました。しかし、いずれも「健聴者」の声を対象としたものでした。

 今後の「音声認識」の研究の流れは、
  ① 書籍を用いた「音声認識」の実践
  ② 「自分の声」のデータセット(DS)を用いた学習の実践
  ③ 「聾者の声」をDSに用いた学習の実践
になります。

 道のりは、簡単ではないと思います。しかし、健聴者が、聾者との「音声」でのコミュニケーションをとるときに、少しでもお役に立てればと思い、研究したいと思いました。

 ちなみに、聾者間並びに、聾者と健聴者の間のコミュニケーション手段の主流は、「手話」です。これを人工知能で行うためには、更に高度な技術が必要になると思います。

 「動画」映像の「手話認識」、テキストからの「手話動画の作成」などが必要になると思います。さすがに、そこまでのことができるかは難易度が高く先が見えませんが、気長に「あきらめず」に取り組みたいと思います。

 もちろん、私が研究しなくても、すでに多くの大学や企業で研究が進んでいると思います。確かに、ニッチな需要ではありますが、自分の身の回りの人の役に立ちたい気持ちで、頑張りたいと思います。

タイトルとURLをコピーしました