手習ひデジタル信号処理(172) Scilab、{IPCV}、Deep Learning?

Joseph Halfmoon

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;
処理結果

結果が以下に。左下の赤字が認識結果です。Lenet5_results

確かに認識されとるみたい。10年くらい前にやったなあ、同じようなこと。今は昔。今昔物語か。

手習ひデジタル信号処理(171) Scilab、{IPCV}、超解像(多画像超解像)へ戻る

手習ひデジタル信号処理(173) Scilab、{IPCV}、Lenetのパラメータの表示 へ進む