隐式神经网络实现低光照图像增强


✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua小谢,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:传知代码论文复现

欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙

​​

​​

目录

引言

那么目前低光照图像增强还面临哪些挑战呢?

挑战1. 不可预测的亮度降低和噪声

挑战2.度量友好版本和视觉友好版本之间的差异

挑战3. 有限的配对训练数据

1.论文概述(原文摘要、引言部分)

2.核心创新点(原文方法部分)

2.1 归一化的神经表示

什么是归一化的神经表示?

为什么归一化的神经表示能够奏效?

2.2 文本驱动的外观识别器

文本驱动的判别表示

外观驱动的判别表示

2.3 整体框架

3.实验部分

4.结论

5.复现过程(重要)

5.1 数据准备

5.2 环境搭建

下载

快速运行

训练

5.3 取消SSL证书验证(重要)

5.4 生成增强图像

5.5 模型调优


  本文所有资源均可在该地址处获取。

2023年人工智能顶会ICCV会议论文复现
Implicit Neural Representation for Cooperative Low-light Image Enhancement

引言

  本文涉及到低光照图像增强、图像的神经表示以及多模态学习等领域,下面将简单介绍下相关知识。

1.低光照图像增强

  低光图像增强是图像处理领域的一个重要研究方向,旨在改善在低照度条件下拍摄的图像质量。低光条件下的图像往往具有低对比度、噪点增加和细节丢失等问题。低光图像增强方法通过调整图像的亮度、对比度、色彩平衡等方面来提高图像的质量和视觉感知效果。

2.图像的神经表示

  图像的神经表示指的是通过神经网络模型对图像进行编码和表示的方法。传统的图像表示方法通常使用手工设计的特征提取器,如SIFT、HOG等。而神经表示方法则通过深度学习模型,如卷积神经网络(CNN)、自编码器等,学习到图像的高级特征表示。这些神经表示能够捕捉图像的语义信息和结构信息,对于图像分类、目标检测、图像生成等任务具有重要作用。

3.多模态学习

  多模态学习是指利用不同的感知模态(如图像、文本、语音等)之间的关联性进行联合学习和信息融合的方法。Radford提出从语言监督中学习视觉模型,称为CLIP。经过4亿对图像-文本对的训练,它可以用自然语言描述任何视觉概念,并且无需任何特定的训练就可以转移到其他任务中。CLIP模型的核心思想是通过对图像和文本进行对比学习,使得它们在嵌入空间中的表示能够相互匹配。这意味着,在嵌入空间中,相关的图像和文本将被映射到相近的位置,从而使得模型能够理解图像和文本之间的语义关系,如下图。


  CLIP模型通过一个共享的编码器来处理图像和文本输入。对于图像,它使用卷积神经网络(CNN)对图像进行编码;对于文本,它使用Transformer模型对文本进行编码。编码器的输出表示图像和文本在嵌入空间中的表示。CLIP模型的优点是不需要大量的标注数据,可以使用大规模的无标注图像和文本数据进行预训练。预训练后的CLIP模型可以用于多种任务,如图像分类、图像生成、图像检索等。它在许多视觉和语言相关的任务中取得了出色的性能,并展现了强大的泛化能力。

那么目前低光照图像增强还面临哪些挑战呢?

挑战1. 不可预测的亮度降低和噪声

在低光条件下,图像往往会出现亮度降低和噪声增加的问题。然而,这些退化因素的具体程度和方式往往是不可预测的,因为它们受到多种因素的影响,如光照条件、相机设置等。现有的低光图像增强方法难以准确地对这些退化因素进行建模和处理,导致增强结果可能不够鲁棒并且无法满足视觉感知的要求。

挑战2.度量友好版本和视觉友好版本之间的差异

低光图像增强方法通常会追求在度量上有所改善,例如增加对比度、减少噪声等。然而,这些度量友好的改善并不总是与人眼感知的视觉友好相一致。在一些情况下,虽然度量上的改善较大,但图像质量却被认为是不自然或不真实的。因此,现有方法在度量友好版本和视觉友好版本之间存在固有的差距,无法很好地平衡二者之间的关系。

挑战3. 有限的配对训练数据

有限的配对训练数据:低光图像增强方法通常需要使用配对的训练数据,即低光图像和对应的高质量图像。然而,获取大规模配对数据是一项耗时且昂贵的任务。由于配对数据的限制,现有方法在模型的泛化能力和适应性方面存在一定的局限性。此外,配对数据可能无法涵盖所有的场景和退化情况,导致模型的性能受到限制。

1.论文概述(原文摘要、引言部分)

  NeRCo(Implicit Neural Representation for Cooperative Low-light Image Enhancement)提出了一种名为NeRCo的隐式神经表示方法,用于合作式低光图像增强。现有的低光图像增强方法存在以下三个限制:不可预测的亮度降低和噪声、度量友好版本和视觉友好版本之间的固有差距,以及有限的配对训练数据。为了解决这些限制,论文提出了NeRCo方法,它以无监督的方式稳健地恢复感知友好的结果。
  具体而言,NeRCo通过一个可控的拟合函数统一了现实场景中多样的退化因素,从而提高了鲁棒性。对于输出结果,论文引入了来自预训练视觉-语言模型的先验信息,采用语义导向的监督方法。它不仅仅追随参考图像,还鼓励结果符合主观期望,寻找更加视觉友好的解决方案。此外,为了减少对配对数据的依赖并减少解决空间,论文开发了一个双闭环约束增强模块,它以自监督的方式与其他相关模块合作进行训练。
  最后,广泛的实验证明了我们提出的NeRCo方法的鲁棒性和优越性能。

2.核心创新点(原文方法部分)

2.1 归一化的神经表示

什么是归一化的神经表示?

  归一化的神经表示(Neural Representation Normalization)是一种在神经网络中对特征表示进行标准化的技术。它的目的是通过对神经表示进行归一化处理,使得不同样本的特征表示在统计上具有相似的分布,从而提高模型的鲁棒性和泛化能力。在神经网络中,每个神经元的输出表示了输入数据的某种特征。这些特征往往具有不同的尺度和范围,可能会对模型的训练和表征能力产生不利影响。神经表示归一化的目的是通过对特征进行调整,使得它们具有相似的均值和方差,从而减少特征之间的差异。本文是利用余弦相似性对输入进行重构,在与encoder进行编码后的特征concat,而后经过多层感知机得到归一化后的图像,如下图:

为什么归一化的神经表示能够奏效?

  • 学习丰富的特征表示:神经网络模型能够通过多层非线性变换和映射来学习丰富的特征表示。在低光照条件下,图像往往存在低对比度、噪点增加和细节丢失等问题。通过神经网络的层次结构,可以逐渐提取出更高级别、更抽象的特征,从而更好地捕捉图像中的语义信息和结构信息。
  • 鲁棒性和泛化能力:神经表示能够从大量的标记数据中学习到数据的潜在表示,具有较强的鲁棒性和泛化能力。在低光照图像增强任务中,由于光照条件的变化和图像退化的多样性,很难通过手工设计的规则和特征提取器来准确地恢复图像质量。神经表示方法可以通过大规模数据的训练来学习到低光照图像的共性特征,从而更好地适应各种退化情况,提高增强效果的鲁棒性和泛化能力。
  • 感知导向的引导:在低光照图像增强任务中,仅仅恢复图像的亮度和对比度等低级特征可能不足以获得视觉上友好的结果。神经表示方法可以结合感知导向的引导,利用预训练的视觉模型的先验知识来指导增强结果的生成,使得增强后的图像更加自然和具有良好的视觉感知效果。

2.2 文本驱动的外观识别器

  本文提出的文本驱动的外观鉴别器(在左侧区域)和我协同关注力模块(在右侧区域)的细节。前者用文本和图像模态监督输入,并关注高频成分。后者将注意力调整到不同的渠道并输出注意图。

文本驱动的判别表示

  本文将弱光域表示为L,高光域表示为h。如图上图所示,本文引入多模态学习来同时监督图像和文本模态的图像。具体而言,采用了最近广为人知的CLIP模型来获得高效先验。它由两个预训练的编码器组成,即文本的Enct和图像的Enci,具体代码如下:

 # clip模型核心代码class CLIP(nn.Module):def __init__(self,embed_dim: int,# visionimage_resolution: int,vision_layers: Union[Tuple[int, int, int, int], int],vision_width: int,vision_patch_size: int,# textcontext_length: int,vocab_size: int,transformer_width: int,transformer_heads: int,transformer_layers: int):super().__init__()self.context_length = context_lengthif isinstance(vision_layers, (tuple, list)):vision_heads = vision_width * 32 // 64self.visual = ModifiedResNet(layers=vision_layers,output_dim=embed_dim,heads=vision_heads,input_resolution=image_resolution,width=vision_width)else:vision_heads = vision_width // 64self.visual = VisionTransformer(input_resolution=image_resolution,patch_size=vision_patch_size,width=vision_width,layers=vision_layers,heads=vision_heads,output_dim=embed_dim)self.transformer = Transformer(width=transformer_width,layers=transformer_layers,heads=transformer_heads,attn_mask=self.build_attention_mask())self.vocab_size = vocab_sizeself.token_embedding = nn.Embedding(vocab_size, transformer_width)self.positional_embedding = nn.Parameter(torch.empty(self.context_length, transformer_width))self.ln_final = LayerNorm(transformer_width)self.text_projection = nn.Parameter(torch.empty(transformer_width, embed_dim))self.logit_scale = nn.Parameter(torch.ones([]) * np.log(1 / 0.07))

外观驱动的判别表示

  为了生成可靠的内容,图像监督是必要的。如中文本驱动器框架图紫色区域(框架图)所示,本文叠加了一个判别器来区分预测结果和真实图像,从而提高了图像级的真实性(例如颜色、纹理和结构)。考虑到图像处理中的细节失真,本文嵌入了一个由高通滤波器和相同结构的鉴别器组成的高频路径。滤波器提取高频分量,鉴别器在边缘级对高频分量进行监督。基于这种双路色边判别结构,实现了色彩与细节的权衡。
在训练过程中,TAD在学习L和H之间的双向映射关系中起对抗作用,利用的是sobel算子实现图像的高通滤波,代码如下。

# -*- coding: utf-8 -*-
from re import I
import torch
import torch.nn as nn
import torch.nn.functional as F
from PIL import Image
from torchvision import transforms
import os
trans = transforms.Compose([transforms.ToTensor()])class GradLayer(nn.Module):def __init__(self):super(GradLayer, self).__init__()kernel_v = [[0, -1, 0],[0, 0, 0],[0, 1, 0]]kernel_h = [[0, 0, 0],[-1, 0, 1],[0, 0, 0]]kernel_h = torch.FloatTensor(kernel_h).unsqueeze(0).unsqueeze(0)kernel_v = torch.FloatTensor(kernel_v).unsqueeze(0).unsqueeze(0)self.weight_h = nn.Parameter(data=kernel_h, requires_grad=False)self.weight_v = nn.Parameter(data=kernel_v, requires_grad=False)self.gray2RGB = torch.nn.Conv2d(1, 3, kernel_size=1, stride=1, padding=0)def get_gray(self,x):''' Convert image to its gray one.'''gray_coeffs = [65.738, 129.057, 25.064]convert = x.new_tensor(gray_coeffs).view(1, 3, 1, 1) / 256x_gray = x.mul(convert).sum(dim=1)return x_gray.unsqueeze(1)def forward(self, x):if x.shape[1] == 3:x = self.get_gray(x)x_v = F.conv2d(x, self.weight_v, padding=1)x_h = F.conv2d(x, self.weight_h, padding=1)x = torch.sqrt(torch.pow(x_v, 2) + torch.pow(x_h, 2) + 1e-6)x = self.gray2RGB(x)return xclass GradLoss(nn.Module):def __init__(self):super(GradLoss, self).__init__()self.loss = nn.L1Loss()self.grad_layer = GradLayer()def forward(self, output, gt_img):output_grad = self.grad_layer(output)gt_grad = self.grad_layer(gt_img)return self.loss(output_grad, gt_grad)def tran(img):net = GradLayer().to(torch.device('cuda:0'))img = net(img) # input img: data range [0, 1]; data type torch.float32; data shape [1, 3, 256, 256]image = img * 4.return image

2.3 整体框架

  • 如图所示,给定一个弱光图像IL,我们首先通过神经表示(NRN,第3.2节)对其进行归一化,以提高模型对不同退化条件的鲁棒性。
  •   然后,Mask Extractor 模块从图像中提取注意掩模,以指导不同区域的增强。之后,增强模块GH(以ResNet为代表)生成高光图像eIH。为了保证图像的质量,设计了一个文本驱动的外观判别器来监督图像的生成,其中文本驱动的监督保证了语义的可靠性,外观监督保证了视觉的可靠性。然后,eIH通过退化模块GL转换回低光域eeIL,并计算与原始低光图像IL的一致性损失。
  •   在训练过程中,我们运行了整个过程,如图1所示。我们输入两幅图像(即弱光IL和高光IH)。IL被增强为eIH,然后再转化回弱光eeIL。IH反之亦然。注意到IH仅用于训练目的,即以无监督的方式训练模型以获得更好的增强而不是退化。因此,我们只使用NRN来增强IL而不降低IH。对于推理,直接将IL增强为eIH,不做任何其他操作,
  •   NeRco整体架构如下所示:NeRCo的工作流程。提出了一种包含双闭环分支的合作对抗增强过程,每个分支包含一个增强操作和一个退化操作。我们嵌入了一个掩模提取器(ME)来描绘退化分布,并嵌入了一个神经表示归一化(NRN)模块来归一化输入弱光图像的退化情况。所有这些都被一起训练以相互约束,锁定到一个更精确的目标域。红色表示注意力图的转移。

3.实验部分

  本文在三个主流的低光照图像数据集上做了消融实验,在不同度量、不同的模型、自监督方法、无监督方法做了测试,本文提出的方法达到了新sota,如下图:

  从实际的图像增强效果也可以看出,本文提出的方法优于先前的方法:

4.结论

  总结而言,该论文提出了一种名为NeRCo的隐式神经表示方法,用于协同弱光图像增强。具体而言,该方法通过以下几个方面来实现:

  1. 利用神经表示来归一化输入退化图像的水平,包括暗亮度和自然噪声,从而增强方法对不同退化因素的鲁棒性。
  2. 引入高频路径和预训练的视觉语言模型的先验信息作为感知导向的引导,以确保输出增强图像在视觉上更加友好和自然。
  3. 开发双闭环合作约束来训练增强模块,以减轻对配对数据的依赖,并以自监督的方式增强弱光场景。这种合作约束促使所有组件相互约束,进一步减少解决方案的空间。

  通过大量的实验证明,该方法在弱光图像增强任务上表现出优越性能,与其他性能最好的方法相比具有明显的优势。此外,该方法的组件还为其他低级任务,如图像去雾、压缩感知和高光谱成像等,提供了宝贵的灵感和参考。

  总体而言,该论文提出的NeRCo方法通过引入隐式神经表示、感知导向引导和双闭环合作约束等创新的方法,有效地解决了弱光图像增强中存在的挑战,为该领域的研究和应用提供了有价值的贡献。成具有更合理笔画连接的更高质量的书法字体,并且在常规字体上也有令人满意的表现

5.复现过程(重要)

5.1 数据准备

  • Linux or macOS
  • Python 3.8
  • NVIDIA GPU + CUDA CuDNN

提示

这里的python版本无需固定3.8,经实测,python 3.6、python 3.9代码均可运行。

5.2 环境搭建

键入命令:

pip install -r requirements.txt

提示

这里实测,requirements.txt的一些依赖库版本过高,清华源无法安装,只需要安装到清华源目前现有最高的版本即可。

例如,我们在安装依赖库的时候键入命令pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

警告

ERROR: Could not find a version that satisfies the requirement torch>=1.12.0

这里会报错找不到满足torch>=1.12.0的错误,我们只需要从上图中找到清华源中关于torch的最新版本1.10.2,我们在requirements.txt中将torch>=1.12.0替换为torch>=1.10.2即可,若遇到其他依赖库版本找不到的问题,同样使用此种解决方式。

下载

你需要创建目录 ./saves/[YOUR-MODEL] (例如 ./saves/LSRW).
下载经过预训练的模型并将其放入 ./saves/[YOUR-MODEL].
在这里,已经发布了预训练模型的两个版本,它们是在[LSRW]上训练的 LSRW数据集 和 LOL 数据集的下载链接如下:

  • NeRCo trained on LSRW
  • NeRCo trained on LOL

最终关于预训练模型的目录应该如下:

快速运行

  • 创建目录 ./dataset/testA and ./dataset/testB.
  • 将测试图像放入/dataset/testA(这里应该保留./dataset/testB中的任何一个图像,以确保程序可以启动,具体放置方法可以看下图)
  • 使用预先训练的权重测试模型:
CUDA_VISIBLE_DEVICES=0 python test.py --dataroot ./dataset --name [YOUR-MODEL] --preprocess=none

  • 测试结果将保存到以下目录中: ./results/[YOUR-MODEL]/test_latest/images, 将显示在此处的html文件中: ./results/[YOUR-MODEL]/test_latest/index.html.

训练

  • 下载训练低光数据并将其放入 ./dataset/trainA.
  • 随机采用数百个普通光图像,并将它们放在 ./dataset/trainB.
  • 训练模型代码如下:
cd NeRCo-main
mkdir loss
CUDA_VISIBLE_DEVICES=0 python train.py --dataroot ./dataset --name [YOUR-MODEL]

  • 损失曲线保存在目录 ./loss.
  • 要查看更多中间结果,请查看 ./saves/[YOUR-MODEL]/web/index.html.

5.3 取消SSL证书验证(重要)

在运行CUDA_VISIBLE_DEVICES=0 python test.py代码的过程中,需要在clip.py文件里要添加取消证书验证代码,否则会报错如下:

警告

urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]

取消证书验证代码:

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

添加位置如下:

5.4 生成增强图像

  • 一切准备就绪后,运行以下命令即可得到增强后的图像。
CUDA_VISIBLE_DEVICES=0 python test.py --dataroot ./dataset --name [YOUR-MODEL] --preprocess=none

  • 增强后的图像默认路径在 results/LSRW/test_latset/images 路径下,如下图所示:
  • 增强后的图片与原始图片,增强效果非常好,大家在这里也可以换成自己的数据集测试。

5.5 模型调优

  本文所使用的高斯滤波算子为sobel算子,可以将滤波算子替换为拉普拉斯算子,Laplace算子是一种基于二阶导数的边缘检测算子,用于检测图像中的边缘和纹理。与Sobel算子不同,Laplace算子直接计算图像像素的二阶导数。它通过计算像素值周围邻域的梯度变化来识别边缘。Laplace算子对边缘进行二次微分,可以检测到边缘的更高阶特征,这里给出拉普拉斯算子的示例代码以供参考:

import cv2
import numpy as np
from matplotlib import pyplot as pltdef correl2d(img, window):m = window.shape[0]n = window.shape[1]# 图像边界填0扩展img_border = np.zeros((img.shape[0] + m - 1, img.shape[1] + n - 1))img_border[(m - 1) // 2:img.shape[0] + (m - 1) // 2, (n - 1) // 2:img.shape[1] + (n - 1) // 2] = imgimg_result = np.zeros(img.shape)for i in range(img.shape[0]):for j in range(img.shape[1]):temp = img_border[i:i + m, j:j + n]img_result[i, j] = np.sum(np.multiply(temp, window))return img_resultimg = cv2.imread('Fig0338.tif', 0)img_list = [img]
# 拉普拉斯滤波器模板
window1 = np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]])
# 带有对角项的拉普拉斯滤波器模板
window2 = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])img_result = correl2d(img, window1)# # 对拉普拉斯的结果做标定
img_lap = 255*(img_result-img_result.min())/(img_result.max()-img_result.min())
img_list.append(img_lap)# 将原图加上拉普拉斯滤波的结果图得到最终的锐化结果
img_sharpened = img - img_result
img_list.append(img_sharpened)# 对window2再执行一遍锐化操作
img_result = correl2d(img, window2)
img_sharpened = img - img_result
img_list.append(img_sharpened)_, axs = plt.subplots(2, 2)for i in range(2):for j in range(2):axs[i, j].imshow(img_list[i * 2 + j], vmin=0, vmax=255, cmap='gray')axs[i, j].axis('off')plt.savefig('sharpen.jpg')
plt.show()

提示

完整代码见附件。

​​

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

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

相关文章

深入浅出:SOME/IP-SD的工作原理与应用

目录 往期推荐 相关缩略语 SOME/IP 协议概述 协议介绍 SOME/IP TP 模块概述和 BSW 模块依赖性 原始 SOME/IP 消息的Header格式 SOME/IP-SD 模块概述 模块介绍 BSW modules依赖 客户端-服务器通信示例 Message 结构 用于SD服务的BSWM状态处理 往期推荐 ETAS工具…

【Docker】Linux与Windows系统安装Docker+Docker上简单安装MySQL

一、Windows安装Docker 由于我在许多平台搜索Windows下安装Docker的方法&#xff0c;都提到了Win10家庭版无法直接安装Docker。个人电脑就是Win10家庭版&#xff0c;本着实践出真知的想法&#xff0c;个人在本机Win10家庭版实验结果为需要采用下述传统手动安装的办法&#xff…

关于springBoot+vue项目中配置SSL证书问题

前端可以通过https进行访问 1.前端在访问后端接口时&#xff0c;使用https进行访问&#xff0c;在request.js配置文件中&#xff0c;这个文件是配置axios的基本请求的&#xff0c;在基础请求地址中改为https方式 2.需要在Linux中的nginx中配置ssl证书&#xff0c;具体请参考&…

rk3568之mpp开发笔记mpp移植到开发板

前言&#xff1a; 大家好&#xff0c;今天给大家介绍的内容是rk平台的mpp编解码这块的内容&#xff0c;在rk目前看到有三套框架涉及到编解码内容&#xff1a; 1、rkmedia 2、rockit 3、mpp 这三种不同形式的编解码方式&#xff0c;后面再做详细的框架对比&#xff0c;今天我…

如何利用Java爬虫获得商品类目

在当今数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。获取和分析数据的能力对于任何希望在市场上保持竞争力的企业来说都是至关重要的。对于电子商务平台和市场研究公司而言&#xff0c;获取商品类目数据尤为重要&#xff0c;因为这些数据可以帮助他们更好地理解市场…

Scratch教学作品 | 3D飞行模拟器——体验飞行的无限乐趣! ✈️

今天为大家推荐一款令人惊叹的Scratch作品——《3D飞行模拟器》&#xff01;由BamBozzle制作&#xff0c;这款游戏完全用Scratch构建&#xff0c;带你体验开放世界飞行的自由与乐趣。从起飞到降落&#xff0c;每一步都需要你的精准操作&#xff01;更棒的是&#xff0c;这款游戏…

堆排序(建堆用向上还是向下?)、topK问题

目录 1.堆排序 思考&#xff1a;建堆用向上调整建堆还是向下调整建堆&#xff1f;调堆用向上调整还是向下调整&#xff1f; 1.3总结&#xff1a;升序用大堆&#xff0c;降序用小堆。用向下调整建堆。 2.topK 2.3总结&#xff1a;要前k大&#xff0c;建小堆。要前k小&#…

Spring Boot配置文件敏感信息加密

一&#xff0c;背景 Spring Boot应用中的数据库、Redis、Nacos、MQ等的用户名、连接地址、密码在配置文件中一般都是明文存储&#xff0c;如果系统被系统攻破或者配置文件所在的目录读权限被破解&#xff0c;又或者是动态配置文件被窃取&#xff0c;内部人员或者黑客很容易通过…

学生信息管理系统(简化版)

前端部分&#xff08;vue2&#xff09; &#xff01;&#xff01;前端采用vue2框架&#xff0c;下面只写出必要的代码文件&#xff0c;想要使用需自行先创建vue项目 部分截图 下面是目录结构 下面是public文件夹里面的html文件 <!DOCTYPE html> <html lang"&q…

【密码学】分组密码的工作模式

1.电码本模式&#xff08;ECB&#xff09; 优点: 每个数据块独立加密&#xff0c;可并行加密&#xff0c;实现简单。 缺点: 相同明文会产生相同密文&#xff0c;不具备数据完整保护性。 适用于短消息的加密传输 (如一个加密密钥)。 工作流程&#xff1a;用相同的密钥分别对…

Redis探秘Sentinel(哨兵模式)

概述 Redis的高可用机制有持久化、复制、哨兵和集群。其主要的作用和解决的问题分别是&#xff1a; 持久化&#xff1a;持久化是最简单的高可用方法(有时甚至不被归为高可用的手段)&#xff0c;主要作用是数据备份&#xff0c;即将数据存储在硬盘&#xff0c;保证数据不会因进程…

mysql的索引分类和索引优化

索引介绍 索引是帮助MySQL高效获取数据的排好序的数据结构&#xff1b;存储的内容是指向表中数据的指针 mysql有多种索引&#xff0c;Btree索引&#xff0c;全文索引&#xff0c;哈希索引、空间索引。其中以BTree索引应用最为广泛 假设从0到1000中&#xff0c;猜一个数字。结…

短视频矩阵系统开发|技术源代码部署

短视频矩阵系统通过多账号运营管理、多平台视频智能分发等功能&#xff0c;助力企业实现视频引流、粉丝沉淀和转化。 短视频矩阵系统是一种创新的营销工具&#xff0c;它整合了多账号管理、视频智能分发、数据可视化等多种功能&#xff0c;为企业在短视频领域的发展提供了强大…

计算机网络研究实训室建设方案

一、概述 本方案旨在规划并实施一个先进的计算机网络研究实训室&#xff0c;旨在为学生提供一个深入学习、实践和研究网络技术的平台。实训室将集教学、实验、研究于一体&#xff0c;覆盖网络基础、网络架构、网络安全、网络管理等多个领域&#xff0c;以培养具备扎实理论基础…

【开源免费】基于SpringBoot+Vue.JS中小型医院网站(JAVA毕业设计)

博主说明&#xff1a;本文项目编号 T 078 &#xff0c;文末自助获取源码 \color{red}{T078&#xff0c;文末自助获取源码} T078&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

Wireshark数据抓包分析之传输层协议(TCP协议)

根据实验环境&#xff0c;本实验的步骤如下&#xff1a; 1.在测试环境使用发包工具和Wireshark抓取TCP三次握手和四次断开的数据包。 2.详细分析TCP协议的三次握手以及四次断开。 任务描述&#xff1a;安装发包工具&#xff0c;并配置TCP客户端&#xff0c;服务端&#xff0…

【目标检测】【反无人机目标检测】使用SEB-YOLOv8s实时检测未经授权的无人机

Real-Time Detection of Unauthorized Unmanned Aerial Vehicles Using SEB-YOLOv8s 使用SEB-YOLOv8s实时检测未经授权的无人机 论文链接 0.论文摘要 摘要&#xff1a;针对无人机的实时检测&#xff0c;复杂背景下无人机小目标容易漏检、难以检测的问题。为了在降低内存和计算…

Flume基础概念

目录 作用组件构成ClientFlowAgentSourceSinkEvent 和Log4j的区别与定位事务传出流程输入到sourcesource端输入Channel 接收输入到SinkSink输出 作用 Flume可以从各种来源&#xff08;如日志文件、消息队列、网络数据、文件系统、数据库等&#xff09;收集数据&#xff0c;并将…

Unity 设计模式-观察者模式(Observer Pattern)详解

观察者模式 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了对象之间的一对多依赖关系。当一个对象的状态发生变化时&#xff0c;它的所有依赖者&#xff08;观察者&#xff09;都会收到通知并自动更新。这种模式用于事件处理系…

论文:IoU Loss for 2D/3D Object Detection

摘要&#xff1a;在2D/3D目标检测任务中&#xff0c;IoU (Intersection-over- Union)作为一种评价指标&#xff0c;被广泛用于评价不同探测器在测试阶段的性能。然而&#xff0c;在训练阶段&#xff0c;通常采用常见的距离损失(如L1或L2)作为损失函数&#xff0c;以最小化预测值…