RED-Net: 基于循环编解码结构的大规模多视角立体重建技术解析

循环编解码结构在3D重建中的妙用:RED-Net与传统MVS方法对比实验 本文探讨了循环编解码结构(Recurrent Encoder-Decoder)在3D重建中的创新应用,通过RED-Net与传统多视角立体视觉(MVS)方法的对比实验,展示了其在几何精度和显存优化方面的显著优势。实验数据显示,RED-Net在WHU数据集上的MAE降至0.41m,显存占用仅为5.8GB,为数字孪生城市等大规模3D重建项目提供了高效解决方案。 阅读详情

1. 从“看”到“建”:多视角立体重建到底在做什么?

想象一下,你手里有一堆从不同角度拍摄同一个城市或地标的航拍照片。单看每一张,你只能得到一个平面的视角。但你的大脑很神奇,它能自动把这些照片“拼”起来,在脑海里形成一个立体的、有深度的三维模型。多视角立体重建(Multi-view Stereo, MVS)技术,就是让计算机学会这个“脑补”三维世界的过程。

这项技术是计算机视觉领域的核心挑战之一,目标就是从一组有重叠区域的二维图片中,恢复出场景精确的三维几何结构。它在数字城市、文化遗产保护、自动驾驶地图构建等领域有着巨大的应用价值。传统的MVS方法依赖复杂的几何和优化算法,计算量大,对噪声和光照变化也比较敏感。近年来,随着深度学习的发展,基于神经网络的MVS方法开始崭露头角,它们能从数据中直接学习匹配和重建的规律,效果和效率都提升了不少。

然而,当场景从一个小物体变成一个庞大的城市甚至地球表面时,问题就变得棘手了。大规模意味着海量的图像数据和高分辨率的需求,多视角意味着要处理几十甚至上百张图片之间的复杂关系。这就像让你用成千上万张碎片拼一个超大型的立体拼图,不仅碎片多,每一片还都很大。现有的很多深度学习方法,要么“内存吃不消”(GPU显存爆炸),要么“看得不够细”(输出分辨率低),很难胜任这个任务。

正是在这个背景下,武汉大学季顺平老师团队在CVPR 2020上提出的 RED-Net 网络,为我们提供了一个非常漂亮的解决方案。它最吸引我的地方,就是其核心的 循环编解码结构。这个结构听起来有点玄乎,但你可以把它想象成一个拥有“渐进式理解”和“多尺度记忆”能力的大脑。它不是一次性处理所有信息,而是一层一层、由粗到精地反复“咀嚼”图像信息,同时还能记住之前步骤里总结出的有用特征。这种设计,让RED-Net在保持高精度的同时,极大地降低了对计算资源的需求,真正让大规模、高精度的三维重建变得触手可及。接下来,我就带你深入这个“大脑”,看看它是怎么工作的。

2. 理解RED-Net的核心:循环编解码结构如何“降维打击”

要搞懂RED-Net的厉害之处,我们得先看看它要解决什么问题,以及前辈们是怎么做的。在MVS任务中,一个关键步骤是构建“代价体”。简单来说,对于参考图像的每一个像素,我们猜测它可能处于一系列不同的深度上,然后去其他视角的图片里找对应点,计算匹配的代价(相似度越低,代价越高)。所有像素、所有深度猜测的代价,就形成了一个三维的“代价体”。

早期的深度学习方法如MVSNet,直接用3D卷积神经网络去正则化(可以理解为优化和平滑)这个代价体。这就像用一个大网去过滤整个三维数据块,效果不错,但问题是这个“网”太耗内存了,尤其是当图像分辨率高、深度猜测数量多的时候,GPU根本扛不住。后来,R-MVSNet想了个聪明的办法,它不用3D卷积,而是用循环神经网络(具体是GRU),沿着深度方向一个一个平面地去处理代价。这就像你不再需要同时展开整个拼图,而是按顺序一行一行地拼,内存压力骤降。

RED-Net继承了R-MVSNet“顺序处理”的思想,但在正则化这个核心环节上,进行了一次关键的架构升级:用循环编解码结构(Recurrent Encoder-Decoder)替代了简单的GRU堆叠。这步升级,是它实现“降维打击”的关键。

2.1 编解码结构:从“单层思考”到“多尺度协作”

一个标准的编码器-解码器结构(比如U-Net),在图像分割中很常见。编码器负责下采样,提取越来越抽象、感受野越来越大的特征;解码器负责上采样,结合编码器各层的特征,逐步恢复细节和空间位置信息。这个过程是“多尺度”的,既能把握全局轮廓,又能抠出局部细节。

RED-Net巧妙地将这个编解码过程“循环化”了。它不是只做一次编解码,而是针对代价体的每一个深度切片(一个二维的代价图),都运行一遍这个编解码流程。但关键在于,每一次运行(处理当前深度切片)时,编解码器中的循环单元(GRU)都会接收并更新自己的“记忆状态”。这个状态,包含了之前处理过的所有深度切片所积累的上下文信息。

我们可以打个比方:假设你要阅读一本非常复杂的技术手册(深度方向)来理解一个设备,每一页(一个深度切片)都有复杂的图表(空间信息)。

  • 简单GRU堆叠:就像你有一个记忆力不错的助手,他读每一页时,只能记住前一页的大概内容,然后基于此理解当前页。
  • RED-Net的循环编解码:则像你有一个专家团队。团队里有负责看整体架构的架构师(深层编码特征),有负责看模块细节的工程师(浅层编码特征)。每读新的一页,这个团队都会开会(GRU状态更新),架构师会结合之前所有页的架构理解来审视当前页的架构,工程师则会结合之前所有页的细节来审视当前页的细节。然后,他们各自更新的理解(状态)会传递给解码器的对应成员,共同输出对这一页最精准的解读(正则化后的代价图)。

这种结构带来的好处是显而易见的:

  1. 更强的特征提取能力:编解码结构本身就能捕获多尺度上下文信息,比单一尺度的GRU感受野更大,对复杂结构和边缘的处理更精准。
  2. 更高效的信息流:深度方向的信息通过GRU状态在“团队”间循环传递;空间方向的信息则在编解码器的跳跃连接中高效融合。形成了“空间-深度”双向优化的信息流。
  3. 参数效率更高:相比于堆叠多个大型3D卷积层,循环编解码结构通过权重共享(同一套编解码器处理所有深度切片)和精巧的循环设计,用更少的参数实现了更强大的正则化能力。

2.2 工作流程拆解:一步步看RED-Net如何重建

让我们结合论文中的图示,把RED-Net的完整工作流程串起来看:

  1. 2D特征提取:输入N张多视角图像(比如3张或5张)。首先,用一个共享权重的2D卷积神经网络(一个轻量化的特征提取器)分别对每张图像进行特征提取。这一步的目的是把原始的RGB像素信息,转换成更能表征图像内容(如边缘、纹理)的抽象特征图。输出特征图尺寸是输入图像的一半。
  2. 构建代价体:采用“平面扫描法”。假设一个参考图像,我们为它假设一系列不同深度的平面。对于每一个假设的深度平面,利用相机参数,将其他视角图像的特征图“投影”到这个平面上,与参考图像的特征图进行差异计算(常用方差操作)。这样,每一个深度假设d,都生成一张二维的“代价图”C_d,表示在该深度下,各像素的匹配代价。所有D个深度假设的代价图堆叠起来,就形成了初始的3D代价体。
  3. 循环编解码正则化(核心):现在,我们有了D张代价图。RED-Net的核心模块开始工作。它按顺序处理这些图,从d=1到d=D。
    • 对于当前处理的代价图 C_i,将其送入一个编码器。编码器由多个卷积和下采样层组成,逐步提取多尺度特征(例如,得到1倍、1/2、1/4、1/8尺度的特征)。
    • 关键来了:在每个尺度上,都有一个卷积GRU单元。这个GRU单元有一个“隐藏状态”,它记住了之前所有深度切片在该尺度上汇总的上下文信息。当处理C_i时,GRU会结合当前输入的特征和它之前的状态,更新自己的状态,并输出正则化后的特征。
    • 然后,解码器开始上采样,逐步恢复分辨率。在上采样的每一步,解码器不仅会接收来自上一层的特征,还会通过“跳跃连接”直接融合编码器对应尺度的、已经过当前GRU正则化的特征。这保证了细节不丢失。
    • 解码器的最终输出,是一张经过深度上下文信息充分正则化后的、新的代价图。
  4. 深度估计与损失计算:将所有D个正则化后的代价图堆叠,得到优化后的代价体。沿着深度方向对每个像素使用softmax操作,将代价转换为概率——即该像素属于每个深度的可能性。取概率最大的深度作为该像素的估计深度,或者用期望值计算,就能得到最终的深度图。训练时,用预测深度与真实深度图计算损失(如交叉熵损失),反向传播优化网络所有参数。

这个过程完全是端到端的,从输入多张图片,直接输出高分辨率的深度图,优雅而高效。

3. 为什么RED-Net适合大规模重建?深入优势分析

纸上谈兵终觉浅,RED-Net在实际的大规模场景重建中表现如何?论文通过详实的实验给出了答案。我们可以从几个维度来剖析它的优势,这些优势共同构成了它攻克大规模重建难题的基石。

3.1 内存效率:告别“显存杀手”的噩梦

对于大规模重建,高分辨率图像是必须的。一张典型的航拍图可能达到5000x5000像素以上。传统的基于3D卷积的方法(如MVSNet)需要将整个代价体(宽度 x 高度 x 深度通道 x 特征通道)塞进显存,这几乎是一个天文数字,直接限制了可处理的图像分辨率和深度采样数。

RED-Net的循环处理机制,从根本上改变了这个游戏规则。它不需要在内存中同时保存整个代价体进行3D卷积。在任意时刻,它只需要处理一个深度切片(2D代价图)以及循环单元的状态。状态的大小是固定的,与图像分辨率成比例,但远小于整个代价体。这使得RED-Net的GPU内存占用与深度采样数D几乎无关。

我们来看论文中的一组对比数据(在TITAN RTX 24GB显卡上):

方法输入尺寸深度样本数DGPU内存占用输出深度图分辨率
MVSNet512x64025610.5 GB原始尺寸的1/4
R-MVSNet512x6402565.1 GB原始尺寸的1/4
RED-Net512x640256约 2.5 GB原始全分辨率
RED-Net7040x7040128< 24 GB原始全分辨率

可以看到,RED-Net的内存占用仅为R-MVSNet的一半左右。更惊人的是,它能够以全分辨率输出深度图,而R-MVSNet只能输出1/4分辨率。这意味着对于同样大小的输入,RED-Net输出的结果信息量是前者的16倍!正是这种高效的内存利用,使得RED-Net能够处理7040x7040这样的超大规模图像,这是传统深度学习方法难以企及的。

3.2 精度与细节:全分辨率输出的威力

输出分辨率低,是很多MVS方法为了节省内存和计算量做出的妥协。但这对大规模重建,尤其是城市重建,是致命的。低分辨率深度图意味着建筑物边缘模糊、细节丢失,生成的三角网格模型会显得很“肉”,缺乏锐利的特征。

RED-Net的循环编解码结构,使其能够在正则化过程中保持特征图的空间细节。编码器的下采样是为了扩大感受野、理解全局结构,而解码器的上采样和跳跃连接,则精准地将这些全局信息与编码器保留的局部细节融合。最终,网络输出的是与输入参考图像同分辨率的深度图。

在WHU数据集上的定量实验表明,RED-Net在平均绝对误差(MAE)、误差在0.6米内的像素百分比、误差在3个深度间隔内的像素百分比等多个指标上,均显著优于MVSNet、R-MVSNet以及传统的COLMAP和商业软件SURF。特别是在反映精细程度的指标上优势明显。定性结果(论文中的图5)更是一目了然:RED-Net生成的深度图最干净、最清晰,与真实值最为接近,建筑物轮廓锐利,道路平整,噪声极少。

3.3 泛化能力:一个模型,多处适用

一个模型只在自家数据集上表现好是没用的,真正的考验是泛化到未知场景。论文做了一个非常有力的实验:将在WHU数据集(城镇场景)上训练好的RED-Net模型,不做任何微调,直接应用到另一个真实的城市航拍数据集München(大都市场景)上。

结果令人振奋:RED-Net依然取得了最佳性能。相比之下,在室内物体数据集DTU上训练的模型,直接用到航拍数据上则效果很差。这证明了两点:

  1. WHU数据集的质量和代表性:它很好地模拟了真实航拍数据的特性,使得在其上训练的模型具备了强大的泛化能力。
  2. RED-Net架构的强健性:其学习到的特征表示,对于不同城市景观的几何和纹理变化具有很好的适应性。循环编解码结构学习到的是更本质的匹配与正则化规律,而非某个特定数据集的特性。

这种“开箱即用”的泛化能力,对于实际应用至关重要。它意味着我们可以用一个在大型合成数据集上预训练好的RED-Net模型,快速部署到新的城市区域进行三维重建,极大地节省了时间和成本。

3.4 速度优势:从小时级到分钟级的飞跃

效率是工程应用的命脉。论文对比了RED-Net与商业软件SURF和学术软件COLMAP在大规模场景重建上的耗时。

对于一个覆盖约1.8 x 0.85平方公里区域的场景,使用3个视角的输入图像和200个深度样本:

  • RED-Net 推断深度图耗时约 9.3分钟。
  • 商业软件SURF 完成重建需要 150分钟(约2.5小时)。
  • COLMAP 则需要惊人的 608分钟(约10小时)。

RED-Net将效率提升了一个数量级以上。这主要得益于其高度并行化和GPU加速的神经网络前向推断过程。一旦模型训练完成,推断速度极快。而传统方法依赖于迭代优化、特征匹配、三角化等串行或计算密集的步骤,即使经过高度优化,也难以与深度学习模型的推断速度相匹敌。

4. 从理论到实践:RED-Net的启示与展望

通过上面的解析,我们可以看到RED-Net不仅仅是一个高效的网络,更代表了一种解决大规模视觉问题的设计哲学:通过巧妙的序列建模(循环)与多尺度特征融合(编解码)相结合,在计算复杂度、内存占用和模型性能之间找到最佳平衡点。

在实际项目中选择或设计MVS方案时,RED-Net的思路给了我们很多启发:

首先,面对超大规模数据,内存是首要瓶颈。 与其追求一次性处理所有数据的“暴力”模型,不如设计像RED-Net这样“化整为零、顺序消化”的架构。循环机制是突破显存限制的一把利器。

其次,高分辨率输出不是奢侈品,而是刚需。 对于城市级重建,一个像素的误差可能代表地面上的几十厘米。必须像RED-Net一样,在网络设计中精心设计上采样和特征融合路径,确保细节的恢复。编解码结构中的跳跃连接在这里起到了关键作用。

再者,泛化能力来源于高质量、多样化的数据。 WHU数据集的开源是RED-Net工作的一大贡献。它告诉我们,要解决实际的大规模问题,必须要有贴近实际、规模足够、标注精准的数据集。在合成数据上训练,并证明其能泛化到真实数据,是一条可行的技术路径。

当然,RED-Net也不是终点。它主要聚焦于深度图估计,而完整的重建流水线还包括点云融合、表面重建等后处理步骤。如何将RED-Net高效估计出的高精度深度图,与更强大的全局一致优化、纹理映射等技术结合,生成更完美的三角网格或语义化模型,是下一步值得探索的方向。此外,将这种循环编解码的思想扩展到视频序列的动态重建、或者与语义分割等任务进行联合学习,也充满了想象空间。

在我自己尝试复现和借鉴RED-Net思想进行相关开发的过程中,最大的体会是:理解问题本质比堆砌网络层数更重要。RED-Net的成功,源于对“大规模MVS内存受限”和“需要多尺度上下文”这两个核心矛盾的深刻洞察,并用一个简洁优雅的架构给出了解答。它没有使用特别新奇或复杂的模块,而是将成熟的编解码结构和循环机制以一种新的方式组合起来,产生了“1+1>2”的效果。这或许正是优秀研究工作带给我们的最大价值:不仅是提供一个好用的工具,更是照亮一条解决问题的思路。

【信息科学与工程学】计算机科学与自动化——第六篇多媒体01 主要参数和算法 参数分类参数名称技术定义典型值范围测量方法优化目标采样参数采样频率每秒采集样本数8-384 kHz设备规格高保真≥48kHz量化参数采样深度每个样本量化位数8-32 bit设备规格高保真≥16bit声道配置声道数量独立音频通道数1-128声道配置参数立体声≥2声道音频格式格式类型音频数据格式PCM, ADPCM, MP3, AAC格式标识按需选择动态范围最大动态范围最大最小声压比40-144 dB声学测试越大越好频率响应频率范围可响应频率范围20-20kHz ±3dB频率扫描20-20kHz平坦信噪比信号噪 阅读详情

相关推荐

<数据集>咖啡叶片病害识别<目标检测>

YOLO与VOC格式的咖啡叶片病害识别数据集,适用于YOLO系列、Faster Rcnn、SSD等模型训练,类别:Cercospora、Miner、Phoma、Rust,图片数量1744。文件中包含图片、txt标签、指定类别信息的yaml文件、xml标签,已将图片和txt标签划分为训练集、验证集和测试集,可直接用于YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12、YOLOv13、YOLOv26等YOLO系列算法的训练。

qq_53332949的博客 338

无人机航拍垃圾检测数据集深度学习 目标检测 无人机航拍 垃圾检测 环境卫生 YOLO格式 数据集发布9029期

无人机航拍垃圾检测数据集深度学习 目标检测 无人机航拍 垃圾检测 环境卫生 YOLO格式 数据集发布9029期

qq_2529413168的博客 211

《图像处理与计算机视觉》全套课件PDF(武汉工程大学)

获取 《图像处理与计算机视觉》全套课件PDF(武汉工程大学)::https://download.csdn.net/download/m0_54748666/93260852。《图像处理与计算机视觉》全套课件PDF(武汉工程大学)第二讲-图像及其表达与性质.pdf。第五讲-图像形态学变换.pdf。第四讲-图像数据压缩.pdf。第三讲-图像预处理.pdf。第六讲-图像分割.pdf。第七讲-目标识别.pdf。第一讲-导论.pdf。

m0_54748666的博客 138

YOLO算法室内环境玻璃瓶目标检测数据8979张:类别与标注速览

该数据集聚焦于室内环境中各类玻璃瓶的识别与定位,涵盖多种材质、颜色和形状的玻璃容器,适用于家庭、仓储、零售等场景下的物品管理与自动化识别需求。该数据集包含训练集7812张、验证集818张、测试集349张,共计8979张图像,分布结构合理,能够有效支持模型训练、调优与性能评估。落地场景大致有智能仓储管理系统、自动分拣设备、零售商品识别系统以及家庭安防监控等领域,尤其适用于需要对玻璃制品进行分类与追踪的工业与消费场景,具备良好的落地潜力与实用前景。数据量、场景复杂度、标注质量三样都过关,这份数据可以直接开训;

小秋的博客 235

AD620单电源应变片测量电路分析

笔者最近在用AD620做应变片的压力检测电路,正好AD620的datasheet中有对于应变片压力测量的应用电路,参考该电路进行设计及实验后发现该电路存在些许问题,并对其进行了优化改进。本文纯属个人理解,供大家参考,欢迎批评指正。 AD620应用电路分析及优化 应用电路分析 AD620手册中原电路如下(加了部分标注以便分析): 该电路中,前半部分比较明显,为经典的AD620放大电路结构:四个应变...

拙诚电子工作室 1万+

告别‘报错马拉松’:一份保姆级的Ubuntu 20.04编译OpenWrt 15.05环境配置与问题修复清单

本文提供了一份详细的Ubuntu 20.04编译OpenWrt 15.05的环境配置与问题修复指南,帮助开发者告别‘报错马拉松’。从基础环境搭建到典型报错分类与修复方案,再到高阶问题的深度修复,全面覆盖编译过程中可能遇到的各类问题,并提供自动化补丁脚本和Docker环境固化方案,确保编译过程高效顺畅。

weixin_33230433的博客 297

OpenCV 车辆数量统计

涉及到的知识点:1)基本图像运算与处理2)形态学3)轮廓查找4)加载视频5)通过形态学识别车辆6)对车辆进行统计7)显示车辆统计信息。

ahccqw的博客 88

AWVS安装与使用教程

Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的自动化网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行安全漏洞。它可以扫描任何可通过Web浏览器访问的和遵循HTTP/HTTPS规则的Web站点和Web应用程序。适用于任何中小型和大型企业的内联网、外延网和面向客户、雇员、厂商和其它人员的Web网站。WVS可以通过检查SQL注入攻击漏洞、XSS跨站脚本攻击漏洞等漏洞来审核Web应用程序的安全性。

qq_59607911的博客 4099

基于深度学习的猫图像目标检测方法研究:YOLOv8s模型海选、多种子对比训练与Django+ONNX部署实现详解

本课题基于深度学习研究猫图像目标检测问题。数据集含1000张猫图像、1188个标注框,按固定比例划分并冻结清单;训练前在多个候选族中短训海选,确定YOLOv8s为主模型,经学习率搜索与显存标定后完成150轮训练,验证集mAP50达到0.92,并以7个随机种子的对比实验验证稳定性。最优权重导出为ONNX接入Django系统,提供图片、视频、摄像头三种识别方式,配套识别记录管理与统计大屏,形成从训练到应用的完整闭环。

WEIXIN_JSJBSZDS的博客 197

紫光同创PGL50H开发板实战:盘古50KH视频板的多媒体处理与高速通信方案

本文详细介绍了基于紫光同创PGL50H FPGA芯片的盘古50KH视频开发板在多媒体处理与高速通信方面的实战应用。文章从开发板硬件架构解析入手,逐步指导开发环境搭建、DDR3内存控制器配置、HDMI视频输入输出实战,并重点探讨了利用板载HSST高速收发器实现光纤通信与万兆以太网的方案。最后,通过构建一个集多路视频采集、处理与光纤传输于一体的系统案例,展示了该开发板在高性能实时数据处理领域的强大潜力。

b9c0d的博客 486

本地AI助手部署指南:DeepSeek Harness与Ollama集成实践

AI Agent作为当前人工智能领域的热门技术,通过模拟人类决策过程,能够自主规划、调用工具并执行复杂任务。其核心原理在于将大语言模型的推理能力与外部工具API相结合,形成可闭环的工作流。这种技术架构的价值在于显著提升了AI系统的实用性和自动化水平,使其从单纯的对话工具转变为能够解决实际问题的智能助手。在应用场景上,AI Agent广泛应用于代码生成、数据分析、自动化办公等领域。本文聚焦于如何通过DeepSeek Harness平台与Ollama本地模型的集成,实现隐私安全、离线可用的AI助手部署方案,特别

dengjuanshou7445的博客 476

计算机视觉主要任务分类:分类、检测、分割、生成全解

计算机视觉是一个高度多样化且仍在快速扩展的领域。本文的目标是为读者提供一份关于计算机视觉四大核心任务的全面指南。我们将从定义、数学描述、评估指标、经典算法和代表应用五个维度,对每个任务进行深入剖析。全文依次讲解图像分类:计算机视觉的基石、目标检测:定位与识别、图像分割:像素级理解、图像生成:从无到有的创造、四大任务的对比与内在联系等内容。

2602_96795563的博客 382

YOLOv8 | 代码逐行解析(二) | 从yaml文件到模型定义(代码逐行注释,小白必看)

本文给大家带来的是YOLOv8项目的解读,之前给大家分析了YOLOv8的项目文件分析,这一篇文章给大家带来的是模型训练从我们的yaml文件定义到模型的定义部分的讲解,我们一般只知道如何去训练模型,和配置yaml文件,但是对于yaml文件是如何输入到模型里,模型如何将yaml文件解析出来的确是不知道的,本文的内容接上一篇的代码逐行解析(一) 项目目录分析,本文对于小白来说非常友好,非常推荐大家进行阅读,深度的了解模型的工作原理已经流程,下面我们从yaml文件来讲解。

Snu77的博客 1万+

无人机影像落叶松林健康评估检测数据集 | 落叶松健康评估 林业病害监测 无人机航拍 密集目标检测9320期

本数据集聚焦于无人机航拍视角下的落叶松林健康状态评估与受损程度检测。 主要服务于林业病害监测、森林资源评估、火灾及风灾后的灾情定损。

qq_2529413168的博客 256

ubuntu下编译qtwebengine

ubuntu qtwebengine

tianyu的专栏 - Linux site:blog.youkuaiyun.com/wishfly 1463

Windows Server 2019 服务器一天之中内存利用率越来越高直到死机,疑似内存泄漏

环境: 华为桌面云虚拟机 Windows Server 2019 版本1809 OS内部版本17763.107 问题描述: Windows Server 2019服务器 一天之中内存利用率越来越高直到死机,不断扩容内存从10G到16G一重启就正常然后慢慢又循环,连续几天都这样,疑似内存泄漏 内存泄漏是什么? 内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪

本博客,博文仅代表个人操作经验,不能完全解决你的问题,仅供参考,佛系回复。 5394

无人机巡检道路路面异常检测数据集 深度学习 目标检测 无人机巡检 道路病害 路面异常 YOLO格式 数据集发布9028期

无人机巡检道路路面异常检测数据集 深度学习 目标检测 无人机巡检 道路病害 路面异常 YOLO格式 数据集发布9028期

qq_2529413168的博客 196

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OpenCV 形态学处理相关知识点

整张图用一个固定阈值划分像素:大于阈值的设为一个值,小于阈值的设为另一个值。适合光照均匀、前景和背景差异明显的图像。

ahccqw的博客 274

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

智慧安防实战:电动车入梯AI识别与电梯安全联动实现

电动车入梯治理,真正考验的不是单一算法的识别能力,而是从视觉识别到业务联动的整体工程能力。从前端视频采集,到边缘端实时分析,再到语音劝阻、梯控联动和事件留痕,每个环节都需要相互配合。对于智慧安防项目而言,算法识别解决的是风险发现问题,业务联动解决的是风险干预问题。只有把两者真正连接起来,才能让原有监控设备从被动录像走向主动风险管理。

荆棘鸟智能的博客 260

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

OpenCV 图像轮廓

轮廓查找 绘制轮廓 计算面积 计算周长 approxPolyDP (多边形拟合) 作用: 用较少且平滑的直线段来近似表示一个复杂的轮廓。常用于提取物体的几何形状(如把圆角矩形简化为矩形,把五角星简化为五边形),是形状识别中非常常用的函数。参数含义: 作用: 找到能够将一个轮廓(或一堆点)完全包围住的最小凸多边形。就像是用一根橡皮筋把所有钉子(轮廓上的点)紧紧包住,橡皮筋的形状就是“凸包”。常用于检测物体的凸缺陷。参数含义: 大外接矩形 (Bounding Rectangle) 作

ahccqw的博客 226

tonemap算法初探

4.三边滤波(trilateral filter)通过进一步考虑梯度变化来改进边缘处行为,后续的加权最小二乘滤波、局部拉普拉斯滤波等边缘感知滤波器(EPF)沿同一思想发展,构成了局部色调映射中一条清晰的技术脉络。3.tonemap色调映射算法是未来解决HDR的图像在SDR设备上显示的问题来设计一种变换函数,其目标不是。2.HDR图像不经过任何处理,直接显示在SDR的设备上,超出显示上限的亮度被截断为纯白,低于下限。并且在压缩全局动态范围的同时,如何尽可能保留局部对比度和细节,并且抑制此过程中产生的伪影。

dong6016的博客 369

INP-Former阅读笔记

Inp-Former通过从有缺陷图像中自适应提取“正常参照”(INP),利用自身正常区域构建原型,减少外部样本不一致带来的干扰。其核心流程:预训练编码器提取多尺度特征;可学习token与融合特征输入INP提取器,生成清晰的正常原型并优化一致性;解码器基于该原型重建特征,通过对比编码与重建特征生成异常距离图。最终输出上采样后的异常热力图,实现精准异常定位。

学习者的博客 210

基于深度学习的猫狗目标检测(Python+YOLO26m+Django)实现详解

详解基于深度学习的猫狗目标检测系统:YOLO26m迁移学习训练、数据划分与错标检测、ONNX导出、Energy阈值拒识、Django+Vue网站部署,附后端核心代码。

WEIXIN_JSJBSZDS的博客 350

基于 YOLOv8 的轴承缺陷检测(Web 版)

本项目是轴承表面缺陷检测模型的 Web 端实现。围绕 YOLOv8 在轴承表面缺陷数据集上完成四类缺陷的检测模型训练后,使用 FastAPI 把模型能力封装为可直接登录使用的 Web 检测平台。平台覆盖从数据准备、模型训练、指标评估,到推理服务、历史沉淀、统计分析的完整链路。除了常规的图片、批量、视频、摄像头检测,还把模型训练搬到了网页上:可以在浏览器里配置超参数发起真实训练,训练中在线调整学习率、查看实时曲线与日志,训练完成后把权重一键应用到检测服务,形成「训练 → 评估 → 检测」的闭环。

Michael_Jay的博客 279

航拍水葫芦检测数据集深度学习 目标检测 无人机航拍 水葫芦 水域监测 YOLO格式 数据集发布9031期

航拍水葫芦检测数据集深度学习 目标检测 无人机航拍 水葫芦 水域监测 YOLO格式 数据集发布9031期

qq_2529413168的博客 289

道路运输经营许可证识别技术:由计算机视觉负责“看”、自然语言处理负责“懂”,把纸质证件转化为可直接对接业务系统的高质量数据

说到底,道路运输经营许可证识别技术的价值不是"识别"本身,而是它把一张张纸质的许可证,变成了机器能读懂、系统能直接用的高质量数据。物流审核快了,监管准了,风控有底了。

智能图像识别 236
上一篇: MATLAB新版Simulink找不到Signal Builder?教你用Signal Editor完美替代(附迁移工具)
下一篇: Excel/PPT也能做高级图表?手把手教你制作桑基图和小提琴图(附模板下载)
Python
博客等级 码龄26年 1973粉丝 1567原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值