こちらのページは、主に「Xavier NX」を使用して行った、「画像認識・検出」にかかわる内容をまとめてみました。内容は、一部「Xavier NX」のページと被るものになります。
[2024/07/30]
先日、「画像認識」並びに「画像検出」にかかわる研究・実践がひと段落しました。それを受けて、今までの内容を簡単にまとめておきたいと思います。
1 研究の目的
人工知能の技術を用いた画像処理には、様々なものが存在しますが、大きくは、「画像分類」、「物体検知」、「領域区分」などがあります。
「画像分類」は、ある写真を見せて、それが何かを判別(認識)させるような技術です。「物体検知」は、動画の中に、あらかじめ学習した物体があるか検知(検出)させる技術です。これが、多くの人が見る機会のある技術で、「顔認証」などが良い例です。
「領域区分」は、与えられた画像や動画において、その部分がどの領域かを区分けする技術です。ベースには、「物体検知」の技術が使われています。具体例としては、人物の全体像から、「頭」「胴体」「腕」「足」などの領域を区分するイメージです。
実際の応用場面は、自動車の「自動運転」などです。例えば、車が前に進む際、「道路」をトレースする必要があり、そのためには、「道路」の領域を認識する必要があります。
今回の研究の目的は、こうした技術を「実際に実践」してみることです。まずは、書籍やブログなどを参考にして、すでに準備された「データセット」を用いて「学習」し、その学習結果を用いて「推論」してみます。
それができたなら、「オリジナル」のデータセットを作成して、それを用いて「学習(転移学習)」を行い、「推論」してみることです。
2 研究の概要
研究の目的で述べたように、人工知能の技術を用いた画像処理には「様々なタイプ」があります。さらに、自分で「データセット」を準備するのは、かなりの手間がかかります。従って、毎年、一つ一つ、ゆっくりと取り組むことにしました。
(1)研究・実践の経緯
番号 | カテゴリ | データセット | 研究概要 | 結果 | 年度 |
1 | 画像分類 | cat_dog | 犬猫の分類 | 良好に動作 | 2022 |
2 | 画像分類 | tochiko★ | 人物の分類 | 動作せず | 2022 |
3 | 物体検知 | fruit | フルーツの検出 | 良好に動作 | 2022 |
4 | 物体検知 | tools★ | 文房具の検出 | 良好に動作 | 2023 |
5 | 画像分類 | tegata★ tegata2★ tegata3★ | 手形の分類 ・データセットの拡大 ・画像の規格化 | 動作不安定 動作 精度向上 | 2023 |
6 | 物体検知 | tochiko2★ | 人の顔の検出(複数人) | 動作せず | 2024 |
7 | 物体検知 | maskface★ | 人の顔の検出(マスク) | 良好に動作 | 2024 |
8 | 物体検知 | face★ kao★ | 人の顔の検出(複数人) ・データセット拡大 | 2024 | |
9 | 領域区分 | —– | 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) |
OS | Ubuntu 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 |
カテゴリ数は、5とする。
対象 | ラベル名 |
生徒1 | student1 |
生徒2 | student2 |
生徒3 | student3 |
生徒4 | student4 |
生徒5 | student5 |
背景 | 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/face | を選択 |
Class Labels | face/labels.txt | を選択 |
Current Set | train val test | の中から一つ選択 |
(Current Class) | トリミング時に、 現れた「ラベル」の中から選択する | |
JPEG Quality | 95 | 画質を調節 |
また、「Save on Unfeeze」や「Clear on Unfeeze」のチェックはそのまま
撮影の仕方(下記の動作を繰り返す、必要に応じて、訓練用かやラベル名の設定を変更する)
番号 | 動作 | 備考 |
1 | カメラを対象に向ける | |
2 | 「feeze」ボタンを押す | |
3 | トリミングを行う | |
4 | 「save」ボタンを押す |
■ 転移学習のためのデータセットは、訓練用30、評価用10、試験用5(最終)とする。
簡易学習用のデータセット 訓練用15、評価用5、試験用5×5人分
camera-capture を使用した場合のディレクトリ構造
分類 | ディレクトリ | ファイル | 意味・内容 |
モデル | models/face/ | labels.txt | ラベルファイル |
データ | data/face/Annotations | [name].xml | アノテーションファイル ・画像ファイル名 ・データセット ・ラベル名 ・切り取り情報 |
data/face/ImageSets/Main | test.txt | 試験用の画像ファイル名 | |
train.txt | 訓練用の画像ファイル名 | ||
trainval.txt | 訓練評価用の画像ファイル名 | ||
val.txt | 評価用の画像ファイル名 | ||
data/face/JPEGImages | [name].jpg | 全ての画像ファイル (切り取り前の原画像) |
■ 簡易学習時の撮影枚数
目的 | 格納ディレクトリ(同一場所) | 生徒1 | 生徒2 | 生徒3 | 生徒4 | 生徒5 | 計 |
訓練用 | data/face/JPEGImages | 15 | 15 | 15 | 15 | 15 | 75 |
評価用 | data/face/JPEGImages | 5 | 5 | 5 | 5 | 5 | 25 |
試験用 | data/face/JPEGImages | 5 | 5 | 5 | 5 | 5 | 25 |
合計 | 25 | 25 | 25 | 25 | 25 | 125 |
■ 転移学習のコマンド
作業 | 転移学習 | Transfer Learning with PyTorch |
分野 | 物体検知 | Object Detection |
AIモデル | MobileNet-SSD | 高速な物体検知が可能 高い認識性能&軽量モデル |
データセット | face | data/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に用いた学習の実践
になります。
道のりは、簡単ではないと思います。しかし、健聴者が、聾者との「音声」でのコミュニケーションをとるときに、少しでもお役に立てればと思い、研究したいと思いました。
ちなみに、聾者間並びに、聾者と健聴者の間のコミュニケーション手段の主流は、「手話」です。これを人工知能で行うためには、更に高度な技術が必要になると思います。
「動画」映像の「手話認識」、テキストからの「手話動画の作成」などが必要になると思います。さすがに、そこまでのことができるかは難易度が高く先が見えませんが、気長に「あきらめず」に取り組みたいと思います。
もちろん、私が研究しなくても、すでに多くの大学や企業で研究が進んでいると思います。確かに、ニッチな需要ではありますが、自分の身の回りの人の役に立ちたい気持ちで、頑張りたいと思います。