【大模型】图像生成:ESRGAN:增强型超分辨率生成对抗网络的革命性突破
深度解析ESRGAN:增强型超分辨率生成对抗网络的革命性突破
- 技术演进与架构创新
- 核心改进亮点
- 环境配置与快速入门
- 硬件要求
- 安装步骤
- 实战全流程解析
- 1. 单图像超分辨率重建
- 2. 自定义数据集训练
- 3. 视频超分处理
- 核心技术深度解析
- 1. 残差密集块(RRDB)
- 2. 相对判别器(RaGAN)
- 3. 感知损失优化
- 常见问题与解决方案
- 1. 显存不足错误
- 2. 生成图像模糊
- 3. 训练过程震荡
- 性能优化策略
- 1. 混合精度训练
- 2. TensorRT加速
- 3. 多GPU并行
- 学术背景与核心论文
- 基础论文
- 技术突破
- 应用场景与未来展望
- 典型应用领域
- 技术演进方向
ESRGAN(Enhanced Super-Resolution Generative Adversarial Networks)是图像超分辨率领域的里程碑式工作,在ECCV 2018获得最佳论文奖。该项目通过多项创新性改进,将生成对抗网络(GAN)在图像重建领域的性能推向新高度。本文将从技术原理到工程实践,深入解析这一经典框架的设计哲学与使用方法。
技术演进与架构创新
核心改进亮点
对比项 | SRGAN | ESRGAN |
---|---|---|
生成器结构 | 残差块 | 残差密集块(RRDB) |
判别器设计 | VGG特征匹配 | 相对判别器(Relativistic) |
归一化方式 | 批归一化 | 去除BN层 |
损失函数 | 感知损失+VGG | 感知损失+频谱归一化 |
网络深度 | 16层残差 | 23层RRDB |
环境配置与快速入门
硬件要求
组件 | 推荐配置 | 最低要求 |
---|---|---|
GPU | NVIDIA RTX 3090 | GTX 1080Ti |
显存 | 12GB | 8GB |
CPU | Xeon 8核 | Core i5 |
内存 | 32GB | 16GB |
安装步骤
# 创建conda环境
conda create -n esrgan python=3.7 -y
conda activate esrgan# 安装PyTorch(适配CUDA 11.3)
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch# 克隆仓库
git clone https://github.com/xinntao/ESRGAN.git
cd ESRGAN# 安装依赖
pip install -r requirements.txt# 下载预训练模型
wget https://github.com/xinntao/ESRGAN/releases/download/v0.1.1/RRDB_ESRGAN_x4.pth -P experiments/pretrained_models/
实战全流程解析
1. 单图像超分辨率重建
from basicsr.archs.rrdbnet_arch import RRDBNet
from basicsr.utils import img2tensor, tensor2img# 初始化模型
model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23)
model.load_state_dict(torch.load('experiments/pretrained_models/RRDB_ESRGAN_x4.pth'))
model.eval().cuda()# 处理输入图像
img_lq = cv2.imread('input.jpg', cv2.IMREAD_COLOR)
img_tensor = img2tensor(img_lq).unsqueeze(0).cuda()# 执行推理
with torch.no_grad():output = model(img_tensor)# 转换输出
img_output = tensor2img(output)
cv2.imwrite('output.jpg', img_output)
2. 自定义数据集训练
# 准备训练数据(DIV2K格式)
datasets/
├── train/
│ ├── HR/ # 高分辨率图像(2048x2048)
│ └── LR/ # 低分辨率图像(512x512)
└── val/├── HR/└── LR/# 修改配置文件
cp options/train_ESRGAN.yml options/train_ESRGAN_custom.yml
# 调整关键参数
name: ESRGAN_custom
datasets:train:name: DIV2Kdataroot_gt: datasets/train/HRdataroot_lq: datasets/train/LRscale: 4
# 启动训练
python train.py -opt options/train_ESRGAN_custom.yml
3. 视频超分处理
# 分帧处理视频
ffmpeg -i input.mp4 -qscale:v 1 frames/%04d.jpg# 批量处理帧序列
python inference_realesrgan.py -n RealESRGAN_x4plus -i frames -o frames_sr# 合成超分视频
ffmpeg -framerate 30 -i frames_sr/%04d.jpg -c:v libx264 -crf 18 output.mp4
核心技术深度解析
1. 残差密集块(RRDB)
class ResidualDenseBlock(nn.Module):def __init__(self, num_feat=64, num_grow_ch=32):super().__init__()self.conv1 = nn.Conv2d(num_feat, num_grow_ch, 3, 1, 1)self.conv2 = nn.Conv2d(num_feat + num_grow_ch, num_grow_ch, 3, 1, 1)self.conv3 = nn.Conv2d(num_feat + 2*num_grow_ch, num_grow_ch, 3, 1, 1)self.conv4 = nn.Conv2d(num_feat + 3*num_grow_ch, num_grow_ch, 3, 1, 1)self.conv5 = nn.Conv2d(num_feat + 4*num_grow_ch, num_feat, 3, 1, 1)self.lrelu = nn.LeakyReLU(negative_slope=0.2, inplace=True)def forward(self, x):x1 = self.lrelu(self.conv1(x))x2 = self.lrelu(self.conv2(torch.cat((x, x1), 1)))x3 = self.lrelu(self.conv3(torch.cat((x, x1, x2), 1)))x4 = self.lrelu(self.conv4(torch.cat((x, x1, x2, x3), 1)))x5 = self.conv5(torch.cat((x, x1, x2, x3, x4), 1))return x5 * 0.2 + x # 残差连接
2. 相对判别器(RaGAN)
class RaDiscriminator(nn.Module):def __init__(self):super().__init__()self.feature_extractor = VGG19FeatureExtractor()self.adversarial_loss = AdversarialLoss(gan_type='ragan')def forward(self, real, fake):# 提取多尺度特征real_feats = self.feature_extractor(real)fake_feats = self.feature_extractor(fake.detach())# 计算相对损失loss_real = self.adversarial_loss(real_feats, fake_feats, is_real=True)loss_fake = self.adversarial_loss(fake_feats, real_feats, is_real=False)return (loss_real + loss_fake) / 2
3. 感知损失优化
class PerceptualLoss(nn.Module):def __init__(self, layer_weights={'conv5_4': 1.0}):super().__init__()self.vgg = VGG19FeatureExtractor()self.l1_loss = nn.L1Loss()self.layer_weights = layer_weightsdef forward(self, pred, target):pred_feats = self.vgg(pred)target_feats = self.vgg(target.detach())loss = 0.0for layer in self.layer_weights:loss += self.l1_loss(pred_feats[layer], target_feats[layer]) * self.layer_weights[layer]return loss
常见问题与解决方案
1. 显存不足错误
现象:CUDA out of memory
优化策略:
# 减小批处理大小
python train.py -opt options/train.yml --batch_size 8# 启用梯度检查点
for block in model.blocks:block.enable_checkpoint = True# 降低输入分辨率
datasets:train:crop_size: 128 # 原默认256
2. 生成图像模糊
诊断与修复:
- 检查生成器初始化:
model.init_weights(pretrained='experiments/pretrained_models/RRDB_ESRGAN_x4.pth')
- 调整损失权重:
# 配置文件调整 pixel_opt:type: L1Lossloss_weight: 1.0 perceptual_opt:type: PerceptualLosslayer_weights: {"conv5_4": 1.0}loss_weight: 1.0
3. 训练过程震荡
解决方案:
# 调整优化器参数
optimizer:type: Adamlr: 1e-4betas: [0.9, 0.99]# 添加学习率衰减
scheduler:type: MultiStepLRmilestones: [50000, 100000]gamma: 0.5
性能优化策略
1. 混合精度训练
python -m torch.cuda.amp.autocast_mode train.py -opt options/train.yml --amp
2. TensorRT加速
# 导出ONNX模型
python export_onnx.py --input input.pth --output esrgan.onnx# 转换TensorRT引擎
trtexec --onnx=esrgan.onnx --saveEngine=esrgan.engine --fp16 --optShapes=input:1x3x256x256
3. 多GPU并行
# 数据并行
python -m torch.distributed.launch --nproc_per_node=4 train.py -opt options/train.yml# 模型并行
model = nn.DataParallel(model, device_ids=[0,1,2,3])
学术背景与核心论文
基础论文
-
ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks
Wang X, et al. ECCV 2018
提出RRDB结构和相对判别器 -
Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
Ledig C, et al. CVPR 2017
SRGAN原始论文,奠定感知损失基础 -
Deep Residual Learning for Image Recognition
He K, et al. CVPR 2016
残差学习的理论基础
技术突破
- 残差密集块(RRDB):结合残差连接与密集连接
- 去除批归一化(BN):避免伪影生成
- 相对判别器(RaGAN):改进对抗训练稳定性
- 频谱归一化:增强判别器约束
应用场景与未来展望
典型应用领域
- 影视修复:老电影高清化修复
- 医学成像:低分辨率CT/MRI增强
- 卫星遥感:高精度地表图像重建
- 移动摄影:手机拍照超分辨率
技术演进方向
- 视频超分:时序一致性优化
- 轻量化部署:移动端实时推理
- 多模态融合:结合深度信息
- 自监督学习:减少配对数据依赖
ESRGAN通过其创新的架构设计,将图像超分辨率技术推向了新的高度。本文提供的技术解析与实战指南,将助力开发者深入理解这一经典工具。随着生成式AI的持续发展,ESRGAN的技术思想仍将持续影响计算机视觉领域的研究与实践。
相关文章:
【大模型】图像生成:ESRGAN:增强型超分辨率生成对抗网络的革命性突破
深度解析ESRGAN:增强型超分辨率生成对抗网络的革命性突破 技术演进与架构创新核心改进亮点 环境配置与快速入门硬件要求安装步骤 实战全流程解析1. 单图像超分辨率重建2. 自定义数据集训练3. 视频超分处理 核心技术深度解析1. 残差密集块(RRDB࿰…...
记录搭建自己的应用中心-需求看板搭建
记录搭建自己的应用中心-需求看板搭建 人员管理新增用户组织用户登录和操作看板状态看板任务通知任务详情 人员管理 由于不是所有人都有应用管理权限,所以额外做了一套应用登录权限,做了一个新的组织人员表,一个登录账户下的所有应用人员共享…...
探秘数据结构:构建高效算法的灵魂密码
摘要 数据结构作为计算机科学的基石,其设计与优化直接影响算法效率、资源利用和系统可靠性。本文系统阐述数据结构的基础理论、分类及其核心操作,涵盖数组、链表、栈、队列、树、图、哈希表与堆等经典类型。深入探讨各结构的应用场景与性能对比…...
多节点监测任务分配方法比较与分析
多监测节点任务分配方法是分布式系统、物联网(IoT)、工业监测等领域的核心技术,其核心目标是在资源受限条件下高效分配任务,以优化系统性能。以下从方法分类、对比分析、应用场景选择及挑战等方面进行系统阐述: 图1 多…...
spring-boot-maven-plugin 将spring打包成单个jar的工作原理
spring-boot-maven-plugin 是 Spring Boot 的 Maven 插件,它的核心功能是将 Spring Boot 项目打包成一个独立的、可执行的 Fat JAR(包含所有依赖的 JAR 包)。以下是它的工作原理详解: 1. 默认 Maven 打包 vs Spring Boot 插件打包…...
盐化行业数字化转型规划详细方案(124页PPT)(文末有下载方式)
资料解读:《盐化行业数字化转型规划详细解决方案》 详细资料请看本解读文章的最后内容。 该文档聚焦盐化行业数字化转型,全面阐述了盐化企业信息化建设的规划方案,涵盖战略、架构、实施计划、风险及效益等多个方面,旨在通过数字化…...
开源革命:从技术共享到产业变革——卓伊凡的开源实践与思考-优雅草卓伊凡
开源革命:从技术共享到产业变革——卓伊凡的开源实践与思考-优雅草卓伊凡 一、开源的本质与行业意义 1.1 开源软件的定义与内涵 当卓伊凡被问及”软件开源是什么”时,他给出了一个生动的比喻:”开源就像将食谱公之于众的面包师,…...
解锁 C++26 的未来:从语言标准演进到实战突破
一、C26 的战略定位与开发进展 C26 的开发已进入功能冻结阶段,预计 2026 年正式发布。作为 C 标准委员会三年一迭代的重要版本,其核心改进聚焦于并发与并行性的深度优化,同时在内存管理、元编程等领域实现重大突破。根据 ISO C 委员会主席 H…...
terraform实现本地加密与解密
在 Terraform 中实现本地加密与解密(不依赖云服务),可以通过 OpenSSL 或 GPG 等本地加密工具配合 External Provider 实现。以下是完整的安全实现方案: 一、基础架构设计 # 文件结构 . ├── secrets │ ├── encrypt.sh …...
黄雀在后:外卖大战新变局,淘宝+饿了么开启电商大零售时代
当所有人以为美团和京东的“口水战”硝烟渐散,外卖大战告一段落时,“螳螂捕蝉,黄雀在后”,淘宝闪购联合饿了么“闪现”外卖战场,外卖烽火再度燃起。 4 月30日,淘宝天猫旗下即时零售业务“小时达”正式升级…...
基本功能学习
一.enum枚举使用 E_SENSOR_REQ_NONE 的定义及用途 在传感器驱动开发或者电源管理模块中,E_SENSOR_REQ_NONE通常被用来表示一种特殊的状态或请求模式。这种状态可能用于指示当前没有活动的传感器请求,或者是默认初始化状态下的一种占位符。 可能的定义…...
59常用控件_QComboBox的使用
目录 代码示例:使用下拉框模拟麦当劳点餐 代码示例:从文件中加载下拉框的选项 QComboBox表示下拉框 核心属性 属性说明currentText当前选中的文本currentIndex当前选中的条目下标。 从 0 开始计算。如果当前没有条目被选中,值为 -1editable是否允许修改…...
卡洛诗西餐的文化破圈之路
在餐饮市场的版图上,西餐曾长期被贴上“高端”“舶来品”“纪念日专属”的标签,直到卡洛诗以高性价比西餐的定位破局,将意大利风情与家庭餐桌无缝衔接。这场从异国符号到家常选择的转型,不仅是商业模式的创新,更是一部…...
Python-57:Base32编码和解码问题
问题描述 你需要实现一个 Base32 的编码和解码函数。 相比于 Base32,你可能更熟悉 Base64,Base64 是非常常见的用字符串形式表示二进制数据的方式,在邮件附件、Web 中的图片中都有广泛的应用。 Base32 是 Base64 的变种,与 Bas…...
【排序算法】八大经典排序算法详解
一、直接选择排序(Selection Sort)算法思想算法步骤特性分析 二、堆排序(Heap Sort)算法思想关键步骤特性分析 三、直接插入排序(Insertion Sort)算法思想算法步骤特性分析 四、希尔排序(Shell …...
近端策略优化PPO详解:python从零实现
🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…...
C# System.Text.Json终极指南(十):从基础到高性能序列化实战
一、JSON序列化革命:System.Text.Json的架构优势 1.1 核心组件解析 1.2 性能基准测试(.NET 8) 操作Newtonsoft.JsonSystem.Text.Json性能提升简单对象序列化1,200 ns450 ns2.7x大型对象反序列化15 ms5.2 ms2.9x内存分配(1k次操作)45 MB12 MB3.75x二、基础序列化操作精解 …...
Centos7.9 安装mysql5.7
1.配置镜像(7.9的镜像过期了) 2.备份原有的 CentOS 基础源配置文件 sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 3.更换为国内镜像源 sudo vi /etc/yum.repos.d/CentOS-Base.repo 将文件内容替换为以下内容&am…...
Qt指南针
Qt写的指南针demo. 运行结果 滑动调整指针角度 实现代码 h文件 #ifndef COMPASS_H #define COMPASS_H#include <QWidget> #include <QColor>class Compass : public QWidget {Q_OBJECT// 可自定义属性Q_PROPERTY(QColor backgroundColor READ backgroundColor WRI…...
杜邦分析法
杜邦分析法(DuPont Analysis)是一种用于分析企业财务状况和经营绩效的综合分析方法,由美国杜邦公司在20世纪20年代率先采用,故得名。以下是其相关内容介绍: 核心指标与分解 净资产收益率(ROE):杜邦分析法的核心指标,反映股东权益的收益水平,用以衡量公司运用自有资本…...
给U盘加上图标
电脑插入U盘后,U盘的那个标志没有特色,我们可以换成有意义的照片作为U盘图标,插上U盘就能看到,多么地浪漫。那该如何设置呢?一起来看看吧 选择一张ICO格式的图片到U盘里 PNG转ICO - 在线转换图标文件PNG转ICO - 免费…...
人工智能对未来工作的影响
人工智能对未来工作的影响是多方面的,既包括对就业结构的改变,也涉及工作方式、职业技能需求以及社会政策的调整。以下是对人工智能对未来工作影响的详细分析: 一、就业结构的变革 岗位替代与消失 人工智能技术在许多领域展现出强大的自动化…...
RocketMQ常见面试题一
1. RocketMQ 是什么?它的核心组件有哪些? 答:RocketMQ 是阿里巴巴开源的一款分布式消息中间件,支持高吞吐、低延迟、高可用的消息发布与订阅。 核心组件: NameServer:轻量级注册中心,管理 Broker 的元数据(路由信息),无状态。 Broker:消息存储和转发节点,分为 Mas…...
C++调试(壹):初步认识WinDbg和dump文件
目录 1.前言 2.WinDbg是什么? 3.WinDbg安装 4.Dump文件是什么? 5.生成Dump文件的场景 前言 这是一个关于C调试的博客,该系列博客主要是讲解如何使用WinDbg工具结合dump文件调试程序。在日常开发过程中,我们往往无法完…...
centos7 离线安装python3 保留python2
一、事前准备: (1)查看centos具体版本 cat /etc/redhat-releaseCentOS Linux release 7.4.1708 (Core) (2)查看linux中当前python版本 centos7 默认安装python2.7.5 (3)查看python3的依赖&#…...
【dify—9】Chatflow实战——博客文章生成器
目录 一、创建Chatflow 二、创建变量 三、添加时间工具 四、编写提示词 五、回复输出 六、运行 第一部分 安装difydocker教程:【difydocker安装教程】-CSDN博客 第二部分 dock重装教程:【dify—2】docker重装-CSDN博客 第三部分 dify拉取镜像&…...
华为OD机试真题——斗地主之顺子(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录…...
3.2/Q2,Charls最新文章解读
文章题目:Internet usage elevates elderly obesity: evidence from a difference-in-differences analysis of the broadband China policy DOI:10.1186/s13690-025-01565-9 中文标题:互联网使用导致老年人肥胖:中国宽带政策差异…...
Seata服务端开启事务核心源码解析
文章目录 概述一、doGlobalBegin1.1、createGlobalSession1.2、addSessionLifecycleListener1.3、begin 概述 Seata服务端作为TC角色,用于接收客户端标注了GlobalTransactional也就是TM角色的开启事务,提交/回滚事务请求,维护全局和分支事务的…...
Seata服务端回滚事务核心源码解析
文章目录 前言一、doGlobalRollback3.1、changeGlobalStatus3.2、doGlobalRollback 前言 本篇介绍Seata服务端接收到客户端TM回滚请求,进行处理并且驱动所有的RM进行回滚的源码。 一、doGlobalRollback doGlobalRollback是全局回滚的方法: 首先依旧…...
PMP-第九章 项目资源管理(一)
项目资源管理概述 项目资源管理包括识别、获取和管理所需资源以完成项目的各个过程资源主要分为实物资源和人力资源;实物资源包括设备、材料和基础设施等团队资源或人员指的是人力资源团队资源管理与项目干系人管理有重叠的部分,本章重点关注组成项目团…...
【Unity】MVP框架的使用例子
在提到MVP之前,可以先看看这篇MVC的帖子: 【Unity】MVC的简单分享以及一个在UI中使用的例子 MVC的不足之处: 在MVC的使用中,会发现View层直接调用了Model层的引用,即这两个层之间存在着一定的耦合性,而MV…...
Matlab/Simulink - BLDC直流无刷电机仿真基础教程(四) - PWM调制模拟
Matlab/Simulink - BLDC直流无刷电机仿真基础教程(四) - PWM调制模拟 前言一、PWM调制技术基本原理二、仿真模型中加入PWM调制三、逆变电路MOS管添加体二极管四、模拟添加机械负载五、仿真模型与控制框图文章相关模型文件下载链接参考链接 前言 本系列文…...
x86架构详解:定义、应用及特点
一、x86架构的定义 x86 是由Intel公司开发的复杂指令集(CISC)处理器架构,起源于1978年的Intel 8086处理器,后续扩展至32位(IA-32)和64位(x86-64)。其名称来源于早期处理器型号的“8…...
C++学习-入门到精通-【3】控制语句、赋值、自增和自减运算符
C学习-入门到精通-【3】控制语句、赋值、自增和自减运算符 控制语句、赋值、自增和自减运算符 C学习-入门到精通-【3】控制语句、赋值、自增和自减运算符一、什么是算法二、伪代码三、控制结构顺序结构选择结构if语句if...else语句switch语句 循环结构while语句 四、算法详述&a…...
【Bootstrap V4系列】学习入门教程之 页面内容排版
Bootstrap V4 学习入门教程之 页面内容排版 按钮上的指针排版一、Global settings 全局设置二、Headings 标题2.1 Customizing headings 自定义标题2.2 Display headings 显示标题2.3 Lead 引导 三、Blockquotes 块引用3.1 Naming a source 命名源3.2 Alignment 对齐 四、Lists…...
GTA5(传承/增强) 13980+真车 超跑 大型载具MOD整合包+最新GTA6大型地图MOD 5月最新更新
1500超跑载具 1000普通超跑 1500真车超跑 各种军载具1000 各种普通跑车 船舶 飞机 1000 人物1500 添加式led载具1000 超级英雄最新版 添加添加式武器MOD1000 添加地图MOD500 添加超跑载具2000 当前共计1.2wMOD 4月2日更新 新增770menyoo地图 当前共计12770 新增48款超级英雄最新…...
目标文件的段结构及核心组件详解
目标文件(如 .o 或 .obj)是编译器生成的中间文件,其结构遵循 ELF(Linux)或 COFF(Windows)格式。以下是其核心段(Section)和关键机制的详细解析: 1. 目标文件的…...
60常用控件_QSpinBox的使用
目录 代码示例:调整麦当劳购物车中的份数 使⽤ QSpinBox 或者 QDoubleSpinBox 表⽰ "微调框", 它是带有按钮的输⼊框. 可以⽤来输⼊整 数/浮点数. 通过点击按钮来修改数值⼤⼩. 由于 SpinBox 和 QDoubleSpinBox ⽤法基本相同, 就只介绍 SpinBox 的…...
数据库Mysql_约束
将失败当作自己的老师,即使他会使自己难堪 ----------陳長生. 1.什么是数据库约束 数据库约束是在数据库中对表中的内容设定条件或者规则,设置了这些规则能使得数据更具体有准确性,可靠性。 2.约束类型 NOT NULL设置列不能为空UNIQUE设置列…...
C++笔记-继承(下)(包含派生类的默认成员函数,菱形继承等)
一.派生类的默认成员函数 1.14个常见默认成员函数 默认成员函数,默认的意思就是指我们不写,编译器会自动为我们生成一个,那么在派生类中,这几个成员函数是如何生成的呢? 1.派生类的构造函数必须调用基类的构造函数初…...
DeepSeek V3 训练策略:FP8混合精度与多Token预测
近年来,大规模语言模型取得重大突破,但其训练与部署成本也随之攀升。DeepSeek 系列开源模型致力于通过优化模型结构和训练策略来降低成本、提升性能。DeepSeek V3 融合了多种先进技术(如 FP8 低精度训练、DualPipe 双流水线机制、多Token 预测目标等),在保证模型能力的同时…...
开始一个vue项目
一、创建vite项目和配置 1、查看npm版本: npm --version 根据版本选择创建命令 # npm 6.x npm create vitelatest my-vue-product --template vue # npm 7 npm create vitelatest my-vue-product -- --template vue 2、依次执行: npm install n…...
世纪华通:从财报数据看其在游戏领域的成功与未来
引言 日前,世纪华通发布了2024年及2025年第一季度的财务报告。报告显示,公司不仅在过去一年取得了显著的营收增长,而且在国内外市场均有出色表现。特别是《无尽冬日》和《Whiteout Survival》等游戏的成功,为世纪华通带来了巨大的…...
ruoyi-plus Spring Boot + MyBatis 中 BaseEntity 的设计与动态查询实践
一、BaseEntity 设计解析 以下是一个典型的 BaseEntity 设计示例: @Data public class BaseEntity implements Serializable {@Serialprivate static final long serialVersionUID =...
MCP:智能家居的“大脑”,如何引领未来居住革命
MCP:智能家居的“大脑”,如何引领未来居住革命 一、引言:MCP与智能家居的未来 随着智能家居的迅猛发展,越来越多的家庭开始拥有各种智能设备,从智能灯泡、智能门锁到智能音响,每一个设备都在为生活提供便利与舒适。然而,尽管这些设备各自具备了独立的功能,但它们之间往…...
[基础]详解C++模板类(完整实例代码)
目录 C模板类:通用编程的基石引言一、模板类的核心作用1.1 代码复用1.2 类型安全1.3 性能优化 二、模板类的进阶用法2.1 多参数模板2.2 非类型参数2.3 成员函数特化 三、实战场景解析3.1 场景一:通用容器开发3.2 场景二:算法抽象3.3 场景三&a…...
Python 常用内置函数详解(九):type()函数——获取对象类型或获取一个新的类型对象
目录 一、功能二、语法和示例 一、功能 type() 函数有两种形式,当只有一个参数时,用于获取对象的类型;当有多个参数时,用于获取新的类型对象。 二、语法和示例 第一种: type(object)参数说明: 1.object: 对象 2.…...
FreeRTOS任务管理与通信机制详解
1 任务的创建与管理 任务创建 使用 xTaskCreate() 创建任务: BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, // 任务函数(入口) const char * const pcName, // 任务名称(调试用) config…...
哈希表笔记(二)redis
Redis哈希表实现分析 这份代码是Redis核心数据结构之一的字典(dict)实现,本质上是一个哈希表的实现。Redis的字典结构被广泛用于各种内部数据结构,包括Redis数据库本身和哈希键类型。 核心特点 双表设计:每个字典包含两个哈希表࿰…...