pytorch genera una impresión de clase de mapa de impresión de clase CNN (mapa de generación de categorías) y genera muestras de ataques adversarios

  Este artículo proporciona un código completo para implementar la imagen de entrada de visualización de categorías del modelo CNN: el mapa de impresión de clase, y genera una imagen de muestra adversaria basada en esto.

1. Código completo

  En el artículo anterior , proporcioné el código para la visualización de funciones de CNN, sobre esta base, con una pequeña modificación, se puede obtener la imagen de entrada generada de acuerdo con la retroalimentación de cada categoría. O proporcione el código completo primero:

import torch
import torchvision.models as models
import cv2
import time
t0 = time.time()

mu = torch.Tensor([0.485, 0.456, 0.406]).unsqueeze(-1).unsqueeze(-1).cuda()
std = torch.Tensor([0.229, 0.224, 0.225]).unsqueeze(-1).unsqueeze(-1).cuda()
unnormalize = lambda x: x*std + mu
normalize = lambda x: (x-mu)/std

batch_size = 1
num_classes = 1000

model = models.resnet18(pretrained=True).cuda()
for params in model.parameters():
    params.requires_grad = False
model.eval()
'''
mask = torch.zeros((batch_size,3,224,224), dtype=torch.bool).cuda()
mask[:,:,100:-100,100:-100] = True
'''
for clas in range(num_classes):
    data = torch.rand(batch_size,3,224,224).cuda()
    data.requires_grad = True
    #optimizer = torch.optim.SGD([data], lr=6)#, momentum=0.99)
    optimizer = torch.optim.Adam([data], lr=0.1, weight_decay=1e-6)
    label = torch.tensor([clas]).cuda()
    one_hot= torch.zeros((batch_size,num_classes), dtype=torch.bool).cuda()
    label = label.reshape(-1,1)
    one_hot.scatter_(1, label, 1)

    for i in range(4001):
        data1 = (data - data.min()) / (data.max() - data.min())
        #data1 = data1 * mask
        data1 = normalize(data1)
        optimizer.zero_grad()
        outputs = model(data1)
        loss =  - outputs[one_hot].sum()
        loss.backward()
        optimizer.step()
    print('class:',outputs.max(1)[1].item())
    print('time: %.2f'%(time.time()-t0))

    data_i = data.clone()
    data_i = (data_i - data_i.min()) / (data_i.max() - data_i.min())
    #data_i = (data_i*mask)
    data_i = data_i[0].permute(1,2,0).data.cpu().numpy()*255
    data_i = data_i[...,::-1].astype('uint8')  #注意cv2使用BGR顺序
    cv2.imwrite('./class_impress/class_%d.png'%clas,data_i)

Nota: El valor de salida de la categoría objetivo utilizada por la función de pérdida es el más grande. Se dice que es posible utilizar CE de entropía cruzada como una red de clasificación convencional, pero el efecto de visualización dibujado no es bueno y el efecto de usar esta pérdida no es tan bueno.

2. Representación

inserte la descripción de la imagen aquí

Figura 1. Diagramas de impresión de clases de varias redes previamente entrenadas de ImageNet

  Estas imágenes generadas solo parecen tener algunas sombras de las imágenes correspondientes a esta categoría. Las imágenes generadas por AlexNet aún pueden ver algo, y las imágenes generadas por varias otras redes son difíciles de reconocer por los ojos humanos. Sin embargo, utilizando el modelo original para la verificación, se puede encontrar que la probabilidad de reconocimiento de la categoría objetivo de este gráfico generado es cercana al 100%.
  También existen algunas tecnologías que pueden mejorar las imágenes generadas, incluso a un nivel muy claro y agradable, pero ese no es el propósito de este artículo. Si estás interesado, puedes leer mi otro artículo y las imágenes generadas son mejores . .

3. Mapa de generación de áreas pequeñas

  También podemos imponer restricciones a la entrada, como generar solo imágenes en un área pequeña de la imagen; consulte la sección de máscara en el código. Aunque las imágenes generadas de esta manera tienen solo una parte muy pequeña, aún puede hacer que la red de reconocimiento genere una probabilidad de reconocimiento de la categoría objetivo cercana al 100%. La siguiente figura muestra ejemplos de gráficos de generación de categorías de tamaños 100x100 y 24x24 generados por ResNet18 previamente entrenado.
inserte la descripción de la imagen aquí

Figura 2. Mapa de impresión de clase generado solo en un rango pequeño

4. Generar muestras adversarias ofensivas.

  ¿Por qué generar un mapa de impresión de clase en un área pequeña? Presumiblemente todos ya han adivinado que este será un plan antiataque. Dado que una imagen tan pequeña puede generar una gran probabilidad de reconocimiento de la red, si agregamos esta imagen pequeña a otras imágenes naturales, ¿no obtendremos un método contra ataques de muestra? Agregamos la imagen generada de 100x100 correspondiente a la clase0 y la imagen generada de 24x24 correspondiente a la clase8 a la imagen original, y en la siguiente figura se muestran algunos ejemplos de muestras adversas obtenidas.

inserte la descripción de la imagen aquí

Figura 3. Agregar un ejemplo contradictorio compuesto por un mapa de impresión de clase de área pequeña

  Cuando usé un mapa de parche de 100x100 para atacar, probé 5000 imágenes de ImageNet y logré una tasa de ataque del 100%. Cuando usé un mapa de parche de 24x24 para atacar, también alcanzó una tasa de ataque del 30%.
  Pero debe señalarse que este es solo un método de ataque de caja blanca. La imagen de parche de área pequeña en mi experimento anterior se generó en ResNet18, y su imagen de ataque solo es válida para el modelo ResNet18. Si se reemplaza con otros modelos, el ataque fracasará. Esto también muestra que el mapa de impresión de clase que generamos con este método es un resultado muy sobreajustado y fuertemente correlacionado con el modelo, no un mapa de impresión de clase universal que solo está relacionado con categorías. Entonces, el término mapa de impresión de clase es muy preciso, es solo la "impresión" de una determinada clase por un modelo particular. Sólo encontrando una impresión de clase común de la vasta red neuronal podremos encontrar un método de ataque de caja negra. Esta será una pregunta en la que pensaré en el futuro.

Supongo que te gusta

Origin blog.csdn.net/Brikie/article/details/115484702
Recomendado
Clasificación