La red neuronal genera un mapa de características intermedias

Durante el proceso de entrenamiento de la red neuronal, se generará diferente información de mapas de características. Estos mapas de características contienen una gran cantidad de información de imagen, como información de contorno, información detallada, etc. Sin embargo, generalmente solo obtenemos el resultado final, como para el mapa de características intermedias se le presta poca atención.

Mi hermano menor de repente hizo esta pregunta hace dos días, pero no tenía idea. Más tarde, después de investigarlo con mi hermano menor, probablemente tuve una idea.

Es decir, cada módulo de extracción de características generará un mapa de características. Cada píxel de estos mapas de características es en realidad un valor numérico, luego solo necesita guardar estos valores numéricos y luego mostrarlos en forma de imágenes.

Basándonos en esta idea, diseñemos. Al observar el mapa de características de salida, podemos usar el código de inferencia para la salida, porque la inferencia consume menos recursos y puede quedar claro cuál es nuestra imagen de entrada durante la inferencia.
En cuanto al efecto que quieres conseguir:

Imagen original:

Insertar descripción de la imagen aquí

Mapa de características de salida:

Insertar descripción de la imagen aquí
Entonces, ¿cómo proceder?
Lo primero es aclarar qué etapa de las imágenes de características desea generar. El blogger seleccionó los resultados de salida de las cuatro etapas de la red troncal. Los tamaños del mapa de características de salida son:

x的shape: torch.Size([1, 64, 200, 300])
x的shape: torch.Size([1, 128, 100, 150])
x的shape: torch.Size([1, 320, 50, 75])
x的shape: torch.Size([1, 512, 25, 38])

Código

Después del módulo para generar el mapa de características, el mapa de características se guarda en formato numpy:

sb = x.cpu().data.numpy()
np.save('matric'+str(i)+'.npy', sb)#这里的i是对应四个阶段的id

Lea datos en formato numeroso y conviértalos a un mapa de características:

import numpy as np
import os
import matplotlib.pyplot as plt
import torch
import torch.nn as nn

def normalization(data):  # NORMALIZE TO [0,1]
    _range = np.max(data) - np.min(data)
    data = (data - np.min(data)) / _range  # [0,1]
    return data

def fm_vis(feats, save_dir, save_name):
    save_dir = os.path.join(save_dir, save_name)
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)

    feats = normalization(feats[0].cpu().data.numpy())
    for idx in range(min(feats.shape[0], 200*300)):  # CHANNLE NUMBER
        fms = feats[idx, :, :]
        plt.imshow(fms)
        plt.savefig(os.path.join(save_dir, save_name + '_' + str(idx) + ".png"))
        
for i in range(0,4):
    s_b1 = np.load('matric'+str(i)+'.npy')
    print(s_b1)
    s_b2 = torch.from_numpy(s_b1)
    out_dir = "outputs"
    s_b = s_b2.reshape(1, 64, 200, 300)
    fm_vis(s_b, out_dir, "s_b_vis"+str(i))

Resultado final: se generan cuatro etapas de mapas de características y el blogger seleccionó varias de ellas:

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/pengxiang1998/article/details/132773036
Recomendado
Clasificación