LoginSignup
3
3

More than 5 years have passed since last update.

Kerasを触ってみた その①「りんごとオレンジの画像判別」(2017/5/23)

Last updated at Posted at 2017-08-05

最初に

 とりあえずKeras経由のDLに慣れるために、なんでも良いので動かすことを目的に下記URLで紹介されているデモコードを実行してみる。そしてコードに解らない点があったら調査&メモとして記録する。

 Kerasによる、ものすごくシンプルな画像分類(りんごとオレンジ)

事前準備

◯識別する画像の収集

  Google画像検索で、リンゴとオレンジの画像をDLしてローカルのフォルダに配置する。
  Training:20個、Test:5個

  train/apple/…
    /orange/…
  test/apple/…
    /orange/…

◯追加ライブラリの導入
 ・numpy
  (ナムパイ/ナンパイ)は、数値計算を効率的に行うためのライブラリで多次元配列(ベクトル・行列)の演算が可能

 ・pillow
  画像処理ライブラリで、Python Imaging Library (PIL)の fork プロジェクト

画像識別 〜処理の大まかな流れ

 ①学習用データ作成
 ②モデル生成・ニューラルネット構築
 ③学習の実行
 ④モデル予測と正解との比較 →正解率

①学習用データ作成

・クラスラベル(正解)は、ディレクトリ配置から取得
・画像を25 x25ピクセルに変換
・[R,G,B]3要素のnumpy配列化する
 1画像:25x25ピクセル分の配列
 1ピクセル:[244 245 250]のような感じ

・Transpose→Reshapeで一次元配列に。
 [ 244. 244. 244. ..., 238. 240. 241.]
 要素数は、25x25個

②モデル生成

 model = Sequential()  #Sequentialモデル(系列) の定義。層を積み重ねたもの
 model.add(Dense(200, input_dim=1875))  #addメソッドで層を追加
  #Denseは、通常の全結合ニューラルネットワークレイヤー。
  #モデルは(*, 1875)次元の入力配列となり,(*, 200)次元の出力配列となる
 model.add(Activation(“relu”)) 
 model.add(Dropout(0.2)) #入力にドロップアウトを適用.訓練時のそれぞれの更新において入力ユニットのpをランダムに0にセットすることであり過学習を防ぐのを助ける
 model.add(Dense(200))
 model.add(Activation("relu"))
 model.add(Dropout(0.2))

 model.add(Dense(2))
 model.add(Activation(“softmax”)) #Softmaxは入力の最後の次元に適用

  ReLU (Rectified Linear Unit)で活性化関数を追加
  参考:http://www.procrasist.com/entry/

③学習の実行

◯モデルをコンパイル
  →モデルの最適化(勾配法)には、Adamを使用。(重み付けの手法)
   参考:http://qiita.com/tokkuman/items/1944c00415d129ca0ee9
  →目的関数(ロス関数や最適スコア関数)は、categorical_crossentropy
   categorical_crossentropy: マルチクラスlogloss

◯学習の実行(fit)
  →引数
   batch_size: 勾配更新毎のサンプル数を示す整数.
   nb_epoch: 学習データ配列の反復回数を示す整数.
   validation_split: バリデーションデータとして使われる学習データの割合。モデルはこの割合の学習データを区別しそれらでは学習を行わず,各試行の終わりにこのデータにおける損失とモデルメトリクスを評価

④モデル予測と正解との比較 →正解率

◯テストデータ作成
 ・トレーニングデータと同じ加工

◯モデル予測と正解との比較 →正解率
 ・model.predict_classesで、クラスラベルを予想
 ・クラスラベル(正解)は、ディレクトリ配置から取得
 ・予想と正解の一致を集計
 

まとめ

今回は殆どデモコードに沿って実行してみたに過ぎないが、Kerasでとてもコンパクトに画像分類が実装できることを実体験した。ただし今回、分類のための方法はかなり単純なものとなっているので、より複雑な分類を行うには前処理としてのデータ加工にパワーを掛ける必要がありそうに思った。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3