
ScilabのIPCV「ツールボックス」に含まれる関数を練習中。今回は「Deep Learning」デス。おっと、IPCVはAI分野にも触手を伸ばしていたのね。でもま、今となっては古典的なDeep Learningのそのまた入口のHello World的な部分。古文漢文的な?教養だけれど試験にはでない?
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※Windows11上の Scilab2024.0.0およびScilab上のScilab IPCVツールボックスを使用させていただいております。
Scilab IPCVの dnn_チョメチョメ関数群
IPCVには dnn_で始まる関数群があります。dnn_っていうんだから
Deep Neural Network
なんでありましょう。とはいえIPCVは自分が「深層学習のフレームワーク」になろうなどという野望はもっていないようです。定番のフレームワークで既に学習済のモデルをとってきて、そのなかのレイヤ(フィルタともいえる)の様子を観察する関数などを御提供。サポートしているフレームワークは以下の2つだけのようです。
-
- Caffe
- TensorFlow
2010年代中盤、Deepなネットワークの奴らが大ブレークしたときに人気であった「フレームワーク」2種です。当時、お惚け老人もAIの大波にさらわれて、どちらも触ったことくらいはあるのが草。歴史と伝統のフレームワークっすかね。それでもGoogle様のTensorFlowはいまだに現役、いろいろ更新もつづいているみたい。一方、Caffeの方は未だに利用可能ではあるみたいだけれども、後進に後を託してその歴史的役割を終えた?知らんけど。
lenet5.pb
実際にIPCV上で動かしてみれるモデルとしては、これまた業界の古典のCNN(Convolutional Nueral Network)モデル LENET-5 が同梱されてます。TensorFlow上で学習されたモデルね。当時、AI始めるとなると皆やった
手書き数字認識
の古典中の古典なモデルっす。枕草子か源氏物語か。
今回は、処理例用に提供されている lenet5.pb を読み込んで、手書き数字認識が動作することを確かめてみたいと思います。
処理例
Helpファイルでは数字「3」一文字を認識させる例が掲げられてます。「3」だけではイマイチなので、今回は5と7と3種類認識させてみましたぜ。そのコードが以下に。
dnn_unloadallmodels(); dnn_path = fullfile(getIPCVpath(),'images','dnn'); net = dnn_readmodel(fullfile(dnn_path,'lenet5.pb'),'','tensorflow'); S3 = imread(fullfile(dnn_path,'3.jpg')); S5 = imread(fullfile(dnn_path,'5.jpg')); S7 = imread(fullfile(dnn_path,'7.jpg')); scf(1); subplot(131); title('3'); imshow(S3); out = dnn_forward(net,~S3,[28,28]); [maxV,maxI]=max(out); xnumb(10,10,maxI-1); e = gce(); e.font_size = 10; e.font_color = 5; subplot(132); title('5'); imshow(S5); out = dnn_forward(net,~S5,[28,28]); [maxV,maxI]=max(out); xnumb(10,10,maxI-1); e = gce(); e.font_size = 10; e.font_color = 5; subplot(133); title('7'); imshow(S7); out = dnn_forward(net,~S7,[28,28]); [maxV,maxI]=max(out); xnumb(10,10,maxI-1); e = gce(); e.font_size = 10; e.font_color = 5;
処理結果
確かに認識されとるみたい。10年くらい前にやったなあ、同じようなこと。今は昔。今昔物語か。