可視化 画像処理

kerasでCNN実装

投稿日:

CNNとは

CNNは、畳み込み層、プーリング層、全結合層から構成され、この構造により、画像をピクセルではなくピースごとに比較することが特徴。
2つの画像を比較して、だいたい同じ位置にある、特徴がほぼ一致する箇所を検出することで、
CNNは、画像全体のマッチングを試みる場合(通常のディープラーニング)よりも、正確な類似性判定が可能となる。

畳み込み層とプーリング層について

  • 畳み込み層
    フィルタを使い、その区画に特徴(画像の共通性のある要素)が含まれているかを判定する層。
    この出力結果は、元の画像のフィルタ処理版でもあり、特徴が画像内のどこにあるかを視覚化するもの。
    1に近い値は一致の度合いが強く、-1に近い値は特徴の反転(ネガ)に対して強い一致を示している。
    一方でゼロに近い値は、どちらにも一致していないことを示す。
    畳み込みを複数回重ねることで、小さな特徴を組み合わせ大きな特徴を表現できる
    具体的な処理として、入力データに対して、重み付きのフィルタの内積をとる。
    重みフィルタは、入力データに比べて小さいため、内積をとる際は、入力データの一区画となる。これをスライドさせながら全データとの内積をとる。このときのスライドする間隔をストライドという。
    また、入力に対して、出力のデータサイズは、フィルタサイズ-1分だけ小さくなってしまう。これを防ぐ方法をして、入力データの外枠に、(フィルタサイズ-1)/2のデータを追加するパディングというものがある。入力値として、すべて0、隣のデータと同じものを入力する方法がある。
    各フィルタの重みは、バックプロパゲーションによって、各特徴に対して最適化される。
  • プーリング層
    プーリングとは、大きな画像を、重要な情報は残しつつ縮小する方法で、画像内を小さなウィンドウに区切り、
    区切ったそれぞれのウィンドウから最大値を取る処理。
    ここではウィンドウ内における特徴の厳密な位置ではなく、ウィンドウの中のどこかに特徴があるということの方が重要。
    その結果、CNNは特徴の正確な位置を気にすることなく、画像内で特徴の場所を探すことができる。
    プーリングの方法として、最大値をとる最大プーリングや、平均値をとる平均ピーリングがある。
  • Rectified Linear Units(ReLU)
    仕組みは非常にシンプルで、マイナスの数字が生じた時に、それを0に変換する。これにより、学習値が0付近で立ち往生したり無限に向かったりすることがなくなり、CNNの健全性を保つ。
  • CNNの応用について
    列を入れ替えてもデータの有用性が変わらない場合、CNNは使えません。
    しかし、問題を画像のようなパターンに変換できるなら、CNNが最適かもしれません。

reference:
http://postd.cc/how-do-convolutional-neural-networks-work/

CNNの精度を向上させる方法

精度を向上につながるハイパーパラメータ

  • 各畳み込み層のフィルタ数
    フィルタの数は、画像識別に使われる特徴量の数に相当する。
    多い方がより複雑な特徴に対応可能となるが、過学習や計算時間とのトレードオフとなる。
  • 各畳み込み層のフィルタサイズ
    フィルタのサイズは、画像識別に使われる特徴のサイズに相当する。
    畳み込みを複数回重ねることで、小さな特徴を組み合わせ大きな特徴を表現できるので、
    小さい方が、性能が上がりそうだが、小さすぎると通常のディープラーニングと同様の結果となってしまう。
  • 各畳み込み層のストライド
    特徴量フィルタで全画面を操作するときのステップ数。
    この操作により、特徴が画面のどの位置に存在していても検知できる。
    ステップ数が荒い場合、特徴をスキップするリスクがある、
    細かいと計算時間が増加する。
  • 各プーリング層のウィンドウのサイズ
    ウィンドウサイズは、位置ずれや歪みを許容する量に相当する。
    実際にはウィンドウの一辺が2、3ピクセルでうまく機能する。
  • 全結合層の数
    層が追加されるごとにネットワークはさらに複雑な特徴の組み合わせを学び、高精度な判定が可能となる。
    ただし、計算時間や過学習のリスクがある。
  • 層を深くする
    層を深くすることで、より複雑な特徴の組み合わせにマッチングできるようになる。
    しかし、層の深化により勾配消失を引き起こす可能性がある。
    その解消法として、skip connection(ステップを飛ばして結合させる)
    インセプション(inception):分岐して再度結合させるなどの工夫がある。
  • ドロップアウトを追加
    ドロップアウトにより過学習を防止する。
    ランダムで一定の割合でノードを削除する処理のこと
  • Batch Normalization
    勾配消失を防ぐため、バッチごとに正規化(平均が0で分散が1)を行う
  • 全体の構造
    層数、順序、構造など。
    ディープニューラルネットワークには1000を超える層を持たせることが可能。
    多くの可能性があるが研究段階。

データサイズを確認

CNN構造

画像分類なので、過去の実績のあるVGGをベースとする

VGGを定義

モデルの選定理由

画像分類として実績があるためVGGをベースに構造を決定。 画素数が少ないため、階層が深すぎるとも感じられるが、精度を重視し、階層は変化させていない。 その他のハイパーパラメータについては、 ランダムサーチを活用して、最も性能の良いものを選定したいが、計算に時間がかかりすぎるためデフォルト値とした。

中間層の表示

-可視化, 画像処理

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

kaggle:House Price チュートリアル(EDA探索的データ解析)

Contents1 概要説明1.1 データ探索の流れ2 ライブラリインポート3 データの読み込み4 データ項目からの考察5 SalePriceの分析5.1 ヒストグラムで分布の可視化5.2 数値変数と …

no image

python/sklearn/単回帰(LinearRegression)

2次元のデータに対して単回帰分析を行う。 Contents0.1 データ取得0.2 メソッド0.3 可視化0.4 学習データとテストデータに分割0.5 単回帰分析0.6 結果のプロット1 決定係数の算 …

no image

python/matplotlib/subplot(グラフの複数表示)

サブプロットを使うことで複数のグラフを並べて表示する事ができる。 Contents1 データ取得2 メソッド3 手順 データ取得 必要なモジュールのインポート [crayon-5f08b861a4da …

no image

タイタニック生存者予測~ランダムフォレスト~

有名なタイタニックのデータを使って、RandamForestを使って生存者を予測します。 Contents0.1 前処理について0.2 モデル選定について 0.2.1 ロジスティック回帰0.2.2 S …

no image

kaggle:House Price チュートリアル(LASSO回帰とRIDGE回帰)

Contents1 概要説明1.1 作業の流れ2 ライブラリインポート3 データの読み込み4 前処理4.1 対数変換4.2 ダミー変数化4.3 欠損値処理4.4 データの分割5 モデリング5.1 RI …