Pythonを使わずにディープラーニングする
前回はSONY Neural Networkでサンプルを動かしてみたわけですが、それだけでは段々飽きてくる。やっぱりオリジナルデータでやってみたい。
しかし、私は、自慢ではないですがPythonなんて全く触ったこともない。
普通なら、まず「初めてのディープラーニング」とかいう本を買って来て、Pythonを長期間勉強してからとなるんでしょうが、そんなのイヤだ。
きっとすぐ挫折してしまうに違いない。
という訳で、今回はPythonとか言うプログラム言語は一切使わずに、Neural Network Consoleのマニュアル(インストールしたフォルダーの中に入っています)とWeb情報だけで、やってみたいと思います。
AKB48のメンバーをディープラーニングで識別する
さて、ディープラーニングで何を識別させようかと色々考えた結果、自分でも全く識別できないAKB48の顔が良いと思った。
年をとるとアイドルの顔は誰でも同じに見えてしまうのです(笑)。
一般に、ディープラーニングをやるには、多量のデータ(最低1カテゴリ当たり1,000個くらい?)が必要です。
しかし、今回はディープラーニングの一連の流れをやってみることを最優先にして、識別精度には目をつぶり、最小限のデータ量で行うことにします。
ところで、AKB48のメンバーって誰がいるの?
まず最新の、49thシングル選抜メーバーを確認してみました。
ほー、1位は指原莉乃さんって言うんですね。なんとなく名前は聞いたことはあるけれど、顔は初めて認識しました(笑)。
さて、ディープラーニングの識別のさせ方ですが、シンプルに指原莉乃さんかどうかの2択にすることにしました。
集めるデータは、指原莉乃さんを75個、それ以外の人を75個(2位〜12位の中から)、合計150個を集めることにしました。
とんでもなく手抜きで、すいません。
画像データを集める
Googleの画像検索で「指原莉乃」と入れて、後は Windows10 に標準で付いているShipping tool で、顔の部分だけ切り抜いて、ひたすら収集します。
Pythonを勉強するとネットから自動で顔画像を収集し、顔だけ切り抜くなんてプログラムを書けるみたいですが、それを覚えるのに1ヶ月掛かるなら、短時間の力技で勝負した方が圧倒的に早い。
ピクセルサイズにばらつきがあっても、問題ないです。どうせ後から縮小するので。
150個の画像データを収集するのに、約1時間半ほどかかりました。お疲れ様です。
これは、指原莉乃さんの顔画像を集めたフォルダー。
さて、このままではピクセルサイズがバラバラなので、ディープラーニングは受け付けてくれません。ピクセルサイズを統一してやる必要があります。
画像データのピクセルサイズを統一する
大量の画像データを一括してピクセルサイズ統一してくれるアプリがないかなと探したらありました。その名も「縮小専用」。
このリンクからダウンロードして下さい。
http://forest.watch.impress.co.jp/library/software/shukusen/
Desktopに解凍し、後は ShukuSen(アプリケーション)をクリックすれば起動します。
起動するとこんな画面が表示されるので、サイズを指定します。。
ピクセルサイズは、大きいほど精度は上がると思うのですが、先回の手書き数字の「4」と「9」を識別するサンプルプロジェクトのピクセルサイズが28×28であったことを考えると、そう大きくはできないと思い32×32で手を打ちました。
後は、変換したい画像をまとめて選択し、「画像ファイルをここにドラッグ&ドロップして下さい」と書いてある場所にドラッグ&ドロップすればOK。
すると、あっと言うまに、画像フォルダの中に、Resizedフォルダーが自動で作成され、その中にピクセルサイズが統一された画像データが収められます。
はい、これが指原莉乃さんの画像データを32×32ピクセルに変換したものです。ちっちゃいですねー。
指原莉乃さんの変換したフォルダーの名前はS1、その他の方の変換したフォルダーの名前はS0に変更します。
Neural Network Consple とデータを受け渡しするためのフォルダーを作ります。
C:直下に、SNNCを作成し、その下に、SourceとOutputを作成します。そして、Sourceの中に、先ほど作成した、S1とS0を格納します。Outputの中は、この段階では空です。
ここまで準備したら、いよいよSONY Neural Network Consoleのお出ましです。
SONY Neural Network Console でAKB48のデータセットを作成する
まず、左側上部にある「DATASET」をクリックすると、過去に読み込んだData setが現れます。
そこで、「+Create dataset 」タブをクリックします。
Source Dir:先ほど作成した、Sourceを選択
Output Dir:先ほど作成した、Outputを選択
Output Color Ch:3(RGB)を選択
Output Width:32と設定、Output Height:32と設定
Output File 1:学習用ファイル名の指定。akb_train.csvとしました。
Output File 2:評価用ファイル名の指定。akb_test.csvとしました。
Ratio(%):データを学習用と評価用にどういう比率で振り分けるかの設定。合計で100%になるように設定。私は、学習用80%、評価用20%にしました。
以上のデータを入力したら、「Apply」ボタンを押します。
データセットが作成されました。いい感じです。
32×32ピクセルでも、なんとか識別ができそうです。
SONY Neural Network Console で、AKBプロジェクトを作成する
一からプロジェクトを作成するのは、まだ慣れていないので、サンプルプロジェクトを修正する形で、やってみようと思います。
まず、先回のサンプルプロジェクト、01_logistic_regression.sdcprojを開きます。
そしたら、Save as ボタン(赤丸)を押します。
一旦、akb.sdcprojという名前で、さっき作ったOutputにセーブします。
さて、プロジェクトファイルakb.sdcprojはできましたが、設定が前のままですので、設定を修正して行きます。
EDIT画面にします。関数ブロックの「Input」(黒色のやつ)をクリックすると、左側下に設定内容が表示されます。Sizeのところの数字が1,28,28になっていると思いますが、ここを3,32,32に変更します。
Sizeの数字の先頭の1か3は、モノクロかRGBを表し、その後の数字はピクセルサイズを表しています。
CONFIG画面にします。Batch Sizeが64になっていると思いますが、ここを28に変更します。
Batch Sizeは、一度に処理するデータ量で、akb_test.csvはなんと30個しかデータがないので、30より小さな数字にする必要があります。
DATASET画面にします。今は、「4」と「9」の学習データと評価データが入っているので、これをAKB48のデータに入れ替えます。赤丸のところをクリックして、データセット一覧を出します。
左側で選択されているデータに対応したデータを中央のデータセット一覧から選んでクリックして下さい。まず、Traningに対応する、akb_train.csvを選択します。
はい、Training(学習)データがakb_train.csvに変更されました。
続いて、Validation(評価)データをakb_test.csvに変更します。
赤丸のホームボタンを押して、ポップアップが出たら「はい」を押し、プロジェクトの修正を保存して下さい。
はいこれで、akb.scdprojが完成しました。やったー!
学習と評価をやってみる
右上のTrainingの「▶︎」ボタンを押します。順調に学習が進んでいるようです。
続いて、右上Evaluationの「▶︎」ボタンを押し、評価をします。
評価が完了したら、中央上部のConfusion Matrixのラジオボタンを押します。
はい、評価結果が出ました。指原莉乃さんを識別できる精度は73.33%でした。
データが全部で150個とちょー少ないので、こんなもんでしょうか。だけど、私の識別精度(0%)と比べれば素晴らしい結果だと思うでしょ?
ところが、今回私、ディープラーニングに教えるためのデータを作ることで、私も当然指原莉乃さんを識別する訓練をした訳です。私の識別精度も7割くらいにはなったと思います(笑)。
SONY Neural Network Console は革新的なディープラーニングツールだ
今回、何をどのようにディープラーニングするかの企画、データ収集、データ前処理、データセット作成、プロジェクト作成、学習、評価と一連の流れをやってみて、大きな充実感があります。
やっぱり、SONY Neural Network Console って、革新的なツールです。プログラム知識なしで、とりあえずディープラーニングの一連の作業がやれちゃいました。
私が思うには、ディープラーニングに興味があって、ちょっと触ってみたい人って世の中に沢山いると思うのです。
ただ、そのために、まず地道なプログラムの勉強を長期間しなければならないってところに大きなハードルがあって、みんな諦めちゃうんじゃないかな。少なくとも、私はそうでした。
そうじゃなくて、細かな所は分からなくても良いから一連の流れをまずやってみる、やって何か結果が出れば次にまた何かしたくなる、そうすれば段々細かな所にも興味が出てきて自然に覚えるようになると思うのです。
そう言う方法が好きな人には、Sony Neural Network Console は、おすすめです。
丁寧な説明で、マニュアルだけでは、何もできない初心者でも、データの準備の仕方から良くわかり、とても助かります。
私は、自分が良く区別できない、アジ、サンマ、イワシ、サバの写真を入れて、機械は識別できるのか、いろいろと試して、楽しんでいます。
ありがとうございます。
Mafaldineさんへ
嬉しいコメントをありがとうございます。
私自身が初心者で、色々試行錯誤した結果を自分の備忘録としてまとめていますので、ご参考になれば誠に幸いです。
なるほど、アジ、サンマ、イワシ、サバの識別ですか。良い題材ですね。
実は、私も全く識別できません(笑)。
今後とも、よろしくお願いします。
ご丁寧な説明で大変参考になります。ありがとうございます。
AIを耳にしない日がないこの頃、プログラムの知識の無い私にはピッタリなソフトで、
しかも無料で試せると飛びつき評価まで行いました。
ただどこのサイトを見ても学習→評価までの流れは書かれておられても、その後(新規に用意した写真を判断させる)
については全く書かれていないということはまだそこまで出来ないツールということでしょうか。
kun様
コメントありがとうございます。
自分が初心者なので、自分の備忘録を普通に書くと、自動的に分かり易くなるんだと思います(笑)。
通常、ニューラルネットワークの学習には、学習ファイルしか使いません。
そのため、ニューラルネットワークにとっては、評価ファイルは新規のデータと同じです。従って、どのサイトを見ても、学習+評価でワンセットになっていると思います。
評価ファイルで1度評価したが、さらに新たなデータで評価して見たいと言うことなら、学習+評価が済んだプロジェクトの評価ファイルを、新たなデータに入れ替えて新たに評価することも出来ます。
はじめまして GGEと申します。
還暦過ぎ定年退職後VisulaC++2017とNNCを勉強し始め、その過程をHPとYoutubeで
紹介しています。先々週ぐらいから、やっとNNCを始めました超初心者です。
本読むだけではわからないので、動かしてみようといろいろ探していたところ貴殿の
非常に分かりやすい解説に出会い、お礼申し上げたい次第です。
一応貴殿サイトの解説通りにAKB柏木由紀で実行しました。
そこでお願いなのですが、自分のサイトにも、ここを紹介し結果を掲載したいと
考えているのですが問題あるようでしたら、やめておこうと思います
いかがでしょうか。
初対面でのお願いで恐縮です。
またいろいろ勉強させてください お願いいたします。
GGEさんへ
コメントありがとうございます!
柏木由紀さんと来ましたか。いいですねー。
何か夢中になれることがあるというのは、毎日の生活に張りが出ます。
お互い、新たなことにチャレンジして行こうじゃありませんか。
私のブログは、リンクフリー、紹介大歓迎です。
今後ともよろしくお願いします。