【Block总结】掩码窗口自注意力 (M-WSA)
摘要
论文链接:https://arxiv.org/pdf/2404.07846
论文标题:Transformer-Based Blind-Spot Network for Self-Supervised Image Denoising
Masked Window-Based Self-Attention (M-WSA) 是一种新颖的自注意力机制,旨在解决传统自注意力方法在处理图像时的局限性,特别是在图像去噪和恢复任务中。M-WSA 通过引入掩码机制,确保在计算注意力时遵循盲点要求,从而避免信息泄露。
设计原理
-
窗口自注意力:M-WSA 基于窗口自注意力(Window Self-Attention, WSA)的概念,将输入图像划分为多个不重叠的窗口。在每个窗口内,计算自注意力以捕捉局部特征。这种方法的计算复杂度相对较低,适合处理高分辨率图像。
-
掩码机制:为了满足盲点要求,M-WSA 在计算注意力时应用了掩码。具体而言,掩码限制了每个像素只能关注其窗口内的特定像素,从而避免了对盲点信息的访问。这一设计确保了网络在去噪时不会泄露噪声信息。
-
扩张卷积模拟:M-WSA 的掩码设计模仿了扩张卷积的感受野,使得网络能够在保持计算效率的同时,捕捉到更大范围的上下文信息。这种方法有效地扩展了网络的感受野,增强了特征提取能力。
优势
-
高效性:通过限制注意力计算在窗口内,M-WSA 显著降低了计算复杂度,使其适用于大规模图像处理任务。
-
信息保护:掩码机制确保了盲点信息不被泄露,从而提高了去噪效果,特别是在处理具有空间相关噪声的图像时。
-
灵活性:M-WSA 可以与其他网络架构结合使用,增强其在各种视觉任务中的表现,尤其是在自我监督学习和图像恢复领域。
实验结果
在多个真实世界的图像去噪数据集上进行的实验表明,M-WSA 显著提高了去噪性能,超越了传统的卷积网络和其他自注意力机制。这一结果表明,M-WSA 在处理复杂噪声模式时具有良好的适应性和有效性。
代码
Masked Window-Based Self-Attention (M-WSA) 通过结合窗口自注意力和掩码机制,为图像去噪和恢复任务提供了一种有效的解决方案。其设计不仅提高了计算效率,还确保了信息的安全性,展示了在自我监督学习中的广泛应用潜力。代码:
import torch
import torch.nn as nn
from einops import rearrange
from torch import einsumdef to(x):return {'device': x.device, 'dtype': x.dtype}def expand_dim(t, dim, k):t = t.unsqueeze(dim=dim)expand_shape = [-1] * len(t.shape)expand_shape[dim] = kreturn t.expand(*expand_shape)def rel_to_abs(x):b, l, m = x.shaper = (m + 1) // 2col_pad = torch.zeros((b, l, 1), **to(x))x = torch.cat((x, col_pad), dim=2)flat_x = rearrange(x, 'b l c -> b (l c)')flat_pad = torch.zeros((b, m - l), **to(x))flat_x_padded = torch.cat((flat_x, flat_pad), dim=1)final_x = flat_x_padded.reshape(b, l + 1, m)final_x = final_x[:, :l, -r:]return final_xdef relative_logits_1d(q, rel_k):b, h, w, _ = q.shaper = (rel_k.shape[0] + 1) // 2logits = einsum('b x y d, r d -> b x y r', q, rel_k)logits = rearrange(logits, 'b x y r -> (b x) y r')logits = rel_to_abs(logits)logits = logits.reshape(b, h, w, r)logits = expand_dim(logits, dim=2, k=r)return logitsclass RelPosEmb(nn.Module):def __init__(self,block_size,rel_size,dim_head):super().__init__()height = width = rel_sizescale = dim_head ** -0.5self.block_size = block_sizeself.rel_height = nn.Parameter(torch.randn(height * 2 - 1, dim_head) * scale)self.rel_width = nn.Parameter(torch.randn(width * 2 - 1, dim_head) * scale)def forward(self, q):block = self.block_sizeq = rearrange(q, 'b (x y) c -> b x y c', x=block)rel_logits_w = relative_logits_1d(q, self.rel_width)rel_logits_w = rearrange(rel_logits_w, 'b x i y j-> b (x y) (i j)')q = rearrange(q, 'b x y d -> b y x d')rel_logits_h = relative_logits_1d(q, self.rel_height)rel_logits_h = rearrange(rel_logits_h, 'b x i y j -> b (y x) (j i)')return rel_logits_w + rel_logits_hclass FixedPosEmb(nn.Module):def __init__(self, window_size, overlap_window_size):super().__init__()self.window_size = window_sizeself.overlap_window_size = overlap_window_sizeattention_mask_table = torch.zeros((window_size + overlap_window_size - 1),(window_size + overlap_window_size - 1))attention_mask_table[0::2, :] = float('-inf')attention_mask_table[:, 0::2] = float('-inf')attention_mask_table = attention_mask_table.view((window_size + overlap_window_size - 1) * (window_size + overlap_window_size - 1))# get pair-wise relative position index for each token inside the windowcoords_h = torch.arange(self.window_size)coords_w = torch.arange(self.window_size)coords = torch.stack(torch.meshgrid([coords_h, coords_w])) # 2, Wh, Wwcoords_flatten_1 = torch.flatten(coords, 1) # 2, Wh*Wwcoords_h = torch.arange(self.overlap_window_size)coords_w = torch.arange(self.overlap_window_size)coords = torch.stack(torch.meshgrid([coords_h, coords_w]))coords_flatten_2 = torch.flatten(coords, 1)relative_coords = coords_flatten_1[:, :, None] - coords_flatten_2[:, None, :] # 2, Wh*Ww, Wh*Wwrelative_coords = relative_coords.permute(1, 2, 0).contiguous() # Wh*Ww, Wh*Ww, 2relative_coords[:, :, 0] += self.overlap_window_size - 1 # shift to start from 0relative_coords[:, :, 1] += self.overlap_window_size - 1relative_coords[:, :, 0] *= self.window_size + self.overlap_window_size - 1relative_position_index = relative_coords.sum(-1) # Wh*Ww, Wh*Wwself.attention_mask = nn.Parameter(attention_mask_table[relative_position_index.view(-1)].view(1, self.window_size ** 2, self.overlap_window_size ** 2), requires_grad=False)def forward(self):return self.attention_maskclass DilatedOCA(nn.Module):def __init__(self, dim, window_size, overlap_ratio, num_heads, dim_head, bias):super(DilatedOCA, self).__init__()self.num_spatial_heads = num_headsself.dim = dimself.window_size = window_sizeself.overlap_win_size = int(window_size * overlap_ratio) + window_sizeself.dim_head = dim_headself.inner_dim = self.dim_head * self.num_spatial_headsself.scale = self.dim_head ** -0.5self.unfold = nn.Unfold(kernel_size=(self.overlap_win_size, self.overlap_win_size), stride=window_size,padding=(self.overlap_win_size - window_size) // 2)self.qkv = nn.Conv2d(self.dim, self.inner_dim * 3, kernel_size=1, bias=bias)self.project_out = nn.Conv2d(self.inner_dim, dim, kernel_size=1, bias=bias)self.rel_pos_emb = RelPosEmb(block_size=window_size,rel_size=window_size + (self.overlap_win_size - window_size),dim_head=self.dim_head)self.fixed_pos_emb = FixedPosEmb(window_size, self.overlap_win_size)def forward(self, x):b, c, h, w = x.shapeqkv = self.qkv(x)qs, ks, vs = qkv.chunk(3, dim=1)# spatial attentionqs = rearrange(qs, 'b c (h p1) (w p2) -> (b h w) (p1 p2) c', p1=self.window_size, p2=self.window_size)ks, vs = map(lambda t: self.unfold(t), (ks, vs))ks, vs = map(lambda t: rearrange(t, 'b (c j) i -> (b i) j c', c=self.inner_dim), (ks, vs))# print(f'qs.shape:{qs.shape}, ks.shape:{ks.shape}, vs.shape:{vs.shape}')# split headsqs, ks, vs = map(lambda t: rearrange(t, 'b n (head c) -> (b head) n c', head=self.num_spatial_heads),(qs, ks, vs))# attentionqs = qs * self.scalespatial_attn = (qs @ ks.transpose(-2, -1))spatial_attn += self.rel_pos_emb(qs)spatial_attn += self.fixed_pos_emb()spatial_attn = spatial_attn.softmax(dim=-1)out = (spatial_attn @ vs)out = rearrange(out, '(b h w head) (p1 p2) c -> b (head c) (h p1) (w p2)', head=self.num_spatial_heads,h=h // self.window_size, w=w // self.window_size, p1=self.window_size, p2=self.window_size)# merge spatial and channelout = self.project_out(out)return outif __name__ == "__main__":dim = 64window_size = 8overlap_ratio = 0.5num_heads = 2dim_head = 16# 初始化 DilatedOCA 模块oca_attention = DilatedOCA(dim=dim,window_size=window_size,overlap_ratio=overlap_ratio,num_heads=num_heads,dim_head=dim_head,bias=True)device = torch.device("cuda" if torch.cuda.is_available() else "cpu")oca_attention = oca_attention.to(device)print(oca_attention)x = torch.randn(1, 32, 640, 480).to(device)# 前向传播output = oca_attention(x)print("input张量形状:", x.shape)print("output张量形状:", output.shape)
DilatedOCA模块详解
代码结构
import torch
import torch.nn as nn
from einops import rearrange
- 导入库:首先导入 PyTorch 和 einops 库。
einops
用于简化张量的重排操作。
模块定义
class DilatedOCA(nn.Module):def __init__(self, dim, window_size, overlap_ratio, num_heads, dim_head, bias):super(DilatedOCA, self).__init__()self.num_spatial_heads = num_headsself.dim = dimself.window_size = window_sizeself.overlap_win_size = int(window_size * overlap_ratio) + window_sizeself.dim_head = dim_headself.inner_dim = self.dim_head * self.num_spatial_headsself.scale = self.dim_head ** -0.5self.unfold = nn.Unfold(kernel_size=(self.overlap_win_size, self.overlap_win_size), stride=window_size,padding=(self.overlap_win_size - window_size) // 2)self.qkv = nn.Conv2d(self.dim, self.inner_dim * 3, kernel_size=1, bias=bias)self.project_out = nn.Conv2d(self.inner_dim, dim, kernel_size=1, bias=bias)self.rel_pos_emb = RelPosEmb(block_size=window_size,rel_size=window_size + (self.overlap_win_size - window_size),dim_head=self.dim_head)self.fixed_pos_emb = FixedPosEmb(window_size, self.overlap_win_size)
-
初始化方法:
__init__
方法定义了模块的结构。-
dim
:输入特征的通道数。 -
window_size
:窗口的大小,用于空间注意力计算。 -
overlap_ratio
:重叠窗口的比例,决定了窗口之间的重叠程度。 -
num_heads
:空间注意力的头数。 -
dim_head
:每个头的维度。
-
-
层的定义:
-
self.unfold
:用于将输入张量展开为重叠窗口的操作。 -
self.qkv
:一个 1x1 的卷积层,用于生成查询(Q)、键(K)和值(V)三个特征图。 -
self.project_out
:一个 1x1 的卷积层,用于将输出特征映射回原始通道数。 -
self.rel_pos_emb
和self.fixed_pos_emb
:用于位置编码的模块,增强模型对空间位置的感知。
-
前向传播
def forward(self, x):b, c, h, w = x.shapeqkv = self.qkv(x)qs, ks, vs = qkv.chunk(3, dim=1)# spatial attentionqs = rearrange(qs, 'b c (h p1) (w p2) -> (b h w) (p1 p2) c', p1=self.window_size, p2=self.window_size)ks, vs = map(lambda t: self.unfold(t), (ks, vs))ks, vs = map(lambda t: rearrange(t, 'b (c j) i -> (b i) j c', c=self.inner_dim), (ks, vs))# split headsqs, ks, vs = map(lambda t: rearrange(t, 'b n (head c) -> (b head) n c', head=self.num_spatial_heads),(qs, ks, vs))# attentionqs = qs * self.scalespatial_attn = (qs @ ks.transpose(-2, -1))spatial_attn += self.rel_pos_emb(qs)spatial_attn += self.fixed_pos_emb()spatial_attn = spatial_attn.softmax(dim=-1)out = (spatial_attn @ vs)out = rearrange(out, '(b h w head) (p1 p2) c -> b (head c) (h p1) (w p2)', head=self.num_spatial_heads,h=h // self.window_size, w=w // self.window_size, p1=self.window_size, p2=self.window_size)# merge spatial and channelout = self.project_out(out)return out
-
输入形状:
x
的形状为(batch_size, channels, height, width)
,其中b
是批量大小,c
是通道数,h
和w
是图像的高度和宽度。 -
特征提取:
-
qkv = self.qkv(x)
:通过qkv
层生成 Q、K、V 特征图。 -
qs, ks, vs = qkv.chunk(3, dim=1)
:将 Q、K、V 特征图沿通道维度分离。
-
-
空间注意力计算:
-
qs
被重排为适合空间注意力计算的格式。 -
ks
和vs
通过unfold
操作展开为重叠窗口。
-
-
分头处理:
- 使用
einops.rearrange
将 Q、K、V 的形状调整为适合多头自注意力计算的格式。
- 使用
-
计算注意力:
-
qs = qs * self.scale
:对 Q 进行缩放以提高稳定性。 -
spatial_attn = (qs @ ks.transpose(-2, -1))
:计算注意力分数。 -
spatial_attn += self.rel_pos_emb(qs)
和spatial_attn += self.fixed_pos_emb()
:添加位置编码以增强空间感知。 -
spatial_attn = spatial_attn.softmax(dim=-1)
:对注意力分数进行 softmax 归一化。
-
-
输出计算:
out = (spatial_attn @ vs)
:使用注意力权重对 V 进行加权求和,得到最终输出。
-
重排输出:
out = rearrange(out, '(b h w head) (p1 p2) c -> b (head c) (h p1) (w p2)', ...)
:将输出重排回原始形状。
-
最终投影:
out = self.project_out(out)
:通过投影层将输出映射回原始通道数。
总结
DilatedOCA
模块结合了扩张卷积和空间注意力机制,通过重叠窗口的设计增强了对图像局部特征的捕捉能力。该模块在图像处理任务中具有广泛的应用潜力,尤其是在需要精细特征提取的场景中。
相关文章:
【Block总结】掩码窗口自注意力 (M-WSA)
摘要 论文链接:https://arxiv.org/pdf/2404.07846 论文标题:Transformer-Based Blind-Spot Network for Self-Supervised Image Denoising Masked Window-Based Self-Attention (M-WSA) 是一种新颖的自注意力机制,旨在解决传统自注意力方法在…...
TensorFlow DAY3: 高阶 API(Keras)
TensorFlow 作为深度学习框架,当然是为了帮助我们更便捷地构建神经网络。所以,本次实验将会了解如何使用 TensorFlow 来构建神经网络,并学会 TensorFlow 构建神经网络的重要函数和方法。 知识点 Keras 顺序模型Keras 函数模型Keras 模型存储…...
【CSS】HTML页面定位CSS - position 属性 relative 、absolute、fixed 、sticky
目录 relative 相对定位 absolute 绝对定位 fixed 固定定位 sticky 粘性定位 position:relative 、absolute、fixed 、sticky (四选一) top:距离上面的像素 bottom:距离底部的像素 left:距离左边的像素…...
Spring中三级缓存详细讲解
1、Spring三级缓存是什么,过程是怎么样的? Spring 中的三级缓存主要用于单例 Bean 的生命周期管理,特别是在循环依赖时,它通过不同阶段暴露 Bean 实例来确保依赖注入的顺利完成。缓存的内容如下: 一级缓存 (singleton…...
美摄科技PC端视频编辑解决方案,为企业打造专属的高效创作平台
在当今这个信息爆炸的时代,视频已成为不可或缺的重要内容形式,美摄科技推出了PC端视频编辑解决方案的私有化部署服务,旨在为企业提供一款量身定制的高效创作平台。 一、全面功能,满足企业多样化需求 美摄科技的PC端视频编辑解决…...
转运机器人在物流仓储行业的优势特点
在智能制造与智慧物流的浪潮中,一款革命性的产品正悄然改变着行业的面貌——富唯智能转运机器人,它以卓越的智能科技与创新的设计理念,引领着物流领域步入一个全新的高效、智能、无人的时代。 一、解放双手,重塑物流生态 富唯智能…...
《探索鸿蒙Next上开发人工智能游戏应用的技术难点》
在科技飞速发展的当下,鸿蒙Next系统为应用开发带来了新的机遇与挑战,开发一款运行在鸿蒙Next上的人工智能游戏应用更是备受关注。以下是在开发过程中可能会遇到的一些技术难点: 鸿蒙Next系统适配性 多设备协同:鸿蒙Next的一大特色…...
25/1/12 算法笔记 剖析Yolov8底层逻辑
YOLOv8 是一种基于深度学习的目标检测和图像分割模型,属于 YOLO(You Only Look Once)系列的最新版本。YOLO 系列模型以其高效的实时目标检测能力而闻名,YOLOv8 在此基础上进行了一些优化和改进。 Yolov8的主要特点: …...
JavaScript,ES6,模块化,大程序文件拆分成小文件再组合起来
模块化 模块化是指将一个大的程序文件,拆分成许多小的文件,然后将小文件组合起来。 模块化的好处 模块化的优势有以下几点:1、防止命名冲突,2、代码复用,3、高维护性。 模块化规范产品,ES6 之前的模块化…...
物联网技术入门
在科技日新月异的今天,物联网(Internet of Things,简称IoT)技术正逐渐渗透到我们生活的方方面面,从智能家居到智慧城市,从工业制造到农业管理,物联网的应用无处不在。那么,什么是物联…...
sequelize-cli 多对多关系处理 及某一单项游戏根据成绩降序排名
一、生成模型 Game(游戏表)GameGrades(游戏成绩表)GameUser(用户表) 1.1 对非中间表 做多对多逻辑处理 Game模型 static associate(models) {// define association heremodels.GameUser.belongsToMany(models.Game, {through: models.GameGrade,fore…...
人工智能训练师 - 练习题三
一、单选题 201、在人工智能当中,图像、语音、手势等 识别被认为是()的层次;而问题求解、 创作、推理预测被认为是()的层次。A.感知智能,认知智能 B.认知智能,认知智能 C.感知智能,感知智能 D.认知智能,感知智能 202…...
【EI 会议征稿通知】第四届航空航天、空气动力学与机电工程国际学术会议(AAME 2025)
2025 4th International Conference on Aerospace, Aerodynamics and Mechatronics Engineering 重要信息 大会官网:www.ic-aame.org/ 大会时间:2025年4月11-13日 大会地点:中国-南昌 接受/拒稿通知:投稿后1周 收录检索&…...
uniApp通过xgplayer(西瓜播放器)接入视频实时监控
🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~ 💟 作 者:码喽的自我修养ǹ…...
STM32F103的ADC通道映射
ADC通道映射 STM32F103带3个ADC控制器,一共支持23个通道,包括21个外部和2个内部信号源。ADC1控制器最多有18个通道,包括16个外部和2个内部信号源。 ADC1和ADC2的16个外部通道相同,且ADC1和ADC2共用一个系统中断向量,A…...
深入了解OpenStack中的隧道网络
在OpenStack环境中,隧道网络是一项关键技术,它确保了虚拟机之间以及虚拟机与外部网络之间的安全通信。通过隧道机制,我们可以有效地隔离不同租户的流量,并支持多租户环境下的复杂网络需求。之前我们介绍了隧道网络,下面…...
【Rust】函数
目录 思维导图 1. 函数的基本概念 1.1 函数的定义 2. 参数的使用 2.1 单个参数的示例 2.2 多个参数的示例 3. 语句与表达式 3.1 语句与表达式的区别 3.2 示例 4. 带返回值的函数 4.1 返回值的示例 4.2 返回值与表达式 5. 错误处理 5.1 错误示例 思维导图 1. 函数…...
数据结构与算法之链表: LeetCode 19. 删除链表的倒数第 N 个结点 (Ts版)
删除链表的倒数第 N 个结点 https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示…...
每天五分钟深度学习:神经网络中的激活函数
本文重点 激活函数在神经网络中是必不可以缺少的东西,当我们创建一个神经网络的时候,我们需要决定使用哪种激活函数用在隐藏层上,哪种激活函数用在输出结点上,我们以前的课程中我们使用的都是sigmoid激活函数,除此之外还有其它激活函数。本文我们就介绍一下那些经常使用的…...
腾讯云服务器Centos7.6新开或者迁移中java全部依赖环境准备(jdk+nginx+mysql+redis+nacos+kafka等)
1 安装java环境 https://blog.csdn.net/CleverCode/article/details/109160568 2 安装nginx ssl只用配置nacos和网关就可以了。 https://blog.csdn.net/CleverCode/article/details/145078807 3 安装mysql https://blog.csdn.net/CleverCode/article/details/128354479 4…...
半导体数据分析: 玩转WM-811K Wafermap 数据集(三) AI 机器学习
前面我们已经通过两篇文章,一起熟悉了WM-811K Wafermap 数据集,并对其中的一些数据进行了调用,生成了一些统计信息和图片。今天我们接着继续往前走。 半导体数据分析: 玩转WM-811K Wafermap 数据集(二) AI…...
逐笔成交逐笔委托Level2高频数据下载和分析:20250102
level2逐笔成交逐笔委托下载 链接: https://pan.baidu.com/s/1p7OOj5p-QGFrWkt6KKoYng?pwd7f4g 提取码: 7f4g Level2逐笔成交逐笔委托数据分享下载 通过Level2逐笔成交和逐笔委托这种每一笔的毫秒级别的数据可以分析出很多有用的点,包括主力意图,虚假动…...
python3GUI--大屏可视化-XX产业大数据指挥舱(附下载地址) By:PyQt5
文章目录 一.前言二.预览三.软件开发心得1.使用方法2.UI设计3.代码架构4.项目结构 四.代码片段分享1.图片平滑缩放组件2.滚动日志组件 五.心得体会 大小:35.0 M,软件安装包放在了这里! 本软件未…...
PHP 循环控制结构深度剖析:从基础到实战应用
PHP 循环控制结构深度剖析:从基础到实战应用 PHP提供了多种控制结构,其中循环控制结构是最常见的结构之一。它们使得我们能够高效地重复执行一段代码,直到满足某个条件为止。本文将从PHP循环的基础知识出发,逐步分析其在实际项目…...
【数据库】二、关系数据库
文章目录 二、关系数据库1 关系2 关系数据库3 完整性约束4 关系运算 二、关系数据库 1 关系 域:一组具有相同数据类型的值的集合。 笛卡尔积:所有域(域可相同)中所有取值的组合 例如:D1{1,2,3},D2{A,b}&…...
【cuda学习日记】2.2 使用2维网络(grid)和2维块(block)对矩阵进行求和
在2.0中进行了用一维网格和块对一维向量进行了求和。 在2.1中例化了二维的网格和块。 接下来进行2维网络(grid)和2维块(block)对矩阵进行求和。 #include <stdio.h> #include <stdlib.h> #include <time.h> #i…...
【13】制作镜像以及重启实例
制作镜像 k8s集群 有两个镜像需要制作,一个是master节点,一个是node节点。 在master节点上成功部署了k8s的控制平面,在node节点上部署了worker节点的配置,不知道打包镜像重启之后集群的状态是什么样的。 确认集群在运行&#…...
省级-农业科技创新(农业科技专利)数据(2010-2022年)-社科数据
省级-农业科技创新(农业科技专利)数据(2010-2022年)-社科数据https://download.csdn.net/download/paofuluolijiang/90028570 https://download.csdn.net/download/paofuluolijiang/90028570 数据 年份、省份、农业科技专利数量…...
Vue2+OpenLayers接入天地图API实现搜索定位和点击获取经纬度及地址功能(提供Gitee源码)
目录 一、案例截图 二、安装OpenLayers库 三、安装Element-UI 四、完整代码 五、天地图地名搜索API文档 六、Gitee源码 一、案例截图 输入框搜索需要查询的大概地址,可以获取到经纬度和地址信息。 二、安装OpenLayers库 npm install ol 三、安装Element-UI…...
CrossFormer实战:使用CrossFormer实现图像分类任务(一)
摘要 CrossFormer是一种新型的视觉Transformer架构,旨在通过引入跨尺度注意力机制来提升计算机视觉任务的性能。该模型特别关注不同尺度特征之间的交互,解决了现有视觉Transformer在处理多尺度特征时的不足。 研究背景 在计算机视觉中,特征…...
性能测试工具Jmeter中的FTP脚本开发
FTP文件传输协议是TCP/IP协议组织中的常用协议之一,主要用在internet上双向传输文件。FTP协议具有客户端和服务器端两个部分组成部分,具有上传与下载两种功能。Jmeter也提供了FTP请求的测试支持,实现了上传和下载功能测试。 对于上图的FTP请求…...
探索微软 M365 安全:全方位守护数字世界
在当今这个科技呈井喷式飞速发展,数字化浪潮以汹涌澎湃、锐不可当之势席卷全球的时代,企业与个人仿若置身于一片浩瀚无垠、信息奔涌的海洋之中,尽情畅享着技术革新所带来的无穷无尽便利。然而,恰如平静海面下潜藏着暗礁与汹涌暗流,网络安全问题恰似隐匿在暗处、随时可能给…...
Qt C++读写NFC标签NDEF网址URI
本示例使用的发卡器:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1biFgjSs&ftt&id615391857885 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include "QLibrary" …...
[SMARTFORMS] 自定义SMARTFORMS表单页格式
在SMARTFORMS表单开发过程中,用户打印的纸张有可能不是标准的页格式,需要我自定义页格式 具体操作步骤如下所示 1.定义页格式 事务码SPAD,点击"完全管理" 点击"设备类型"中的页格式的"显示"按钮 点击创建按…...
大模型笔记:KV cache
1 为什么要使用KV cache 假设模型最终生成了四个token 对于第一个token,他的attention的计算方法为: 有了第一个token之后,生成第二个token的时候: sottmaxed表示已经逐行softmax后的结果同理,对于第三个token&…...
Android车机DIY开发之学习篇(三)替换Logo以正点原子为例
Android车机DIY开发之学习篇(三)替换Logo以正点原子为例 启动 logo 包括 u-boot 阶段 logo 内核阶段 logo /sdk/kernel-5.10 目录下替换 logo.bmp 654270 logo_kernel.bmp 654270 编译 Linux 内核...
宝塔面板 php8.0 安装 fileinfo 拓展失败
系统:Albaba Cloud Linux release 3 (OpenAnolis Editon)即 Centos 平替 异常提示: cc: fatal error: ** signal terminated program cc1 compilation terminated. make: *** [Makefile:211: libmagic/apprentice.lo] Error 1搜…...
机器学习数据预处理preprocessing
预处理方法预处理方法预处理方法BinarizerFunctionTransformerKBinsDiscretizerKernelCentererLabelBinarizerLabelEncoderMaxAbsScalerMinMaxScalerMultiLabelBinarizer sklearn.preprocessing.Binarizer 设定一个阈值(threshold),对于每个…...
网络安全 | 什么是Bot防护?
关注:CodingTechWork Bot防护介绍 随着互联网服务的普及和发展,越来越多的网站和应用遭遇了自动化攻击(Bot攻击)。Bot防护是一种安全技术,旨在检测和阻止自动化程序(即“机器人”或“bot”)对网…...
Qt学习笔记第81到90讲
第81讲 串口调试助手实现自动发送 为这个名叫“定时发送”的QCheckBox编写槽函数。 想要做出定时发送的效果,必须引入QT框架下的毫秒级定时器QTimer,查阅手册了解详情。 在widget.h内添加新的私有成员变量: QTimer *timer; 在widget类的构造…...
如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等)
如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等) 如何在本地部署大模型并实现接口访问( Llama3、Qwen、DeepSeek等)模型地址模型下载模型部署指定显卡运行app.py 运行环境requirements 调用接口代码调用 结语 如何…...
使用 Linux tracepoint、perf 和 eBPF 跟踪数据包
大家读完觉得有帮助记得关注和点赞!!! 目录 1 破局 1.1 逃离迷宫:上帝视角 1.2 网络跟踪:渴求利器 1.3 巨人肩膀:perf/eBPF 2 Perf 2.1 安装 perf 2.2 测试环境 2.3 初体验:跟踪 ping …...
给DevOps加点料:融入安全性的DevSecOps
从前,安全防护只是特定团队的责任,在开发的最后阶段才会介入。当开发周期长达数月、甚至数年时,这样做没什么问题;但是现在,这种做法现在已经行不通了。 采用 DevOps 可以有效推进快速频繁的开发周期(有时…...
MySQL视图笔记
视图的理解 ①视图是一种 虚拟表 ,本身是 不具有数据 的,占用很少的内存空间,它是 SQL 中的一个重要概念。 ②视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。 ③对视图中的数据进行增加删除和修改,对应的数据表&a…...
【Ubuntu与Linux操作系统:十、C/C++编程】
第10章 C/C编程 10.1 Linux编程基础 Linux编程基础涵盖了C/C语言在Linux环境中的特点和使用方法。Linux以其高性能和开源特性成为系统编程的重要平台。 1. C语言与Linux的关系 Linux内核主要是用C语言编写的,因此学习C语言是理解Linux底层机制的必要前提。C语言的…...
豆包MarsCode:可以在线用的智能AI编程助手
大家好,今天我想和大家分享一个我最近发现的宝藏工具——豆包MarsCode。 作为一个程序员,我一直在寻找能够提高工作效率、快捷、 优化代码质量的在线编程工具。豆包MarsCode IDE,这个由字节跳动推出的智能编程助手,让我眼前一亮&…...
RabbitMQ基础(简单易懂)
RabbitMQ高级篇请看: RabbitMQ高级篇-CSDN博客 目录 什么是RabbitMQ? MQ 的核心概念 1. RabbitMQ 的核心组件 2. Exchange 的类型 3. 数据流向说明 如何安装RabbitQueue? WorkQueue(工作队列): Fa…...
UE5 使用内置组件进行网格切割
UE引擎非常强大,直接内置了网格切割功能并封装为蓝图节点,这项功能在UE4中就存在,并且无需使用Chaos等模块。那么就来学习下如何使用内置组件实现网格切割。 1.配置测试用StaticMesh 对于被切割的模型,需要配置一些参数。以UE5…...
【面试题】技术场景 6、Java 生产环境 bug 排查
生产环境 bug 排查思路 分析日志:首先通过分析日志查看是否存在错误信息,利用之前讲过的 elk 及查看日志的命令缩小查找错误范围,方便定位问题。远程 debug 适用环境:一般公司正式生产环境不允许远程 debug,多在测试环…...
macOS 安装tomcat9
macOS 安装tomcat9 URL:https://tomcat.apache.org/download-90.cgi 解压之后放到指定目录 /Users/lanren/install/tomcat-9 自己取个名字就行 给权限: ① 先进行权限修改:终端输入sudo chmod 755 /Users/lanren/install/tomcat-9/bin/…...