2017年6月12日月曜日

深層学習を使ってツイッター画像のラベル付けができるまで(2)

深層学習によるマルチラベルのラベル付け


前の記事で、ツイッター画像へのラベル付けの流れを説明しました。
今回は、特に重要なポイントになるラベル付けのための学習モデルをどのように改善していったか説明します。

画像の深層学習には畳み込みニューラルネットワーク(CNN: Convolutional Neural Networks)を使います。(ここでは深層学習については詳しく説明しません。前の記事で紹介した本やこの記事で学習して下さい)


1. まずは動かす。

Pythonによるスクレイピング&機械学習」の7-3をベースに教師データからトレーニング用データを作成し、そのトレーニング用データから学習モデルを作成するコードを作成します。
この時、以下のパラメータをそのまま採用しました。
  • 活性化関数: ReLU、softmax(最後のみ)
  • ドロップアウト: 0.25、0.5(最後のみ)
  • ロス関数: binary_crossentropy
  • optimizer: rmsprop
その他のパラメータは以下で設定。
  • 画像サイズ: 128
  • バッチサイズ: 64
  • エポック(学習回数): 10

■学習モデルのテスト結果

  • loss= 0.263982442949
  • accuracy= 0.917964078352

■サンプル画像でのラベル付け(抜粋)

サンプル画像のファイル名に、期待しているラベルを付けている。
  • sample-calendar01.jpg
    • illust: 1.0
  • sample-capture_text01.jpg
    • text: 3.62731e-12
    • capture: 1.0
  • sample-icon01.jpg
    • icon: 1.0
  • sample-icon06.jpg
    • illust: 3.1109e-17
    • text: 1.0
  • sample-illust_calendar05.jpg
    • illust: 1.0
    • text: 2.97645e-10
そこそこよい感じだが、マルチラベルでの判定になっていない。(実質、一つのラベルになっている)

■マルチクラスとマルチラベル

一つの入力に対して複数(3以上)の分類先がある問題を「マルチクラス問題」と呼ぶそうです。機械学習のサンプルでよく使われるMNISTは、「手書き数字の画像」を0から9のどれかに分類するので、典型的なマルチクラス問題です。
一方、マルチラベルは、一つの入力に複数のラベルがつく問題です。ツイッター画像には「イラスト」「文字」「写真」など一つの画像に複数のラベルが付けたいのでマルチラベルに適したアルゴリズムが必要っぽいです。

2.マルチラベル問題のための設定

単純に教師データが少ないためかと思い教師データを増やしたが変わらず。ドロップアウトのパラメータを変更してみたが変わらず。
ロス関数をbinary_crossentropyからcategorical_crossentropyに変えてみたところ、loss、accuracyの値は変わりましたが、結果はやはりマルチラベルからは程遠い…
また、このサイトの情報によると

  • categorical_crossentropy: 1-of-N (one-hot)  → for multiclass
  • binary_crossentropy: 1-or-more 0/1 labels  → for multilabel
のようです。なのでbinary_crossentropyが正解です。

マルチラベルについて調べたところ、以下のようなメモを発見。
他にソフトマックスではなくてシグモイドに通してloss関数に binary_crossentrpy などfchollet/keras#741予測する時は確率が0.5以上なら採用
ということで、最後のロス関数をsoftmaxからsigmoidに変更したところ、マルチラベルの結果が得られるようになりました!!
※ただ、sigmoidを使う方が良い理由は分からないので、ご存知の方がいましたら教えていただけると嬉しいです。

■学習モデルのテスト結果


  • loss= 0.427535426005
  • accuracy= 0.945025641674 

■サンプル画像でのラベル付け(抜粋)

  • sample-capture_text05.jpg
    • illust: 1.0
    • text: 1.0
  • sample-illust_calendar07.jpg
    • text: 1.0
    • placard: 1.0
  • sample-illust_text01.jpg
    • illust: 1.0
  • sample-illust02.jpg
    • illust: 1.0
    • text: 1.0
    • placard: 1.0
  • sample-placard01.jpg
    • text: 1.0
    • placard: 1.0
  • sample-text01.jpg
    • illust: 1.0
    • text: 1.0
次は精度を高めるための工夫について続きます。

0 件のコメント:

コメントを投稿

深層学習を使ってツイッター画像のラベル付けができるまで(3)

深層学習のラベル精度向上のためにやったこと  前の記事 で、無事マルチラベルのラベル付けができる学習モデルが作成できるようになりました。ただ、その精度は納得できるレベルではなかったので、その改善のために「やったこと」と「起きたこと」を説明します。 やったこと1: 教師...