0

セグメンテーションの件名で異なるバッチのプロット出力について疑問と質問があります。

以下のスニペットは、各クラスの確率と予測出力をプロットしています。

prob plots が 1 つのバッチをプロットしていることは確かですが、torch.argmax(outputs, 1) を取得したときの予測についてはわかりません。ネットワークの出力のサイズが [10,4,256,256] のときに、1 つのバッチの argmax をプロットしましたか。

また、バッチ サイズが 10 の場合にすべてのバッチの予測をプロットするにはどうすればよいでしょうか。

outputs = model(t_image)

fig, (ax1, ax2, ax3, ax4, ax5) = plt.subplots(nrows=1, ncols=5, sharex=True, sharey=True, figsize=(6,6))

img1 = ax1.imshow(torch.exp(outputs[0,0,:,:]).detach().cpu(), cmap = 'jet')
ax1.set_title("prob class 0")

img2 = ax2.imshow(torch.exp(outputs[0,1,:,:]).detach().cpu(), cmap = 'jet')
ax2.set_title("prob class 1")

img3 = ax3.imshow(torch.exp(outputs[0,2,:,:]).detach().cpu(), cmap = 'jet')
ax3.set_title("prob class 2")

img4 = ax4.imshow(torch.exp(outputs[0,3,:,:]).detach().cpu(), cmap = 'jet')
ax4.set_title("prob class 3")

img5 = ax5.imshow(torch.argmax(outputs, 1).detach().cpu().squeeze(), cmap = 'jet')
ax5.set_title("predicted")
4

1 に答える 1

1

あなたが何を求めているのかわからない。NCHW データ レイアウトを使用していると仮定すると、出力はバッチあたり 10 サンプル、4 つのチャネル (異なるクラスの各チャネル)、256x256 の解像度であり、最初の 4 つのグラフは 4 つのクラスのクラス スコアをプロットしています。

5 番目のプロットでtorch.argmax(outputs, 1).detach().cpu().squeeze()は、10x256x256 の画像が得られます。これは、バッチ内の 10 個の画像すべてのクラス予測結果であり、matplotlib はそれを直接適切にプロットできません。したがってtorch.argmax(outputs[0,:,:,:], 0).detach().cpu().squeeze()、プロットできる 256x256 のマップが得られるようにする必要があります。

結果は 4 つのクラスを表す 0 から 3 の範囲になるため (非常に暗い画像として表示される場合があります)、通常はパレットを使用してプロットに色を付けます。ここに例をcityscapes_map[p]示します。例の行のようになります。

10 個すべてをプロットするには、for ループを作成してみませんか。

for i in range(outputs.size(0)):
    # do whatever you do with outputs[i, ...]
    # ...
    plt.show()

バッチ内の各結果を 1 つずつ調べます。画面が十分に大きい場合は、サブプロットに 10 行を含めるオプションもあります。

于 2019-05-03T21:50:26.033 に答える