当前位置: 首页 > news >正文

第9期:文本条件生成(CLIP + Diffusion)详解

“让我们用一句话,让模型画出一幅画。”

在前几期中我们学习了 Denoising Diffusion Probabilistic Models(DDPM)如何在无条件情况下生成图像。而在本期,我们将跨入更具挑战性但也更酷的领域 —— 文本条件图像生成(Text-Conditional Generation)

本期的主角是将 CLIP 模型与扩散模型结合,使模型可以根据你输入的 一句话 来“想象”并绘制出图像。比如输入 "a photo of a cat",就能生成类似猫的图像。

一、什么是 CLIP?

CLIP 是由 OpenAI 提出的多模态模型,全称为 Contrastive Language–Image Pretraining。它的核心思想是:

同一个图像和它的描述性文字,在语义空间中应该越接近越好。

CLIP 同时训练了两个编码器:

  • 图像编码器:将图像转换成一个向量(embedding)。

  • 文本编码器:将一段文本描述转换成另一个向量。

然后通过对比学习,使得图像和它的描述之间的向量距离尽量接近。

CLIP 在这期中的作用是:将文本转化为“引导”扩散模型生成图像的向量条件

二、扩散模型如何结合文本?

在原始的 DDPM 中,模型仅学习如何从纯噪声恢复出图像,没有任何“指导”信息。而现在,我们希望引导它生成与某个文本语义相关的图像。

🌱 做法:

  1. 将文本输入 CLIP 的文本编码器 → 得到文本嵌入 text_embedding

  2. 在 UNet 中加入文本条件 → 每一层都能“感知”到你想要生成的是“猫”还是“狗”。

  3. 在每个扩散时间步中,模型接收 x_ttext_embedding 作为输入,预测噪声。

完整实现(含代码)

安装依赖

pip install torch torchvision
pip install git+https://github.com/openai/CLIP.git

1. 加载 CLIP 模型

import clip
import torch
device = "cuda" if torch.cuda.is_available() else "cpu"
clip_model, preprocess = clip.load("ViT-B/32", device=device)def get_text_embedding(texts):tokens = clip.tokenize(texts).to(device)with torch.no_grad():embeddings = clip_model.encode_text(tokens)embeddings = embeddings / embeddings.norm(dim=-1, keepdim=True)return embeddings

2. 定义条件 UNet

import torch.nn as nn
import torch.nn.functional as Fclass UNetBlock(nn.Module):def __init__(self, in_ch, out_ch, cond_dim):super().__init__()self.conv1 = nn.Conv2d(in_ch, out_ch, 3, padding=1)self.conv2 = nn.Conv2d(out_ch, out_ch, 3, padding=1)self.norm = nn.GroupNorm(8, out_ch)self.cond_proj = nn.Linear(cond_dim, out_ch)def forward(self, x, cond):cond = self.cond_proj(cond).unsqueeze(-1).unsqueeze(-1)h = self.conv1(x)h = self.norm(h)h = F.relu(h + cond)h = self.conv2(h)h = self.norm(h)return F.relu(h + cond)class ConditionalUNet(nn.Module):def __init__(self, cond_dim=512):super().__init__()self.init = nn.Conv2d(3, 64, 3, padding=1)self.down1 = UNetBlock(64, 128, cond_dim)self.down2 = UNetBlock(128, 256, cond_dim)self.middle = UNetBlock(256, 256, cond_dim)self.up1 = UNetBlock(512, 128, cond_dim)self.up2 = UNetBlock(256, 64, cond_dim)self.out = nn.Conv2d(64, 3, 1)def forward(self, x, t, cond):x1 = self.init(x)x2 = self.down1(x1, cond)x3 = self.down2(x2, cond)x4 = self.middle(x3, cond)x = self.up1(torch.cat([x4, x3], dim=1), cond)x = self.up2(torch.cat([x, x2], dim=1), cond)return self.out(x)

3.定义扩散过程

T = 300
betas = torch.linspace(1e-4, 0.02, T)
alphas = 1 - betas
alphas_cumprod = torch.cumprod(alphas, dim=0)def q_sample(x_0, t, noise):sqrt_alpha = torch.sqrt(alphas_cumprod[t])[:, None, None, None].to(x_0.device)sqrt_one_minus_alpha = torch.sqrt(1 - alphas_cumprod[t])[:, None, None, None].to(x_0.device)return sqrt_alpha * x_0 + sqrt_one_minus_alpha * noise

4. 训练循环(简化)

from torchvision.datasets import CIFAR10
from torchvision import transforms
from torch.utils.data import DataLoadertransform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,))
])dataset = CIFAR10(root='./data', download=True, transform=transform)
dataloader = DataLoader(dataset, batch_size=64, shuffle=True)model = ConditionalUNet().to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=2e-4)for epoch in range(10):for images, labels in dataloader:images = images.to(device)t = torch.randint(0, T, (images.size(0),), device=device).long()noise = torch.randn_like(images)# 文本标签(e.g. "cat", "airplane"...)texts = [dataset.classes[i] for i in labels]text_emb = get_text_embedding(texts)x_t = q_sample(images, t, noise)pred_noise = model(x_t, t, text_emb)loss = F.mse_loss(pred_noise, noise)optimizer.zero_grad()loss.backward()optimizer.step()print(f"Epoch {epoch}, Loss: {loss.item():.4f}")

5. 文本条件采样

@torch.no_grad()
def sample_with_text(text, model, steps=T):model.eval()x = torch.randn(16, 3, 32, 32).to(device)text_emb = get_text_embedding([text] * 16)for i in reversed(range(steps)):t = torch.full((x.size(0),), i, device=device, dtype=torch.long)pred_noise = model(x, t, text_emb)alpha = alphas_cumprod[t][:, None, None, None].to(device)sqrt_alpha = torch.sqrt(alpha)sqrt_one_minus_alpha = torch.sqrt(1 - alpha)x_0 = (x - sqrt_one_minus_alpha * pred_noise) / sqrt_alphax_0 = x_0.clamp(-1, 1)if i > 0:noise = torch.randn_like(x)beta = betas[t][:, None, None, None].to(device)x = torch.sqrt(alpha) * x_0 + torch.sqrt(beta) * noiseelse:x = x_0return x

6. 结果展示

import torchvision
import matplotlib.pyplot as pltsamples = sample_with_text("a photo of a dog", model)# 显示
samples = (samples + 1) / 2  # [-1, 1] -> [0, 1]
grid = torchvision.utils.make_grid(samples, nrow=4)
plt.figure(figsize=(6, 6))
plt.imshow(grid.permute(1, 2, 0).cpu().numpy())
plt.axis('off')
plt.title("Generated Images: 'a photo of a dog'")
plt.show()

总结

  • 本期我们使用 CLIP + Diffusion 实现了文本条件图像生成。

  • CLIP 提供语义嵌入作为条件,引导扩散模型生成与文字描述相符的图像。

  • 可以扩展到更多语义场景,比如 "a cartoon of Pikachu""a red sports car" 等。

  • 下一期将进一步探索更高级的条件方式,如 交叉注意力融合文本Classifier-free Guidance 等。

相关文章:

第9期:文本条件生成(CLIP + Diffusion)详解

“让我们用一句话,让模型画出一幅画。” 在前几期中我们学习了 Denoising Diffusion Probabilistic Models(DDPM)如何在无条件情况下生成图像。而在本期,我们将跨入更具挑战性但也更酷的领域 —— 文本条件图像生成(Te…...

8 编程笔记全攻略:Markdown 语法精讲、Typora 编辑器全指南(含安装激活、基础配置、快捷键详解、使用技巧)

1 妙笔在手,编程无忧! 1.1 编程为啥要做笔记?这答案绝了! 嘿,各位键盘魔法师!学编程不记笔记,就像吃火锅不配冰可乐 —— 爽到一半直接噎住!你以为自己脑子是顶配 SSD,结…...

C#测试linq中的左连接的基本用法

使用linq联表或者连接两个对象集合查询时一般使用的是join关键字,返回结果中包含两个表或两个对象集合中连接字段相等的数据记录,如果要实现sql语句中的左连接效果,并没有现成的left join关键字,此时可以使用DefaultIfEmpty 实现左…...

【Android面试八股文】Android系统架构【一】

Android系统架构图 1.1 安卓系统启动 1.设备加电后执行第一段代码:Bootloader 系统引导分三种模式:fastboot,recovery,normal: fastboot模式:用于工厂模式的刷机。在关机状态下,按返回开机 键进…...

什么是 Stream

Stream 是对集合对象功能的增强,它不是集合,也不存储数据,而是从集合中抽象出一条数据通道,让你可以用链式方式一步步处理数据。 🔧 常见操作分类 类型方法举例创建stream(), Stream.of(), Arrays.stream()中间操作fi…...

网络编程 - 4 ( TCP )

目录 TCP 流套接字编程 API 介绍 SeverSocket Socket 用 TCP 实现一个回显服务器 服务端 客户端 运行调试 第一个问题:PrintWriter 内置的缓冲区 - flush 刷新解决 第二个问题:上述代码中,需要进行 close 操作吗? 第三…...

在STM32的定时器外设中,选择使用哪个外部时钟配置函数

在STM32的定时器外设中,选择使用哪个外部时钟配置函数主要取决于以下几个因素: 时钟源类型: TIM_ITRxExternalClockConfig:使用内部触发输入(ITRx),即来自其他定时器的时钟信号 TIM_TIxExternalClockConfig&#xff1…...

【Tauri2】026——Tauri+Webassembly

前言 不多废话 直言的说,笔者看到这篇文章大佬的文章 【04】Tauri 入门篇 - 集成 WebAssembly - 知乎https://zhuanlan.zhihu.com/p/533025312尝试集成一下WebAssembly,直接开始 正文 准备工作 新建一个项目 安装 vite的rsw插件和rsw pnpm instal…...

jenkins尾随命令

在访问jenkins的网址后面可以追加命令,比如访问地址是 http://10.20.0.124:8080/,常用的有以下几种方式: 1.关闭Jenkins 只要浏览器输入http://10.20.0.124:8080/exit即可退出,或者http://localhost:8080/exit 2.重启Jenkins …...

基于机器学习 LSTM 算法的豆瓣评论情感分析系统

基于机器学习 LSTM 算法的豆瓣评论情感分析系统 博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 &#x1f44…...

腾讯云对象存储m3u8文件使用腾讯播放器播放

参考腾讯云官方文档: 播放器 SDK Demo 体验_腾讯云 重要的一步来了: 登录腾讯云控制台,找到对象存储的存储桶。 此时,再去刷新刚才创建的播放器html文件,即可看到播放画面了。...

基于chatgpt和deepseek解答显卡的回答

当然可以!了解显卡特别是英伟达(NVIDIA)的系列,对于选购、升级或者了解游戏和创作性能都很重要。下面我帮你系统整理一下 NVIDIA 显卡的各个系列,并加点选购建议,方便你快速上手。 chatgpt 🧠 …...

2025年渗透测试面试题总结-拷打题库06(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 1. Sleep被禁用后的SQL注入 2. XSS属性控制利用 3. CSRF防护 4. 危险请求头 5. XXE高发场景 6. Ja…...

【一起学Rust】使用Thunk工具链实现Rust应用对Windows XP/7的兼容性适配实战

前言 在Rust语言快速发展的今天,开发者经常面临将现代语言特性与遗留系统兼容的挑战。特别是在工业控制、嵌入式设备等场景中,Windows XP/7等经典操作系统仍占据重要地位。本文深入解析如何通过Thunk工具链突破Rust编译器对旧版Windows系统的兼容性限制…...

leetcode 674. Longest Continuous Increasing Subsequence

目录 题目描述 第一步,明确并理解dp数组及下标的含义 第二步,分析明确并理解递推公式 第三步,理解dp数组如何初始化 第四步,理解遍历顺序 代码 题目描述 这是动态规划解决子序列问题的例子。与第300题的唯一区别就是&#…...

在VMware Workstation 17 Pro上实现Windows与UOS虚拟机之间复制粘贴文本及文件

在VMware Workstation 17 Pro上实现Windows与UOS虚拟机之间复制粘贴文本及文件 在本教程中,我们将介绍如何在VMware Workstation 17 Pro中安装UOS虚拟机,并通过安装open-vm-tools-desktop软件来实现Windows和UOS系统之间的文本和文件复制粘贴功能。 1.…...

十一、数据库day03--SQL语句02

文章目录 一、查询语句1. 基本查询2. 条件查询2.1 ⽐较运算符&逻辑运算符2.2 模糊查询2.3 范围查询2.4 判断空 3. 其他复杂查询3.1 排序3.2 聚合函数3.3 分组3.4 分页查询 二、回顾1. 使⽤ Navicat ⼯具中的命令列2.命令⾏基本操作步骤 提示:以下是本篇文章正文…...

第6章 类文件结构《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》

第6章 类文件结构 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。 6.1 概述 老师说过,计算机只认识0和1,所以我们写的程序需要被编译器翻译成由0和1构成的二进制格式才能被计算机…...

【Vue】模板语法与指令

个人主页:Guiat 归属专栏:Vue 文章目录 1. Vue 模板语法基础1.1 文本插值1.2 原始 HTML1.3 属性绑定 2. Vue 指令系统2.1 条件渲染2.2 列表渲染2.3 事件处理2.4 表单输入绑定 3. 计算属性与侦听器3.1 计算属性3.2 侦听器 4. 类与样式绑定4.1 绑定 HTML 类…...

Python语法系列博客 · 第5期[特殊字符] 模块与包的导入:构建更大的程序结构

上一期小练习解答(第4期回顾) ✅ 练习1:判断偶数函数 def is_even(num):return num % 2 0print(is_even(4)) # True print(is_even(5)) # False✅ 练习2:求平均值 def avg(*scores):return sum(scores) / len(scores)print(…...

HashMap 初步理解 put 操作流程 HashMap 的线程安全问题

一、HashMap 核心原理 HashMap 是 Java 中最常用的哈希表实现,基于 数组 链表/红黑树 的复合结构,核心特性如下: 哈希函数 键的哈希值通过 hashCode() 计算,并通过扰动函数优化分布:static final int hash(Object ke…...

服务治理-服务发现和负载均衡

第一步:引入依赖 第二步:配置地址 改写购物车服务的代码 负载均衡成功实现。 假如有一个服务挂了,比如说8081,cart-service能不能正常访问,感知到。 再重新启动8081端口。 不管服务宕机也好,还是服务刚启动…...

GNU,GDB,GCC,G++是什么?与其他编译器又有什么关系?

文章目录 前言1. GNU和他的工具1.1 gcc与g1.2 gdb 2.Windows的Mingw/MSVC3.LLVM的clang/clang4.Make/CMake 前言 在开始之前我们先放一段Hello World&#xff1a;hello.c #include <stdio.h>int main() {printf("Hello World");return 0; }然后就是一段老生常…...

定制一款国密浏览器(9):SM4 对称加密算法

上一章介绍了 SM3 算法的移植要点,本章介绍对称加密算法 SM4 的移植要点。 SM4 算法相对 SM3 算法来说复杂一些,但还是比较简单的算法,详细算法说明参考《GMT 0002-2012 SM4分组密码算法》这份文档。铜锁开源项目的实现代码在 sm4.c 文件中,直接拿过来编译就可以。 但需要…...

kafka集群认证

1、安装Kerberos(10.10.10.168) yum install krb5-server krb5-workstation krb5-libs -y ​ 查看版本 klist -V ​ Kerberos 5 version 1.20.1 ​ 编辑/etc/hosts 10.10.10.168 ms1 10.10.10.150 ms2 10.10.10.110 ms3 vim /etc/krb5.conf # Configuration snippets ma…...

Mermaid 是什么,为什么适合AI模型和markdown

什么是 Mermaid&#xff1f; Mermaid 是一个基于 JavaScript 的开源绘图和图表工具&#xff0c;允许用户通过简单的文本语法创建图表。它支持生成流程图、时序图、类图、甘特图等多种类型的可视化内容&#xff0c;并直接从类似 Markdown 的代码中渲染。Mermaid 因其与 Markdow…...

为什么信号完整性对于高速连接器设计至关重要?

外部连接器通过在各种电子元件和系统之间可靠地传输数据而不损失保真度来保持信号完整性。在本文中&#xff0c;我们将讨论信号完整性的重要性&#xff0c;回顾高速部署挑战&#xff0c;并重点介绍各种连接器设计策略&#xff0c;以防止失真和降级。 了解连接器信号完整性挑战…...

【FFmpeg从入门到精通】第三章-FFmpeg转封装

1 音视频文件转MP4格式 在互联网常见的格式中&#xff0c;跨平台最好的应该是MP4文件&#xff0c;因为MP4文件既可以在PC平台的 Flashplayer 中播放&#xff0c;又可以在移动平台的 Android、ios 等平台中进行播放&#xff0c;而且使用系统默认的播放器即可播放&#xff0c;因…...

PG数据库推进医疗AI向量搜索优化路径研究(2025年3月修订版)

PG数据库推进医疗AI向量搜索优化路径研究 一、医疗 AI 向量搜索的发展现状与挑战 1.1 医疗数据特征与检索需求 医疗数据作为推动医疗领域进步与创新的关键要素,具有鲜明且复杂的特征。从多模态角度看,医疗数据涵盖了结构化数据,如患者基本信息、检验检查报告中的数值结果;…...

Android 下拉栏中的禁用摄像头和麦克风隐藏

Android 下拉栏中的禁用摄像头和麦克风隐藏 文章目录 Android 下拉栏中的禁用摄像头和麦克风隐藏一、前言二、下拉框中的禁用摄像头和麦克风隐藏实现1、设置支持属性为false2、修改代码 三、其他1、下拉栏中的禁用摄像头和麦克风隐藏小结2、 Android SensorPrivacyService ps&a…...

阿里云Clickhouse 冷热数据分层存储 实战记录

一、 背景 某业务Clickhouse库月数据增长超过2.5T&#xff0c;云上Clickhouse容量并不是无限的&#xff0c;单节点有32T上限&#xff0c;而业务已使用一半以上&#xff0c;依此速度&#xff0c;半年内就将达到上限。 与业务讨论&#xff0c;大致有以下几种解决思路&#xff1a;…...

ARINC818-实现

1.编码和解码&#xff1b;分隔符插入和删除&#xff1b;空闲idle字符插入 2.视频TX和RX接口&#xff1a;可以设计为流传输和帧同步传输 3.传输媒介&#xff1a;光纤或者铜缆 4.链路支持fc 1x,2x,3x,5x,6x,8x 上图中N有限制&#xff0c;N不能允许ADVB帧负载和填充长度不超过2112…...

OpenStack Yoga版安装笔记(23)Swift安装

一、官方文档 Object Storage Install Guide — Swift 2.29.3.dev5 documentation 二、环境准备 之前的实验&#xff0c;已经有controller, compute1, block1节点&#xff0c;并已经完成Keystone、Glance、Nova、Neutron、Cinder等主要OpenStack Service的安装。 此处新增…...

MySql 三大日志(redolog、undolog、binlog)详解

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/aa730ab3f84049638f6c9a785e6e51e9.png 1. redo log&#xff1a;“你他妈别丢数据啊&#xff01;” 干啥的&#xff1f; 这货是InnoDB的“紧急备忘录”。比如你改了一条数据&#xff0c;MySQL怕自己突然断电嗝屁了&am…...

算法题(128):费解的开关

审题&#xff1a; 本题需要我们将多组测试用例中拉灯数小于等于6的最小拉灯数输出&#xff0c;若拉灯数最小值仍大于6&#xff0c;则输出-1 思路&#xff1a; 方法一&#xff1a;二进制枚举 首先我们先分析一下基本特性&#xff1a; 1.所有的灯不可能重复拉&#xff1a;若拉的数…...

2025.04.19-阿里淘天春招算法岗笔试-第三题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 数值平衡之道 问题描述 LYA 是一位精通树形数据结构的数学家,她有一棵包含 n n n...

单片机毕业设计选题物联网计算机电气电子类

题目一&#xff1a;基于单片机的PM2.5空气质量检测仪器 选 1.用到ADC0832模数转换芯片&#xff0c;数据更加精准。 2.使用夏普传感器的GP2Y1010AUOF粉尘传感器实时检测空气中的PM2.5值并通过1602显示出来&#xff0c;检测准确。 3.LCD1602液晶第一行 前面显示测到的PM2.5…...

TDOA解算——牛顿迭代法|以4个基站的三维空间下TDOA定位为背景,使用牛顿迭代法解算。附完整代码,订阅专栏后可复制粘贴

本问所介绍的代码通过TDOA(到达时间差)方法,结合牛顿迭代算法,实现了三维空间内目标位置的定位。系统包含1个主锚点和3个副锚点,通过测量信号到达各基站的时间差计算距离差,最终迭代求解目标坐标。订阅专栏后可以获得完整的MATLAB代码,粘贴到空脚本中即可运行 文章目录 …...

海量聊天数据处理:基于Spring Boot与SharingJDBC的分库分表策略及ClickHouse冷热数据分离

引言 随着互联网应用的快速发展&#xff0c;每天产生的聊天记录数量级已经达到了惊人的程度。以2000万条/天为例&#xff0c;一年下来就是大约7.3亿条记录。如此庞大的数据量给数据库的设计和管理带来了前所未有的挑战。本文将探讨如何使用SharingJDBC整合Spring Boot技术来实…...

网络开发基础(游戏)之 Socket API

Socket简介 Socket (套接字)是网络编程的基础&#xff0c;在 C# 中通过 System.Net.Sockets 命名空间提供了一套完整的 API 来实现网络通信。 网络上的两个程序通过一个双向的通信连接实现数据交换&#xff0c; 这个连接的一端称为一个Socket。 一个Socket包含了进行网络通信必…...

在 Amazon Graviton 上运行大语言模型:CPU 推理性能实测与调优指南

引言 在生成式 AI 浪潮中&#xff0c;GPU 常被视为大模型推理的唯一选择。然而&#xff0c;随着 ARM 架构的崛起和量化技术的成熟&#xff0c;CPU 推理的性价比逐渐凸显。本文基于 Amazon Graviton 系列实例与 llama.cpp 工具链&#xff0c;实测了 Llama 3、DeepSeek 等模型的…...

基于尚硅谷FreeRTOS视频笔记——15—系统配制文件说明与数据规范

目录 配置函数 INCLUDE函数 config函数 数据类型 命名规范 函数与宏 配置函数 官网上可以查找 最核心的就是 config和INCLUDE INCLUDE函数 这些就是裁剪的函数 它们使用一个ifndef。如果定义了&#xff0c;就如果定义了这个宏定义&#xff0c;那么代码就生效。 通过ifn…...

Nacos 使用了什么日志框架?如何配置和查看日志?

Nacos 使用的日志框架 Nacos 主要使用 SLF4j (Simple Logging Facade for Java) 作为日志门面&#xff08;API&#xff09;&#xff0c;并选择 Logback 作为其底层的日志实现。 SLF4j: 这是一个日志抽象层&#xff0c;允许开发者在代码中使用统一的接口进行日志记录&#xff…...

【基于Fluent+Python耦合的热管理数字孪生系统开发:新能源产品开发的硬核技术实践】

引言&#xff1a;热管理数字孪生的技术革命 在新能源领域&#xff08;如动力电池、储能系统、光伏逆变器等&#xff09;&#xff0c;热管理是决定产品性能与安全的核心问题。传统热设计依赖实验与仿真割裂的流程&#xff0c;而数字孪生技术通过实时数据驱动与动态建模&#xf…...

【工具变量】A股上市公司信息披露质量KV指数测算数据集(含do代码 1991-2024年)

KV指数&#xff08;Key Value Index&#xff09;作为评估信息披露质量的关键指标&#xff0c;在证券市场&#xff0c;尤其是A股市场上市公司信息披露监管与评估中占据重要地位。该指数通过系统化、定量化的方法&#xff0c;对企业发布的信息进行全面剖析与打分&#xff0c;精准…...

【ELF2学习板】利用OpenMP采用多核并行技术提升FFTW的性能

目录 引言 OpenMP简介 编译OpenMP支持的FFTW库 部署与测试 测试程序 程序部署 测试结果 结语 引言 在前面已经介绍了在ELF2开发板上运行FFTW计算FFT。今天尝试利用RK3588的多核运算能力来加速FFT运算。FFTW利用多核能力可以考虑使用多线程或者OpenMP。今天介绍一下Ope…...

打靶日记 zico2: 1

一、探测靶机IP&#xff08;进行信息收集&#xff09; 主机发现 arp-scan -lnmap -sS -sV -T5 -p- 192.168.10.20 -A二、进行目录枚举 发现dbadmin目录下有个test_db.php 进入后发现是一个登录界面&#xff0c;尝试弱口令&#xff0c;结果是admin&#xff0c;一试就出 得到加…...

【技术派后端篇】 Redis 实现用户活跃度排行榜

在各类互联网应用中&#xff0c;排行榜是一个常见的功能需求&#xff0c;它能够直观地展示用户的表现或贡献情况&#xff0c;提升用户的参与感和竞争意识。在技术派项目中&#xff0c;也引入了用户活跃度排行榜&#xff0c;该排行榜主要基于 Redis 的 ZSET 数据结构来实现。接下…...

MySql Innodb详细解读

参考文档&#xff1a;https://www.cnblogs.com/acatsmiling/p/18424729 一、数据存储&#xff1a;从磁盘到内存的"黑帮走私" 1. 物理结构&#xff1a;表空间与页的江湖规矩 表空间&#xff08;Tablespace&#xff09;&#xff1a; 所有InnoDB数据存在表空间里&…...

每日两道leetcode

399. 除法求值 - 力扣&#xff08;LeetCode&#xff09; 题目 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件&#xff0c;其中 equations[i] [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。 …...