質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

316閲覧

CNNにおいて畳込み処理中のフィルタについて

toda_tech

総合スコア12

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/02/08 14:33

編集2019/02/08 14:43

CNNにおいて、特徴量検出のための"フィルタ"と呼ばれるものがあると思います。Kerasだと

python3

1Conv2d(32,(3,3))

とすれば3*3のサイズを持った32個のフィルタを用意できて、そのフィルタの値を更新していくことが学習になると思います。

ここで質問が4つあります。

  1. Conv層からの出力の数はフィルタ数と一致すると思いますが、このとき次の層に入力されるのは"元の画像にフィルタをかけたあとの特徴量マップ*フィルタ数"分のデータという認識で正しいでしょうか?

  2. この畳み込みの際に、32個のフィルタを用いるなら32種類に対し毎回毎回画像の畳込みを行って特徴量マップを作っているということでよろしいでしょうか?

  3. 畳み込みの処理を考えてみると、この層においてはやはり"フィルタの数値(3*3フィルタなら9つの数値)"が"重み"としての情報を持つのでしょうか?

  4. 全結合層においてはたくさんのニューロンがさながら"投票"のように各ラベルに信号を送り、最も大きな信号を受け取ったラベルがCNNの予測結果となりますが、このとき"あるラベルXに対してよく反応する1つめの全結合層のニューロン"から浅い層へ戻っていくと"ラベルXに分類されるものの特徴をよく表すフィルタがかかった特徴量マップ"に辿り着くのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Conv層からの出力の数はフィルタ数と一致すると思いますが、このとき次の層に入力されるのは"元の画像にフィルタをかけたあとの特徴量マップ*フィルタ数"分のデータという認識で正しいでしょうか?

その認識であってます。

この畳み込みの際に、32個のフィルタを用いるなら32種類に対し毎回毎回画像の畳込みを行って特徴量マップを作っているということでよろしいでしょうか?

その認識であっています。
ある画像にフィルタを適用すると、1つの特徴マップがでてきます。
なので、32枚フィルタがあるということは32種類の異なる特徴マップが出てきます。

畳み込みの処理を考えてみると、この層においてはやはり"フィルタの数値(3*3フィルタなら9つの数値)"が"重み"としての情報を持つのでしょうか?

「33入力のチャンネル数」です。
例えば、(H, W, 32) の入力を受け取る畳み込み層のフィルタの重みは 3332 個になります。

イメージ説明

全結合層においてはたくさんのニューロンがさながら"投票"のように各ラベルに信号を送り、最も大きな信号を受け取ったラベルがCNNの予測結果となりますが、このとき"あるラベルXに対してよく反応する1つめの全結合層のニューロン"から浅い層へ戻っていくと"ラベルXに分類されるものの特徴をよく表すフィルタがかかった特徴量マップ"に辿り着くのでしょうか?

そのようなやり方で CNN が画像のどこに反応しているのか調べる手法があります。

Class activation mappingを用いたCNNの可視化
GradCam

投稿2019/02/08 14:50

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toda_tech

2019/02/09 00:58

ありがとうございます! チャンネル数分だけフィルタが存在するわけですから、調整すべき重みの数はフィルタ数(チャンネル)*3*3となるわけですね。 それぞれのフィルタは別々の特徴を捉えていると思いますが、学習の際は毎度それらを全て更新するのでしょうか?そうすると損失を最小化していくのは難しそうな気がしますが....
tiitoi

2019/02/09 01:48

(チャンネル)*3*3 は1枚のフィルタの重みです。 出力数 (フィルタ数) がM なら畳み込み層全体では、 (チャンネル)*3*3*M です。 > うすると損失を最小化していくのは難しそうな気がしますが.... 単純なパーセプトロンでも CNN でも学習と言ってるのはただ勾配法であり、それでうまくいっているというのが現状ですから、心配しなくてもいいのではないでしょうか。
toda_tech

2019/02/09 03:11

あ、私はてっきりチャンネル数がフィルタの数かと思っていました..... チャンネル数=入力画像枚数で、32枚の画像に対して3*3のフィルタがそれぞれの画像にM個ずつある、という順番で考えるのが適当なわけですね。つまり一枚のフィルタは入力された画像の全てに対して一度に特徴量マップを計算することが出来るということですか。 3*3*32*M回計算をループせねばならないのかと思っていましたが、少し見当違いだったようです....(笑) 厚かましい限りで申し訳ないのですが、最後にもう一つだけ質問があります。 入力画像の枚数は同じで解像度を上げ、フィルタのサイズを変えない場合、特徴量マップの解像度も上がりますが、これにより層を流れるデータの大きさは増加してもフィルタ数が不変なのでパラメータの数は変わらないということで正しいでしょうか? まだ高校生なもので、高次元配列のイメージがうまく掴めず理解に苦しんでいるところがあります..
tiitoi

2019/02/09 07:38 編集

> チャンネル数=入力画像枚数 それは勘違いされてると思います。 1枚のフィルタは、回答の画像にある入力側の青いブロックが該当します。 1枚のフィルタからは (OUT_H, OUT_W, 1) の特徴マップが出てきます。 なので、出力数が M だとしたら、M 種類の異なるフィルタがあることになり、それぞれのフィルタによる演算の結果、特徴マップが M 枚出てきます。よって、畳み込み層全体では (OUT_H, OUT_W, M) の出力が出てくることになります。
tiitoi

2019/02/09 07:37 編集

畳み込み層のパラメータ数は フィルタの高さ * フィルタの幅 * 入力チャンネル数 * フィルタの枚数 によって決まります。
toda_tech

2019/02/09 11:45

チャンネル数というのはその青いブロックの集まりにおける奥行き、画像における1ピクセル内の(R,G,B)なのですね! しっかり理解できました。ありがとうございますm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問