1 大连理工 zxq
visualize_feature_map(outS, name, STR)
outS 特征
name 图片名
STR 字符
visualize_feature_map(outS, name, STR)
def visualize_feature_map(feature_map, name, STR): # [out1, out2, out3, out4, out5], img_name, i
# =>1 只留下C,H,W
feature_map = feature_map[0] # [1,64,88,88] -> [64,88,88]
# =>2 计算通道数C
feature_map_combination = []
num_pic = feature_map.shape[0] # [64,88,88] -> 64
# =>3 重新设计一个列表,里面放64张特征图[f1,..,f64]
for i in range(0, num_pic):
print('==feature_map.shape', feature_map.shape)
feature_map_split = feature_map[i, :, :]
feature_map_combination.append(feature_map_split)
# =>4 HW维度求和
feature_map_sum = sum(ele for ele in feature_map_combination)
feature_map_sum = feature_map_sum.cuda().data.cpu()
# =>5 保存
plt.imshow(feature_map_sum)
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.savefig('/home/nk/xx/see/' + "No-PR-" + STR + "-"+ name[0]+".png", bbox_inches='tight', dpi=320,
pad_inches=0.0)
全部代码
import torch
from PIL import Image
from torch.autograd import Variable
from torchvision import transforms
from config import test_data
from misc import check_mkdir
from model_fpn_certain_uncertain_vgg16_sideoutfuse import RGB_sal
from pylab import *
torch.manual_seed(2018)
torch.cuda.set_device(0)
ckpt_path = './model'
exp_name = 'model_rgb_certainuncertain_vgg16_sideoutfuse'
args = {
'snapshot': '132000',
'crf_refine':False,
'save_results': True
}
img_transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
target_transform = transforms.ToTensor()
to_pil = transforms.ToPILImage()
to_test = {'test':test_data}
def main():
t0 = time.time()
net = RGB_sal().cuda()
print ('load snapshot \'%s\' for testing' % args['snapshot'])
net.load_state_dict(torch.load(os.path.join(ckpt_path, exp_name, args['snapshot'] + '.pth'),map_location={'cuda:1': 'cuda:1'}))
net.eval()
with torch.no_grad():
for name, root in to_test.items():
check_mkdir(os.path.join(ckpt_path, exp_name, '(%s) %s_%s' % (exp_name, name, args['snapshot'])))
root1 = os.path.join(root,'images')
img_list = [os.path.splitext(f)[0] for f in os.listdir(root1) if f.endswith('.jpg')]
for idx, img_name in enumerate(img_list):
print ('predicting for %s: %d / %d' % (name, idx + 1, len(img_list)))
img1 = Image.open(os.path.join(root,'images',img_name + '.jpg')).convert('RGB')
img1 = img1.resize([384,384])
img_var = Variable(img_transform(img1).unsqueeze(0), volatile=True).cuda()
output1,output2,output3,output4 = net(img_var)
a = [output1,output2,output3,output4]
for i in range(len(a)):
visualize_feature_map(a[i],img_name,i)
def get_row_col(num_pic):
squr = num_pic ** 0.5
row = round(squr)
col = row + 1 if squr - row > 0 else row
return row, col
def visualize_feature_map(img_batch,img_name,num):
print(img_batch.size()[0:])
feature_map = torch.squeeze(img_batch, 0)
print(feature_map.shape)
if(len(feature_map.size())==2):
feature_map = torch.unsqueeze(feature_map,0)
feature_map_combination = []
num_pic = feature_map.shape[0]
row, col = get_row_col(num_pic)
for i in range(0, num_pic):
feature_map_split = feature_map[i, :, :]
feature_map_combination.append(feature_map_split)
feature_map_sum = sum(ele for ele in feature_map_combination)
feature_map_sum = feature_map_sum.cuda().data.cpu()
plt.imshow(feature_map_sum)
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.savefig('/home/zxq/桌面/certain_uncertain-RGBD/visual/decoder_uncertain/'+img_name+'_'+str(num)+".png", bbox_inches='tight', dpi=18, pad_inches=0.0)
if __name__ == '__main__':
main()
2 其他可视化方法
BK-SDM NetsPresso · GitHub
Faster SD https://github.com/hutaiHang/Faster-Diffusion
BK-SDM
Faster SD