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

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

新規登録して質問してみよう
ただいま回答率
85.49%
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

OpenCV

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

機械学習

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

Python

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

Q&A

1回答

2951閲覧

grad camを用いてヒートマップの作成したがずれる.

ruto844

総合スコア6

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

OpenCV

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

機械学習

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

Python

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

0グッド

0クリップ

投稿2020/01/31 08:40

編集2020/01/31 14:36

現在,CNNを用いて画像分類を行っています.
その過程でヒートマップを求めるためにgrad camを実装しました.

この時,grad camから出力されたヒートマップのサイズが64x46でした.
また,入力画像のサイズは,640x480です.

grad camのサイトを参考にしていたところ,
このヒートマップを拡大すれば入力画像と同じサイズになり,上手に重なっていました.
しかし,ネット上の多くの例では,入力画像もヒートマップも正方形であるので,拡大すると上手に重なっています.

しかし,私の場合は,64x46を入力サイズに合わせて(640x480)に拡大すると
縦横比が違うために入力サイズにヒートマップを重ねるとズレが出てしまいます.
これが64x48サイズだったらよかったのか?

何かこの問題を解決するためのアイデア等があるかた,よろしくお願いします.
追加情報が必要な方は,返信しますのでコメントをお願いします.

python

1 2#準備 3model = load_model('cnn_model.h5') 4print(model.summary()) 5 6 7data = img_to_array(load_img('./input/cat10007.jpg', target_size=(480,640))) 8 9 10 11#backend動作 12layer_name = 'max_pooling3d_4' 13last_conv = model.get_layer(layer_name) 14data_output = model.output[:,0] 15 16 17 18 19grads = K.gradients(data_output, last_conv.output)[0] 20pooled_grads = K.mean(grads, axis=(0,1,2) 21iterate = K.function([model.input], 22 [pooled_grads, last_conv.output[0]]) 23 24 25#Main 26 27pooled_grads_val,conv_output_val = iterate([data]) 28 29for i in range(pooled_grads_val.shape[0]): 30 conv_output_val[:,:,i] *= pooled_grads_val[i] 31 32heatmap = np.mean(conv_output_val,axis=-1) 33print(heatmap.shape) #(46,64) 34 35#ヒートマップの後処理 36 37heatmap = np.maximum(heatmap,0) 38heatmap /= np.max(heatmap) 39 40 41 42##################### 43heatmap = cv2.resize(heatmap,(640,480)) 44heatmap = np.uint8(255 * heatmap) 45 46#動画にヒートマップを適用していく. 47image0 = cv2.applyColorMap(heatmap,cv2.COLORMAP_JET) 48plt.imshow(image0) 49plt.show() 50 51frame = '元のイメージ' #入力画像 52superimposed_img = frame + 0.6*image0 53#superimposed_img = cv2.addWeighted(frame,0.7, image0, 0.3, 0) 54 55 56 57plt.imshow(superimposed_img) 58plt.imshow(image0) 59plt.show() 60

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

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

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

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

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

tiitoi

2020/01/31 09:02

コードを質問欄に記入できますか?
ruto844

2020/01/31 14:36

遅くなりました. コードを追記しました.
tiitoi

2020/02/01 14:18

追記ありがとうございます。 質問欄のコードが一部のため、動かして確認することができないのですが、リサイズしたら、入力画像のスケールになるので、一見問題がないように見えます。 ずれるとはどのぐらいずれるのでしょうか?実行結果を貼ることはできますか?
ruto844

2020/02/02 10:16

遅くなりました. 私が使用している画像は,黒の外枠ありの画像になります. 認識しているであろう形の部分が横に20~30ほどずれてしまっています. 実行結果については,申し訳有りませんが載せることができません.
guest

回答1

0

プールは、どうしていますか。プールで小さくなったものをそのまま戻します。

追記
プールサイズ、ストライド、パディングの指定によって、テンソルが小さくなります。このとき、端数処理がされます。ですから、プーリング層1層で小さくなった分を1層ずつ元に戻していきます。そうするとずれを最小に抑えることができます。
単純にやりたいなら、プーリング層で小さくなる時に丸められないように、小さくなる分を考えながら、元の画像の大きさを決定します。

投稿2020/02/02 09:55

編集2020/02/02 10:53
Q71

総合スコア995

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

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

ruto844

2020/02/02 10:33

回答ありがとうございます. CNN内ではプーリングも行なっています. プールで小さくなったものを戻す. というのは,どういうことでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問