《SwinIR:使用Swin-Transformer图像恢复》学习笔记
paper:2108.10257
GitHub:GitHub - JingyunLiang/SwinIR: SwinIR: 使用 Swin Transformer 进行图像修复 (官方仓库)
目录
摘要
1、Introduction
2、Related Work
2.1 图像修复
2.2 视觉Transformer
3、方法
3.1 网络框架
3.1.1 浅层与深层特征提取
3.1.2 图像重建
3.1.3 损失函数
3.2 残差Swin Transformer块(RSTB)
3.2.1. Swin Transformer层(STL)
4、实验
4.1 实验设置
4.2 消融实验
4.2.1 通道数、RSTB数量和STL数量的影响
编辑 4.2.2 patch大小与训练图像数量的影响
编辑 4.2.3 RSTB中残差连接和卷积层的影响
编辑 4.3 图像超分辨率结果
Lightweight Image SR
Real-world Image SR
4.4 JPEG压缩伪影去除
4.5 图像去噪
摘要
图像修复是一个长期存在的低级视觉问题,旨在从低质量图像(例如,降采样、噪声污染和压缩的图像)中恢复高质量图像。虽然最先进的图像修复方法大多基于卷积神经网络(CNN),但很少有研究尝试使用在高级视觉任务中表现出色的Transformer模型。在本文中,我们提出了一种基于Swin Transformer的强基线模型——SwinIR,用于图像修复。SwinIR包含三个部分:浅层特征提取、深层特征提取和高质量图像重建。特别地,深层特征提取模块由若干残差Swin Transformer块(Residual Swin Transformer Block,RSTB)组成,每个块包含若干Swin Transformer层以及一个残差连接。我们在三种具有代表性的任务上进行了实验:图像超分辨率(包括经典、轻量级和真实场景图像超分辨率)、图像去噪(包括灰度图像去噪和彩色图像去噪)以及JPEG压缩伪影消除。实验结果表明,SwinIR在不同任务中均优于现有最先进方法,在性能上提升了0.14到0.45 dB,同时参数总量最多可减少67%。
1、Introduction
图像修复(如图像超分辨率(SR)、图像去噪和JPEG压缩伪影消除)旨在从低质量的退化图像中重建高质量的干净图像。自从一些革命性工作推出后,卷积神经网络(CNN)已成为图像修复的主要工具。大多数基于CNN的方法专注于精细的架构设计,例如残差学习和密集连接。尽管与传统基于模型的方法相比性能显著提高,但它们通常面临由基础卷积层引起的两个基本问题。
首先,图像与卷积核之间的交互是内容无关的。使用相同的卷积核恢复不同的图像区域可能并非最佳选择。其次,在局部处理的原则下,卷积难以有效建模长距离的依赖关系。
作为CNN的替代方案,Transformer设计了一个自注意力机制以捕获上下文之间的全局交互,并在若干视觉问题中表现出令人期待的性能。然而,用于图像修复的视觉Transformer通常将输入图像划分为固定大小(如48×48)的块,并独立处理每个块。这种策略不可避免地导致两个缺点。首先,边缘像素无法利用块外的邻域像素进行图像修复。其次,修复后的图像可能会在每个块的边缘引入伪影。虽然可以通过块重叠来缓解这一问题,但这会增加额外的计算负担。
最近,Swin Transformer显示出了巨大的潜力,因为它结合了CNN和Transformer的优点。一方面,它利用局部注意力机制,继承了CNN在处理大尺寸图像上的优势;另一方面,通过平移窗口(shifted window)机制,它利用了Transformer在建模长距离依赖关系上的能力。
在本文中,我们提出了一种基于Swin Transformer的图像修复模型,即SwinIR。具体来说,SwinIR由三个模块组成:浅层特征提取模块、深层特征提取模块和高质量图像重建模块。浅层特征提取模块通过卷积层提取浅层特征,并将其直接传递到重建模块,以保留低频信息。深层特征提取模块主要由残差Swin Transformer块(RSTB)组成,每个块利用多个Swin Transformer层进行局部注意力建模和跨窗口交互。此外,我们在块的末端添加了一个卷积层用于特征增强,并通过残差连接为特征聚合提供了一条快捷路径。最终,浅层特征和深层特征在重建模块中融合,以实现高质量的图像重建。
与流行的基于CNN的图像修复模型相比,基于Transformer的SwinIR具有以下几个优势:
(1) 图像内容与注意力权重之间基于内容的交互,可被解释为空间可变卷积;
(2) 平移窗口机制使得长距离依赖关系的建模成为可能;
(3) 在参数量更少的情况下实现了更好的性能。例如,正如图所示,SwinIR在参数量更少的情况下,较现有的图像超分辨率方法取得了更高的PSNR。
2、Related Work
2.1 图像修复
与传统基于模型的图像修复方法相比,基于学习的方法,特别是基于CNN的方法,由于其令人瞩目的性能,已变得更加流行。这些方法通常通过大规模配对数据集学习低质量图像与高质量图像之间的映射关系。自从开创性工作SRCNN(用于图像超分辨率)、DnCNN(用于图像去噪)和ARCNN(用于JPEG压缩伪影消除)提出以来,许多基于CNN的模型相继被提出,这些模型通过更精细的神经网络架构设计(如残差块、密集块等)来提升模型的表征能力。
此外,一些方法在CNN框架中引入了注意力机制,例如通道注意力、非局部注意力和自适应块聚合等。这些改进进一步提高了模型在图像修复任务中的性能。
2.2 视觉Transformer
近年来,自然语言处理模型Transformer在计算机视觉领域受到广泛关注。在图像分类、目标检测、分割和人群计数等任务中,Transformer通过探索不同区域之间的全局交互关系,学会关注图像中的重要区域。由于其卓越的性能,Transformer也被引入到图像修复任务中。
Chen等人提出了一种基于标准Transformer的主干模型IPT,用于多种图像修复任务。然而,IPT依赖于大量的参数(超过115.5M参数)、大规模数据集(超过110万张图像)以及多任务学习来实现其性能。Cao等人提出了VSR-Transformer,该方法在视频超分辨率任务中利用自注意力机制实现了更好的特征融合,但其图像特征仍然是从CNN中提取的。此外,无论是IPT还是VSR-Transformer,其注意力机制都是基于图像块的,这可能并不完全适用于图像修复任务。
此外,另一项同期工作提出了一种基于Swin Transformer的U型架构,用于图像修复任务。
3、方法
3.1 网络框架
如图所示,SwinIR包含三个模块:浅层特征提取、深层特征提取以及高质量(HQ)图像重建模块。对于所有修复任务,我们使用相同的特征提取模块,但根据不同任务选择不同的重建模块。
3.1.1 浅层与深层特征提取
给定一个低质量(LQ)输入 (其中
、
和
分别表示图像的高度、宽度和输入通道数),我们使用一个
的卷积层
提取浅层特征
:
其中 是特征通道数。卷积层在早期视觉处理中表现出色,能够带来更稳定的优化效果和更优的结果。同时,它还能将输入图像空间映射到更高维度的特征空间。随后,我们从
中提取深层特征
:
如图所示, 是深层特征提取模块,包含
个残差Swin Transformer块(RSTB)和一个
的卷积层。
具体来说,逐块提取的中间特征 以及输出的深层特征
的计算公式为:
其中 表示第
个 RSTB(多个模块堆叠),
是最后的卷积层。在特征提取的末尾使用卷积层可以将卷积操作的归纳偏置引入基于Transformer的网络,并为浅层与深层特征的后续聚合奠定更好的基础。
3.1.2 图像重建
以图像超分辨率(SR)为例,我们通过聚合浅层和深层特征重建高质量图像 :
其中 是重建模块的函数。浅层特征主要包含低频信息,深层特征则关注恢复丢失的高频信息。通过长跳跃连接,SwinIR能够将低频信息直接传递给重建模块,这有助于深层特征提取模块专注于高频信息,并稳定训练过程。在重建模块的实现中,我们使用子像素卷积层对特征进行上采样。而对于不需要上采样的任务(如图像去噪和JPEG压缩伪影去除),我们使用单个卷积层完成重建。此外,我们采用残差学习的方式来重建LQ图像与HQ图像之间的残差,而不是直接预测HQ图像:
其中 表示SwinIR的函数。
子像素卷积层对特征进行上采样是一种用于提高图像分辨率的技术,主要用于图像超分辨率任务。其核心思想是通过卷积操作生成一个通道数为放大倍数平方的特征图,然后利用一种称为PixelShuffle的操作,将这些通道重新排列成更高分辨率的图像。
具体来说,子像素卷积层的工作流程如下:
卷积操作:输入一个低分辨率的特征图,通过卷积操作生成一个通道数为
upscale_factor²
的特征图,其中upscale_factor
是图像放大的倍数。PixelShuffle操作:将生成的特征图进行周期性重排,将每个像素的位置扩展为
upscale_factor × upscale_factor
的块,从而实现图像的放大。
3.1.3 损失函数
对于图像超分辨率(SR),通过最小化像素损失优化SwinIR的参数:
其中 是以
为输入通过SwinIR获得的输出,也就是重建的高质量图像,
是对应的高质量真实图像。对于经典和轻量化的图像SR任务,我们仅使用简单的
像素损失以证明网络的有效性。而对于真实场景的图像SR,我们结合像素损失、GAN损失和感知损失以提高视觉质量。
对于图像去噪和JPEG压缩伪影去除,我们使用Charbonnier损失:
其中 是常数,经验值设为
。
3.2 残差Swin Transformer块(RSTB)
如图所示,RSTB 是一种结合了Swin Transformer层和卷积层的残差结构。
给定第 个RSTB的输入特征
,通过
个Swin Transformer层提取中间特征
。具体公式为:
其中表示第
个RSTB中的第
个Swin Transformer层。
随后,在特征 后加入一个卷积层,并通过残差连接得到输出特征
其中 是第
个RSTB中的卷积操作。
这种设计的两大优势:
- 卷积层通过空间不变的滤波器增强了SwinIR的平移等变性;
- 残差连接为从不同块到重建模块提供了基于身份的连接,便于聚合不同层次的特征。
3.2.1. Swin Transformer层(STL)
Swin Transformer层基于原始Transformer的多头自注意力(Multi-head Self-Attention, MSA),但采用了局部注意力和移动窗口机制进行改进。
给定一个输入特征 的尺寸为
,Swin Transformer首先将其分割为多个
的非重叠局部窗口,每个窗口的特征维度为
。然后,对每个窗口单独计算标准的自注意力(local attention)。
对于局部窗口特征 ,查询(Q)、键(K)和值(V)矩阵的计算公式为:
其中 、
和
是投影矩阵,通常
。
随后,通过局部窗口内的自注意力机制计算注意力矩阵:
其中 是可学习的相对位置编码。
为进一步捕获更多的特征信息,采用了多头自注意力(MSA),即对注意力机制进行 次并行计算并将结果拼接;引入多层感知机(MLP),包括两个全连接层,中间使用GELU激活函数。
每个Swin Transformer层包括两个残差连接和两个LayerNorm(LN)操作,整体流程为:
在固定分区下,相邻窗口之间无法建立联系。为此,Swin Transformer交替使用常规窗口分区和移动窗口分区,移动窗口分区通过在分区前将特征平移像素,从而实现跨窗口的连接。
4、实验
4.1 实验设置
在处理经典图像超分辨率(SR)、真实世界图像超分辨率、图像去噪以及JPEG压缩伪影去除任务时,实验中采用的超参数配置为:
- RSTB(Residual Swin Transformer Block)数量设为6;
- STL(Swin Transformer Layer)数量设为6;
- 窗口大小为8;
- 通道数为180;
- 注意力头数为6。
在JPEG压缩伪影去除任务中,由于JPEG编码采用8×8图像分块,使用窗口大小为8会导致性能显著下降,因此窗口大小调整为7。
对于轻量级的图像超分辨率任务,RSTB的数量和通道数分别减小为4和60。测试时,若采用自集成策略(self-ensemble strategy),标记模型为“SwinIR+”。
4.2 消融实验
4.2.1 通道数、RSTB数量和STL数量的影响
实验表明,PSNR 随着这三个超参数的增加而提升。
PSNR(Peak Signal-to-Noise Ratio,峰值信噪比)是一种用于衡量图像或视频质量的常用客观指标,通常用于评估压缩、去噪或重建算法的性能。PSNR 值越高,表示处理后的图像与原始图像越接近,质量越高。
具体而言:
- 通道数的增加会使模型性能提升,但参数数量呈平方增长,因此在性能与模型大小之间权衡,通道数选择为180。
- RSTB数量和STL层数的增加带来的性能增益逐渐趋于饱和,因此选择6作为最终配置。
4.2.2 patch大小与训练图像数量的影响
通过与CNN模型RCAN的对比,结果显示:
- SwinIR在不同补丁大小上均优于RCAN,且补丁越大,性能提升越显著。
- 增加训练图像数量时,SwinIR的性能持续提升,且即使在小规模数据集(200张图像)下,SwinIR也能优于RCAN,展现了Transformer模型在有限数据条件下的优势。
- 从训练曲线看,SwinIR相比RCAN具有更快的收敛速度与更优的收敛效果,突破了Transformer模型通常收敛较慢的观察结论。
4.2.3 RSTB中残差连接和卷积层的影响
针对残差连接和卷积层的不同设计,实验结果表明:
- 残差连接对PSNR提升重要,能够带来0.16 dB的性能增益。
- 使用1×1卷积的性能提升有限,因为其无法像3×3卷积那样提取局部邻域信息。
- 使用三个3×3卷积虽然可以减少参数数量,但性能略有下降。
4.3 图像超分辨率结果
在经典图像超分辨率(SR)任务中,表中展示了 SwinIR(中型版本)与当前最先进方法的定量比较,包括 DBPN、RCAN、RRDB、SAN、IGNN、HAN、NLSA 和 IPT。实验结果显示,当使用 DIV2K 数据集进行训练时,SwinIR 在几乎所有五个基准数据集上都取得了最好的表现,并且在 Manga109 数据集上,对于放大比例为 4 时,PSNR 增益最大可达到 0.26dB。尽管 RCAN 和 HAN 引入了通道和空间注意力机制,IGNN 提出了自适应补丁特征聚合方法,NLSA 基于非局部注意力机制,但所有这些基于 CNN 的注意力机制都不如提出的基于 Transformer 的 SwinIR 模型。这表明,SwinIR 模型在图像超分辨率任务中具有较好的效果。
当我们在一个更大的数据集(DIV2K + Flickr2K)上训练 SwinIR 时,性能有了大幅提升(最大可达 0.47dB),即使 IPT 使用了超过 1.3M 图像的 ImageNet 数据集进行训练并且具有巨大的参数量(115.5M),SwinIR 也超越了 IPT 在准确度上的表现。与此相比,SwinIR 的参数量较小(11.8M),即使与最先进的基于 CNN 的模型(15.4M - 44.3M)相比,参数量也相对较少。关于运行时间,代表性的 CNN 基础模型 RCAN、IPT 和 SwinIR 在对 1024×1024 图像进行测试时,分别需要约 0.2 秒、4.5 秒和 1.1 秒。
视觉比较显示,SwinIR 可以恢复高频细节并缓解模糊伪影,从而获得清晰自然的边缘。而大多数基于 CNN 的方法则生成了模糊的图像,甚至在纹理上出现了错误。尽管 IPT 在图像质量上比基于 CNN 的方法更好,但它仍然存在图像畸变和边缘伪影。
Lightweight Image SR
我们还提供了 SwinIR(小型版本)与当前最先进的轻量级图像超分辨率方法的比较,包括 CARN、FALSR-A、IMDN、LAPAR-A 和 LatticeNet。除 PSNR 和 SSIM 外,我们还报告了不同模型的参数总数和乘加操作数(在 1280×720 高清图像上评估),以比较模型的大小和计算复杂度。表显示,SwinIR 在不同基准数据集上,比竞争方法的 PSNR 增益最大可达到 0.53dB,同时其参数总数和乘加操作数相似。这表明 SwinIR 在图像恢复任务中具有较高的效率。
Real-world Image SR
图像超分辨率的最终目标是应用于真实世界的场景。为了测试 SwinIR 在真实世界超分辨率任务中的表现,我们使用与 BSRGAN 相同的退化模型重新训练了 SwinIR,生成低质量的图像进行合成。由于缺乏高质量的真实图像作为地面真值,我们只提供了与代表性的 双三次插值模型 ESRGAN 以及最先进的真实世界图像 SR 模型 RealSR、BSRGAN 和 Real-ESRGAN 的视觉比较。实验结果如图所示,SwinIR 生成的图像具有清晰锐利的边缘,视觉效果令人满意,而其他方法可能出现不满意的伪影。
此外,为了充分发挥 SwinIR 在真实应用中的潜力,我们进一步提出了一个更大的模型,并在更大的数据集上进行了训练。实验表明,该模型可以处理更复杂的退化问题,并在真实世界图像超分辨率任务中取得比当前模型更好的表现。
4.4 JPEG压缩伪影去除
- 实验设置:在 JPEG 压缩伪影去除任务中,SwinIR 与一系列基于 CNN 的方法进行了对比,实验在两个基准数据集(Classic5 和 LIVE1)上进行,测试了不同的 JPEG 压缩质量因子(10、20、30 和 40)。
- 结果:SwinIR 相比这些方法,特别是相比于 DRUNet(目前的最佳方法),具有更高的 PSNR(峰值信噪比)。SwinIR 只需要 11.5M 的参数,而 DRUNet 需要 32.7M 参数,显示出其在减少模型大小的同时能保持优秀性能的优势。
- 总结:SwinIR 在减少 JPEG 压缩伪影方面表现突出,同时模型的参数量显著较小,这表明其在压缩伪影去除上的高效性。
4.5 图像去噪
- 实验设置:图像去噪实验包括了对比多个方法,包括传统方法(如 BM3D 和 WNNM)和基于 CNN 的方法(如 DnCNN、IR-CNN、FFDNet 等)。在对比中使用了不同的噪声水平(15、25 和 50)。
- 结果:SwinIR 在去噪效果上超越了所有对比方法,尤其是在 Urban100 数据集上,超越了现有最好的模型 DRUNet 达 0.3dB。并且,SwinIR 只需 12.0M 的参数,而 DRUNet 需要 32.7M 的参数,显示了其高效的特征学习能力。
- 总结:SwinIR 在图像去噪方面表现优异,能够去除噪声的同时保留图像的高频细节,输出的图像边缘更加清晰,纹理更加自然。
相关文章:
《SwinIR:使用Swin-Transformer图像恢复》学习笔记
paper:2108.10257 GitHub:GitHub - JingyunLiang/SwinIR: SwinIR: 使用 Swin Transformer 进行图像修复 (官方仓库) 目录 摘要 1、Introduction 2、Related Work 2.1 图像修复 2.2 视觉Transformer…...
AR智慧点巡检系统探究和技术方案设计
一、项目背景 随着工业生产规模的不断扩大和设备复杂度的提升,传统的人工点巡检方式效率低下、易出错,难以满足现代化企业对设备运行可靠性和安全性的要求。AR(增强现实)技术的发展为点巡检工作带来了新的解决方案,通…...
电路研究9.2——合宙Air780EP使用AT指令
这里正式研究AT指令的学习了,之前只是接触的AT指令,这里则是深入分析AT指令了。 软件的开发方式: AT:MCU 做主控,MCU 发 AT 命令给模组的开发方式,模组仅提供标准的 AT 固件, 所有的业务控制逻辑…...
OpenCV相机标定与3D重建(62)根据两个投影矩阵和对应的图像点来计算3D空间中点的坐标函数triangulatePoints()的使用
加粗样式- 操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 这个函数通过使用立体相机对3维点的观测,重建这些点的三维坐标(以齐次坐标表示)。 cv::triangula…...
基于ollama,langchain,springboot从零搭建知识库四【设计通用rag系统】
需求: 1:可以自定义管理大模型,可自行选择ollama,openai,千问等大模型 2:自定义向量数据库,支持pgvector,elasticsearch,milvus(这三个目前比较常用ÿ…...
【Go面试】工作经验篇 (持续整合)
这里写目录标题 什么是逃逸分析服务端怎么接受客户端上传的文件说一下对gin框架的理解gin有哪些常用中间件gin怎么用swagger写接口文档nginx一般是用来做什么如果调用方法经常超时怎么办gin中怎么和mysql通信从mysql调数据到redis,如何同步延时双删redis ,mysql都不存在用户请求…...
“腾讯、钉钉、飞书” 会议开源平替,免费功能强大
在数字化时代,远程办公和线上协作越来越火。然而,市面上的视频会议工具要么贵得离谱,要么功能受限,甚至还有些在数据安全和隐私保护上让人不放心。 今天开源君给大家安利一个超棒的开源项目 - Jitsi Meet,这可是我在网…...
怎样使用树莓派自己搭建一套ADS-B信号接收系统
0 我们知道,ADS-B全称广播式自动相关监视系统,其实就是飞机发出的广播信号,用明码来对外发送自己的位置、高度、速度、航向等信息,是公开信息。连续接收到一架飞机发出的ADS-B信息后,可以通过其坐标点来描绘出飞机的航…...
终极的复杂,是简单
软件仿真拥有最佳的信号可见性和调试灵活性,能够高效捕获很多显而易见的常见错误,被大多数工程师熟练使用。 空间领域应用的一套数据处理系统(Data Handling System),采用抗辐FPGA作为主处理器,片上资源只包含10752个寄存器,软仿也是个挺花时间的事。 Few ms might take …...
粒子群算法 笔记 数学建模
引入: 如何找到全局最大值:如果只是贪心的话,容易被局部最大解锁定 方法有:盲目搜索,启发式搜索 盲目搜索:枚举法和蒙特卡洛模拟,但是样例太多花费巨量时间 所以启发式算法就来了,通过经验和规…...
Vue.js 嵌套路由和动态路由
Vue.js 嵌套路由和动态路由 在 Vue.js 开发中,Vue Router 是官方提供的路由管理器,用于构建单页应用(SPA)。它支持嵌套路由和动态路由,帮助开发者构建复杂的应用结构。 嵌套路由 嵌套路由允许在路由配置中定义子路由…...
Docker导入镜像
使用命令行进行处理: docker load < onething1_wxedge.tar如下图所示 查看状态 docker images...
C# OpenCV机器视觉:红外体温检测
在一个骄阳似火的夏日,全球却被一场突如其来的疫情阴霾笼罩。阿强所在的小镇,平日里熙熙攘攘的街道变得冷冷清清,人们戴着口罩,行色匆匆,眼神中满是对病毒的恐惧。阿强作为镇上小有名气的科技达人,看着这一…...
STM32项目分享:智能厨房安全检测系统
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: STM32智能厨房安全检测系统 (资料分…...
docker 安装 redis 详解
在平常的开发工作中,我们经常会用到 redis,那么 docker 下应该如何安装 redis 呢?简单来说:第一步:拉取redis镜像;第二步:设置 redis.conf 配置文件;第三步:编写 docker-…...
《探秘鸿蒙Next:人工智能助力元宇宙高效渲染新征程》
在元宇宙的宏大愿景中,高效的渲染技术是构建沉浸式虚拟世界的关键。鸿蒙Next凭借与人工智能的深度融合,为元宇宙的渲染带来了全新的解决方案和无限可能。 智能场景分析与优化 人工智能能够对元宇宙场景进行智能分析。鸿蒙Next可以利用AI技术对场景中的…...
nginx分发请求超时切换服务
nginx的upstream模块实现超时自动切换服务 upstream testfail {server 192.168.1.218 max_fails1 fail_timeout10s;server 192.168.1.129 max_fails1 fail_timeout10s;} max_fails代表失败尝试次数,达到设置的次数则视为该服务不可用, fail_timeout代…...
vulfocus/fastjson-cnvd_2017_02833复现
漏洞概述 Fastjson 是阿里巴巴开发的一个高性能的 Java 库,用于将 Java 对象转换成 JSON 格式(序列化),以及将 JSON 字符串转换回 Java 对象(反序列化)。 fastjson在解析json的过程中,支持使用type字段来指…...
.Net Core微服务入门全纪录(五)——Ocelot-API网关(下)
系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…...
OpenCV imread函数读取图像__实例详解
OpenCV imread函数读取图像__实例详解 本文目录: 零、时光宝盒 一、imread函数定义 二、imread函数支持的文件格式 三、imread函数flags参数详解 (3.1)、Flags-1时,样返回加载的图像(使用alpha通道,否…...
GPSd定时检测保活TCP GPS源
为了在 TCP GPS 源丢失连接时自动重新连接,可以编写一个监控脚本,定期检查 gpspipe 输出中的 TCP 源数据是否存在。如果检测到丢失,则使用 gpsdctl 或直接命令重新添加 TCP 源。 1、工具 检查并安装必要工具,本例需要使用 gpspi…...
得物App亮相第七届进博会,科技赋能打造消费新热点
在2024年11月5日至11月10日举办的第七届进博会舞台上,上海交易团虹口分团表现亮眼,其中得物作为来自虹口品质电商的践行者,备受众多参观者关注。 上海得物信息集团有限公司自2015年于上海虹口创立以来,始终坚守“满足年轻人对美好…...
单片机内存管理剖析
一、概述 在单片机系统中,内存资源通常是有限的,因此高效的内存管理至关重要。合理地分配和使用内存可以提高系统的性能和稳定性,避免内存泄漏和碎片化问题。单片机的内存主要包括程序存储器(如 Flash)和数据存储器&a…...
用Python绘制一只懒羊羊
目录 一、准备工作 二、Turtle库简介 三、绘制懒羊羊的步骤 1. 导入Turtle库并设置画布 2. 绘制头部 3. 绘制眼睛 4. 绘制嘴巴 5. 绘制身体 6. 绘制四肢 7. 完成绘制 五、运行代码与结果展示 六、总结 在这个趣味盎然的技术实践中,我们将使用Python和Turtle图形…...
Python 预训练:打通视觉与大语言模型应用壁垒——Python预训练视觉和大语言模型
大语言模型是一种由包含数百亿甚至更多参数的深度神经网络构建的语言模型,通常使用自监督学习方法通过大量无标签文本进行训练,是深度学习之后的又一大人工智能技术革命。 大语言模型的发展主要经历了基础模型阶段(2018 年到2021年)、能力探索阶段(2019年…...
神经网络梯度爆炸的原因及解决方案
在深度学习中,梯度爆炸(gradient exploding)是一种常见的训练问题,尤其是在深层神经网络中。梯度爆炸指的是在反向传播过程中,梯度值呈指数级增长,导致网络权重的大幅更新,从而使得网络变得不稳…...
WPS不登录无法使用基本功能的解决方案
前言 WPS不登录无法使用基本功能的原因通常是为了同步数据、提供更多高级功能或满足软件授权要求。然而,一些用户可能出于隐私或便捷性的考虑,不愿意登录账号。在这种情况下,WPS可能会限制未登录用户的使用权限,导致工具栏变灰…...
蓝桥杯lesson3---string的使用
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” string的概念 string字符串是一种更加高级的封装,string字符串中包含了大量的方法,这些方法使得字符串的操作变得更加简单,string的使用&…...
Java设计模式 三 工厂方法模式 (Factory Method Pattern)
工厂方法模式 (Factory Method Pattern) 是一种常见的创建型设计模式,旨在通过定义一个接口来创建对象,而将实例化对象的具体类延迟到子类中。工厂方法模式允许客户端通过工厂方法来创建对象,而不需要直接调用构造函数,这样可以减…...
日志收集Day005
1.filebeat的input类型之filestream实战案例: 在7.16版本中已经弃用log类型,之后需要使用filebeat,与log不同,filebeat的message无需设置就是顶级字段 1.1简单使用: filebeat.inputs: - type: filestreamenabled: truepaths:- /tmp/myfilestream01.lo…...
java开发,IDEA转战VSCODE配置(mac)
一、基本java开发环境配置 前提:已经安装了jdk、maven、vscode,且配置了环境变量 1、安装java相关的插件 2、安装spring相关的插件 3、vscode配置maven环境 打开 VsCode -> 首选项 -> 设置,也可以在setting.json文件中直接编辑&…...
Effective C++读书笔记——item23(用非成员,非友元函数取代成员函数)
一、主要观点: 在某些情况下,使用 non-member、non-friend 函数来替换 member 函数可以增强封装性和可扩展性,提供更好的软件设计。 二、详细解释: 封装性: 类成员函数的封装性考量:成员函数可以访问类的…...
(3)STM32 USB设备开发-USB存储设备
例程:STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为使用芯片内部flash作为USB存储设备的例程,没有知识,全是实操,按照步骤就能获得一个STM32的U盘。本例子是在野火F103MINI开发板上验证的,如果代码…...
考研408笔记之数据结构(五)——图
数据结构(五)——图 1. 图的基本概念 1.1 图的定义 1.2 有向图和无向图 在有向图中,使用圆括号表示一条边,圆括号里元素位置互换没有影响。 在无向图中,使用尖括号表示一条边,尖括号里元素位置互换则表示…...
【博客之星】年度总结:在云影与墨香中探寻成长的足迹
🐇明明跟你说过:个人主页 🔖行路有良友,便是天堂🔖 目录 一、年度回顾 1、创作历程 2、个人成长 3、个人生活与博客事业 二、技术总结 1、赛道选择 2、技术工具 3、实战项目 三、前景与展望 1、云原生未来…...
springboot 调用 c++生成的so库文件
一、创建c文件 SoTest.h #pragma once class SoTest {int Add(int a,int b); };SoTest.cpp #include "SoTest.h"int SoTest::Add(int a, int b) {return a b; }二、创建so文件 /home/ubuntu/projects/SoTest/bin/x64/Debug/libSoTest.so 三、java代码 Maven依…...
简识JVM栈帧中的操作数栈
在JVM(Java虚拟机)中,栈帧(Stack Frame)是方法执行时的数据结构,用于存储局部变量、操作数栈、方法返回地址等信息。 其中,操作数栈(Operand Stack)是栈帧中的一个重要组…...
在 Kubernetes 上快速安装 KubeSphere v4.1.2
目录标题 安装文档配置repo安装使用插件 安装文档 在 Kubernetes 上快速安装 KubeSphere 配置repo export https_proxy10.10.x.x:7890 helm repo add stable https://charts.helm.sh/stable helm repo update安装 helm upgrade --install -n kubesphere-system --create-name…...
腾讯 Hunyuan3D-2: 高分辨率3D 资产生成
腾讯 Hunyuan3D-2:高分辨率 3D 资产生成的突破 前言 在当今数字化时代,3D 资产生成技术正变得越来越重要。无论是游戏开发、影视制作还是虚拟现实领域,高质量的 3D 模型和纹理都是创造沉浸式体验的关键。然而,传统的 3D 资产制作…...
论文阅读--Qwen22.5技术报告
Qwen2 1 引言 所有模型都是在超过7 trillion token(7万亿)的高质量、大规模数据集上预训练的 2 Tokenizer & Model 2.1 Tokenizer 沿用Qwen(Bai等人,2023a)的做法,我们采用了基于字节级字节对编码…...
python如何导出数据到excel文件
python导出数据到excel文件的方法: 1、调用Workbook()对象中的add_sheet()方法 wb xlwt.Workbook() ws wb.add_sheet(A Test Sheet) 2、通过add_sheet()方法中的write()函数将数据写入到excel中,然后使用save()函数保存excel文件 ws.write(0, 0, 1234…...
pyhton学习笔记(三)
目录 1.变量 2.变量的命名规则 3.常用函数汇总 4.常用数据类型汇总 5.算术运算符 6.比较运算符和逻辑运算符 7.常见的三种格式化输出方法 8.分支语句 1.变量 变量就是可以变化的量,可以理解为是一个存储东西的盒子,盒子里面可以放一些程序里需要…...
时间类型数据处理:基于Python的datetime库和pandas库
一、datetime库常用方法 日期的数据类型主要有两种:一是包含时间的datetime类型,二是不包含时间的date类型。这里的时间指具体的时、分、秒、甚至毫秒。 1、自定义日期、时间、获取本地时间、获取本地日期、获取年份、月份、月号、小时、分钟、秒、星期…...
CPU 缓存基础知识
并发编程首先需要简单了解下现代CPU相关知识。通过一些简单的图,简单的代码,来认识CPU以及一些常见的问题。 目录 CPU存储与缓存的引入常见的三级缓存结构缓存一致性协议MESI协议缓存行 cache line 通过代码实例认识缓存行的重要性 CPU指令的乱序执行通过…...
vue3 中如何监听 props 中的值的变化
在 Vue 3 中,你可以使用 watch 函数来监听组件的 props 值的变化。watch 函数允许你观察一个或多个响应式数据源,并在这些数据源发生变化时执行回调函数。 以下是一个示例,展示了如何在 Vue 3 中使用 watch 来监听 props 中的值的变化&#…...
煤矿场景下矿工行为检测数据集VOC+YOLO格式24709张8类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):24709 标注数量(xml文件个数):24709 标注数量(txt文件个数):2470…...
Git处理冲突详解
文章目录 Git处理冲突详解一、引言二、冲突产生的原因三、解决冲突的步骤1. 手动解决冲突1.1 查看冲突文件1.2 编辑冲突文件1.3 提交解决冲突 2. 使用合并工具解决冲突 四、使用示例五、总结 Git处理冲突详解 一、引言 在团队协作开发中,Git冲突是不可避免的。当多…...
Jetson Orin Nano Super之jetson-fpv开源代码下载
Jetson Orin Nano Super之jetson-fpv开源代码下载 1. 源由2. 方法2.1 优化配置方案一:增加缓冲方案二:降低并发数方案三:临时禁用深度克隆 2.2 路径更换方案一:设置代理方案二:替换git协议方案三:替换https…...
gitlab使用多数据库
1. 说明 默认情况下,GitLab 使用一个单一的应用数据库,称为主数据库。为了扩展 GitLab,您可以将 GitLab 配置为使用多个应用数据库。 设置多个数据库后,GitLab 将使用第二个应用数据库用于 CI/CD 功能,称为 CI 数据库…...
【Redis】事务
前言: 对比MySQL事务:【MySQL篇】事务的认识以及四大特性-CSDN博客 弱化的原子性: redis 没有 "回滚机制". 只能做到这些操作 "批量执行". 不能做到 "一个失败就恢复到初始状态". 不保证一致性: 不涉及 "约束". 也没有…...