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

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

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

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

5187閲覧

CNN 位置の違いで画像を分類することは可能か?

_Victorique__

総合スコア1392

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2019/01/18 05:48

編集2019/01/19 06:56

CNNにおいて、同じ物体を位置の違い(左右等)で分類することは理論上可能なのでしょうか?
私の見解としては不可能だと考えております。
これはどの程度の位置を分類するかにもよるとは思いますが、位置に依存しないCNNにおいて位置による分類ができるとは思えません。

しかし、実際に簡単なモデルで試してみた結果、収束し、分類できてしまいました。
もっと複雑なケースで試してみようとは思っています。
理論上、位置による分類は可能なのでしょうか?

左
Label : 左
右
Label : 右

モデル : VGG16
手法 : fine-tuning
画像処理 : ノイズ付与

イメージ説明

追記

学習済みモデルを使ってVGG16の最後のPooling層後の特徴マップを可視化してみました。

イメージ説明
イメージ説明
イメージ説明
イメージ説明
イメージ説明
イメージ説明

・特徴マップには様々な特徴があり、位置情報を掴めていないように見えるが、どの特徴を使えば
分類出来るかを学習することで位置の特徴として捉えている。
・7×7から1×1に畳み込んでないのを考えると位置情報はある程度残っていること。
・しかし、224×224の画像を7×7の32まで圧縮しているため位置情報は1/7程度だと推測されること。

が分かりました。
回答していただいたみなさん有り難うございました!

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

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

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

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

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

guest

回答4

0

ベストアンサー

http://mp7.watson.ibm.com/ICCV2015/slides/iccv2015_tutorial_convolutional_feature_maps_kaiminghe.pdf
Faster R-CNN の資料です。
10ページくらいから「特徴マップには特徴と位置が出る」と説明・実証されています。
畳み込み層では、位置は残ります。畳み込みのフィルターには位置情報はありませんが、畳み込み演算の結果は位置が残ります。残らないならフィルター足り得ません。
分類するために1次元テンソルに変形しますが、これもある意味、位置が残っています。シャッフルするわけではないので、座標(0,0)から、順番に並んでいます。
ここから、「右にあるバット」と「左にあるバット」に分けたのですから、当然そうわけられる様に係数が調整されます。

投稿2019/01/18 08:32

編集2019/01/18 08:39
Q71

総合スコア995

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

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

_Victorique__

2019/01/18 08:42

回答有難うございます。 正直自分が分からないのは特徴と位置の比率?影響度?の差です。 特徴の方が良く出るのか、位置の方がよく出るのかです。 ここはデータセットによって違ってくるのかもしれませんが。。 質問に載せた画像ではうまくいっていますが、例えばバットの背景が絶えず変化しているようなデータセットだった場合に、果たして上手くいくでしょうか?こればっかりはやってみないと分からないものでしょうか?
Q71

2019/01/18 08:50

資料を見てのコメントでしょうか? 他にも「Grad-CAM」を解説する資料を探してみるといいと思います。 自分で試すなら、畳み込み最終層の演算結果を0-1の範囲に正規化ぢて、255倍するとグレースケール画像と扱えます。整数化してOpenCVでプーリングによって縮小された分を拡大します。それを保存して、元の絵に重ねてみるといいと思います。
_Victorique__

2019/01/18 08:54

確かに可視化からの重ね合わせはいいかもしれませんね。 試してみようと思います。 有難うございました!
guest

0

物体検出でバウンディングボックス(矩形)を出力できるのですから、一般論として位置による分類ができないなんてありえないでしょう。
バウンディングボックスの出力の後ろに1層付け加えれば左右を識別可能になるだろう、ということは容易に想像できるはずです。

物体検出として設計されていないVGG16のネットワークで十分に学習可能かどうか? はまた別の話ですが、質問者さんが「できることを確認した」という解釈になると思います。

投稿2019/01/18 08:00

編集2019/01/18 08:07
quickquip

総合スコア11029

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

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

_Victorique__

2019/01/18 08:07

回答有難うございます。 物体認識の場合はモデルの構成が違ったり、tiitoiさんのおっしゃられているように入力層に近い部分も用いているので、一般的なCNNで可能かと言われるとできないなんてありえないとは言えなくはないですか? CNNの出力層付近において位置情報がほとんど残っていると言えるのでしょうか?
quickquip

2019/01/18 08:12

"一般的なCNN"の定義の広さの問題になりませんか? 「物体検出を行うネットワークは一般的なCNNではない」と主張しますか? 物体検出を行うCNNのモデルがあるわけなので「そのようなモデルをCNNの範疇に入れる」という前提で、できないなんてありえないと書きました。
quickquip

2019/01/18 08:16

直感として「なんの問題もなくできるだろう」と思いましたけど。
_Victorique__

2019/01/18 08:17

別にあげ足を取っている訳ではありません。分かりにくくて申し訳ないですが。 分類に用いられるCNNモデル(全結合層)(具体的なものをあげるのであればVGG16モデル)において最終的な出力層において位置情報はどの程度残っていると考えますか?
quickquip

2019/01/18 08:53

質問のような画像なら十全に残る(ように学習される)だろうと思いました。
quickquip

2019/01/18 08:57

質問のような画像を学習させたら十分に残る(ように学習される)だろうと思いました。
quickquip

2019/01/18 08:58

2重に投稿されてしまいました。すみません。
_Victorique__

2019/01/18 08:59

quiquiさんは相当な経験があると感じました。 自分も実際に試してみて何か知見を得れるようにやってみようと思います。 有り難うございました!
guest

0

位置に依存しないCNNにおいて位置による分類ができるとは思えません。

位置に依存しないというのはどこで目にした情報でしょうか?

プーリングを入れてる場合、位置情報を荒くする効果がありますが、CNN は局所結合のニューラルネットワークなので、位置も特徴として抽出されます。
そうでなければ、物体検出などのタスクはできません。

投稿2019/01/18 05:59

編集2019/01/18 06:00
tiitoi

総合スコア21956

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

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

_Victorique__

2019/01/18 06:04

回答有難うございます。 語弊がありますね。物体の位置に依存せずに物体の特徴を抽出できるという意味で位置に依存しないと書きました。 位置情報が粗くなるというのはどの程度粗くなるのでしょうか?
tiitoi

2019/01/18 06:11 編集

CNN モデルのどの層の特徴かに依存します。 例えば VGG16 ですと、16層畳み込み層がありますが、入力層に近いほど細かい位置の情報が残っており、逆に出力層に近いほど位置の情報は大雑把になります。 なので、物体検出のモデルでは、大小様々な物体を検出する必要があるため、中間層の特徴量等も検出に利用しています。(SSD、YOLOv3 など) 抽出された位置情報を利用するかどうかは、学習で自動で判断されるので、画像分類タスク等であれば物体がどの位置にあるかという特徴は重要でないので利用されないだけです。
_Victorique__

2019/01/18 06:11

となると出力層においてはほぼ位置情報は残っていないと思うのですがどうでしょうか? 0〜10の範囲で大体どの程度残っていると思いますか? 個人の感覚で良いので教えていただけると幸いです。
tiitoi

2019/01/18 06:14

モデル構成や学習対象のタスクによるので試してみないとどの程度かはわからないです。 質問の画像を見ると、かなり位置に差があるので、これぐらいであれば VGG16 の出力層の特徴を使っても分類できるのではと思います。
tiitoi

2019/01/18 08:43 編集

どの程度残っているか気にされてるようですが、「VGG16の出力層には何ピクセルぐらいなら判別できる位置情報が残ってる」などとは一概に言えないので、そのような答えを求めてもケースバイケースとしか答えられないと思いますよ。 質問で2つのバットの位置で判別を学習させたようですが、それらをもっと近づけたら精度に影響が出るか実験してみたらどうでしょうか? 実験してみて、「バットの画像なら何ピクセルぐらいの差なら出力層の特徴で判別できた」ということは言えると思います。 基本的にディープラーニングは「実験してみたら、こうなった」というものですので、試す前からあれこれ言うのは不可能です。
_Victorique__

2019/01/18 08:44

8クラス(画像の領域を8つに分割)で実験してみました。 ノイズを消してバットのみでやってみた結果、高い精度が出ました。 現在はバットの背景を白にしていますが、これが画像によって変わっていたら果たして上手くいくでしょうか?やってみないと分からないかもしれませんが。 Q71さんの回答のコメント欄を参照ください。
tiitoi

2019/01/18 08:48

ディープラーニングはうまくいくかどうかを実験しないで概算するのは困難です。 やってみたらこの場合だとうまくいった、こういう場合だとうまくいかなかったということしかわかりません。 ディープラーニングの論文も「このモデル、パラメータで実験したらこうなった」ということしか基本的に書いてないです。
_Victorique__

2019/01/18 08:54

やはりやってみないと分からないというところですよね。 やっていくうちに出来ること出来ないことがおおよそ予測出来るようになると思うので、 このタスクをもう少し掘り下げて調べてみようと思います。 最後まで回答してくださり有難うございます!
guest

0

順伝播に関しては追うのは難しくないので、実際の画像を入れたときの中間層出力を見てみれば納得感のようなものが得られると思います。やり方はググれば日本語で出てくるようです(良い時代になった)。

投稿2019/01/18 10:54

hayataka2049

総合スコア30933

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問