【AI】DETR模型可视化操作

Detr作为目标检测的算法,不同于之前算法的就是注意力机制,注意力机制能够直观看出来模型对图像关注的点,这个直观到底怎么直观呢,我们只听别人说肯定是不行的,上手测试才是最好的方式,像论文中插图那样的使用热度图的方式来展现注意力关注的重点才能叫做直观。幸运的是,官方hands_on手册中给了模型可视化的方式,我也搬过来用一下,方便后续查看。如果有其他模型可视化的操作,也可以借鉴这些代码。

代码是接着上一篇文章的推理模块来的,如果需要运行测试,请先运行上面的代码。

1.可视化编解码多头注意力权重(encoder-decoder multi-head attention weights)

获取权重参数:

# use lists to store the outputs via up-values
conv_features, enc_attn_weights, dec_attn_weights = [], [], []hooks = [model.backbone[-2].register_forward_hook(lambda self, input, output: conv_features.append(output)),model.transformer.encoder.layers[-1].self_attn.register_forward_hook(lambda self, input, output: enc_attn_weights.append(output[1])),model.transformer.decoder.layers[-1].multihead_attn.register_forward_hook(lambda self, input, output: dec_attn_weights.append(output[1])),
]# propagate through the model
outputs = model(img)for hook in hooks:hook.remove()# don't need the list anymore
conv_features = conv_features[0]
enc_attn_weights = enc_attn_weights[0]
dec_attn_weights = dec_attn_weights[0]

可视化展示:

# get the feature map shape
h, w = conv_features['0'].tensors.shape[-2:]fig, axs = plt.subplots(ncols=len(bboxes_scaled), nrows=2, figsize=(22, 7))
colors = COLORS * 100
for idx, ax_i, (xmin, ymin, xmax, ymax) in zip(keep.nonzero(), axs.T, bboxes_scaled):ax = ax_i[0]ax.imshow(dec_attn_weights[0, idx].view(h, w))ax.axis('off')ax.set_title(f'query id: {idx.item()}')ax = ax_i[1]ax.imshow(im)ax.add_patch(plt.Rectangle((xmin, ymin), xmax - xmin, ymax - ymin,fill=False, color='blue', linewidth=3))ax.axis('off')ax.set_title(CLASSES[probas[idx].argmax()])
fig.tight_layout()

在这里插入图片描述

2.可视化编码自注意力权重(encoder self-attention weights)

查看编码权重shape

# output of the CNN
f_map = conv_features['0']
print("Encoder attention:      ", enc_attn_weights[0].shape)
print("Feature map:            ", f_map.tensors.shape)# output results
# Encoder attention:       torch.Size([850, 850])
# Feature map:             torch.Size([1, 2048, 25, 34])

转换权重矩阵
[H * W, H * W] -> [H,W,H,W]

# get the HxW shape of the feature maps of the CNN
shape = f_map.tensors.shape[-2:]
# and reshape the self-attention to a more interpretable shape
sattn = enc_attn_weights[0].reshape(shape + shape)
print("Reshaped self-attention:", sattn.shape)

查看部分点位

# downsampling factor for the CNN, is 32 for DETR and 16 for DETR DC5
fact = 32# let's select 4 reference points for visualization
idxs = [(200, 200), (280, 400), (200, 600), (440, 800),]# here we create the canvas
fig = plt.figure(constrained_layout=True, figsize=(25 * 0.7, 8.5 * 0.7))
# and we add one plot per reference point
gs = fig.add_gridspec(2, 4)
axs = [fig.add_subplot(gs[0, 0]),fig.add_subplot(gs[1, 0]),fig.add_subplot(gs[0, -1]),fig.add_subplot(gs[1, -1]),
]# for each one of the reference points, let's plot the self-attention
# for that point
for idx_o, ax in zip(idxs, axs):idx = (idx_o[0] // fact, idx_o[1] // fact)ax.imshow(sattn[..., idx[0], idx[1]], cmap='cividis', interpolation='nearest')ax.axis('off')ax.set_title(f'self-attention{idx_o}')# and now let's add the central image, with the reference points as red circles
fcenter_ax = fig.add_subplot(gs[:, 1:-1])
fcenter_ax.imshow(im)
for (y, x) in idxs:scale = im.height / img.shape[-2]x = ((x // fact) + 0.5) * facty = ((y // fact) + 0.5) * factfcenter_ax.add_patch(plt.Circle((x * scale, y * scale), fact // 2, color='r'))fcenter_ax.axis('off')

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/595868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

听GPT 讲Rust源代码--compiler(4)

File: rust/compiler/rustc_codegen_gcc/src/back/mod.rs rust/compiler/rustc_codegen_gcc/src/back/mod.rs 文件是 Rust 编译器的源代码中的一个模块,主要负责与 GCC(GNU 编译器集合)相关的后端代码生成。 在 Rust 编译器的架构中&#xff…

系统崩溃无U盘重装Win10系统的方法

用户反映自己电脑上的操作系统出现了崩溃问题,无法通过简单的操作解决问题,想重新安装正常的操作系统,但是没有U盘不知道要怎么操作才能安装好系统?接下来小编带来系统崩溃无U盘重装Win10系统的方法步骤介绍,用户们可以…

关键字:volatile关键字

volatile关键字是 Java 语言中的一个修饰符,用于修饰变量。当一个变量被声明为volatile时,它具有以下特性: 可见性:当一个线程修改了volatile变量的值时,其他线程可以立即看到这个修改。这是因为volatile变量在多个线程…

一键远程管理多个泵房供水设备

一站式多个泵房供水设备物联网远程监控系统的方案 第一部分:项目背景与需求分析 1.1 项目背景 随着城市化进程的加快,对供水系统的需求不断增加。然而,传统的泵房供水设备管理方式存在效率低下、人工成本高、安全隐患较大等问题。因此&…

代码随想录Day8

title: 代码随想录Day8 date: 2024-01-03 17:41:58 代码随想录笔记 categories:技术 代码随想录Day8|[344.] 翻转字符串|541 翻转字符串2| 思路 从前往后和从后往前两个指针不断运行交换即可 代码 class Solution { public:void reverseString(vector<char>& s…

HTML中网页缩放配置mete-viewport

<meta name"viewport" content"widthdevice-width, intial-scale0, maximum-scale0, user-scalableyes, shrink-to-fitno" > 说明 这是一个用于设置网页视口&#xff08;viewport&#xff09;的HTML <meta> 标签。视口是用户在网页上看到的…

LeetCode刷题---旋转图像

解题思路&#xff1a; 首先对主对角线两边的元素进行交换 接着走一轮遍历&#xff0c;将第1列和第n列进行交换&#xff0c;第2列和第n-1列进行交换&#xff0c;直至得到最终的矩阵。 代码实现&#xff1a; public void rotate(int[][] matrix) {//首先对主对角线的元素进行交换…

对技术行业的深度思考

技术行业是当今世界最为热门和发展迅猛的领域之一。无论是互联网、人工智能还是区块链&#xff0c;技术的快速发展正在改变着我们的生活和社会。然而&#xff0c;我们是否真正思考过技术在我们生活中的影响和意义&#xff1f;本文将对技术行业展开深度思考&#xff0c;探讨其带…

【JVM面试题】Java中的静态方法为什么不能调用非静态方法

昨晚京东大佬勇哥在群里分享了一道他新创的JVM面试题&#xff0c;我听完后觉得还挺有意思的&#xff0c;分享给大家 小佬们先别急着看我的分析&#xff0c;先自己想想答案 你是不是想说 因为静态方法是属于类的&#xff0c;而非静态方法属于实例对象 哈&#xff0c;有人这样回答…

最优化理论期末复习笔记 Part 2

数学基础线性代数 从行的角度从列的角度行列式的几何解释向量范数和矩阵范数 向量范数矩阵范数的更强的性质的意义 几种向量范数诱导的矩阵范数 1 范数诱导的矩阵范数无穷范数诱导的矩阵范数2 范数诱导的矩阵范数 各种范数之间的等价性向量与矩阵序列的收敛性 函数的可微性与展…

【Delphi 基础知识 10】class operator重载运算符的使用

在Delphi中&#xff0c;class operator 是一种用于重载类运算符的语法。通过使用 class operator&#xff0c;你可以为你的Record记录类型中自定义运算符&#xff0c;使得Record能够像内置类型一样支持各种运算符操作。这使得你可以更灵活地定义类的行为&#xff0c;使其更符合…

mysql in 走不走索引

当只有一个值的时候&#xff0c;是ref当小范围的时候&#xff0c;是range当数据过多时&#xff0c;索引有可能失效&#xff08;数量是全表30%时&#xff09;

2_并发编程同步锁(synchronized)

并发编程带来的安全性同步锁(synchronized) 1.他的背景 当多个线程同时访问&#xff0c;公共共享资源的时候&#xff0c;这时候就会出现线程安全&#xff0c;代码如&#xff1a; public class AtomicDemo {int i0;//排他锁、互斥锁public void incr(){ //synchronizedi; …

pip install 安装模块包位置及设置Anaconda为默认版本python

01问题 pycharm运行代码找不到模块包pip install不知道安装到哪里了jupyter使用不同版本python 02产生原因 安装了多个版本pythonanaconda本身也带有python 03解决办法 (1)查看当前默认python版本 打开运行窗口Winr&#xff1b; 输入cmd回车&#xff1b; 输入python回车…

中小学班主任工作指南

作为中小学的班主任&#xff0c;我们的工作既繁重又重要。这份工作指南旨在为各位班主任提供一些实用的建议&#xff0c;帮助大家更好地完成教育教学任务&#xff0c;促进学生的全面发展。 一、了解学生是关键 首先&#xff0c;我们要深入了解每一个学生。了解他们的个性、兴趣…

Linux第2步_创建虚拟机

VMware软件安装好后&#xff0c;就可以创建虚拟机了。 一、虚拟机对CPU的要求较高 i7 处理器&#xff1a;CPU&#xff1a;Intel(R) Core(TM) i7-8700 CPU 3.20GHz 3.19 GHz 内核数&#xff1a;6 线程数&#xff1a; 12 最大睿频频率&#xff1a; 4.60 GHz 英特尔 睿…

vue3 vuedraggable draggable element must have an item slot

vue3vite 看官网使用这种<template #item“{ element }”> <draggablev-model"myArray"start"onStart"end"onEnd":sort"false"item-key"id"draggable".item"handle".mover" ><template…

LinkedIn 开源其开发人员工作效率与幸福感衡量框架

回望2023年&#xff0c;在整个开发生态系统中&#xff0c;推动新工具和新技术发展的主要因素有两个&#xff1a;一个是人工智能&#xff0c;包括使用和构建人工智能&#xff0c;另一个是提高开发人员的工作效率。 后者可能是最难量化和描述的。首先&#xff0c;开发人员的生产效…

游戏录屏软件哪个好用免费?我来告诉你!

在游戏玩家的世界里&#xff0c;录制并分享游戏精彩瞬间是一种常见的需求。选择一款好用且免费的游戏录屏软件对于实现这一目标至关重要。可是游戏录屏软件哪个好用免费呢&#xff1f;本文将介绍两款备受好评的免费游戏录屏软件。通过详细的步骤介绍&#xff0c;帮助你轻松记录…

深信服技术认证“SCCA-C”划重点:云计算关键技术

为帮助大家更加系统化地学习云计算知识&#xff0c;高效通过云计算工程师认证&#xff0c;深信服特推出“SCCA-C认证备考秘笈”&#xff0c;共十期内容。“考试重点”内容框架&#xff0c;帮助大家快速get重点知识。 划重点来啦 *点击图片放大展示 深信服云计算认证&#xff08…