Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击
- CIFAR数据集
- AI-FGTM介绍
- 算法流程
- AI-FGTM代码实现
- AI-FGTM算法实现
- 攻击效果
- 代码汇总
- aifgtm.py
- train.py
- advtest.py
之前已经针对CIFAR10训练了多种分类器:
Pytorch | 从零构建AlexNet对CIFAR10进行分类
Pytorch | 从零构建Vgg对CIFAR10进行分类
Pytorch | 从零构建GoogleNet对CIFAR10进行分类
Pytorch | 从零构建ResNet对CIFAR10进行分类
Pytorch | 从零构建MobileNet对CIFAR10进行分类
Pytorch | 从零构建EfficientNet对CIFAR10进行分类
Pytorch | 从零构建ParNet对CIFAR10进行分类
也实现了一些攻击算法:
Pytorch | 利用FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用BIM/I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用MI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用NI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用PI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用VMI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用VNI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用EMI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
本篇文章我们使用Pytorch实现AI-FGTM对CIFAR10上的ResNet分类器进行攻击.
CIFAR数据集
CIFAR-10数据集是由加拿大高级研究所(CIFAR)收集整理的用于图像识别研究的常用数据集,基本信息如下:
- 数据规模:该数据集包含60,000张彩色图像,分为10个不同的类别,每个类别有6,000张图像。通常将其中50,000张作为训练集,用于模型的训练;10,000张作为测试集,用于评估模型的性能。
- 图像尺寸:所有图像的尺寸均为32×32像素,这相对较小的尺寸使得模型在处理该数据集时能够相对快速地进行训练和推理,但也增加了图像分类的难度。
- 类别内容:涵盖了飞机(plane)、汽车(car)、鸟(bird)、猫(cat)、鹿(deer)、狗(dog)、青蛙(frog)、马(horse)、船(ship)、卡车(truck)这10个不同的类别,这些类别都是现实世界中常见的物体,具有一定的代表性。
下面是一些示例样本:
AI-FGTM介绍
AI - FGTM(Adam Iterative Fast Gradient Tanh Method)是一种用于生成对抗样本的算法,旨在提高对抗样本的转移性和不可区分性。
算法流程
初始化
- 给定原始干净样本 x x x,令 x 0 a d v = x x_{0}^{a d v}=x x0adv=x。
- 初始化第一时刻向量 m 0 = 0 m_{0}=0 m0=0,第二时刻向量 v 0 = 0 v_{0}=0 v0=0。
迭代更新( t = 0 t = 0 t=0 到 T − 1 T - 1 T−1)
- 计算当前梯度
- 计算对抗样本 x t a d v x_{t}^{a d v} xtadv 关于真实标签 y t r u e y^{true} ytrue 的损失函数(J)的梯度 ∇ x t a d v J ( x t a d v , y t r u e ) \nabla_{x_{t}^{a d v}} J(x_{t}^{a d v}, y^{true}) ∇xtadvJ(xtadv,ytrue)。
- 更新一阶矩 m t + 1 m_{t + 1} mt+1
- 根据公式 m t + 1 = m t + μ 1 ⋅ ∇ x t a d v J ( x t a d v , y t r u e ) m_{t + 1}=m_{t}+\mu_{1} \cdot \nabla_{x_{t}^{a d v}} J(x_{t}^{a d v}, y^{true}) mt+1=mt+μ1⋅∇xtadvJ(xtadv,ytrue) 计算 m t + 1 m_{t + 1} mt+1,其中 μ 1 \mu_{1} μ1 是一阶矩因子。
- 更新第二时刻向量 v t + 1 v_{t + 1} vt+1
- 根据公式 v t + 1 = v t + μ 2 ⋅ ( ∇ x t a d v J ( x t a d v , y t r u e ) ) 2 v_{t + 1}=v_{t}+\mu_{2} \cdot (\nabla_{x_{t}^{a d v}} J(x_{t}^{a d v}, y^{true}))^{2} vt+1=vt+μ2⋅(∇xtadvJ(xtadv,ytrue))2 计算 v t + 1 v_{t + 1} vt+1,其中 μ 2 \mu_{2} μ2 是二阶矩因子。
- 计算步长 α t \alpha_{t} αt
- 根据公式 α t = ε ∑ t = 0 T − 1 1 − β 1 t + 1 ( 1 − β 2 t + 1 ) 1 − β 1 t + 1 ( 1 − β 2 t + 1 ) \alpha_{t}=\frac{\varepsilon}{\sum_{t = 0}^{T - 1} \frac{1 - \beta_{1}^{t + 1}}{\sqrt{(1 - \beta_{2}^{t + 1})}}} \frac{1 - \beta_{1}^{t + 1}}{\sqrt{(1 - \beta_{2}^{t + 1})}} αt=∑t=0T−1(1−β2t+1)1−β1t+1ε(1−β2t+1)1−β1t+1 计算步长 α t \alpha_{t} αt,其中 ε \varepsilon ε 是扰动大小, β 1 \beta_{1} β1 和 β 2 \beta_{2} β2 是指数衰减率,且满足 ∑ t = 0 T − 1 α t = ε \sum_{t = 0}^{T - 1} \alpha_{t}=\varepsilon ∑t=0T−1αt=ε。
- 更新对抗样本 x t + 1 a d v x_{t + 1}^{a d v} xt+1adv
- 根据公式 x t + 1 a d v = C l i p ε x { x t a d v + α t ⋅ t a n h ( λ m t + 1 v t + 1 + δ ) } x_{t + 1}^{a d v}=Clip_{\varepsilon}^{x}\left\{x_{t}^{a d v}+\alpha_{t} \cdot tanh \left(\lambda \frac{m_{t + 1}}{\sqrt{v_{t + 1}}+\delta}\right)\right\} xt+1adv=Clipεx{xtadv+αt⋅tanh(λvt+1+δmt+1)} 更新对抗样本 x t + 1 a d v x_{t + 1}^{a d v} xt+1adv,其中 C l i p ε x { x ′ } = m i n { 255 , x + ε , m a x { 0 , x − ε , x ′ } } Clip_{\varepsilon}^{x}\left\{x'\right\}=min \left\{255, x+\varepsilon, max \left\{0, x-\varepsilon, x'\right\}\right\} Clipεx{x′}=min{255,x+ε,max{0,x−ε,x′}} 用于裁剪样本, λ \lambda λ 是尺度因子, δ = 1 0 − 8 \delta = 10^{-8} δ=10−8。
迭代完成
返回最终的对抗样本 x a d v = x T a d v x^{a d v}=x_{T}^{a d v} xadv=xTadv。
在每次迭代中,AI - FGTM先计算当前梯度,然后利用梯度信息更新第一时刻向量和第二时刻向量,接着计算动态步长,最后根据这些信息通过tanh函数和裁剪操作更新对抗样本。通过这样的迭代过程,AI - FGTM旨在生成具有更高转移性和不可区分性的对抗样本。
AI-FGTM代码实现
AI-FGTM算法实现
import torch
import torch.nn as nn
from math import sqrtdef AI_FGTM(model, criterion, original_images, labels, epsilon, num_iterations=10, beta1=0.9, beta2=0.999, mu1=0.9, mu2=0.999, lambda_=1.0):"""AI-FGTM (Adam Iterative Fast Gradient Tanh Method)参数:- model: 要攻击的模型- criterion: 损失函数- original_images: 原始图像- labels: 原始图像的标签- epsilon: 最大扰动幅度- num_iterations: 迭代次数- beta1: Adam算法中的第一指数衰减率- beta2: Adam算法中的第二指数衰减率- mu1: 第一时刻因子- mu2: 第二时刻因子- lambda_: 尺度因子"""# 初始化对抗样本为原始图像perturbed_images = original_images.clone().detach().requires_grad_(True)m = torch.zeros_like(original_images).detach().to(original_images.device)v = torch.zeros_like(original_images).detach().to(original_images.device)for t in range(num_iterations):# 计算当前步长step_size = epsilon * (1 - beta1 ** (t + 1)) / (sqrt(1 - beta2 ** (t + 1))) * sum((1 - beta1 ** (i + 1)) / sqrt(1 - beta2 ** (i + 1)) for i in range(num_iterations))# 前向传播outputs = model(perturbed_images)loss = criterion(outputs, labels)model.zero_grad()loss.backward()data_grad = perturbed_images.grad.data# 更新一阶矩mm = mu1 * m + (1 - mu1) * data_grad# 更新二阶矩vv = mu2 * v + (1 - mu2) * data_grad ** 2# 使用tanh函数计算更新方向update_direction = torch.tanh(lambda_ * m / (torch.sqrt(v) + 1e-8))# 更新对抗样本perturbed_images = perturbed_images + step_size * update_direction# 裁剪对抗样本,使其在原始图像的epsilon范围内perturbed_images = torch.clamp(perturbed_images, original_images - epsilon, original_images + epsilon)perturbed_images = perturbed_images.detach().requires_grad_(True)return perturbed_images
攻击效果
代码汇总
aifgtm.py
import torch
import torch.nn as nn
from math import sqrtdef AI_FGTM(model, criterion, original_images, labels, epsilon, num_iterations=10, beta1=0.9, beta2=0.999, mu1=0.9, mu2=0.999, lambda_=1.0):"""AI-FGTM (Adam Iterative Fast Gradient Tanh Method)参数:- model: 要攻击的模型- criterion: 损失函数- original_images: 原始图像- labels: 原始图像的标签- epsilon: 最大扰动幅度- num_iterations: 迭代次数- beta1: Adam算法中的第一指数衰减率- beta2: Adam算法中的第二指数衰减率- mu1: 第一时刻因子- mu2: 第二时刻因子- lambda_: 尺度因子"""# 初始化对抗样本为原始图像perturbed_images = original_images.clone().detach().requires_grad_(True)m = torch.zeros_like(original_images).detach().to(original_images.device)v = torch.zeros_like(original_images).detach().to(original_images.device)for t in range(num_iterations):# 计算当前步长step_size = epsilon * (1 - beta1 ** (t + 1)) / (sqrt(1 - beta2 ** (t + 1))) * sum((1 - beta1 ** (i + 1)) / sqrt(1 - beta2 ** (i + 1)) for i in range(num_iterations))# 前向传播outputs = model(perturbed_images)loss = criterion(outputs, labels)model.zero_grad()loss.backward()data_grad = perturbed_images.grad.data# 更新一阶矩mm = mu1 * m + (1 - mu1) * data_grad# 更新二阶矩vv = mu2 * v + (1 - mu2) * data_grad ** 2# 使用tanh函数计算更新方向update_direction = torch.tanh(lambda_ * m / (torch.sqrt(v) + 1e-8))# 更新对抗样本perturbed_images = perturbed_images + step_size * update_direction# 裁剪对抗样本,使其在原始图像的epsilon范围内perturbed_images = torch.clamp(perturbed_images, original_images - epsilon, original_images + epsilon)perturbed_images = perturbed_images.detach().requires_grad_(True)return perturbed_images
train.py
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
from models import ResNet18# 数据预处理
transform_train = transforms.Compose([transforms.RandomCrop(32, padding=4),transforms.RandomHorizontalFlip(),transforms.ToTensor(),transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))
])transform_test = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))
])# 加载Cifar10训练集和测试集
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=False, transform=transform_train)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=128, shuffle=True, num_workers=2)testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=False, transform=transform_test)
testloader = torch.utils.data.DataLoader(testset, batch_size=100, shuffle=False, num_workers=2)# 定义设备(GPU或CPU)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")# 初始化模型
model = ResNet18(num_classes=10)
model.to(device)# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)if __name__ == "__main__":# 训练模型for epoch in range(10): # 可以根据实际情况调整训练轮数running_loss = 0.0for i, data in enumerate(trainloader, 0):inputs, labels = data[0].to(device), data[1].to(device)optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()if i % 100 == 99:print(f'Epoch {epoch + 1}, Batch {i + 1}: Loss = {running_loss / 100}')running_loss = 0.0torch.save(model.state_dict(), f'weights/epoch_{epoch + 1}.pth')print('Finished Training')
advtest.py
import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
from models import *
from attacks import *
import ssl
import os
from PIL import Image
import matplotlib.pyplot as pltssl._create_default_https_context = ssl._create_unverified_context# 定义数据预处理操作
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.491, 0.482, 0.446), (0.247, 0.243, 0.261))])# 加载CIFAR10测试集
testset = torchvision.datasets.CIFAR10(root='./data', train=False,download=False, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=128,shuffle=False, num_workers=2)# 定义设备(GPU优先,若可用)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")model = ResNet18(num_classes=10).to(device)criterion = nn.CrossEntropyLoss()# 加载模型权重
weights_path = "weights/epoch_10.pth"
model.load_state_dict(torch.load(weights_path, map_location=device))if __name__ == "__main__":# 在测试集上进行FGSM攻击并评估准确率model.eval() # 设置为评估模式correct = 0total = 0epsilon = 16 / 255 # 可以调整扰动强度for data in testloader:original_images, labels = data[0].to(device), data[1].to(device)original_images.requires_grad = Trueattack_name = 'AI-FGTM'if attack_name == 'FGSM':perturbed_images = FGSM(model, criterion, original_images, labels, epsilon)elif attack_name == 'BIM':perturbed_images = BIM(model, criterion, original_images, labels, epsilon)elif attack_name == 'MI-FGSM':perturbed_images = MI_FGSM(model, criterion, original_images, labels, epsilon)elif attack_name == 'NI-FGSM':perturbed_images = NI_FGSM(model, criterion, original_images, labels, epsilon)elif attack_name == 'PI-FGSM':perturbed_images = PI_FGSM(model, criterion, original_images, labels, epsilon)elif attack_name == 'VMI-FGSM':perturbed_images = VMI_FGSM(model, criterion, original_images, labels, epsilon)elif attack_name == 'VNI-FGSM':perturbed_images = VNI_FGSM(model, criterion, original_images, labels, epsilon)elif attack_name == 'EMI-FGSM':perturbed_images = EMI_FGSM(model, criterion, original_images, labels, epsilon)elif attack_name == 'AI-FGTM':perturbed_images = AI_FGTM(model, criterion, original_images, labels, epsilon)perturbed_outputs = model(perturbed_images)_, predicted = torch.max(perturbed_outputs.data, 1)total += labels.size(0)correct += (predicted == labels).sum().item()accuracy = 100 * correct / total# Attack Success RateASR = 100 - accuracyprint(f'Load ResNet Model Weight from {weights_path}')print(f'epsilon: {epsilon:.4f}')print(f'ASR of {attack_name} : {ASR :.2f}%')
相关文章:
Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集AI-FGTM介绍算法流程初始化迭代更新( t 0 t 0 t0 到 T − 1 T - 1 T−1)迭代完成 AI-FGTM代码实现AI-FGTM算法实现攻击效果 代码汇总aifgtm.pytrain.pyadvtest.py 之前已经…...
如何在谷歌浏览器中启用语音搜索
想象一下,你正在拥挤的地铁上,双手都拿着沉重的购物袋,突然你想搜索附近的咖啡馆。此时如果你能通过语音而不是打字来进行搜索,那将多么的便利!在谷歌浏览器中,启用语音搜索功能就是这么简单而高效…...
[搜广推]王树森推荐系统笔记——曝光过滤 Bloom Filter
曝光过滤 & Bloom Filter 曝光过滤主要在召回阶段做,主要方法是Bloom Filter 曝光过滤问题 -如果用户看过某个物品,则不再把该物品曝光给该用户。 - 原因是重复曝光同一个物品会损害用户体验 - 但长视频通常没有曝光过滤(youtube&…...
实现Python将csv数据导入到Neo4j
目录 一、获取数据集 1.1 获取数据集 1.2 以“记事本”方式打开文件 1.3 另存为“UTF-8”格式文件 1.4 选择“是” 二、 打开Neo4j并运行 2.1 创建新的Neo4j数据库 2.2 分别设置数据库名和密码 编辑 2.3 启动Neo4j数据库 2.4 打开Neo4j数据库 2.5 运行查看该数据库…...
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
这个包丢失了 启动不了 起因是pom中加入了 <tomcat.version></tomcat.version>版本指定,然后idea自动编译后,包丢了,删除这个配置后再也找不回来, 这个包正常在 <dependency><groupId>org.springframe…...
Java 日志类库
Java 日志库是最能体现 Java 库在进化中的渊源关系的,在理解时重点理解日志框架本身和日志门面,以及比较好的时间等。要关注其历史渊源和设计(比如桥接),而具体在使用时查询接口即可,否则会陷入 JUL&#x…...
【python】银行客户流失预测预处理部分,独热编码·标签编码·数据离散化处理·数据筛选·数据分割
数据预处理 通过网盘分享的文件:银行流失预测数据和代码 链接: https://pan.baidu.com/s/1loiB8rMvZArfjJccu4KW6w?pwdpfcs 提取码: pfcs 非数值特征处理 目的:将非数值特征转换为数值型,以便模型能够处理。方法: 地理位置&am…...
Linux | scp指令基于WSL在Windows/Ubuntu系统间传输文件
. 背景 在Windows系统里,使用WSL连接远程Linux(Ubuntu)服务器是如今一个很常见的操作流程(有利于WFH哈哈)。 在使用远程机器的时候,通常需要将本地的文件上传、或将远程的文件下载。 问题:如…...
类设计者的核查表
核查表 第一篇 如何设计类你的类需要复制构造函数吗何时不需要自定义复制构造函数何时需要自定义复制构造函数总结 什么时候需要将构造函数和赋值运算符设置为私有?1. 单例模式(Singleton Pattern)2. 禁止复制和赋值3. 工厂模式(F…...
深入解析:Python中的决策树与随机森林
在这个数据驱动的时代,机器学习技术已经成为许多企业和研究机构不可或缺的一部分。其中,决策树和随机森林作为两种强大的算法,在分类和回归任务中表现尤为出色。本文将带领大家深入了解这两种算法在Python中的实现,从基础到实战&a…...
umi : 无法加载文件 D:\software\nodejs\node_global\umi.ps1,因为在此系统上禁止运行脚本。
问题详情 2、解决方法 1.使用命令 get-ExecutionPolicy查看 显示Restricted:限制 所以要给权限 2. 使用命令:Set-ExecutionPolicy -Scope CurrentUser 3. 会提示为参数提供值 4. 输入: RemoteSigned 具体如下图所示,成功解决。 报…...
十四、从0开始卷出一个新项目之瑞萨RZN2L之栈回溯(Default_Handler/hartfault)
目录 一、概述 二、参考资料 三、代码 四、日志 五、定位函数调用 六、README和工具 一、概述 软件开发中常见的比较棘手的问题就是hartfault/Default_Handler/dump,俗称跑飞了。 参考cmbacktrace,在瑞萨RZN2L/T2M实现栈回溯,串口打印…...
CTFHub disable_functions通关
LD_PRELOAD 来到首页发现有一句话直接就可以用蚁剑连接 根目录里有/flag但是不能看;命令也被ban了就需要绕过了 绕过工具在插件市场就可以下载 如果进不去的话 项目地址: #本地仓库;插件存放 antSword\antData\plugins 绕过选择 上传后我们点进去可以看到多了一个绕过的文件;…...
什么是 DevOps 自动化?
DevOps 自动化是一种现代软件开发方法,它使用工具和流程来自动化任务并简化工作流程。它将开发人员、IT 运营和安全团队聚集在一起,帮助他们有效协作并交付可靠的软件。借助 DevOps 自动化,组织能够处理重复性任务、优化流程并更快地将应用程…...
创建Instagram合作广告方法与注意事项
将Instagram作为宣传阵地的品牌和营销人员一定对它的Branded content ads品牌内容广告很熟悉,Instagram在测试并推广创作者市场功能之后,创作者和品牌协作变得更加便利。其中的Partnership ads合作广告能结合品牌和UGC、KOL的力量,帮助品牌提…...
Elasticsearch
什么是elasticsearch 根据维基百科的定义:Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档。 为啥要用elasticsearch 高性能,近实时,大数据&…...
YOLO11改进-注意力-引入级联组注意力机制(Cascaded Group Attention, CGA)
在 Vision Transformers 面临计算成本高、推理速度慢的背景下,级联组注意力(CGA)机制应运而生,它通过将输入特征拆分为不同部分输入各注意力头计算自注意力并级联输出,解决了多头自注意力中注意力头冗余导致的计算效率…...
电磁兼容(EMC):一文解读磁芯复合材料——塑磁
目录 01 塑磁的定义 02 塑磁的常见规格型号 03 塑磁材料的优点 04 塑磁的应用 塑磁,也称为注塑磁,是一种将磁性粉末注入到塑料基体中制成的复合磁体材料。以下是塑磁的定义、应用和材料特性的总结: 01 塑磁的定义 塑磁是以塑料为基体,通过特殊工艺在其中加入磁性粒子(…...
第十四章 C++ 数字
通常,当我们需要用到数字时,我们会使用原始的数据类型,如 int、short、long、float 和 double 等等。这些用于数字的数据类型,其可能的值和数值范围,我们已经在 C 数据类型一章中讨论过。 C 定义数字 我们已经在之前…...
虚幻引擎结构之UObject
一. UObject 的介绍 UObject 是虚幻引擎中的核心基础类,所有其他游戏对象和资源类都直接或间接地继承自它。作为虚幻引擎的基石,UObject 提供了多项关键功能,包括内存管理、序列化、反射(introspection)、垃圾回收以及元数据支持。在虚幻引擎中,UObject 类的实例通常被称…...
2002 - Can‘t connect to server on ‘192.168.1.XX‘ (36)
参考:2002 - Can‘t connect to server on ‘192.168.1.XX‘ (36) ubantu20.04,mysql5.7.13 navicat 远程连接数据库报错 2002 - Can’t connect to server on ‘192.168.1.61’ (36) 一、查看数据库服务是否有启动,发现有启动 systemctl status mysql…...
怎麼在模擬器中實現換IP
方法一:使用代理伺服器 獲取代理伺服器資訊需要一個可用的代理伺服器地址和端口。 設置代理 如果模擬器有內置的網路設置,可以直接在網路設置中輸入代理伺服器的地址和端口。對於不支持直接設置代理的模擬器,可以在應用內設置代理。例如&am…...
【信号滤波 (上)】傅里叶变换和滤波算法去除ADC采样中的噪声(Matlab/C++)
目录 一、ADC采样的噪声简介1.1 常见的ADC噪声来源 二、信号的时域到频域转换2.1 傅里叶变换巧记傅里叶变换 三、傅里叶变换和滤波算法工程实现3.1 使用Matlab计算信号时域到频域的变换3.2 使用Matlab去除特定频点噪声寻找峰值算噪声频率构建陷波滤波器滤除噪声频点陷波滤波器与…...
将多个 Touchstone 文件导入 ANSYS Electronics Desktop
概述 本博客说明了如何将 N 端口标准文件列表导入 ANSYS 电路和 HFSS 3D 布局工具。N端口模型可以引用解决方案文件数组,而不是引用单个文件。下面简要概述了添加多文件 N 端口模型所需的步骤,视频链接中提供了完整的演示。 创建多文件 N 端口模型 要…...
GFPS扩展技术原理(八)-可听设备控制
Hearable Controls 可听设备控制就是手机通过Message Stream去配置影响听感的设置,目前只有一个ANC可供配置,Hearable controls的Message Group的值为0x8。 Active noise control Active noise control也就是主动降噪(ANC)&…...
对称二叉树
本节判断一棵二叉树是否为对称二叉树,用深度优先算法和广度优先搜索算法均可以实现. 问题描述: 给定一棵二叉树,判断该二叉树是否为对称二叉树. 广度优先思路解析: 如果所有镜像对称位置上两节点都相同,就说明这棵树一定是对称的.那么如何对比对称位置上的两个节点比较方便呢…...
K8s 无头服务(Headless Service)
在Kubernetes中,服务(Service)是一个抽象层,它定义了一组Pod的访问策略。通常情况下,服务会分配一个集群内的IP地址,并通过这个IP地址和端口来路由流量到后端Pod。然而,Kubernetes还提供了一种特…...
ArcGIS+MIKE21 洪水淹没分析、溃坝分析,洪水淹没动态效果
洪水淹没分析过程: 一、所需数据: 1.分析区域DEM数据 二、ArcGIS软件 1.提取分析区域DEM(水库坝下区域) 2.DEM栅格转点 3.计算转换后几何点的x和y坐标值(精度20、小数位3) 4.导出属性表,形式…...
WordPress File Upload 插件 任意文件读取漏洞复现(CVE-2024-9047)
0x01 产品简介 WordPress File Upload插件是一款功能强大的WordPress站点文件上传插件,它允许用户在WordPress站点中的文章、页面、侧边栏或表单中轻松上传文件到wp-contents目录中的任何位置。该插件使用最新的HTML5技术,确保在现代浏览器和移动设备上都能流畅运行,同时也…...
MySQL purged gtid是如何生成和维护的
目录 1. GTID的基本概念2. GTID的生成3. GTID的清除3.1 手动清除二进制日志3.2 自动清除二进制日志3.3 重置主库 在MySQL中,gtid_purged表示已清除的GTID集合。 gtid_purged的生成和维护过程如下: 1. GTID的基本概念 GTID(Global Transact…...
vulhub log4j2漏洞复现攻略
前期准备:在安全选项添加端口规则如下 进入靶场环境 cd vulhub/ cd log4j/ cd CVE-2021-44228/ 启动容器 docker-compose up -d docker ps 得到端口号为8983,浏览器访问 先在⾃⼰搭建的DNSLOG平台上获取⼀个域名来监控我们注⼊的效果 可以发现 /sol…...
Android修行手册 - 移动端几种常用动画方案对比
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…...
springboot484基于springboot的扶贫助农系统(论文+源码)_kaic
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装扶贫助农系统软件来发挥其高效地信息处理的作用,…...
windows调整鼠标速度
参考:https://baijiahao.baidu.com/s?id1791659684803021646&wfrspider&forpc 鼠标灵敏度,亦称为指针速度或DPI(每英寸点数)设置,对用户的电脑操作流畅度和精准度至关重要。本篇文章将深入解析如何在Windows操作系统环境…...
专业的内外网数据交换方案 可解决安全、效率、便捷3大问题
内外网数据交换是很多企业和行业都会面临的场景,既然隔离了内外网,重中之重就是要确保数据的安全性,其次在数据流转交换过程中,不能太繁琐复杂,需要让用户快速、便捷的进行数据交换。首先我们来看看,在进行…...
ECharts关系图-关系图11,附视频讲解与代码下载
引言: 关系图(或称网络图、关系网络图)在数据可视化中扮演着至关重要的角色。它们通过节点(代表实体,如人、物体、概念等)和边(代表实体之间的关系或连接)的形式,直观地…...
在已有vue cli项目中添加单元测试配置
使用的是vue cli ^4.0.0的脚手架,项目采用的vue2进行编写,项目本身是没有使用单元测试的。应该挺多项目还是使用的vue2的项目进行开发的,自己在开发中过程中,还是发生了挺多需要记录原来功能的情况,这个时候去翻文档明…...
计算机网络B重修班-期末复习
[TOC] (计算机网络B重修班-期末复习) 一、单选 (20题,1分/题,共20分) 二、判断 (10题,1分/题,共10分) 三、填空 (10题,1分/题,共10…...
常见排序算法
目录 冒泡排序(Bubble Sort) 选择排序(Selection Sort) 插入排序(Insertion Sort) 希尔排序(Shell Sort) 快速排序(Quick Sort) 堆排序(Hea…...
开源轮子 - Logback 和 Slf4j
spring boot内置:Logback 文章目录 spring boot内置:Logback一:Logback强在哪?二:简单使用三:把 log4j 转成 logback四:日志门面SLF4J1:什么是SLF4J2:SLF4J 解决了什么痛…...
redis数据类型:list
数据结构 源码版本:7.2.2路径:src/adlist.h 关于list的 头文件中涉及到的这三个结构体如下 /* Node, List, and Iterator are the only data structures used currently. */ # 节点 typedef struct listNode {struct listNode *prev; # 前元素的指针s…...
聚类之轮廓系数
Silhouette Score(轮廓系数)是用于评估聚类质量的指标之一。它衡量了数据点与同簇内其他点的相似度以及与最近簇的相似度之间的对比。 公式 对于一个数据点 i: a(i): 数据点 i 到同簇内其他点的平均距离(簇内不相似度ÿ…...
时钟芯片入门指南:从原理到实践
DS1302时钟 实时时钟芯片,精度高、 DS1302芯片可以对年、月、日、周、时、分、秒进行计时,并且具有闰年补偿等多种功能。 采用三线接口与CPU进行同步通信(采用串行数据传送方式简单SPI 3线接口),并可采用突发方式一次传送多个字节的时钟信号…...
【Java笔记】第十七章:反射
一、反射 1. 反射(Reflection): 允许在程序运行状态中,可以获取任意类中的属性和方法,并且可以操作任意对象内部的属性和方法,这种动态获取类的信息及动态操作对象的属性和方法对应的机制称为反射机制。 2. 类对象 和 类的对象(实…...
Vue:实现输入框不能输负数功能
1、使用v-model指令 <input type"number" v-model"value" min"0" input"checkInput"> checkInput() {this.value Math.max(0, parseInt(this.value)); } 2、使用计算属性 <template><div><input type"…...
GamePlay UE网络同步
基本同步方式: ①未复制:函数仅在本机运行,不对任何人造成影响 ②在服务器上运行:当函数在客户端上调用时才能生效。客户端会通知服务器:“请在服务器上执行这个事件”,事件的具体内容会被在服务器上执行。 ③组播(多播,Multicast):当函数在服务器上调用时才能生效…...
iLoveIMG:强大的在线图片编辑工具分享
在数字化时代,图片处理已成为日常工作中不可或缺的一部分。无论是优化网页图片、调整尺寸、压缩处理还是格式转换,高效且免费的工具总是令人向往。今天,我要为大家介绍一个非常实用的在线图片编辑工具——iLoveIMG。它不仅功能强大࿰…...
重温设计模式--工厂模式(简单、工厂、抽象)
文章目录 工厂模式定义工厂模式通常可以细分为以下几种类型1、简单工厂模式(Simple Factory Pattern)2、工厂方法模式(Factory Method Pattern)3、抽象工厂模式(Abstract Factory Pattern) UML 图1、简单工厂模式UML2、…...
人工智能ACA(六)--计算机视觉基础
一、计算机视觉概述 1. 计算机视觉定义 人工智能(AI)的一个重要分支旨在使计算机和系统能够从图像或多维数据中“理解”和“解释”视觉世界通过模拟人类视觉系统,计算机视觉技术能够自动执行诸如识别、分类、检测和跟踪等任务。 2. 计算机…...
WPF+MVVM案例实战与特效(四十六)- 打造动态背景时钟控件,轻松提升界面美感
文章目录 1、引言2、案例效果2、时钟控件封装1、创建用户控件2、依赖属性3、代码解释4、时钟图片资源3、控件使用4、源代码获取5、总结1、引言 在开发WPF应用程序时,创建一个美观且功能丰富的用户控件可以大大提升用户体验。今天,我们将深入探讨如何构建一个好看的时钟控件,…...