深度学习与计算机视觉教程(14) | 图像分割 (FCN,SegNet,U-Net,PSPNet,DeepLab,RefineNet)(CV通关指南·完结)

视觉对象网络VO-Net深度解析与应用实战 Visual Object Net(VO-Net)是一种面向多任务视觉感知的高效深度学习架构,专为图像识别、目标检测与行为分析等复杂任务而设计。其核心目标在于通过统一的网络结构,实现对多种视觉任务的高效协同处理,降低模型复杂度,提升推理速度与精度。与ResNet、YOLO等主流架构相比,VO-Net在多尺度特征提取、注意力机制集成与多任务输出方面具有更强的灵活性与适应性。通过融合特征金字塔、通道与空间注意力模块,VO-Net不仅提升了模型表达能力,还增强了对复杂场景的鲁棒性。 阅读详情

ShowMeAI研究中心


Detectionand Segmentation; 深度学习与计算机视觉

本系列为 斯坦福CS231n 《深度学习与计算机视觉(Deep Learning for Computer Vision)》的全套学习笔记,对应的课程视频可以在 这里 查看。更多资料获取方式见文末。


1.图像语义分割定义

图像语义分割是计算机视觉中十分重要的领域,它是指像素级地识别图像,即标注出图像中每个像素所属的对象类别。下图为语义分割的一个实例,它清晰地把图中的骑行人员、自行车和背景对应的像素标注出来了。

图像语义分割; 图像分割

图像分割有语义分割和实例分割的差别。语义分割不分离同一类的实例,我们只关心每个像素的类别,如果输入对象中有两个相同类别的对象,语义分割不将他们区分为单独的对象。实例分割是需要对对象个体进行区分的。

2.语义分割常见应用

2.1 自动驾驶汽车

语义分割常见的应用场景之一是自动驾驶领域,我们希望自动驾驶汽车有「环境感知」的能力,以便其可以安全行驶;下图为自动驾驶过程中实时分割道路场景:

语义分割常见应用; 自动驾驶汽车

2.2 医学影像诊断

语义分割的另外一个大应用场景是医疗影像诊断,机器可以智能地对医疗影像进行分析,降低医生的工作负担,大大减少了运行诊断测试所需的时间;下图是胸部X光片的分割,心脏(红色),肺部(绿色以及锁骨(蓝色):

语义分割常见应用; 医学影像诊断

语义分割的目标是:将一张RGB图像(heightwidth3)或是灰度图(heightwidth1)作为输入,输出的是分割图,其中每一个像素包含了其类别的标签(heightwidth1)。

下图为典型示例,为了直观易懂,示例显示使用的低分辨率的预测图,但实际上分割图的分辨率应与原始输入的分辨率是一致的。

语义分割直观理解; 图像分割

从上图可以看到在语义分割任务中,像素级别的标签设置,我们会使用one-hot编码对类标签进行处理。

关于one-hot 编码的详细知识也可以参考阅读ShowMeAI的 机器学习实战:手把手教你玩转机器学习系列 中的文章 机器学习实战 | 机器学习特征工程最全解读 里【独热向量编码(one hot encoding) 】板块内容。

语义分割直观理解; 图像分割

最后,可以通过argmax将每个深度方向像素矢量折叠成分割图,将它覆盖在原图上,可以区分图像中存在不同类别的区域,方便观测(也叫mask/掩码)。

语义分割直观理解; 图像分割

3.语义分割任务评估

对于语义分割任务,我们会通过 mIoU(mean Intersection-Over-Union) 和 mAcc(mean Accuracy) 指标来进行效果评估。

语义分割性能指标; mIoU & mAcc

3.1 mIoU

分割网络的评价指标:mIoU

  • mloU:分割每一类别的交并比(IOU)

语义分割性能指标; mIoU & mAcc

3.2 mAcc

分割网络的评价指标:mAcc

  • mAcc:Pred和GT对应位置的分类准确率

语义分割性能指标; mIoU & mAcc

4.语义分割方法综述

早期的一些语义分割方法包括使用 TextonForest 和随机森林分类器等。卷积神经网络(CNN)的引入不仅仅极大加速图像识别的进程,也对语义分割领域的发展起到巨大的促进作用。

语义分割任务最初流行的深度学习方法是图像块分类(patch classification),即利用像素周围的图像块对每一个像素进行独立的分类。使用图像块分类的主要原因是分类网络中包含全连接层(fully connected layer),它需要固定尺寸的图像。

2014 年,加州大学伯克利分校的 Long等人提出全卷积网络(FCN),这使得卷积神经网络无需全连接层即可进行密集的像素预测。使用这种方法可生成任意大小的图像分割图,且该方法比图像块分类法要高效许多。之后,语义分割领域几乎所有先进方法都采用了类似结构。

使用卷积神经网络进行语义分割存在的另一个大问题是池化层。池化层虽然扩大了感受野、聚合语境,但因此造成了位置信息的丢失。但是,语义分割要求类别图完全贴合,因此需要保留位置信息。

有两种不同结构来解决该问题。

  • 第一个是编码器解码器结构。编码器逐渐减少池化层的空间维度,解码器逐步修复物体的细节和空间维度。编码器和解码器之间通常存在快捷连接,因此能帮助解码器更好地修复目标的细节。U-Net是这种方法中最常用的结构。
  • 第二种方法使用空洞/扩张卷积(dilated/atrous convolutions)结构,来去除池化层。

关于全连接层和池化层的详细知识也可以参考ShowMeAI的文章

4.1 encoder-decoder 结构

针对语义分割任务构建神经网络架构的最简单的方法是简单地堆叠多个卷积层(使用same填充以维持维度)并输出最终的分割图。

这种结构通过特征映射的连续变换,直接去学习从输入图像到其对应分割的映射,缺点是在整个网络中保持全分辨率的计算成本非常高。

语义分割; encoder-decoder

对于深度卷积网络,浅层主要学习低级的信息,随着网络越深,学习到更高级的特征映射。为了保持表达能力,我们通常需要增加特征图 feature map 的数量(通道数),从而可以得到更深的网络。

在图像分类任务中,我们只关注图像是什么(而不是位置在哪),因此CNN的结构中会对特征图降采样(downsampling)或者应用带步长的卷积(例如,压缩空间分辨率)。但对于图像分割任务而言,我们希望模型产生全分辨率语义预测。

图像分割领域现在较为流行的是编码器解码器结构,其中我们对输入的空间分辨率进行下采样,生成分辨率较低的特征映射,它能高效地进行分类,而后使用上采样将特征还原为全分辨率分割图。

4.2 上采样方法

我们有许多方法可以对特征图进行上采样。

「池化」操作通过对将小区域的值取成单一值(例如平均或最大池化)进行下采样,对应的「上池化」操作就是将单一值分配到更高的分辨率进行上采样。

语义分割; 上采样方法

转置卷积(Transpose Convolution,有时也翻译为「反卷积」)是迄今为止最流行的上采样方法,这种结构允许我们在上采样的过程中进行参数学习。

语义分割; 上采样方法

典型的「卷积」运算将采用滤波器视图中当前值的点积并为相应的输出位置产生单个值,而「转置卷积」基本是相反的过程:我们从低分辨率特征图中获取单个值,并将滤波器中的所有权重乘以该值,将这些加权值投影到输出要素图中。

语义分割; 上采样方法

某些大小的滤波器会在输出特征映射中产生重叠(例如,具有步幅 2 2 2 的 3 × 3 3 \times 3 3×3 滤波器 - 如下面的示例所示),如果只是简单将重叠值加起来,往往会在输出中产生棋盘格子状的伪影(artifact)。

语义分割; 上采样方法

这并不是我们需要的,因此最好确保您的滤波器大小不会产生重叠。

下面我们对主流的模型进行介绍,包括FCN、SegNet、U-Net、PSPNet、DeepLab V1~V3等。

5.典型语义分割算法

5.1 FCN全卷积网络

全卷积网络FCN在会议CVPR 2015的论文 Fully Convolutional Networks for Semantic Segmentation 中提出。

它将CNN分类网络(AlexNet, VGG 和 GoogLeNet)修改为全卷积网络,通过对分割任务进行微调,将它们学习的表征转移到网络中。然后,定义了一种新的架构,它将深的、粗糙的网络层的语义信息和浅的、精细的网络层的表层信息结合起来,来生成精确和详细的分割。

关于CNN的详细结构,以及卷积层和全连接层的变换等基础知识可以阅读ShowMeAI文章

全卷积网络在 PASCAL VOC(2012年的数据,相对之前的方法提升了 20 % 20\% 20% ,达到 62.2 % 62.2\% 62.2% 的平均IoU),NYUDv2 和 SIFT Flow 上实现了最优的分割结果,对于一个典型的图像,推断只需要 1 / 3 1/3 1/3 秒的时间。

语义分割算法; FCN全卷积网络

FCN的网络结构如下所示,典型的编码器解码器结构:

语义分割算法; FCN网络结构

我们来看看FCN的中间层的一些数字,如下:

语义分割算法; FCN网络结构

语义分割算法; FCN网络结构

语义分割算法; 如何实现FCN

关键特点:

  • FCN的特征由编码器中的不同阶段合并而成的,它们在语义信息的粗糙程度上有所不同。- 低分辨率语义特征图的上采样使用经双线性插值滤波器初始化的「反卷积」操作完成。- 从 VGG16、Alexnet 等分类器网络进行知识迁移来实现语义细分。

语义分割算法; FCN端到端密集预测流程

如上图所示,预训练模型 VGG16 的全连接层(fc6,fc7)被转换为全卷积层,通过它生成了低分辨率的类的热图,然后使用经双线性插值初始化的反卷积,并在上采样的每一个阶段通过融合(简单地相加) VGG16 中的低层(conv4和conv3)的更加粗糙但是分辨率更高的特征图进一步细化特征。

在传统的分类 CNNs 中,池化操作用来增加视野,同时减少特征图的分辨率。对分类任务来说非常有效,分类模型关注图像总体类别,而对其空间位置并不关心。所以才会有频繁的卷积层之后接池化层的结构,保证能提取更多抽象、突出类的特征。

语义分割算法; FCN-8s 网络架构

另一方面,池化和带步长的卷积对语义分割是不利的,这些操作会带来空间信息的丢失。不同的语义分割模型在解码器中使用了不同机制,但目的都在于恢复在编码器中降低分辨率时丢失的信息。如上图所示,FCN-8s 融合了不同粗糙度(conv3、conv4和fc7)的特征,利用编码器不同阶段不同分辨率的空间信息来细化分割结果。

下图为训练 FCNs 时卷积层的梯度:

语义分割算法; 训练FCNs时卷积层的梯度

第1个卷积层捕捉低层次的几何信息,我们注意到梯度调整了第一层的权重,以便其能适应数据集。

VGG 中更深层的卷积层有非常小的梯度流,因为这里捕获的高层次的语义概念足够用于分割。

语义分割算法; 反卷积(转置卷积)

语义分割架构的另一个重要点是,对特征图使用「反卷积」(如上动图所示),将低分辨率分割图上采样至输入图像分辨率,或者花费大量计算成本,使用空洞卷积在编码器上部分避免分辨率下降。即使在现代 GPUs 上,空洞卷积的计算成本也很高。

最后,我们来看看FCN的优缺点:

语义分割算法; FCN的优缺点

5.2 SegNet

SegNet在2015的论文 SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation 中提出。

SegNet 的新颖之处在于解码器对其较低分辨率的输入特征图进行上采样的方式。

  • 解码器使用了在相应编码器的最大池化步骤中计算的池化索引来执行非线性上采样。

这种方法消除了学习上采样的需要。经上采样后的特征图是稀疏的,因此随后使用可训练的卷积核进行卷积操作,生成密集的特征图。

SegNet与FCN等语义分割网络比较,结果揭示了在实现良好的分割性能时所涉及的内存与精度之间的权衡。

语义分割算法; SegNet 架构

关键特点:

  • SegNet 在解码器中使用「反池化」对特征图进行上采样,并在分割中保持高频细节的完整性。- 编码器舍弃掉了全连接层(和 FCN 一样进行卷积),因此是拥有较少参数的轻量级网络。

语义分割算法; SegNet 反池化

如上图所示,编码器中的每一个最大池化层的索引都被存储起来,用于之后在解码器中使用那些存储的索引来对相应的特征图进行反池化操作。虽然这有助于保持高频信息的完整性,但当对低分辨率的特征图进行反池化时,它也会忽略邻近的信息。

5.3 U-Net

SegNet在2015的论文 U-Net: Convolutional Networks for Biomedical Image Segmentation 中提出。

U-Net 架构包括一个「捕获上下文信息的收缩路径」和一个「支持精确本地化的对称扩展路径」。这样一个网络可以使用非常少的图像进行端到端的训练,它在ISBI神经元结构分割挑战赛中取得了比之前方法都更好的结果。

语义分割算法; U-Net 架构

语义分割算法; U-Net 架构

语义分割算法; U-Net 架构

语义分割算法; U-Net 架构

语义分割算法; U-Net 输出层

语义分割算法; 构建U-Net网络

关键特点:

  • U-Net 简单地将编码器的特征图拼接至每个阶段解码器的上采样特征图,从而形成一个梯形结构。该网络非常类似于 Ladder Network 类型的架构。- 通过跳跃 拼接 连接的架构,在每个阶段都允许解码器学习在编码器池化中丢失的相关特征。- 上采样采用转置卷积。

U-Net 在 EM 数据集上取得了最优异的结果,该数据集只有30个密集标注的医学图像和其他医学图像数据集,U-Net 后来扩展到3D版的 3D-U-Net。虽然 U-Net 最初的发表在于其在生物医学领域的分割、网络的实用性以及从非常少的数据中学习的能力,但现在已经成功应用其他几个领域,例如 卫星图像分割等。

5.4 DeepLab V1

DeepLab V1在2015的论文 Semantic Image Segmentation with deep convolutional nets and fully connected CRFs 中提出。

DeepLab V1结合 DCNN 和概率图模型来解决语义分割问题。DCNN 最后一层的响应不足以精确定位目标边界,这是 DCNN 的不变性导致的。DeepLab V1的解决方法是:在最后一层网络后结合全连接条件随机场。DeepLab V1在 PASCAL VOC 2012 上达到了 71.6% 的 mIoU。

语义分割算法; DeepLab V1 结构

关键特点:

  • 提出 空洞卷积(atrous convolution)(又称扩张卷积(dilated convolution)) 。- 在最后两个最大池化操作中不降低特征图的分辨率,并在倒数第二个最大池化之后的卷积中使用空洞卷积。- 使用 CRF(条件随机场) 作为后处理,恢复边界细节,达到准确定位效果。- 附加输入图像和前四个最大池化层的每个输出到一个两层卷积,然后拼接到主网络的最后一层,达到 多尺度预测 效果。

5.5 DeepLab V2

DeepLab V2 在2017的论文 DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs 中提出。

DeepLab V2 提出了一种空洞空间金字塔池化(ASPP)的多尺度鲁棒分割方法。

ASPP 使用多个采样率的过滤器和有效的视野探测传入的卷积特征层,从而在多个尺度上捕获目标和图像上下文。再结合 DCNNs 方法和概率图形模型,改进了目标边界的定位。

DCNNs 中常用的最大池化和下采样的组合实现了不变性,但对定位精度有一定的影响。DeepLab V2通过将 DCNN 最后一层的响应与一个全连接条件随机场(CRF)相结合来克服这个问题。DeepLab V2 在 PASCAL VOC 2012 上得到了 79.7 % 79.7\% 79.7% 的 mIoU。

DeepLab V2的主干网络是ResNet,整体网络如下图所示,核心的一些结构包括 空洞卷积组建的ASPP模块、空洞空间金字塔池化。

语义分割算法; DeepLab V2 结构

上图中的 ASPP 模块具体展开如下方2个图所示:

语义分割算法; DeepLab V2 ASPP

语义分割算法; DeepLab V2 ASPP

语义分割算法; DeepLab V2 Dilated Backbone

具体的,DeepLab V2 论文中提出了语义分割中的三个挑战:

  • ① 由于池化和卷积而减少的特征分辨率。
  • ② 多尺度目标的存在。
  • ③ 由于 DCNN 不变性而减少的定位准确率。

第①个挑战解决方法:减少特征图下采样的次数,但是会增加计算量。

第②个挑战解决方法:使用图像金字塔、空间金字塔等多尺度方法获取多尺度上下文信息。

第③个挑战解决方法:使用跳跃连接或者引入条件随机场。

DeepLab V2 使用 VGG 和 ResNet 作为主干网络分别进行了实验。

语义分割算法; DeepLab V2 结构

Deep LAB-ASPP employs multiple filters with different rates to capture objects and context at multiple scales.

关键特点:

  • 提出了空洞空间金字塔池化(Atrous Spatial Pyramid Pooling) ,在不同的分支采用不同的空洞率以获得多尺度图像表征。

5.6 DeepLab V3

DeepLab V3在论文 Rethinking Atrous Convolution for Semantic Image Segmentation 中提出。

DeepLab V3 依旧使用了ResNet 作为主干网络,也依旧应用空洞卷积结构。

为了解决多尺度目标的分割问题,DeepLab V3 串行/并行设计了能够捕捉多尺度上下文的模块,模块中采用不同的空洞率。

此外,DeepLab V3 增强了先前提出的空洞空间金字塔池化模块,增加了图像级特征来编码全局上下文,使得模块可以在多尺度下探测卷积特征。

DeepLab V3 模型在没有 CRF 作为后处理的情况下显著提升了性能。

DeepLab V1-V3的结构对比如下所示:

语义分割算法; DeepLab V3 结构

DeepLab V3对ASPP模块进行了升级,升级后的结构细节如下图所示:

语义分割算法; DeepLab V3 ASPP升级模块

DeepLab V3 的具体结构细节如下,包含多个残差块结构。

语义分割算法; DeepLab V3 Multi-Grid

DeepLab V3中引入了Multi-grid,可以输入大分辨率图片:

语义分割算法; DeepLab V3 Multi-Grid

DeepLab V3包含2种实现结构:分别为 cascaded model 级联型 和 ASPP model 金字塔池化型。

两种模型分别如下的2幅图所示。

  • cascaded model 中 Block1,2,3,4 是 ResNet 网络的层结构(V3主干网络采用 ResNet50 或 101),但 Block4 中将 3 × 3 3 \times 3 3×3 卷积和捷径分支 1 × 1 1 \times 1 1×1 卷积步长 Stride 由 2 2 2 改为 1 1 1,不进行下采样,且将 3 × 3 3 \times 3 3×3 卷积换成膨胀卷积,后面的 Block5,6,7是对 Blockd 的 copy。(图中 rate 不是真正的膨胀系数,真正的膨胀系数 = r a t e ∗ M u l t i − g r i d =rate \ast Multi-grid =rate∗Multi−grid 参数)

语义分割算法; DeepLab V3 cascaded model级联型

  • ASPP模型的升级在前面介绍里提到了。

论文中使用较多的结构还是还是ASPP模型,两者模型在效果上差距不大。

语义分割算法; DeepLab V3 ASPP model金字塔池化型

关键特点:

  • 在残差块中使用多网格方法(MultiGrid),从而引入不同的空洞率。- 在空洞空间金字塔池化模块中加入图像级(Image-level)特征,并且使用 BatchNormalization 技巧。

5.7 Mask R-CNN

Mask R-CNN在论文 Mask R-CNN 中被提出。

Mask R-CNN以Faster R-CNN 为基础,在现有的边界框识别分支基础上添加一个并行的预测目标掩码的分支。

Mask R-CNN很容易训练,仅仅在 Faster R-CNN 上增加了一点小开销,运行速度为 5fps。

此外,Mask R-CNN很容易泛化至其他任务,例如,可以使用相同的框架进行姿态估计。

Mask R-CNN在 COCO 所有的挑战赛中都获得了最优结果,包括实例分割,边界框目标检测,和人关键点检测。在没有使用任何技巧的情况下,Mask R-CNN 在每项任务上都优于所有现有的单模型网络,包括 COCO 2016 挑战赛的获胜者。

语义分割算法; Mask R-CNN

语义分割算法; Mask R-CNN

Mask R-CNN 是在流行的 Faster R-CNN 架构基础上进行必要的修改,以执行语义分割。

语义分割算法; Mask R-CNN组件

关键特点:

在Faster R-CNN 上添加辅助分支以执行语义分割- 对每个实例进行的 RoIPool 操作已经被修改为 RoIAlign ,它避免了特征提取的空间量化,因为在最高分辨率中保持空间特征不变对于语义分割很重要。- Mask R-CNN 与 Feature Pyramid Networks(类似于PSPNet,它对特征使用了金字塔池化)相结合,在 MS COCO 数据集上取得了最优结果。

5.8 PSPNet

PSPNet在论文 PSPNet: Pyramid Scene Parsing Network 中提出。

PSPNet利用基于不同区域的上下文信息集合,通过我们的金字塔池化模块,使用提出的金字塔场景解析网络(PSPNet)来发挥全局上下文信息的能力。

全局先验表征在场景解析任务中产生了良好的质量结果,而 PSPNet 为像素级的预测提供了一个更好的框架,该方法在不同的数据集上达到了最优性能。它首次在2016 ImageNet 场景解析挑战赛,PASCAL VOC 2012 基准和 Cityscapes 基准中出现。

语义分割算法; PSP分割网络

语义分割算法; PSP网络 Context Info

如上图所示,PSP网络解决的主要问题是「缺少上下文信息」带来的不准确,其利用全局信息获取上下文,具体如下

之前的问题: 缺少上下文信息

如上图所示

  • 图中的boat区域和类别"car”的appearance相似
  • 模型只有local 信息,Boat 容易被识别为"car"
  • Confusion categories: Building and skyscraper

应用上下文信息方法

  • 利用全局信息 (global information)
  • 全局信息 in CNN ~= feature/pyramid

语义分割算法; PSP网络 Receptive Field

PSP网络的一些细节如下几幅图中介绍:

语义分割算法; PSP网络 RF → PSP

语义分割算法; PSP网络 Pyramid Pooling

语义分割算法; PSP网络 Pyramid Pooling

语义分割算法; PSP网络 Pyramid Pooling

语义分割算法; PSP网络结构

语义分割算法; PSP分割网络 Backbone

语义分割算法; PSP分割网络 Backbone

语义分割算法; PSP网络

关键特点:

  • PSPNet 通过引入空洞卷积来修改基础的 ResNet 架构,特征经过最初的池化,在整个编码器网络中以相同的分辨率进行处理(原始图像输入的 1/4),直到它到达空间池化模块。- 在 ResNet 的中间层中引入辅助损失,以优化整体学习。- 在修改后的 ResNet 编码器顶部的空间金字塔池化聚合全局上下文。

语义分割算法; PSP网络

图片展示了全局空间上下文对语义分割的重要性。它显示了层之间感受野和大小的关系。在这个例子中,更大、更加可判别的感受野(蓝)相比于前一层(橙)可能在细化表征中更加重要,这有助于解决歧义

5.9 RefineNet

RefineNet在论文 RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation 中提出。

RefineNet是一个通用的多路径优化网络,它明确利用了整个下采样过程中可用的所有信息,使用远程残差连接实现高分辨率的预测。通过这种方式,可以使用早期卷积中的细粒度特征来直接细化捕捉高级语义特征的更深的网络层。RefineNet 的各个组件使用遵循恒等映射思想的残差连接,这允许网络进行有效的端到端训练。

语义分割算法; RefineNet 架构

语义分割算法; RefineNet 架构

如上图所示,是建立 RefineNet 的块 - 残差卷积单元,多分辨率融合和链式残差池化。

RefineNet 解决了传统卷积网络中空间分辨率减少的问题,与 PSPNet(使用计算成本高的空洞卷积)使用的方法非常不同。提出的架构迭代地池化特征,利用特殊的 RefineNet 模块增加不同的分辨率,并最终生成高分辨率的分割图。

关键特点:

  • 使用多分辨率作为输入,将提取的特征融合在一起,并将其传递到下一个阶段。
  • 引入链式残差池化,可以从一个大的图像区域获取背景信息。它通过多窗口尺寸有效地池化特性,利用残差连接和学习权重方式融合这些特征。
  • 所有的特征融合都是使用sum(ResNet 方式)来进行端到端训练。
  • 使用普通 ResNet 的残差层,没有计算成本高的空洞卷积。

6.拓展学习

可以点击 B站 查看视频的【双语字幕】版本

【字幕+资料下载】斯坦福CS231n | 面向视觉识别的卷积神经网络 (2017·全16讲)

7.参考资料

ShowMeAI 斯坦福 CS231n 全套解读

ShowMeAI 系列教程推荐

showmeai用知识加速每一次技术成长

markdownpad_ttrar 邮箱: Soar360@live.com 授权秘钥: GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M5SN6bnxn2kSE8qHqNY5QaaRxmO3YSMHxlv2EYpjdwLcPwfeTG7kUdnhKE0vVy4RidP6Y2wZ0q74f47fzsZo45JE2hfQBFi2O9Jldjp1mW8HUpTtLA2a5/sQytXJUQl/QKO0jUQY4pa5CCx20sV1ClOTZtAGngSOJtIOFXK599sBr5aIEFyH0K7H4BoNMiiDMnxt1rD8Vb/ikJdhGMMQr0R4B+L3nWU97eaVPTRKfWGDE8/eAgKzpGwrQQoDh+nzX1xoVQ8NAuH+s4UcSeQ== 立即下载

相关推荐

IEC104协议采集C#源代码

IEC104(IEC60870-5-104)通信协议源代码。作为主站。支持遥信、遥测、遥控、遥调等功能。

深度学习第J5周:DenseNet+SE-Net实战

论文:(搜名字也能看)Squeeze-and-Excitation Networks.pdf这篇文章介绍了一种新的神经网络结构单元,称为“Squeeze-and-Excitation”(SE)块,它通过显式地建模通道之间的相互依赖关系来自适应地重新校准通道特征响应。这种方法可以提高卷积神经网络的表示能力,并且可以在不同数据集上实现极其有效的泛化。作者还展示了SE块在现有最先进CNNs中带来了显著的性能提升,而只需稍微增加计算成本。

m0_62237233的博客 3152

斑马Magicard打印机 IE浏览器打印插件

斑马Magicard打印机 IE浏览器打印插件,只支持IE浏览器,斑马多打印机支持

经典StNet行为识别网络

论文题目:StNet: Local and Global Spatial-Temporal Modeling for Action Recognition 论文链接:https://arxiv.org/abs/1811.01549 代码:https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleCV/video/model...

机器学习,深度学习 6676

JDK Oracle官网下载[代码]

本文提供了Oracle官网不同版本JDK的下载地址,包括JDK6、JDK7和JDK8的官方下载链接。JDK6的下载地址为http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html,JDK7的下载地址为http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html,JDK8的下载地址为http://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html。这些链接均为官方存档下载页面,方便用户获取历史版本的JDK。

机器学习: 共轭梯度算法(PCG)

今天介绍数值计算和优化方法中非常有效的一种数值解法,共轭梯度法。我们知道,在解大型线性方程组的时候,很少会有一步到位的精确解析解,一般都需要通过迭代来进行逼近,而 PCG 就是这样一种迭代逼近算法。 我们先从一种特殊的线性方程组的定义开始,比如我们需要解如下的线性方程组: Ax=bAx=b 这里的 A(n×n)A(n×n) 是对称,正定矩阵, b(n×...

weixin_30807677的博客 3181

51c※视觉~合集3

本文结合相关论文介绍了一些半监督目标检测算法,即如何利用大量的 unlabeled data 提升模型的检测性能。什么是半监督目标检测?传统机器学习根据训练数据集中的标注情况,有着不同的场景,主要包括:监督学习、弱监督学习、弱半监督学习、半监督学习。由于目标检测任务的特殊性,在介绍半监督目标检测方法之前,我们查看一下目标检测在这四个方向下的具体设定,如下图所示(不包括无监督学习):图一 目标检测的不同的 setting拥有大规模带标签的数据,包括完整的实例级别的标注,即包含坐标和类别信息;

whaosoft~aiotの开发板商城 1591

(侧边抽屉)移动端APP汉堡页设计全解:从规范落地到体验优化

汉堡页是一种隐藏式侧边导航组件,由汉堡图标(三条水平横线)、侧边抽屉面板、主界面遮罩层三部分构成。点击汉堡图标后,面板通常从左侧滑入,覆盖主界面部分区域(或悬浮于主界面之上);关闭时可通过点击关闭按钮、遮罩层、返回键或侧滑手势完成,是移动端特有的空间优化设计模式。

qq_67370502的博客 617

论文翻译(五):SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation

【论文翻译】:SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation

ting的博客 2693

单细胞专题(1) | 单细胞转录组研究样本准备指南(上)

单细胞RNA测序(scRNA-seq)是目前最前沿,能进行大规模实验的转录组研究技术,为理解细胞组成和动态生物学过程提供了很多新的见解。单细胞研究已经为我们理解发育过程,老化和疾病(如癌症)等提供了大量数据。在这里,小编主要就前期的样本准备与保存需注意问题给大家进行讲解,以备大家在不同的研究场景和研究背景下,走好单细胞转录组学研究的第一步。

bioyigene的博客 4229

道路缺陷检测实战指南:基于YOLOv11的深度学习系统从搭建到落地

道路缺陷检测项目的每一步,都是“理论→实践→反思→优化”的成长循环。当你看到自己开发的系统能精准识别出道路上的每一处裂缝、每一个坑洼时,那种“技术解决真实问题”的成就感,会让你明白深度学习不止是论文里的公式,更是改变行业的工具。如果过程中遇到模型不收敛、界面功能异常等问题,不妨把问题拆解成“数据是否标注准确?”“模型参数是否合理?”“界面逻辑是否有漏洞?”等小问题逐一排查。记住,每解决一个问题,你就离“能独立落地AI项目的工程师”更近一步。

LXY_LOVE36的博客 171

DeepSeek视频分析助力安防监控落地

DeepSeek视频分析技术融合时空注意力网络与端边云协同架构,通过轻量化模型、多模态融合和高效推理引擎实现安防场景的高精度实时行为识别与跨摄像头跟踪。

weixin_42609225的博客 780

VS code 调试显示preLaunchTask“g++“已终止,退出代码为-1。 生成‘... .exe‘文件错误

总结: 以后每个工程都需要按照这样的流程:创建一个.c/.cpp文件 -> F5运行 -> 配置tasks.json文件-> launch.json文件 -> 运行

qq_45151652的博客 2513

Seedance:字节发布视频生成基础模型新SOTA,能力全面提升

Seedance 1.0 是由字节跳动推出的高性能视频生成基础模型,旨在突破当前视频生成模型在指令遵循、运动合理性与视觉质量平衡方面的瓶颈。该模型通过多源数据整合与精准视频字幕生成,实现了跨多样化场景的全面学习;采用高效的架构设计,支持多镜头生成以及文本到视频和图像到视频任务的联合学习;通过细粒度监督微调和多维度奖励机制的强化学习,显著提升了模型性能;并借助多阶段蒸馏策略和系统级优化,实现了 10 倍的推理加速。

sherlockMa的博客 4400

宇树G1开发实践--PPT汇报(基础版)

本文介绍了一套基于宇树G1人形机器人的PPT自动演示系统,可实现"一键启动、自动演讲"功能。系统通过多线程同步技术,将音频播放与机器人动作完美结合,支持12种预设社交互动动作。硬件依赖宇树G1机器人、外接音响和网络连接,软件采用Python SDK和ALSA音频工具。核心功能包括音频文件自动排序、外接音响播放控制、机器人动作执行及音画同步。使用时需配置网络接口和音频设备号,运行后自动按顺序播放音频并执行随机动作。系统特别强调了安全注意事项,并提供了常见问题解决方案,适用于展会、汇报等需要

m0_47999117的博客 510

maya导入导出bvh 自动 脚本

maya打开bvh脚本

jacke121的专栏 1550

YOLO11改进-模块-引入空间增强前馈网络SEFN 提高多尺度 遮挡

SEFN 的关键思想是利用从 SEM 块之前的特征表示中提取的空间信息,通过门控机制作用于 SMB 之后的特征,从而将空间感知和长距离依赖学习整合到整个 SEM 块中。通过平均池化扩大感受野,利用 {Conv-LN-ReLU} 块捕捉更广泛的空间感知,再经上采样得到空间感知指标 γ。利用该指标 γ 对 SMB 之后的特征进行调制,增强特征的空间感知能力,以此来补充 SSM 在局部空间信息捕捉上的不足,优化图像修复过程中的空间表示学习。特征获取。

qq_64693987的博客 2477

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

深度学习J5周 DenseNet+SE-Net实战

SE-Net是ImageNet2017的冠军模型,由WMW团队发布。具有复杂度低、参数少、计算量小的优点。SENet的思路简单,很容易扩展到已有网络结构,如Inception和ResNet中。SENet将关注点放在了特征通道之间的关系,具体策略为:通过学习的方式自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征,又称作“特征重标定”策略。

Radiantsss的博客 1308

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

第J5周:DenseNet+SE-Net实战

最后一栏 SE-module 是指嵌入了 SE 模块的结果,它的训练参数和第二栏 Our re-implementation 一致。从上表可以看出,SE-ResNets 在各种深度上都远远超过了其对应的没有SE的结构版本的精度,这说明无论网络的深度如何,SE模块都能够给网络带来性能上的增益。上图展示了ResNet-50 和 ResNet-152 以及它们对应的嵌入SE模块的网络在ImageNet上的训练过程,可以明显地看出加入了SE模块的网络收敛到更低的错误率上。2.1.设置gpu/cpu。

lihuhelihu的博客 1150

深度学习工具包 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")

UNET图像语义分割入门【深度学习】

在这个教程中,我们将学习如何利用UNET深度学习网络实现地震图像的语义分割,除了UNET,本文还介绍了图像处理的几种常见任务,以及卷积网络常用的操作和术语,例如卷积、最大池、接受域、上采样、转置卷积、跳过连接等。 1. 介绍 计算机视觉是一个跨学科的科学领域,涉及如何使计算机从数字图像或视频中获得高级别的理解。从工程学的角度看,它寻求实现人类视觉系统能够完成的任务自动化。 (维基百科) 在过去几年中,深度学习使计算机视觉领域取得了飞速的发展。在这篇文章中,我想讨论一个具体的任务,在计算机视觉称为语义分割。

新缸中之脑 3703

SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation----2016 SegNet论文解读

SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation Abstract 我们提出了一种新颖实用的深度全卷积神经网络体系结构,用于语义像素分割,称为SegNet。这个核心的可训练分段引擎由一个编码器网络,一个相应的解码器网络以及一个逐像素分类层组成。编码器网络的架构在拓扑上与VGG16网络中的...

chenbo的博客 2342

SE8NET视频在远程教育中的实际应用案例

我们设定的核心目标是实现500ms以内的端到端延迟,同时保证1080p@30fps的画质流畅度。对于想尝试类似项目的开发者,建议先从基础的WebRTC通信开始,逐步引入SE8NET的优化特性。平台内置的实时预览功能,能直观看到每项调整对延迟的影响,大大提高了调试效率。最近参与了一个在线教育平台的视频直播系统改造项目,采用了SE8NET视频技术来解决传统方案的高延迟问题。上完成体验很流畅,特别是它的一键部署功能,让我能快速将demo部署成可访问的在线服务,方便团队随时测试效果。平台完课率因此提升了27%。

StarfallRaven13的博客 1942

CNN(五):DenseNet+SE-Net实战

普通的卷积实际上是对局部区域进行的特征融合,因此其感受野不大,若设计出更多的通道特征来增加这个,不可避免的将导致计算量大大的增加。而SENet网络的创新点在于关注channel之间的关系,希望模型可以自动学习到不同channel特征的重要程度。简而言之,在每个channel上将整个特征图浓缩成一个值,即在Squeeze步骤中通过averagepooling的操作计算每个通道的特征,此时每个通道只有一个特征,即size为c;

ali1174的专栏 1323

MarkDown Pad2 输入密钥,免费分享

邮箱地址: Soar360@live.com 授权秘钥: 快捷复制 GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M5SN6bnxn2kSE8qHqNY5QaaRxmO3YSMHxlv2EYpjdwLcPwfeTG7kUdnhKE0vVy4RidP6Y2wZ0q74f47fzsZo45JE2hfQBFi

记录一点 2万+
上一篇: 人工智能 | ShowMeAI资讯日报 #2022.06.11
下一篇: 人工智能 | ShowMeAI资讯日报 #2022.06.12
ShowMeAI
博客等级 码龄5年 6514粉丝 672原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShowMeAI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值