さあ!AIに「眼」を与えよう。~畳み込み層について~
みなさん。こんにちは!
今日も張り切っていきましょう。
前回からCNNについてブログを書いていて
お話しました。
前回のブログをまたみていない方は上から参照してみてください。
今日はCNNの中でも畳み込み層に焦点を当ててお話していきます!!
〜今日の内容と参考文献・サイト〜
画像のある性質を用いている!?
前回のブログでも書いたように
畳み込み層はCNNの中でもかなり重要な役割を担っていて
入力された画像の特徴を強調したり、弱めたりしてより特徴がはっきりとするものに
変換するところでしたね。
もう少し突っ込んだ話をしましょう
ではどうやって特徴を強調したりするのでしょうか?
実は画像のある性質を利用しているのです。それは・・
「局所性」
画像というものは「ピクセル」と呼ばれる要素が多く並んでできています。
この「ピクセル」に色などの情報が入ることでそれらが合わさることで
1つの画像ができているのです。
局所性とは
画像を構成する1つ1つのピクセルは隣のピクセルと似たような性質を持っている
というものです。
隣のピクセルが赤色だったら自分も同じような赤色になるって感じでしょうか
畳み込み層はこのような画像の性質を利用して特徴を抽出しているのです!
では局所性をどのように利用して畳み込んで行くのでしょうか?
〇〇〇〇を用いて畳み込んでいく!
畳み込み層が画像の局所性を利用してるということはわかりましたね。
局所性がどこで利用されているのか見て行きます。
畳み込み層では複数の「フィルタ」というものを用いて画像の検出を行います。
それぞれのフィルタは異なる特徴量を抽出するもので、これらを組み合わせて
画像を検出して行きます。
下の図を見てください。
この図では画像のピクセルが4x4四方となっておりフィルタの枚数を1枚としています。
フィルタのサイズを2x2四方にしています。
また各ピクセルの値が色相に相当するとします。
フィルタが画像を検出していく工程は
色がつけられた二箇所を見てください!
それぞれのピクセルがフィルタと掛け算され最終的に和が取られていますね。
例えば青色の範囲だと・・
(1x1)+(0x0)+(0x0)+(1x2)=3
黄色の範囲では・・
(1x1)+(0x1)+(0x2)+(1x0)=1
となっていますね。
図から分かるように畳み込みを行うことで画像のサイズは小さくなっています。
理由は画像のピクセルがフィルタにより新ピクセルとしてまとめられているからです
これは先ほど説明した画像の「局所性」を利用して行っているということが
わかるかと思います。というのも・・
近くのピクセル同士で似たような性質、つまり「局所性」があるので
フィルタでまとめて合算することができて、
より特徴が強調され、かつ画像も小さくなっているのですね!
さらにもう気づいている方もいらっしゃるかもしれませんが・・
フィルタがスライドするので隈なく処理するので
画像のどこに対象がいても対処できるのです!!
これで終わりかと思いきや・・
もう少し突っ込んだ話をさせてください笑
一般的な画像データはカラーですよね?
基本的にはR(赤)、G (緑)、B(青)の組み合わせでいろんな色ができています。
カラーである画像は各ピクセルがR,G,Bの色を持っています。
つまりR、G、Bの3枚からなる画像から構成されて一枚の画像ができているのです。
この枚数をチャンネル数といいます。
モノクロ画像の場合はいいのですがカラー画像であると
このチャンネル数が増えるので畳み込みの処理がちょっと複雑です。
しかしカラー画像を処理できなければ「眼」と呼ぶには程遠いですよね・・。
次はより実用的なCNNを見ていきましょう。
より実用的なCNN
上の例ではチャンネル数が3でフィルタの数は2になっています。
見た感じ先ほどのものと比べかなり複雑になっていますね・・。
少しずつ見ていきましょう。
まず最初のところ。ここはかなり大事です。
チャンネル数=フィルタの枚数
フィルタの種類は1,2,3とかたくさんあってもいいのです。
ただしそれぞれの枚数はチャンネル数に合わせてください!ということです。
この例ならばチャンネル数は3なのでフィルタ1も3枚必要。
ということになります。
次にフィルタごとに画像の畳み込みを行います。
Rの画像でもフィルタの検出をして・・次に
Gの画像でも同様にそれぞれ畳み込んで行きます!
畳み込み方は先ほど説明したのと変わりありません!!
畳み込まれたそれぞれの画像を最後足し合わせて1つの画像にして行きます。
R,G,Bの画像を合算して一枚の画像が生成されます。
生成された画像の枚数=フィルタの枚数
となります。
こうしてフィルタごとに一枚の特徴が強調された画像ができていますね。
最後に「処理」という工程が図には示されていますね。
具体的な内容としては
1.出力画像に重みをかけバイアスを足す
↓
2.活性化関数で非線形変換
↓
3.新たな画像が完成!!
新たな画像はプーリング層など他の層に渡されてとりあえず終了です。
これで畳み込み層が役目を終えます。
重みとバイアスの違いについてなのですがこれはまた別の記事で
詳しく紹介します。
参考文献・サイト
はじめてのディープラーニング -Pythonで学ぶニューラルネットワークとバックプロパゲーション- (Machine Learning)
- 作者: 我妻幸長
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2018/08/28
- メディア: 単行本
- この商品を含むブログを見る
次回もまた見てください!ありがとうございました!