この間 AI 関連のまとめ。
MobileNet V2 を使おう!
MobileNet v2 でかなりのことが出来ることが分かった。すでに学習済みのモデルがあるのでこれを利用すればよい。Image Classification と Object detection があるが、どうやら私のやりたいことは「Object detection」らしい。
ざっくりとしたイメージだが、多くの画像を仕分けするのには Classification だ。ImageNet というデータセットをソースにしている時は 1000 の種類の画像の仕分けができる。
特定のターゲットがあるときは Object detection だ。COCO というデータセットをソースにしている時は 90 種類のオブジェクトをディテクトできる。
さらに上のデータセットをベースにして再学習させて目的の仕分けなり画像認識なりに仕上げていくことになる。モデルはそのまま流用できるだろう。
ckpt の話とメモ
ckpt(チェックポイント) にはバージョンがあるが tensorflow の python のプログラムの中で うまく対応している。ただ、使いたいのは MobileNet とは限らない。darknet の YOLO とかを使いたい場合、Edge TPU に対応させようと思うとかなり大変そうだ。
YOLO の weight を ckpt にしないといけない。ここが大きな障壁になる。その時 pb (ネットワークの情報らしいが) も必要らしい。ckpt にはごっそりネットワークの情報(モデルの情報)も入っているはずなのだがpb も必要らしい。
次にサイズ。MobileNet はかなりコンパクトにできている。ところが、YOLO は tiny を選択しても数10M Byte、フルの YOLO は100M Byte を越す。仮にこれを ckpt にコンバートできてもすぐに動くとは限らない。実際やってみたが、理由は不明だがアプリケーションが(gstreamer レベルで)落ちてしまった。どうやら malloc でとろうとした領域が足りないらしい。
データのコンバートに失敗したのか(その可能性はかなりの率である)プログラムのバグか Edge TPU が受け付けないのか、、、こういったことは頻繁に起こるであろうから調査するのは手慣れてないといけない。時々、さわる、程度ではとても対応できそうにない。
ckpt などをみると中身は tensorflow の式のシリアライズなのだが、ヘッダがあって明確なデータ形式があって(ドキュメントがあって)、、、という方式ではなく(中のつくりはそれに近いことをやっているはずだが)オブジェクトのシリアライズを逐次やって積み重ねている風(だと思う)なので ckpt 自体を解析するというのが困難だ。シリアライザーのソースを読んで理解するしかない。