/MSgothicPolice

Maker Faire Tokyo 2017で展示した深層学習でフォントの違いを識別するロボットアームです。

Primary LanguagePython

MSゴシック絶対許さんマン MS gothic Police

eye_catch

展示内容の紹介

8月5日(土)・6日(日)に開催された Maker Faire Tokyo 2017にて、”フォント”の違いをディープラーニングで見分けるロボットアーム、“MSゴシック絶対許さんマン” を展示しました。

「なんかダサい」「仕事の文書っぽくて気分が下がる」と、何かと嫌われている “MSゴシック” のフォントを自動識別し、アームで拾い上げて床に捨てます

本業でデータ分析や機械学習の業務を行っている会社のメンバー4人で作成し、「ナウい技術で超絶くだらないことをover killする」「”技術の無駄遣い感” を全面に押し出すこと」を目指しました!

「MSゴシック絶対許さんマン」がMSゴシックを識別して床に捨てている様子はこちらから見れます。
(クリックでYoutubeに飛びます)
IMAGE ALT TEXT HERE

"フォントかるた"とは?

フォントかるたは、テキストは全て同じで"フォント"だけが違うというユニークなかるたです。今回はこのかるたを画像データとして取り込み、フォント識別アルゴリズムの学習データとして使わせていただきました

下の画像に映っている10種類のフォントのうち、どれが「MSゴシック」かわかりますか?

FontKaruta

正解はこちら!

FontKaruta_ans

**下段のカルタがMSゴシックでした!

フォントを識別する方法

人間でも見分けるのが難しそうなフォントを、深層学習(畳み込みニューラルネットワーク)を使って機械的に識別する学習モデルを作成しました。
48フォント分の学習データに対して、3層の畳み込み層 + Spatial Pyramid PoolingというPooling層を使って学習しています。ネットワーク構造の詳細はこちら

以下がモデル全体のレイヤーとなります。以下ではinputの画像サイズが(320, 240)となっていますが、実際のスクリプトでは可変サイズ(None, None)を学習するため、Predict時には任意のサイズの画像を指定することができます。

model

データセットについて

フォントかるた製作者の許可もいただき、「フォントかるた」を卓上カメラで撮影、全48フォントに対して1000枚/fontづつデータ化しました。(train:validation:test = 700:200:100)
データセットの半量は180度回転させた状態の画像も含む(加えて、data augumentationによってrotateした画像も含む)ため、Predict時にはかるたの向きを問いません。
画像サイズは 縦:横 = 352:264 です(学習時はconvolutionしやすいように、resizeして320:240 にします)

※画像データセットの公開はもろもろ問題がありそうなため、行わないつもりです。ご容赦ください m(__)m

「MSゴシック」の画像データ例

MSgothic_sampleMSgothic_sample_reverse

学習精度について

batch_size = 32, steps_per_epoch = 150, validation_steps = 100, epochs = 200 で上記データセットを学習させたときのaccとLossの推移は以下となります。

learning_history

テストデータへの当てはまり

各クラス100毎づつ用意したテストデータに対してpredictした結果です。
最高に過学習していますがとりあえずこんな感じです。

confusion_matrix

Grad-CAMによる分類結果可視化

ロボットアームを動かすデモだけでなく、Grad-CAMという手法を用いることで、学習ネットワークがフォントのどこを見て(どういった特徴量を重要視して)分類を行っているのかを可視化した説明展示も行いました。Chainerによる実装をチームメンバーの @ywara93 が行いました。

スクリプトの実行方法

環境

Python==3.5.2  
tensorflow-gpu==1.2.1  
Keras==2.0.6  
numpy==1.13.0  

その他、必要なPythonモジュールについてはrequirements.txtを参照してください。

ファイル構成

MSgothicPolice                                                              
|-- README.md                                                  
|-- README_before_event.md                                     
|-- data                                                       
|   |-- test                                                   
|   |-- train                                                  
|   `-- validation                                             
|-- modules                                                    
|   |-- __init__.py                                            
|   |-- layers.py                                              
|   |-- model.py                                               
|   |-- utils.py                                               
|   `-- visualize.py                                           
|-- requirements.txt                                           
|-- result                                                                                             
`-- scripts                                                    
    `-- train.py                                               

実行

$ cd /MSgothicPolice/scripts
$ python3 train.py

出力ファイル

実行結果ファイルはtrain.py中のresult_pathに指定したパス以下に作成されます。 指定したパス以下に、YYYYMMDD_HHMMSS表記のディレクトリが作成され、その下に

  • hoge.hdf5(重みファイル。lossが更新されるたびに作成される)
  • learning_history.png(学習推移のプロット)
  • tensorboard(tensorboard可視化用のデータ)

が作成されます。

Web掲載

Maker Faire参加決定から当日の様子までをまとめました

その他、幾つかのメディアや個人ブログでも「MSゴシック許さんマン」を紹介していただきました。

本国Maker Faireを運営している団体「Make:」の公式webメディアでも写真付きで一分紹介されました。「親に向かってなんだそのMSゴシックは」のネタTシャツの英訳が晒されるという羞恥プレイ付き。”Font joke meets deep learning” というフレーズがイカしてる。