RealESRGAN技术详解(附代码)

一、背景与动机

1.研究背景

1.1 图像超分辨率的挑战

 图像超分辨率是一个长期存在的计算机视觉问题,它旨在从低分辨率(LR)图像中恢复出高分辨率(HR)图像。由于成像系统的局限性、传输过程中的压缩、存储空间的限制以及历史图像资料的保存等,图像超分辨率技术对于提升图像质量具有重要意义。

1.2 传统方法的局限性

 传统的图像超分辨率方法,如插值算法(最近邻、双线性、双三次等)和基于重建的方法(如稀疏编码),虽然在一定程度上能够提高图像的分辨率,但它们往往无法恢复图像的细节信息,特别是在放大倍数较高时,图像会出现模糊和伪影。

1.3 深度学习的发展

 随着深度学习技术的发展,特别是卷积神经网络(CNN)在图像处理领域的成功应用,基于深度学习的超分辨率方法开始受到关注。这些方法能够学习到从低分辨率到高分辨率图像的复杂映射关系,并能够恢复出更多的细节信息。

1.4 ESRGAN的提出

 ESRGAN(Enhanced Super-Resolution Generative Adversarial Networks)是2018年提出的一种基于生成对抗网络(GAN)的超分辨率方法。它通过引入感知损失和特征匹配损失,提高了超分辨率图像的视觉质量。

2.研究动机

2.1 ESRGAN的局限性

尽管ESRGAN在图像超分辨率方面取得了显著的进展,但在实际应用中,它仍然存在一些局限性。例如,ESRGAN在处理真实世界图像时可能会出现过度锐化和伪影的问题,这些问题限制了其在实际图像恢复任务中的应用。

2.2 RealESRGAN的提出

为了解决这些问题,RealESRGAN被提出。RealESRGAN的目标是开发一种新的超分辨率技术,它不仅能够提高图像的分辨率,而且能够减少伪影和过度锐化,提供更自然和真实的图像恢复效果。

2.3 实际图像恢复的需求

在实际的图像恢复任务中,如老旧照片修复、卫星图像增强、医学成像等领域,对图像质量的要求非常高。这些应用不仅需要高分辨率的图像,还需要图像具有真实感和自然感。RealESRGAN正是为了满足这些需求而设计的。

2.4 技术进步的推动

随着计算资源的增加和深度学习技术的进步,开发更复杂、更高效的网络结构成为可能。RealESRGAN利用了这些技术进步,通过改进网络结构和训练策略,提高了超分辨率技术的性能和实用性。

二、技术架构

1. 生成器(Generator)

生成器是RealESRGAN的核心部分,负责将低分辨率(LR)图像转换成高分辨率(HR)图像。生成器的网络结构通常包括以下几个关键部分:

  • 浅层特征抽取网络:这部分网络负责提取输入图像的浅层特征,通常通过一个卷积层加上ReLU激活函数实现,将输入图像的通道数调整为64。

  • RRDB(Residual in Residual Dense Block)网络结构:这是RealESRGAN中的关键创新之一。RRDB结构包含N个RDB(Residual Dense Block)密集残差块和一个残差边。每个RDB包含5个卷积层,通过torch.cat函数将卷积的通道数相叠加,从而实现特征的密集连接。

  • 上采样网络:生成器还包括上采样部分,通过两次上采样,将图像的高宽变为原来的4倍,实现分辨率的提升。

RRDB结构通过两层残差结构实现,主干部分由3个RDB构成,每个RDB块都有5个卷积层,通过残差边将主干网络的输出与输入叠加,实现特征的融合。

import torch
import torch.nn as nn
import torch.nn.functional as F# 定义残差密集块(RDB)
class RDB(nn.Module):def __init__(self, in_channels, growth_rate, n_steps):super(RDB, self).__init__()self.RDB_layers = nn.Sequential(*[Bottleneck(in_channels if i == 0 else growth_rate, growth_rate, n_steps) for i in range(n_steps)])def forward(self, x):return self.RDB_layers(x) + x# 定义Bottleneck块
class Bottleneck(nn.Module):def __init__(self, in_channels, growth_rate, n_steps):super(Bottleneck, self).__init__()self.layers = nn.Sequential(*[nn.Conv2d(in_channels, growth_rate, kernel_size=3, padding=1), nn.ReLU(inplace=True), nn.Conv2d(growth_rate, growth_rate, kernel_size=3, padding=1), nn.ReLU(inplace=True) for _ in range(n_steps)])def forward(self, x):return self.layers(x)# 定义生成器
class Generator(nn.Module):def __init__(self, in_channels, out_channels, num_blocks, num_rdb_blocks, growth_rate):super(Generator, self).__init__()self.head = nn.Sequential(nn.Conv2d(in_channels, 64, kernel_size=9, padding=4),nn.PReLU())self.RDB_trunk = nn.Sequential(*[RDB(64 if i == 0 else growth_rate, growth_rate, num_rdb_blocks) for i in range(num_blocks)])self.up_body = nn.Sequential(nn.Conv2d(64 + growth_rate * num_blocks, out_channels, kernel_size=3, padding=1),nn.PReLU())def forward(self, x):x = self.head(x)res = self.RDB_trunk(x)res += xres = self.up_body(res)return res# 实例化生成器
in_channels = 3  # 输入通道数,例如RGB图像
out_channels = 3  # 输出通道数,例如RGB图像
num_blocks = 8  # RRDB块的数量
num_rdb_blocks = 5  # 每个RDB中的Bottleneck块数量
growth_rate = 64  # 增长速率generator = Generator(in_channels, out_channels, num_blocks, num_rdb_blocks, growth_rate)

在这个示例中,我们定义了一个RDB类,它包含多个Bottleneck块,这些块通过残差连接堆叠在一起。Bottleneck块包含两个卷积层,分别用于特征提取和特征转换。Generator类首先使用一个卷积层和一个PReLU激活函数作为头部,然后是RDB_trunk,它包含多个RDB块,最后是一个上采样部分,用于将特征图转换为最终的输出图像。

2. 判别器(Discriminator)

判别器在RealESRGAN中的作用是区分生成的高分辨率图像和真实的高分辨率图像。判别器也是一个卷积神经网络,它接收高分辨率图像作为输入,并输出一个介于0和1之间的分数,表示该图像为真实的概率。以下是一个判别器(Discriminator)的PyTorch代码示例。这个示例展示了一个简单的卷积判别器,它通常用于图像数据的二分类任务,即区分真实图像和生成的假图像。

import torch
import torch.nn as nnclass Discriminator(nn.Module):def __init__(self):super(Discriminator, self).__init__()self.main = nn.Sequential(# 第一层卷积,输入通道数为3(例如RGB图像),输出通道数为64,卷积核大小为4x4,步长为2,填充为1nn.Conv2d(3, 64, 4, stride=2, padding=1),nn.LeakyReLU(0.2),  # 使用LeakyReLU激活函数,防止梯度消失问题# 可以添加更多的卷积层和激活层,这里只是一个简单的示例# ...# 最后一层使用Sigmoid激活函数,输出一个介于0和1之间的值,表示输入是真实图像的概率nn.Sigmoid()  )def forward(self, input):# 前向传播,输入图像通过判别器网络return self.main(input)# 实例化判别器
discriminator = Discriminator()

在这个示例中,判别器由一系列卷积层和激活层组成,最后一层是Sigmoid激活函数,用于输出一个概率值,表示输入图像是真实图像的概率。这个简单的判别器可以作为GAN中判别器的基本架构,具体的层数和参数可以根据实际任务进行调整和优化。

3. 训练过程

RealESRGAN的训练过程是一个生成器和判别器之间的对抗过程。生成器试图生成越来越逼真的高分辨率图像以“欺骗”判别器,而判别器则试图区分生成的图像和真实的图像。通过这种对抗训练,生成器可以逐渐提高其生成图像的质量,以达到与真实图像相似的外观。以下是一个完整的训练过程的PyTorch代码示例,包括生成器(Generator)和判别器(Discriminator)的训练。这个示例展示了如何使用PyTorch框架来训练一个简单的生成对抗网络(GAN)。

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader# 定义生成器和判别器
class Generator(nn.Module):def __init__(self):super(Generator, self).__init__()self.main = nn.Sequential(# 定义网络层nn.Conv2d(100, 256, 4, 1, 0),nn.LeakyReLU(0.2, inplace=True),nn.ConvTranspose2d(256, 128, 4, 2, 1),nn.BatchNorm2d(128),nn.LeakyReLU(0.2, inplace=True),nn.ConvTranspose2d(128, 64, 4, 2, 1),nn.BatchNorm2d(64),nn.LeakyReLU(0.2, inplace=True),nn.ConvTranspose2d(64, 3, 4, 2, 1),nn.Tanh())def forward(self, input):return self.main(input)class Discriminator(nn.Module):def __init__(self):super(Discriminator, self).__init__()self.main = nn.Sequential(# 定义网络层nn.Conv2d(3, 64, 4, 2, 1),nn.LeakyReLU(0.2, inplace=True),nn.Conv2d(64, 128, 4, 2, 1),nn.BatchNorm2d(128),nn.LeakyReLU(0.2, inplace=True),nn.Conv2d(128, 256, 4, 2, 1),nn.BatchNorm2d(256),nn.LeakyReLU(0.2, inplace=True),nn.Conv2d(256, 1, 4, 1, 0),nn.Sigmoid())def forward(self, input):return self.main(input)# 实例化生成器和判别器
generator = Generator()
discriminator = Discriminator()# 设置损失函数和优化器
criterion = nn.BCELoss()
optimizer_G = optim.Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999))
optimizer_D = optim.Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999))# 加载数据集
transform = transforms.Compose([transforms.Resize_((64, 64)),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5)),
])
dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
dataloader = DataLoader(dataset, batch_size=64, shuffle=True)# 训练循环
num_epochs = 5
for epoch in range(num_epochs):for i, (imgs, _) in enumerate(dataloader):# 训练判别器real = Variable(imgs.type(Tensor))label = Variable(Tensor(imgs.size(0), 1).fill_(1.0), requires_grad=False)fake = generator(Variable(Tensor(np.random.normal(0, 1, (imgs.shape[0], 100, 1, 1)))))fake_label = Variable(Tensor(imgs.size(0), 1).fill_(0.0), requires_grad=False)optimizer_D.zero_grad()real_loss = criterion(discriminator(real), label)fake_loss = criterion(discriminator(fake.detach()), fake_label)d_loss = (real_loss + fake_loss) / 2d_loss.backward()optimizer_D.step()# 训练生成器optimizer_G.zero_grad()g_loss = criterion(discriminator(fake), label)g_loss.backward()optimizer_G.step()print(f"Epoch [{epoch+1}/{num_epochs}] Batch {i+1}/{len(dataloader)} D_loss: {d_loss.item():.4f} G_loss: {g_loss.item():.4f}")print("Training Complete")

这个示例展示了如何使用PyTorch框架来训练一个简单的生成对抗网络(GAN),包括生成器和判别器的定义、训练过程和数据加载。

4. 损失函数

RealESRGAN的训练涉及到多种损失函数,包括像素损失、感知损失和对抗损失等,这些损失函数共同指导训练过程,以生成更高质量的图像。二元交叉熵损失(Binary Cross-Entropy Loss)是GAN中最常用的损失函数之一,用于判别器的二分类任务。

import torch
import torch.nn as nn# 定义损失函数
criterion = nn.BCELoss()# 假设真实标签和预测结果
real_labels = torch.ones((64, 1))  # 真实图像的概率为1
fake_labels = torch.zeros((64, 1))  # 生成图像的概率为0# 判别器对真实图像的预测
real_outputs = torch.randn(64, 1)  # 假设判别器输出
# 判别器对生成图像的预测
fake_outputs = torch.randn(64, 1)  # 假设判别器输出# 计算损失
real_loss = criterion(real_outputs, real_labels)
fake_loss = criterion(fake_outputs, fake_labels)# 总损失
d_loss = (real_loss + fake_loss) / 2

5. 数据增强和训练策略

RealESRGAN通过精心设计的数据增强和训练策略来提高模型的泛化能力,使其能够更好地适应真实世界中的各种图像退化情况。

import torch
import torch.nn as nn
import torch.optim as optim# 定义生成器
class Generator(nn.Module):def __init__(self):super(Generator, self).__init__()self.main = nn.Sequential(# 定义网络层)def forward(self, input):return self.main(input)# 定义判别器
class Discriminator(nn.Module):def __init__(self):super(Discriminator, self).__init__()self.main = nn.Sequential(# 定义网络层)def forward(self, input):return self.main(input)# 初始化生成器和判别器
generator = Generator()
discriminator = Discriminator()# 设置损失函数和优化器
adversarial_loss = nn.BCELoss()
optimizer_G = optim.Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999))
optimizer_D = optim.Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999))# 训练循环
for epoch in range(num_epochs):for i, (imgs, _) in enumerate(dataloader):real_imgs = Variable(imgs.type(Tensor))valid = Variable(Tensor(imgs.size(0), 1).fill_(1.0), requires_grad=False)fake = Variable(Tensor(imgs.size(0), 1).fill_(0.0), requires_grad=False)optimizer_G.zero_grad()z = Variable(Tensor(np.random.normal(0, 1, (imgs.shape[0], 100))))gen_imgs = generator(z)g_loss = adversarial_loss(discriminator(gen_imgs), valid)g_loss.backward()optimizer_G.step()optimizer_D.zero_grad()real_loss = adversarial_loss(discriminator(real_imgs), valid)fake_loss = adversarial_loss(discriminator(gen_imgs.detach()), fake)d_loss = (real_loss + fake_loss) / 2d_loss.backward()optimizer_D.step()

三、应用场景

1. 医学成像

         在医学成像领域,如MRI和CT扫描,图像的分辨率对于疾病的诊断和治疗计划至关重要。然而,由于设备限制或患者运动等因素,获取的图像可能分辨率不足。 RealESRGAN可以显著提高这些医学图像的分辨率,帮助医生更清晰地识别微小的病变和结构。通过增强图像细节,医生可以更准确地诊断疾病,制定治疗方案,并评估治疗效果。

# 查看一个患者的图像
first_patient = load_scan(INPUT_FOLDER + patients[0])
first_patient_pixels = get_pixels_hu(first_patient)
plt.hist(first_patient_pixels.flatten(), bins=80, color='c')
plt.xlabel("Hounsfield Units (HU)")
plt.ylabel("Frequency")
plt.show()# 显示一个中间位置的切片
plt.imshow(first_patient_pixels[80], cmap=plt.cm.gray)
plt.show()# CT重新采样到[1 1 1](由于不同的扫描,切片的距离可能不同)
def resample(image, scan, new_spacing=[1,1,1]):# Determine current pixel spacingspacing = np.array([scan[0].SliceThickness] + scan[0].PixelSpacing, dtype=np.float32)resize_factor = spacing / new_spacingnew_real_shape = image.shape * resize_factornew_shape = np.round(new_real_shape)real_resize_factor = new_shape / image.shapenew_spacing = spacing / real_resize_factorimage = scipy.ndimage.interpolation.zoom(image, real_resize_factor, mode='nearest')return image, new_spacingpix_resampled, spacing = resample(first_patient_pixels, first_patient, [1,1,1])
print("Shape before resampling\t", first_patient_pixels.shape)
print("Shape after resampling\t", pix_resampled.shape)

具体应用

  • 肿瘤诊断:通过提高肿瘤区域的分辨率,帮助医生判断肿瘤的性质和边界。
  • 神经成像:增强神经纤维的可见度,用于神经退行性疾病的研究和诊断。
  • 眼科:提高视网膜图像的分辨率,用于黄斑变性和其他眼底病变的检测。

2. 卫星图像分析

        卫星图像在地理信息系统(GIS)、环境监测和城市规划中扮演着重要角色。然而,由于传输和存储的限制,卫星图像的分辨率可能不足以满足精细分析的需求。RealESRGAN能够将低分辨率的卫星图像转换为高分辨率图像,从而提供更多的地面细节。这对于监测环境变化、城市规划和灾害响应等领域非常有价值。

# 假设我们有一个视频流,我们想要使用RealESRGAN对其进行超分辨率处理
# 这里是一个简化的示例,展示如何加载视频、读取帧、应用RealESRGAN模型,并保存结果import cv2# 加载视频
cap = cv2.VideoCapture('video.mp4')# 读取视频帧
ret, frame = cap.read()# 应用RealESRGAN模型(这里假设你已经有了一个预训练的RealESRGAN模型)
# model = RealESRGANModel()  # 假设这是你的RealESRGAN模型
# enhanced_frame = model(frame)# 保存增强后的帧
# 这里需要将增强后的帧写入新的视频文件
# out = cv2.VideoWriter('enhanced_video.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 20, (frame.shape[1], frame.shape[0]))while ret:ret, frame = cap.read()# 应用RealESRGAN模型# enhanced_frame = model(frame)# 保存增强后的帧# out.write(enhanced_frame)# 显示帧cv2.imshow('Frame', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

具体应用

  • 农业监测:通过分析高分辨率图像,评估作物生长情况和土地利用变化。
  • 城市发展:监测城市扩张和基础设施建设,为城市规划提供决策支持。
  • 灾害管理:在自然灾害后,快速获取受影响区域的高分辨率图像,评估灾害影响并指导救援行动。

3. 老照片修复

         许多历史照片因年代久远而变得模糊不清,这些照片对于个人和文化历史都具有重要意义。RealESRGAN不仅可以提高老照片的分辨率,还可以在一定程度上修复因时间而损坏的图像,恢复其原有的色彩和细节。

<!-- 电影网站的HTML结构 -->
<div class="contain"><div class="main"><div class="panelhead">电影列表</div><div class="panel-content"><div class="movies-list"><!-- 电影项 --><div class="movie-item"><div class="movietitle">电影标题</div><div class="integer">评分</div></div><!-- 更多电影项 --></div></div></div><!-- 其他内容 -->
</div>

具体应用

  • 家庭相册:帮助用户恢复和增强家庭相册中珍贵的老照片。
  • 历史档案:为博物馆和档案馆提供技术支持,修复和数字化历史照片。
  • 新闻媒体:增强历史新闻图片的分辨率,用于历史事件的回顾和报道。

4. 视频监控

视频监控系统在安全防护、交通管理等领域中非常重要。然而,由于摄像头分辨率和存储限制,监控视频的清晰度往往不足以识别细节。RealESRGAN能够将监控视频的分辨率提升,使得视频中的人物、车辆等目标的特征更加清晰,有助于事后的分析和识别。

# 老照片的超分辨率处理
# 这里是一个简化的示例,展示如何读取老照片、应用RealESRGAN模型,并保存结果from PIL import Image
import torch
# 假设RealESRGAN模型已经被加载
# model = RealESRGANModel()# 读取老照片
old_photo = Image.open('old_photo.jpg')# 转换为Tensor
old_photo_tensor = transforms.ToTensor()(old_photo)# 应用RealESRGAN模型
# enhanced_photo_tensor = model(old_photo_tensor)# 转换回PIL图像
# enhanced_photo = transforms.ToPILImage()(enhanced_photo_tensor)# 保存增强后的照片
# enhanced_photo.save('enhanced_old_photo.jpg')

具体应用

  • 安全监控:提高监控视频的分辨率,以便更准确地识别入侵者或可疑行为。
  • 交通监控:增强车牌和车辆特征的识别,用于交通违规的取证。
  • 公共安全:在人群密集的公共场所,提高监控视频的分辨率,以便在紧急情况下快速定位和响应。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/482526.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法的复杂度

1.数据结构前言 下面的概念有的比较难理解&#xff0c;做个了结就行。 1.1数据结构的起源 在现实生活中我们更多地并不是解决数值计算的问题&#xff0c;而是 需要一些更科学的手段如&#xff08;表&#xff0c;数&#xff0c;图等数据结构&#xff09;&#xff0c;才能更好…

#渗透测试#红蓝攻防#HW#漏洞挖掘#漏洞复现01-笑脸漏洞(vsftpd)

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

matlab2024a安装

1.开始安装 2.点击安装 3.选择安装密钥 4.接受条款 5.安装密钥 21471-07182-41807-00726-32378-34241-61866-60308-44209-03650-51035-48216-24734-36781-57695-35731-64525-44540-57877-31100-06573-50736-60034-42697-39512-63953 6 7.选择许可证文件 8.找许可证文件 9.选…

第二节——计算机网络(四)物理层

车载以太网采用差分双绞线车载以太网并未指定特定的连接器&#xff0c;连接方式更为灵活小巧&#xff0c;能够大大减轻线束重量。传统以太网一般使用RJ45连接器连接。车载以太网物理层需满足车载环境下更为严格的EMC要求&#xff0c;100BASE-T1\1000BASE-T1对于非屏蔽双绞线的传…

电脑还原重置Windows系统不同操作模式

电脑有问题,遇事不决就重启,一切都不是问题!是真的这样吗。其实不然,主机系统重启确实可以自动修复一些文件错误,或者是设置问题,但是,当你由于安装了错误的驱动或者中毒严重,亦或是蓝屏,那么重启这个方子可能就治不了你的电脑了。 那么,除了当主机出现异常故障现象…

Lumos学习王佩丰Excel第十八讲:LOOKUP函数与数组

一、回顾统计函数 1、使用SUMIF函数 sumif(条件区域,求和条件,求和区域) 2、使用SUMIFS函数 SUMIFS(求和范围, 条件范围1, 条件1, 条件范围2, 条件2, ...) 二、认识数组 1、数组生成原理 所谓数组&#xff0c;是有序的元素序列。组成数组的各个变量称为数组的元素。对于Ex…

JVM知识点学习-1

学习视频&#xff1a;狂神说Java 类加载器和双亲委派机制 类加载器 作用&#xff1a;加载Class文件 流程&#xff1a;这里的名字car1。。在栈里面&#xff0c;但是数据在堆里面 类加载器的几个类型&#xff1a; 虚拟机自带的类加载器&#xff1b;启动类&#xff08;根Boot…

Spring源码的分析之启动流程

一.前言 这篇文章的话就是我个人通过一些技术博客以及自己写一些Demo测试获得的一些感悟但是 由于本人的技术水平有限所以肯定就是会出现一些问题所以希望看这篇文章的时候如果发现错误的时候可以提出来然后我个人的话进行修改 二.SpringApplication 的构造函数 创建的一个简单…

Scala学习记录,全文单词统计

package test32 import java.io.PrintWriter import scala.io.Source //知识点 // 字符串.split("分隔符"&#xff1a;把字符串用指定的分隔符&#xff0c;拆分成多个部分&#xff0c;保存在数组中) object test {def main(args: Array[String]): Unit {//从文件1.t…

Linux下的三种 IO 复用

目录 一、Select 1、函数 API 2、使用限制 3、使用 Demo 二、Poll 三、epoll 0、 实现原理 1、函数 API 2、简单代码模板 3、LT/ET 使用过程 &#xff08;1&#xff09;LT 水平触发 &#xff08;2&#xff09;ET边沿触发 4、使用 Demo 四、参考链接 一、Select 在…

LeetCode 3208.交替组 II:滑动窗口

【LetMeFly】3208.交替组 II&#xff1a;滑动窗口 力扣题目链接&#xff1a;https://leetcode.cn/problems/alternating-groups-ii/ 给你一个整数数组 colors 和一个整数 k &#xff0c;colors表示一个由红色和蓝色瓷砖组成的环&#xff0c;第 i 块瓷砖的颜色为 colors[i] &a…

与7无关的数

与7无关的数 C语言代码C 语言代码Java语言代码Python语言代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 一个正整数&#xff0c;如果它能被7整除,或者它的十进制表示法中某一位上的数字为7&#xff0c;则称其为与7相关的数。现求所有小…

07.ES11 08.ES12

7.1、Promise.allSettled 调用 allsettled 方法&#xff0c;返回的结果始终是成功的&#xff0c;返回的是promise结果值 <script>//声明两个promise对象const p1 new Promise((resolve, reject) > {setTimeout(() > {resolve("商品数据 - 1");}, 1000)…

git 上传代码时报错

在上传代码时&#xff0c;显示无法上传 PS E:\JavaWeb\vue3-project> git push To https://gitee.com/evening-breeze-2003/vue3.git! [rejected] master -> master (non-fast-forward) error: failed to push some refs to https://gitee.com/evening-breeze-20…

视觉语言模型(VLM)学习笔记

目录 应用场景举例 VLM 的总体架构包括&#xff1a; 深度解析&#xff1a;图像编码器的实现 图像编码器&#xff1a;视觉 Transformer 注意力机制 视觉-语言投影器 综合实现 训练及注意事项 总结 应用场景举例 基于文本的图像生成或编辑&#xff1a;你输入 “生成一张…

digit_eye开发记录(3): C语言读取MNIST数据集

在前两篇&#xff0c;我们解读了 MNIST 数据集的 IDX 文件格式&#xff0c;并分别用 C 和 Python 做了 读取 MNIST 数据集的实现。 基于 C 的代码稍长&#xff0c;基于 Python 的代码则明显更短&#xff0c;然而它们的共同特点是&#xff1a;依赖了外部库&#xff1a; 基于 C …

C#窗体小程序计算器

使其能完成2个数的加、减、乘、除基本运算。界面如下图&#xff0c;单击相应的运算符按钮&#xff0c;则完成相应的运算&#xff0c;并将结果显示出来&#xff0c;同时不允许在结果栏中输入内容 代码如下&#xff1a; private void button1_Click(object sender, EventArgs e)…

Linux命令进阶·如何切换root以及回退、sudo命令、用户/用户组管理,以及解决创建用户不显示问题和Ubuntu不显示用户名只显示“$“符号问题

目录 1. root用户&#xff08;超级管理员&#xff09; 1.1 用于账户切换的系统命令——su 1.2 退回上一个用户命令——exit 1.3 普通命令临时授权root身份执行——sudo 1.3.1 为普通用户配置sudo认证 2. 用户/用户组管理 2.1 用户组管理 2.2 用户管理 2.2.1 …

【JavaEE】JavaEE、web 开发、框架(Spring) 、Maven

文章目录 一、JavaEE 发展历程二、什么是 web 开发1、什么是 web 开发&#xff1f;2、web 网站的工作流程 三、框架1、什么是框架&#xff1f;2、为什么要学框架&#xff1f;3、框架的优点&#xff08;Spring Boot VS Servlet&#xff09; 四、Maven 一、JavaEE 发展历程 Java…

虚拟机玩游戏,轻松实现多开不同IP

嘿&#xff0c;亲爱的游戏小伙伴们&#xff01;今天要和大家分享一个超级实用的技巧&#xff0c;让你在游戏中轻松多开不同IP&#xff0c;享受开挂的乐趣&#xff01; 第一步&#xff1a;准备虚拟机 首先&#xff0c;你需要下载一个虚拟机软件&#xff0c;比如VMware或者Virt…