隐式神经网络实现低光照图像增强
✨✨ 欢迎大家来访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的隐式神经表示方法,用于协同弱光图像增强。具体而言,该方法通过以下几个方面来实现:
- 利用神经表示来归一化输入退化图像的水平,包括暗亮度和自然噪声,从而增强方法对不同退化因素的鲁棒性。
- 引入高频路径和预训练的视觉语言模型的先验信息作为感知导向的引导,以确保输出增强图像在视觉上更加友好和自然。
- 开发双闭环合作约束来训练增强模块,以减轻对配对数据的依赖,并以自监督的方式增强弱光场景。这种合作约束促使所有组件相互约束,进一步减少解决方案的空间。
通过大量的实验证明,该方法在弱光图像增强任务上表现出优越性能,与其他性能最好的方法相比具有明显的优势。此外,该方法的组件还为其他低级任务,如图像去雾、压缩感知和高光谱成像等,提供了宝贵的灵感和参考。
总体而言,该论文提出的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()
提示
完整代码见附件。
相关文章:
隐式神经网络实现低光照图像增强
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
Flutter动画(三)内建显式动画Widget
常见的内建显式动画Widget: ListenableBuilder: AnimatedBuilder AnimatedWidget AlignTransition DecoratedBoxTransition DefaultTextStyleTransition PositionedTransition RelativePositionedTransition RotationTransition ScaleTransiti…...
springSecurity自定义登陆接口和JWT认证过滤器
下面我会根据该流程图去自定义接口: 我们需要做的任务有: 登陆:1、通过ProviderManager的方法进行认证,生成jwt;2、把用户信息存入redis;3、自定义UserDetailsService实现到数据库查询数据的方法。 校验&a…...
Spring Boot日志:从Logger到@Slf4j的探秘
写在前面 Hello大家好,今日是2024年的第一天,祝大家元旦快乐?? 2024第一篇文章从SpringBoot日志开始 文章目录 一、前言二、日志有什么用?三、日志怎么用?四、自定义日志打印 ?? 常见日志框架说明4.1 在程序中得到?志对象【…...
使用 LabVIEW 与 PLC 通信的方式
要将 PLC 与 LabVIEW 或其他 NI 产品进行通信,首先需要明确 PLC 支持的通信协议和接口类型。NI 提供了多种方案,包括 OPC 服务器、Modbus、Ethernet/IP 和其他工业通信协议。下面将详细介绍这些方法,并进行比较分析,帮助你选择最适…...
python录制鼠标键盘操作循环播放
依赖 pip install pynput 程序: from pynput import mouse, keyboard import time import threading# 用于存储录制的鼠标和键盘事件 mouse_events [] keyboard_events []# 定义事件处理函数# 处理鼠标事件 def on_move(x, y):mouse_events.append((move, x, y))def on_cl…...
开发者如何使用GCC提升开发效率Opencv操作
看此篇前请先阅读 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144216351?spm=1001…...
异常与文件
目录 1.异常 1.1.概念 1.2.常见异常 1.3.异常处理方式 1.3.1.try except 1.3.2.try except else 1.3.3.try except else finally 2.文件 2.1.文件分类 ps:python 程序的数据保存在哪里? 2.2.常见的文件类型 2.3.python 操作文件的函数 2.3.1.读取文件…...
【C语言】完成程序设计填空
文章目录 1、请阅读下面的程序,在空白处填写正确的代码,要求各在一行从头开始输出m和n的值。2、求100~599之间的所有水仙花数,即各位数字的立方和恰好等于该数本身的数。3、以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序 拆分并输出。请填空…...
西湖大学:LLM零样本推理任务校准
📖标题:Task Calibration: Calibrating Large Language Models on Inference Tasks 🌐来源:arXiv, 2410.18764 🌟摘要 🔸大型语言模型(LLM)在推理任务上表现出令人印象深刻的零样本…...
windows下Qt5自动编译配置QtMqtt环境(11)
文章目录 [toc]1、概述2、准备1.1 下载源码1.2 配置环境1.3 解释原理 3、编译4、验证5、参考6、视频 更多精彩内容👉内容导航 👈👉Qt网络编程 👈 1、概述 Qt默认是不包含mqtt库的,如果需要使用到mqtt库就只能自己编译配…...
每天五分钟深度学习:神经网络的前向传播的计算(多样本)
本文重点 前面我们学习了单样本的前向传播,本文我们学习多样本的前向传播,我们先来回忆一下,神经网络的单样本的前向传播的向量化的方式: m个样本依次进行前向传播 这里我们说明一下符号: 我们使用(m)表示第m个样本,用[m]表示神经网络的第m层 a[2](i) 表示第i个样本计…...
基于 NXP S32K312+FS23 的汽车通用评估板方案
S32K3 系列是 NXP 推出的面向汽车电子和工业应用的微控制器,基于 ARMCortex-M7 内核,支持单核、双核和锁步内核配置。S32K3 系列具有内核、内存和外设数量方面的可扩展性,符合 ISO26262 标准,能达到 ASIL B/D 安全等级,…...
11进阶篇:专业课论文阅读方向指南(2025版)
文章目录 第一个检索式:图情档核心期刊(北大 + CSSCI)发文情况研究方法类关键词研究主题类关键词论文阅读建议第二个检索式:川大公共管理学院在核心期刊(北大 + CSSCI)的发文情况研究方法类关键词研究主题类关键词特点关键词与2024年972(现815)两道题目的映射情况815信…...
Qt之第三方库QXlsx使用(三)
Qt开发 系列文章 - QXlsx(三) 目录 前言 一、Qt开源库 二、QXlsx 1.QXlsx介绍 2.QXlsx下载 3.QXlsx移植 4.修改项目文件.pro 三、使用技巧 1.写入数据 2.读出数据 总结 前言 Qt第三方控件库是指非Qt官方提供的、用于扩展Qt应用程序功能的控件…...
第145场双周赛: 使数组的值全部为 K 的最少操作次数、破解锁的最少时间 Ⅰ、使两个整数相等的位数操作、统计最小公倍数图中的连通块数目
Q1、使数组的值全部为 K 的最少操作次数 1、题目描述 给你一个整数数组 nums 和一个整数 k 。 如果一个数组中所有 严格大于 h 的整数值都 相等 ,那么我们称整数 h 是 合法的 。 比方说,如果 nums [10, 8, 10, 8] ,那么 h 9 是一个 合法…...
AJAX三、XHR,基本使用,查询参数,数据提交,promise的三种状态,封装-简易axios-获取省份列表 / 获取地区列表 / 注册用户,天气预报
一、XMLHttpRequest基本使用 XMLHttpRequest(XHR)对象用于与服务器交互。 二、XMLHttpRequest-查询参数 语法: 用 & 符号分隔的键/值对列表 三、XMLHttpRequest-数据提交 核心步骤 : 1. 请求头 设置 Content-Type 2. 请求体 携带 符合要求 的数…...
Android期末复习题
1.如何搭建Android开发环境? 答案:搭建Android开发环境需要以下几个步骤: (1)下载和安装JDK (2)配置PATH环境变量 (3)下载和安装Android Studio (4)创建A…...
《蓝桥杯比赛规划》
一、比赛简介 蓝桥杯全国软件和信息技术专业人才大赛是一项具有较高影响力的编程竞赛,旨在促进软件和信息技术领域专业技术人才的培养,提升高校毕业生的就业竞争力。比赛涵盖了多个编程语言和专业方向,包括 C/C、Java、Python 等。 二、目标…...
三、Zookeeper
Zookeeper 三、Zookeeper3.1什么是zookeeper?3.2为什么需要zookeeper3.3Zookeeper基本运行流程3.4Zookeeper数据模型3.5Zookeeper主要角色3.6Zookeeper工作原理3.7Zookeeper节点数据操作流程三、Zookeeper 3.1什么是zookeeper? ZooKeeper是一个分布式的,开放源码的分布式应…...
Wireshark数据抓包分析之传输层协议(TCP协议)
根据实验环境,本实验的步骤如下: 1.在测试环境使用发包工具和Wireshark抓取TCP三次握手和四次断开的数据包。 2.详细分析TCP协议的三次握手以及四次断开。 任务描述:安装发包工具,并配置TCP客户端,服务端࿰…...
用ai做机器视觉的事情
cnn(卷积神经网络)是典型的ai算法。 我们已经cnn实现像机器视觉中形状匹配的功能,因为使用了roi抠图匹配,所以就叫做roicnn,以区分整图匹配。下面是roicnn笔记总结: 20241022,roicnn搞定&…...
LLM - 开源视觉多模态 LLaVA-CoT(o1) 深度推理模型 测试与源码 教程
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144304351 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 LLaVA-…...
qtcanpool 知 10:包管理雏形
文章目录 前言痛点转机雏形实践后语 前言 曾听闻:C/Qt 没有包管理器,开发起来太不方便。这是一个有过 node.js 开发经验的人对 Qt 的吐槽。 确实,像 python、golang、node.js 这些编程语言都有包管理器,给用户带来了极佳的开发体…...
[保姆式教程]使用目标检测模型YOLO11 OBB进行旋转目标检测:训练自己的数据集(基于卫星和无人机的农业大棚数据集)
之前写了一个基于YOLOv8做旋转目标检测(OBB)的文章,内容写得不够好,内容也有些杂乱无序。现如今YOLO已经更新到11了,数据集也集齐了无人机和卫星的农业大棚,所以这次就写一个基于YOLO11 OBB的农业大棚旋转检…...
MySQL 权限管理分配详解
MySQL 权限管理分配详解 MySQL权限系统的工作原理权限表的存取用户通过权限认证、进行权限分配的流程账号管理我们常用的授权all privileges到底有哪些权限呢?以及带来的安全隐患有哪些?创建账户的时候最好分配指定的权限,这样子安全也高管理…...
【期末速成】《微机原理与接口技术》知识点总结
文章目录 前言第一、二章 接口技术概述1. 接口的定义*2. 接口功能特点*3. 接口的分类*4. 接口中的传输信息及其组成5. 接口的编址与译码*6. CPU 与外设之间的数据传送方式* 第三章 总线1. 总线(BUS)的定义*2. 总线的标准3. 采用标准总线的优点*4. 总线的…...
华为、华三交换机纯Web下如何创关键VLANIF、操作STP参数
华为交换机WEB操作 使用的是真机S5735,目前主流的版本都适用(V1R5~V2R1的就不在列了,版本太老了,界面完全不一样,这里调试线接的console口,电脑的网络接在ETH口) 「模拟器、工具合集」复制整段内…...
【Elasticsearch】初始化默认字段及分词
1、添加分词插件 1)在线安装 执行命令 需要指定相同的版本 bin/elasticsearch-plugin.bat install https://get.infini.cloud/elasticsearch/analysis-ik/7.17.24 2)离线安装 将安装包解压到 /plugins 目录下 安装包可以从对应的资源处下载 启动成…...
asdf-java配置
asdf list all java 无结果 asdf list all java 显示结果 No compatible versions available 解决方案 参考 执行 cp ~/.asdf/plugins/java/data/jdk-macosx-x86_64-ga.tsv $TMPDIR/asdf-java-$(whoami).cache/releases-macosx-x86_64.tsv 在此执行 asdf list all java 就可…...
2-2-18-14 QNX系统架构之 TCP/IP 网络
阅读前言 本文以QNX系统官方的文档英文原版资料为参考,翻译和逐句校对后,对QNX操作系统的相关概念进行了深度整理,旨在帮助想要了解QNX的读者及开发者可以快速阅读,而不必查看晦涩难懂的英文原文,这些文章将会作为一个…...
RabbitMQ延迟消息的实现
RabbitMQ延迟队列的实现 延迟消息是什么延迟消息的实现死信交换机代码实现 延迟消息插件 延迟消息是什么 延迟消息是将消息发送到MQ中,消费者不会立即收到消息,而是过一段时间之后才会收到消息,进行处理。在一些业务中,可以用到延…...
Docker 安装 中文版 GitLab
Docker 安装系列 安装GitLab、解决服务器内存不足问题、使用域名/IP地址访问项目 1、拉取 [rootTseng ~]# docker pull twang2218/gitlab-ce-zh:latest latest: Pulling from twang2218/gitlab-ce-zh 8ee29e426c26: Pull complete 6e83b260b73b: Pull complete e26b65fd11…...
Ubuntu22.04深度学习环境安装【Anaconda+Pycharm】
anaconda可以提供多个独立的虚拟环境,方便我们学习深度学习(比如复现论文); Pycharm编辑器可以高效的编写python代码,也是一个很不错的工具。 下面就记录下Ubuntu22.04的安装流程: 1.Anaconda安装 下载Ana…...
springboot整合canal
学习链接 Cannal项目地址 SpringBoot整合Canal实现数据同步到ElasticSearch - 原文地址 Spring Boot整合canal实现数据一致性解决方案解析-部署实战 Java:SpringBoot整合Canal实现数据同步 docker环境安装mysql、canal、elasticsearch,基于binlog利…...
8.在 Vue 3 中使用 OpenLayers 加载天地图示例(多种形式)
前言 OpenLayers 是一个强大的开源地图框架,可以轻松实现地图加载与操作。而 Vue 3 则通过 Composition API 提供了更加简洁和灵活的开发体验。本文将介绍如何在 Vue 3 中结合 OpenLayers 实现对天地图的加载,包括矢量地图、卫星地图以及中文和英文标记等…...
如何设置 Java 开发环境
如果你在这里,可能是想学习如何为 Java 开发设置环境。第一步是安装 SDK(软件开发工具包),它是一组由硬件和软件供应商提供的工具和库。 对于 Java,我们使用 JDK(Java 开发工具包)。JDK 是一组…...
MetaGPT 安装
1. 创建环境 conda create -n metagpt python3.10 && conda activate metagpt2. 可编辑方式安装 git clone --depth 1 https://github.com/geekan/MetaGPT.git cd MetaGPT pip install -e .3. 配置 metagpt --init-config运行命令,在C盘位置C:\Users\325…...
石岩湿地公园的停车场收费情况
周末石岩湿地公园停车场【967个】小车停车费封顶14元价格还行,我还记得2020年的时候湿地公园还是10元一天封顶。现在的收费情况也是可以的,尤其是周末停车比工作日停车便宜还是很得民心的哈。 车型 收费标准 小车 工作日 高峰时间8:00~20:00 首小时…...
v3账号密码登录随机图片验证码
安装插件 pnpm i identify --save图形验证码组件 <template><div class"s-canvas"><!-- 图形验证码的宽和高都来自于父组件的传值,若父组件没有传值,那么就按当前子组件的默认值进行渲染 --><canvas id"s-canvas&…...
mysql8 主从复制一直失败
问题描述: 开启同步后从服务器一直失败,报错如下: Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ANONYMOUS at source log …...
Java项目实战II基于微信小程序的消防隐患在线举报系统(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着城市化进程的加快&…...
【第二十四周】从大语言模型到多模态大模型的发展
摘要 大语言模型(Large Language Model, LLM)是指一类基于深度学习的人工智能系统,它们被设计用来理解和生成自然语言。这些模型通常是在大量的文本数据上进行训练的,通过学习文本中的模式和结构,它们能够执行各种各样…...
深入理解Java的 JIT(即时编译器)
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
数据库技术文档撰写:全方位剖析
在技术的浩瀚海洋中,一份优秀的技术文档宛如精准的航海图。它是知识传承的载体,是团队协作的桥梁,更是产品成功的幕后英雄。然而,打造这样一份出色的技术文档并非易事。你是否在为如何清晰阐释复杂技术而苦恼?是否纠结…...
设计模式之原型模式:深入浅出讲解对象克隆
~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” 原型模式概述 在我们的日常生活中,经常会遇到"复制"这样的场景。比如我们在准备文件时,常常会复印一份原件&a…...
centos 查看版本
在 CentOS 中,查看系统版本有多种方法。以下是几种常用的方法: 方法 1:使用 cat 命令查看 /etc/centos-release 文件 cat /etc/centos-release 这个文件包含了 CentOS 的版本信息。例如,输出可能是: CentOS Linux rel…...
如何本地存储中的文件路径
文章目录 1. 概念介绍2. 实现方法3. 示例代码我们在上一章回中介绍了"如何实现本地存储"相关的内容,本章回中将介绍如何实现文件存储.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在上一章回中介绍的本地存储只能存储dart语言中基本类型的数值,如果遇到…...
服务器加固
1.服务器密码复杂度 密码最小长度,密码复杂度策略 vim /etc/pam.d/system-auth --------------- #密码配置 #ucredit:大写字母个数;lcredit:小写字母个数;dcredit:数字个数;ocredit:…...
MongoDB change stream实战
什么是 Chang Stream Change Stream指数据的变化事件流,MongoDB从3.6版本开始提供订阅数据变更的功能。 Change Stream 是 MongoDB 用于实现变更追踪的解决方案,类似于关系数据库的触发器,但原理不完全相同: Change Stream 的实…...