cedro-blog

SONY Neural Network Console で 指原莉乃をディープラーニング

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を作成し、その下に、SourceOutputを作成します。そして、Sourceの中に、先ほど作成した、S1S0を格納します。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 は、おすすめです。