みなさんこんにちわ、こんばんわ。
SAIです。
お仕事やら夏バテやらで飛び飛びです。
今日は、JupiterNoteBookで画像認識をしてみましょう。
今日のソースも、Nvidiaの「Getting Started with AI on Jetson Nano」です。
またまたCSIカメラを使いますので接続しておきましょう。
CSIカメラを繋いだ状態で、JupiterNoteBookを起動し、
classification を動かしてみましょう!
1.classificationを開く
JupiterNotebookを起動したら以下のようなフォルダ構成が見えると思います。
classificationというフォルダがありますね。
これを開きます。
↓こんな画面が見れると思います。
今回は、コードの説明はとりあえず省略します。
画像認識の学習がメインです。
が、CSIカメラを使う場合はちょっとやることがあります。
2.SCIカメラ用にコードを改変する
JupiterNotebookを初めて実行するときは、
とりあえず実行ボタンをポチポチしてみるのがいいと思います。
が、ClassificationではUSBカメラがデフォルトになっているようです。
コードを実行する前に、CSIカメラが使えるようにコードを改変しちゃいましょう。
for USB の部分のコードが有効化されていて、
for CSI の部分のコードが[#]で無効化されています。
USBカメラをコメントアウトして、CSIカメラの部分を有効にしましょう!
↓
オブジェクトは 同じ camera に格納されるので、修正はここだけでOKです。
ちなみにJupiterNotebookは、左上に保存ボタンがありますね。
しかし、、
JupiterNotebookを動かす環境はDockerContainerで実行しています。
ということは・・・
保存したところで次回DockerContainerを起動したら消されちゃいます。
毎回、コードを修正しなければならない点に注意しましょう。
3.カメラオブジェクトが生成できるか実行してみよう
実行は、↓この赤枠の▶をポチポチするか、
キーボードショートカット: [SHIFT][ENTER] で実行できます。
今回も、Notebookの先頭からポチポチしてみよう。
無事、カメラが生成できました!
4.画像認識するモデル名と認識名を作る
次のコードは、画像認識に使うtask (認識モデル名?)と categories(認識候補)
そして データセットを定義しています。
例題は、
Thumbs は、親指の上下を認識させるモデル名ですね。(赤線)
候補は、thumbs_up と thambs_down
つまり、と ですね。
今回はそのまま実行します。
他に、
・emotions で 平然、嬉しい、悲しい、怒り を認識
・fingers(指)で、1本、2本、3本、4本、5本
というのがありますね。
と がうまくいったら「#」を切り替えて試してみると良いと思います。
4.画像認識をさせる画面について
JupiterNotebookをポチポチ進めていくと、以下の画面まで進みます。
ここで写真を撮影して、学習をしますよ!
赤い線の場所が、学習をするための教師画像(学習に使う画像)を撮影する場所です。
青い線の場所が、学習を実行するためのパラメータと進捗です。
緑は・・・うまく使えないんですが、学習モデルのロードとセーブの様です。
学習がうまくできた後は、カメラで撮影した画像の状態によって、
右上の認識率が変わりますよ!
それでは、実際に教師画像を撮影しよう!
ちなみに、JupiterNotebookにも説明がありますが、、英語ですね。
こっちのほうが正しいと思いますので、一応読んでみてね。
5.教師画像の撮影
今回はと を覚えさせますよ!
まずは、 を覚えますね。
自分の指を にして、少し角度を変えたり、遠くしたり近くしたり。
20枚程度撮影しましょう。
多ければ多いほうがいいですが、
多ければ学習に時間がかかっちゃうよ。
categoryを [thumbs_up] にして、add で写真を撮りましょう。
1枚とると、 count が1づつ上がります。
20枚程度撮ったら、
categoryを [thumbs_down] にして、また20枚程度の写真を撮りましょう。
6.モデルの学習(教師あり学習)
写真が撮影出来たら、AIによる学習をする番です。
学習は↓ここで実行します。
学習する前に epochs の数値を10とか20に変更しましょう。
epochsは、畳み込み学習の階層です。
epochs が多ければ沢山学習するので認識率が上がります。
が、あまり多すぎると過学習になるようですので、
最初は10とか20がいいと思います。
そして、train をポチっと押しましょう!
学習が開始されます!
学習がススムとprogressバーが伸びます。
epochsは、学習すると残りのepoch数に減算で進んでいくようですよ。
そして、学習率がloss とaccuracy が進んでいきます。
Jetson Nanoだと、学習完了まで10分以上かかりますね。
テレビでも見ながらしばらく待ちましょう。
そういえば、JetsonNanoだと、熱がひどいです。
学習する際は必ずファンを付けて冷却しましょうね!
7.画像認識で、認識率をチェック
学習が終わったら、カメラの撮影している画像に従って、
右の[thumbs_up] と [thumbs_down] のバーが上下します。
学習がうまくいったら、指の認識が何%になっているかが見れますよ!
色々試してみてくださいね。
JupiterNotebookは、結構わかりやすいので自信がつきます。
今後、コマンドラインからの学習しますが、、、、
SAIは失敗が続いたりすると、自信を取り戻すためにこのJupiterNotebookを動かしたりしてます。
ちなみに、
1万枚位画像があると、Jetson Nanoだと半日以上かかるので・・・・
本気の学習をJetsonNanoで実施するのは無理がありそうです。
JetsonNanoは、機械学習の実行用という位置づけが良さそう。
7.番外.トラブルシューティング(写真を撮りミス!)
間違った写真を撮っちゃった!
そんな場合の対処方法
JupiterNotebookで撮影した画像は、data フォルダ内に保存されています。
/data/classification/thambs_A/~のフォルダに保存されています。
写真をみて間違ったものを削除しましょう。
もし、学習がうまくいかないときは、間違った画像があるのかもしれません。
上手くいかないときは、チェックしてみてはどうかな?
それでは今日はこの辺で。
◆目次へ戻る◆