Maker Faire Tokyo 2017で展示した深層学習でフォントの違いを識別するロボットアームです。
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
modules
preprocess
scripts
.gitignore
README.md
README_before_event.md
requirements.txt

README.md

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” というフレーズがイカしてる。