Chainerでフォントを識別してみる (2)
前回、二つのフォントをいい感じに識別できていたので、識別対象フォントを12に増やしてみた。
今回識別対象にしたフォントたち
Helvetica
Bodoni
Futura
Optima
Clarendon
GillSans
Caslon
Garamond
Avenir
Times New Roman
American Typewriter
Trajan
訓練データとテストデータの構成
- 訓練データは[a-mA-M]の64x64 グレースケール画像。画像ごとに位置はランダム
- テストデータは[n-zN-Z]の64x64 グレースケール画像。同じく画像ごとに位置はランダム化してある
実験
試行1: 3層多層パーセプトロン(隠れ層ニューロン数100)
前回使ったのと々、隠れ層2層、出力層1層の多層パーセプトロン。
=> 87%程度で識別率が頭打ちになった。2クラスへの識別だけであれば、同条件で97%まで行っていたので、
12クラスへの識別になって認識率が落ちたことが確認できる。
試行2: 3層多層パーセプトロン(隠れ層ニューロン数200)
2つの隠れ層の表現能力が足りないのかもしれないと思い、ニューロン数を200に増やしてみたパターン。
=> 90%程度で頭打ち。試行1よりかすかに識別率が上がった
試行3: CNN
CNN(畳み込みニューラルネットワーク)を導入。畳み込み+relu+Max Poolingを3セットの後にLinear層を2層。
epoch数100を超えたあたりで識別率が99.9%以上となった。
今後
・十分な汎化性能がありそうなので、多種多様な日本語フォントの識別を行ってみる
・各フォントにはItalicやBoldなどいろいろなスタイルもあるため、スタイル変更した際にも識別を行えるか試す
・スタイル転写とか使って、英字フォントから日本語フォント作れたら面白い気がする