计算机视觉——引导APSF和梯度自适应卷积增强夜间雾霾图像的可见性算法与模型部署(C++/python)

摘要

在夜间雾霾场景中,可见性经常受到低光照、强烈光晕、光散射以及多色光源等多种因素的影响而降低。现有的夜间除雾方法常常难以处理光晕或低光照条件,导致视觉效果过暗或光晕效应无法被有效抑制。本文通过抑制光晕和增强低光区域来提升单张夜间雾霾图像的可见性。为了处理光晕效应,提出了一个光源感知网络来检测夜间图像的光源,并采用APSF(大气点扩散函数)引导的光晕渲染。该算法的框架在渲染图像上进行训练,实现了光晕的抑制。此外,还利用梯度自适应卷积来捕捉雾霾场景中的边缘和纹理。通过提取的边缘和纹理,在不丢失重要结构细节的情况下增强了场景的对比度。为了提升低光强度,算法的网络学习了一个注意力图,然后通过伽马校正进行调整。这个注意力图在低光区域有较高的值,在雾霾和光晕区域有较低的值。通过在真实的夜间雾霾图像上进行广泛的评估,算法的方法证明了其有效性。算法的实验表明,算法的方法在GTA5夜间雾霾数据集上达到了30.38dB的PSNR,比最先进的方法提高了13%。
在这里插入图片描述
论文地址:https://arxiv.org/pdf/2308.01738.pdf
源码地址:https://github.com/jinyeying/nighttime_dehaze
推理代码:https://download.csdn.net/download/matt45m/89110270

1. 论文贡献

夜间雾霾或雾图像通常遭受可见性降低的问题。除了夜间图像常见的问题,如低光、噪声、不均匀的光分布和多种光颜色外,夜间雾霾或雾图像还表现出强烈的光晕和颗粒遮蔽效应。尽管存在这些挑战,解决这些问题对于许多应用来说是至关重要的。这些应用包括自动驾驶汽车、自主无人机和监控等,因为夜间雾霾是自然现象,频繁且不可避免。日间雾霾去除方法无法处理夜间雾霾所独有的挑战。传统的非学习型日间除雾方法依赖于雾霾成像模型,但这个模型在夜间不适用,因为存在人造光源和照明颜色的复杂性。因此,与日间不同,算法不能假设大气光颜色是均匀的。此外,这个日间雾霾模型没有考虑到光晕的视觉表现。现有的夜间除雾方法产生了不令人满意的暗视觉或未缓解的光晕效应。非深度学习方法引入了对光晕的某些约束,但它们由于光晕和背景层的不精确分解或使用暗通道先验进行除雾,导致结果暗淡。基于学习的方法面临的主要挑战是缺乏真实世界的成对训练数据,因为获取包含光晕和多光源的夜间雾霾场景的清晰真实图像是不切实际的。算法的方法通过抑制光晕和增强低光区域来增强单张夜间雾霾图像的可见性。算法的光晕抑制包括两个主要部分:APSF引导的光晕渲染和梯度自适应卷积。算法的光晕渲染方法使用APSF引导的方法为各种光源创建光晕效应。算法采用光源感知网络来检测图像中光源的位置,然后对这些光源应用APSF引导的光晕渲染。算法的框架从渲染的图像中学习,因此可以抑制不同光源中的光晕效应。算法的梯度自适应卷积从雾霾图像中捕捉边缘和纹理。具体来说,通过计算相邻像素之间的像素差异来获取边缘,同时使用双边核来提取图像的纹理。边缘和纹理然后被输入到算法的框架中以增强图像细节。为了增强非光源区域的可见性,算法引入了一个新颖的注意力引导增强模块。雾霾区域的权重较低,而暗区域的权重较高。总体而言,算法的贡献可以总结如下:

  • 据算法所知,算法的方法是基于学习的网络,首次一站式处理夜间光晕和低光条件。
  • 算法提出了一个光源感知网络和APSF引导的光晕渲染,以模拟来自不同光源的光晕效应。通过从APSF引导的光晕渲染数据中学习,算法的框架有效地抑制了真实世界雾霾图像中的光晕效应。
  • 由于夜间图像对比度较低,算法采用梯度自适应卷积进行边缘增强和双边核进行纹理增强。

2. 相关工作

早期的除雾方法利用多张图像或先验来估计大气光和传输。随着深度学习的出现,提出了许多网络来估计传输图或端到端输出清晰图像。最近,已经开发了全监督、半监督、零样本和无监督方法。然而,这些方法在夜间雾霾方面遇到了困难,因为它们面临非均匀、多色的人造光和缺乏干净的地面真实数据用于训练。基于优化的夜间除雾方法遵循大气散射模型、新的成像模型等。Pei和Lee将雾霾夜间图像的空气光颜色转移到日间,并使用DCP进行除雾。Ancuti等人引入了一种基于融合的方法和拉普拉斯金字塔分解来估计局部空气光。Zhang等人使用照明补偿、颜色校正和DCP进行除雾。Zhang等人提出了最大反射率先验(MRP)。Tang等人使用Retinex理论和泰勒级数展开。Liu等人使用正则化约束。Wang等人提出了灰色雾霾线先验和变分模型。现有的夜间除雾方法依赖于基于局部补丁的大气光估计,假设小补丁内的均匀性。因此,它们的性能对补丁大小敏感。这些方法在优化方面不自适应且耗时。与它们不同,算法的方法是基于学习的,更高效、实用和快速。最近,提出了基于学习的夜间除雾方法。Zhang等人通过使用合成的夜间雾霾图像进行全监督学习来训练网络。然而,这种方法无法有效抑制光晕,因为合成数据集没有考虑到光晕效应。Yan等人提出了一种半监督方法,使用高低频分解和灰度网络。然而,他们的结果往往较暗,丢失了细节。这是因为基于粗略频率的分解方法难以有效分离光晕,导致场景的亮度和可见性降低。DeGlow-DeHaze网络估计传输,然后是DehazeNet。然而,由DeHaze网络估计的大气光是从最亮的区域获得的,并被假定为全局均匀的,这在夜间是无效的。与它们相比,算法的结果可以抑制光晕,同时增强低光区域。点光源的光晕,称为大气点扩散函数(APSF),已经在各种工作中进行了研究。Narasimhan和Nayar首先引入APSF,并为多次散射光开发了一个基于物理的模型。Metari等人对APSF核进行了建模。Li等人使用层分离方法从输入图像中分解光晕,通过其平滑属性约束光晕,并使用DCP进行除雾。Park等人和Yang等人遵循夜间雾霾模型,并使用加权熵和超像素来估计大气光和传输图。然而,这些方法在去除光晕后,简单地将日间除雾应用于夜间除雾,导致他们的成果在可见性和颜色上存在失真。以前的工作主要集中在基于优化的方法上,而算法的作品是第一个将APSF先验纳入夜间学习网络的。

3. 提出的方法

图2展示了算法的流程,包括光晕抑制和低光增强。算法的光晕抑制有两个部分:deglowing网络和glow生成器。算法的deglowing网络将真实的雾霾图像转换为清晰的图像。算法使用一个鉴别器来判断生成的清晰图像和参考图像是真实的还是伪造的。算法的创新点在于这三个想法:APSF引导的光晕渲染、梯度自适应卷积和注意力引导增强。
在这里插入图片描述

3.1. 光源感知网络

夜间场景经常包含活动光源,如路灯、车头灯和建筑灯光。这些光源可以在雾霾夜间场景中造成强烈的光晕。夜间场景中的雾霾和光晕的出现可以建模为:
在这里插入图片描述

3.2 APSF引导的夜间光晕渲染

在获得光源图后,算法提出了一种基于APSF的方法来渲染夜间光晕效果。首先,算法计算APSF函数,并将其转换为2D格式,这使算法能够在光源图上执行2D卷积,从而产生光晕图像。然后,算法结合清晰和光晕图像来渲染最终图像中的逼真光晕效果。
在这里插入图片描述

3.3. 梯度自适应卷积

夜间雾霾图像通常对比度较低,缺失纹理,照明不均匀。普通的2D卷积可能不足以增强夜间雾霾图像。因此,算法使用梯度自适应卷积来捕捉雾霾图像中的边缘和纹理。
在这里插入图片描述
在这里插入图片描述

3.4. 网络和其他损失

算法的光晕抑制是基于CycleGAN网络。算法使用deglowing网络,它与鉴别器耦合。为了确保重建一致性,算法有另一个雾霾生成器与它的鉴别器耦合。算法的雾霾生成器将输出图像转换为重构的清晰图像。通过施加循环一致性约束,算法的deglowing网络学习去除真实世界的光晕。由于循环一致性约束,算法被允许使用未配对的数据来优化算法的deglowing网络,从而减少合成数据集和真实世界光晕图像之间的领域差距。除了自监督的光源一致性损失、梯度损失和双边核损失外,算法按照[102]的方法,使用其他损失来训练算法的网络。它们是对抗损失、循环一致性损失、身份损失,权重分别为{1, 10, 10}。

3.5. 低光区域增强

夜间除雾经常导致暗结果,这是由于低光条件造成的。为了解决这个问题,算法引入了一个低光增强模块来提高对象区域的可见性。算法的方法包括生成一个注意力图,突出这些区域,使算法的方法专注于增强它们的强度。然后,算法应用一个低光图像增强技术来增强区域,即使在场景光照较低的情况下。
在这里插入图片描述

4. 实验结果

4.1. 数据集

GTA5是一个由GTA5游戏引擎生成的合成夜间雾霾数据集。它包括864对配对图像,其中787对图像用作训练集,其余图像用作测试集。RealNightHaze是一个真实世界的夜间除雾数据集。它包括440张夜间雾霾图像,其中150张图像来自[98],200张图像来自[87],其余图像从互联网收集。

4.2. 在合成数据集上的比较

在本节中,将方法与现有的最先进方法进行比较,包括Yan [87]、Zhang [97]、Li [45]、Ancuti [1]、Zhang [96]、Yu [94]、Zhang [98]、Liu [51]和Wang [77]。主要区别的总结如表2所示。实验结果如表1所示。可以看出,该算法的方法实现了显著的性能提升。采用两个广泛使用的指标PSNR和SSIM。算法的方法达到了30.38dB的PSNR和0.904的SSIM,比Yan的方法[87]分别提高了14%和5%。

在这里插入图片描述

4.3. 在真实世界数据集上的比较

下图显示了不同夜间除雾方法在真实夜间雾霾场景上的定性结果。该算法显著增强了夜间雾霾图像的可见性。具体来说,大多数最先进的方法无法充分去除雾霾,因为它们的方法受到合成数据集和真实世界图像之间领域差距的影响。Yan等人提出了一种半监督框架来去除夜间雾效,可以去除大部分雾霾效果。然而,他们的方法过度抑制了雾霾图像,因此他们的输出结果变得太暗。相比之下,该算法处理了光晕和低光条件。如图9(b)所示,该算法不仅去除了输入图像的雾霾,还增强了光线。例如,树木和建筑物的细节是清晰的。这是因为该算法通过利用APSF来模拟光晕渲染,因此可以有效去除真实世界夜间雾霾图像中的雾霾或光晕。此外,该算法提出了一个梯度自适应卷积来捕捉雾霾图像中的边缘和纹理。捕获的边缘和纹理然后被用来增强图像的细节,从而实现更好的性能。此外,该算法引入了一个注意力图来增强低光区域。因此,该算法的方法实现了显著的性能提升。该算法还对真实世界的夜间雾霾图像进行了用户研究。实验结果如表3所示。可以看出,该算法的方法在所有方面都获得了最高分。
在这里插入图片描述

4.4. 消融研究

该算法的框架包括三个核心部分:APSF引导的光晕渲染、梯度自适应卷积和注意力引导增强。为了证明每个部分的有效性,该算法在真实世界的夜间雾霾图像上进行了消融研究。APSF引导的光晕渲染如图5(底部)所示,该算法可以看到该算法的方法可以准确地检测到光源的位置(中间)。此外,渲染结果有效地模拟了光晕效果。梯度自适应卷积如图6所示,显示了梯度边缘图(中间)和纹理(底部)的结果。图11(b)和(c)显示了没有梯度损失L𝐴?和没有核损失L𝐴?的结果,(d)是带有梯度捕获卷积的。该算法可以看到该算法的梯度捕获卷积可以有效地保留雾霾图像的结构细节。通过充分利用梯度图和纹理,该算法的框架生成了更清晰的结果。低光增强如图10所示,显示了从(b)到(d)的低光增强结果。

5.模型部署

官方提供了预训练的模型,可以拿官方的模型转onnx之后用onnxruntime进行推理,这里使用的onnxruntime版本是1.15 。

C++代码推理:

#include "NighttimeDehaze.h"NighttimeDehaze::NighttimeDehaze(string model_path)
{std::wstring widestr = std::wstring(model_path.begin(), model_path.end());  windows写法///OrtStatus* status = OrtSessionOptionsAppendExecutionProvider_CUDA(sessionOptions, 0);   ///如果使用cuda加速,需要取消注释sessionOptions.SetGraphOptimizationLevel(ORT_ENABLE_BASIC);ort_session = new Session(env, widestr.c_str(), sessionOptions); windows写法ort_session = new Session(env, model_path.c_str(), sessionOptions); linux写法size_t numInputNodes = ort_session->GetInputCount();size_t numOutputNodes = ort_session->GetOutputCount();AllocatorWithDefaultOptions allocator;for (int i = 0; i < numInputNodes; i++){input_names.push_back(ort_session->GetInputName(i, allocator));Ort::TypeInfo input_type_info = ort_session->GetInputTypeInfo(i);auto input_tensor_info = input_type_info.GetTensorTypeAndShapeInfo();auto input_dims = input_tensor_info.GetShape();input_node_dims.push_back(input_dims);}for (int i = 0; i < numOutputNodes; i++){output_names.push_back(ort_session->GetOutputName(i, allocator));Ort::TypeInfo output_type_info = ort_session->GetOutputTypeInfo(i);auto output_tensor_info = output_type_info.GetTensorTypeAndShapeInfo();auto output_dims = output_tensor_info.GetShape();output_node_dims.push_back(output_dims);}this->inpHeight = input_node_dims[0][2]; /// n, h, w, cthis->inpWidth = input_node_dims[0][3];
}void NighttimeDehaze::preprocess(Mat img)
{Mat rgbimg;cvtColor(img, rgbimg, COLOR_BGR2RGB);resize(rgbimg, rgbimg, cv::Size(this->inpWidth, this->inpHeight));vector<cv::Mat> rgbChannels(3);split(rgbimg, rgbChannels);for (int c = 0; c < 3; c++){rgbChannels[c].convertTo(rgbChannels[c], CV_32FC1, 1.0 / (255.0 * 0.5), -1.0);}const int image_area = this->inpHeight * this->inpWidth;this->input_image.resize(3 * image_area);size_t single_chn_size = image_area * sizeof(float);memcpy(this->input_image.data(), (float*)rgbChannels[0].data, single_chn_size);memcpy(this->input_image.data() + image_area, (float*)rgbChannels[1].data, single_chn_size);memcpy(this->input_image.data() + image_area * 2, (float*)rgbChannels[2].data, single_chn_size);
}Mat NighttimeDehaze::predict(Mat srcimg)
{const int srch = srcimg.rows;const int srcw = srcimg.cols;this->preprocess(srcimg);std::vector<int64_t> input_img_shape = { 1, 3, this->inpHeight, this->inpWidth };Value input_tensor_ = Value::CreateTensor<float>(memory_info_handler, this->input_image.data(), this->input_image.size(), input_img_shape.data(), input_img_shape.size());Ort::RunOptions runOptions;vector<Value> ort_outputs = this->ort_session->Run(runOptions, this->input_names.data(), &input_tensor_, 1, this->output_names.data(), output_names.size());/nighttime_dehaze_realnight_Nx3xHxW.onnx和nighttime_dehaze_realnight_1x3xHxW.onnx在run函数这里会出错float* pdata = ort_outputs[0].GetTensorMutableData<float>();std::vector<int64_t> outs_shape = ort_outputs[0].GetTensorTypeAndShapeInfo().GetShape();const int out_h = outs_shape[2];const int out_w = outs_shape[3];const int channel_step = out_h * out_w;Mat rmat(out_h, out_w, CV_32FC1, pdata);Mat gmat(out_h, out_w, CV_32FC1, pdata + channel_step);Mat bmat(out_h, out_w, CV_32FC1, pdata + 2 * channel_step);vector<Mat> channel_mats(3);channel_mats[0] = bmat;channel_mats[1] = gmat;channel_mats[2] = rmat;Mat dstimg;merge(channel_mats, dstimg);resize(dstimg, dstimg, cv::Size(srcw, srch));dstimg.convertTo(dstimg, CV_8UC3);return dstimg;
}

python部署:

import argparse
import cv2
import onnxruntime
import numpy as npclass nighttime_dehaze:def __init__(self, modelpath):# Initialize modelself.onnx_session = onnxruntime.InferenceSession(modelpath)self.input_name = self.onnx_session.get_inputs()[0].name_, _, self.input_height, self.input_width = self.onnx_session.get_inputs()[0].shapedef detect(self, image):input_image = cv2.resize(cv2.cvtColor(image, cv2.COLOR_BGR2RGB), dsize=(self.input_width, self.input_height))input_image = (input_image.astype(np.float32) / 255.0 - 0.5) / 0.5input_image = input_image.transpose(2, 0, 1)input_image = np.expand_dims(input_image, axis=0)result = self.onnx_session.run(None, {self.input_name: input_image})###nighttime_dehaze_realnight_Nx3xHxW.onnx和nighttime_dehaze_realnight_1x3xHxW.onnx在run函数这里会出错# Post process:squeeze, RGB->BGR, Transpose, uint8 castoutput_image = np.squeeze(result[0])output_image = output_image.transpose(1, 2, 0)output_image = cv2.resize(output_image, (image.shape[1], image.shape[0]))output_image = cv2.cvtColor(output_image.astype(np.uint8), cv2.COLOR_RGB2BGR)return output_imageif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--imgpath', type=str,default='n1.jpg', help="image path")parser.add_argument('--modelpath', type=str,default='models/nighttime_dehaze_720x1280.onnx', help="onnx path")args = parser.parse_args()mynet = nighttime_dehaze(args.modelpath)srcimg = cv2.imread(args.imgpath)dstimg = mynet.detect(srcimg)if srcimg.shape[0] > srcimg.shape[1]:boundimg = np.zeros((10, srcimg.shape[1], 3), dtype=srcimg.dtype)+255  ###中间分开原图和结果combined_img = np.vstack([srcimg, boundimg, dstimg])else:boundimg = np.zeros((srcimg.shape[0], 10, 3), dtype=srcimg.dtype)+255combined_img = np.hstack([srcimg, boundimg, dstimg])winName = 'Deep Learning in onnxruntime'cv2.namedWindow(winName, 0)cv2.imshow(winName, combined_img)  ###原图和结果图也可以分开窗口显示cv2.waitKey(0)cv2.destroyAllWindows()

在这里插入图片描述

6. 结论

在本文中,该算法提出了一种新颖的夜间可见性增强框架,同时解决了光晕和低光条件问题。该算法的框架包括三个核心思想:APSF引导的光晕渲染、梯度自适应卷积和注意力引导的低光增强。该算法的框架通过从APSF引导的光晕渲染数据中学习来抑制光晕效应。由于该算法的APSF引导的光晕渲染,该算法允许使用半监督方法来优化该算法的网络,从而处理不同光源中的光晕效应。该算法提出的梯度自适应卷积用于从夜间雾霾图像中捕捉边缘或纹理。得益于捕获的边缘或纹理,该算法的框架有效地保留了结构细节。该算法的低光区域增强通过注意力图提高了暗或过度抑制区域的强度。定量和定性实验表明,该算法的方法实现了显著的性能提升。此外,消融研究证明了每个核心思想的有效性。处理具有多样化领域偏移的场景[99]将成为该算法未来研究的焦点。

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

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

相关文章

LINUX系统触摸工业显示器芯片应用方案--Model4(简称M4芯片)

背景介绍&#xff1a; 触摸工业显示器传统的还是以WINDOWS为主&#xff0c;但近年来&#xff0c;安卓紧随其后&#xff0c;但一直市场应用情况不够理想&#xff0c;反而是LINUX系统的触摸工业显示器大受追捧呢&#xff1f; 触摸工业显示器传统是以Windows系统为主&#xff0c…

计算机视觉异常检测——PatchCore面向全召回率的工业异常检测

1. 概述 异常检测问题在工业图像数据分析中扮演着至关重要的角色&#xff0c;其目的是从大量正常数据中识别出异常行为或模式。这一任务的挑战在于&#xff0c;正常数据的样本相对容易获取&#xff0c;而异常情况却因其稀有性和多样性而难以收集。为了解决这一问题&#xff0c…

Django之五种中间件定义类型—process_request、process_view、process_response.......

目录 1. 前言 2. 基础中间件 3. 如何自定义中间件 4. 五种自定义中间件类型 4.1 process_request 4.2 process_view 4.3 process_response 4.4 process_exception 4.5 process_template_response 5. 最后 1. 前言 哈喽&#xff0c;大家好&#xff0c;我是小K,今天咋们…

51单片机学习笔记15 LCD12864(带字库)显示屏使用

51单片机学习笔记15 LCD12864&#xff08;带字库&#xff09;显示屏使用 一、LCD12864简介二、管脚定义三、命令1. 功能能设定2. 清屏指令&#xff08;0x01&#xff09;3. 地址归位4. 进入设定点5. 显示状态开关6. 设定CGRAM地址7. 设定DDRAM地址8. 写资料到RAM9. 读出RAM 四、…

【目标检测】-入门知识

1、回归与分类问题 回归问题是指给定输入变量(特征)和一个连续的输出变量(标签),建立一个函数来预测输出变量的值。换句话说,回归问题的目标是预测一个连续的输出值,例如预测房价、股票价格、销售额等。回归问题通常使用回归分析技术,例如线性回归、多项式回归、决策树…

嵌入式学习48-单片机1

51单片机—————8位单片机 裸机驱动 无系统 linux驱动 有系统 驱动-----反映硬件变化 MCU 微控器 MPU CPU GPU 图像处理 IDE 集成开发环境 peripheral 外设 SOC&#xff1a; system on chip P0&#xff1a;8bit——8个引脚 …

【架构师】-- 浅淡架构的分类

什么是架构&#xff1f; 说到架构&#xff0c;这个概念没有很清晰的范围划分&#xff0c;也没有一个标准的定义&#xff0c;每个人的理解可能都不一样。 架构在百度百科中是这样定义的&#xff1a;架构&#xff0c;又名软件架构&#xff0c;是有关软件整体结构与组件的抽象描…

vue快速入门(十二)v-key索引标志

注释很详细&#xff0c;直接上代码 上一篇 新增内容 v-key的使用场景数组筛选器的使用 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…

(源码+部署+讲解)基于Spring Boot + Vue编程学习平台的设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31f;…

基于PSO优化的CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 GRU网络 4.3 注意力机制&#xff08;Attention&#xff09; 5.算法完整程序工程 1.算法运行效果图预览 优化前 优化…

番茄 abogus rpc调用

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章…

STM32+ESP8266水墨屏天气时钟:文字取模和图片取模教程

项目背景 本次的水墨屏幕项目需要显示一些图片和文字&#xff0c;所以需要对图片和文字进行取模。 取模步骤 1.打开取模软件 2.选择图形模式 3.设置字模选项 注意&#xff1a;本次项目采用的是水墨屏&#xff0c;并且是局部刷新的代码&#xff0c;所以设置字模选项可能有点…

人工智能——深度学习

4. 深度学习 4.1. 概念 深度学习是一种机器学习的分支&#xff0c;旨在通过构建和训练多层神经网络模型来实现数据的高级特征表达和复杂模式识别。与传统机器学习算法相比&#xff0c;深度学习具有以下特点&#xff1a; 多层表示学习&#xff1a;深度学习使用深层神经网络&a…

linux 迁移home目录以及修改conda中pip的目录,修改pip安装路径

1&#xff09;sudo rsync -av /home/lrf /data/home/lrf 将/home目录下的文件进行复制&#xff08;假设机械硬盘挂载在/data目录下&#xff09;** 2&#xff09;usermod -d /data/home/lrf -m lrf 修改用户$HOME变量** 3&#xff09;vi /etc/passwd 查看对应用户的$HOME变量是…

环境监测站升级选择ARM网关驱动精准数据采集

物联网技术的深入发展和环保需求的不断攀升&#xff0c;API调用网关在环境监测领域的应用正成为科技创新的重要推手。其中&#xff0c;集成了API调用功能的ARM工控机/网关&#xff0c;以其出色的计算性能、节能特性及高度稳定性&#xff0c;成功搭建起连接物理世界与数字世界的…

hive管理之ctl方式

hive管理之ctl方式 hivehive --service clictl命令行的命令 #清屏 Ctrl L #或者 &#xff01; clear #查看数据仓库中的表 show tabls; #查看数据仓库中的内置函数 show functions;#查看表的结构 desc表名 #查看hdfs上的文件 dfs -ls 目录 #执行操作系统的命令 &#xff01;命令…

【堡垒机】堡垒机的介绍

目前&#xff0c;常用的堡垒机有收费和开源两类。 收费的有行云管家、纽盾堡垒机&#xff1b; 开源的有jumpserver&#xff1b; 这几种各有各的优缺点&#xff0c;如何选择&#xff0c;大家可以根据实际场景来判断 什么是堡垒机 堡垒机&#xff0c;即在一个特定的网络环境下&…

计算机网络 网络命令的使用

一、实验内容 1.PING网络命令的实验 ping 127.0.0.1(内部回环测试)ping 本主机的IP地址ping 默认网关地址ping远端目的地的IP地址ping localhostping域名 2.其他网络命令实验 命令用途ipconfig/all 显示当前系统网络配置&#xff0c;包括IP地址、子网掩码、默认网关等trace…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之七 简单指定视频某片段快放效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之七 简单指定视频某片段快放效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之七 简单指定视频某片段快放效果 一、简单介绍 二、简单指定视频某片段快放效果实现原理…

回归预测 | Matlab实现SSA-GRNN麻雀算法优化广义回归神经网络多变量回归预测(含优化前后预测可视化)

回归预测 | Matlab实现SSA-GRNN麻雀算法优化广义回归神经网络多变量回归预测(含优化前后预测可视化) 目录 回归预测 | Matlab实现SSA-GRNN麻雀算法优化广义回归神经网络多变量回归预测(含优化前后预测可视化)预测效果基本介绍程序设计参考资料预测效果