就是将attention图通过加权叠加 叠加到原图上
要通过cv2.applyColorMap() 将attention的单通道图转为三通道图
将attention中一些小的值置0,不然叠加之后会干扰原图,产生色差
至于蓝色,是通过cv2.applyColorMap的cv2.COLORMAP_DEEPGREEN,这个是可以变成绿色,但不知为什么只有deepgreen, 没有deepblue, deepred这些,所以采取的方法是将G这个通道的值转为B通道的值
# #------------------------------------------------------------# # 可视化Detr方法: # spatial attention weight : (cq + oq)*pk # combined attention weight: (cq + oq)*(memory + pk) # 其中: # pk:原始特征图的位置编码; # oq:训练好的object queries # cq:decoder最后一层self-attn中的输出query # memory:encoder的输出 # #------------------------------------------------------------# # 在此基础上只要稍微修改便可可视化ConditionalDetr的Fig1特征图 # #------------------------------------------------------------# # 代码参考自:https://github.com/facebookresearch/detr/tree/colab # #------------------------------------------------------------# import skimage import math import numpy as np import cv2 from PIL import Image import requests import matplotlib.pyplot as plt import ipywidgets as widgets from IPython.display import display, clear_output import cmapy import torch from torch import nn from torchvision.models import resnet50 import torchvision.transforms as T from torch.nn.functional import dropout,linear,softmax import torch.nn.functional as F torch.set_grad_enabled(False) import matplotlib def box_cxcywh_to_xyxy(x): x_c, y_c, w, h = x.unbind(1) b = [(x_c - 0.5 * w), (y_c - 0.5 * h), (x_c + 0.5 * w), (y_c + 0.5 * h)] return torch.stack(b, dim=1) def rescale_bboxes(out_bbox, size): img_w, img_h = size b = box_cxcywh_to_xyxy(out_bbox) b = b * torch.tensor([img_w, img_h, img_w, img_h], dtype=torch.float32) return b # COCO classes CLASSES = [ 'N/A', 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fi
Conditional DETR spatial attention & content attention可视化(二)
于 2022-11-01 19:24:00 首次发布

最低0.47元/天 解锁文章
2354





