重新思考语义分割范式:SETR

2023-10-27

点击上方“CVer”,选择加"星标"置顶

重磅干货,第一时间送达

本文作者:湃森 |  来源:知乎(已授权)

https://zhuanlan.zhihu.com/p/348418189

一、论文信息

标题:《Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspectivewith Transformers》

作者:Sixiao Zheng et al.(复旦大学 & 牛津大学 & 萨里大学 & 腾讯优图 & 脸书)

文章:https://arxiv.org/abs/2012.15840

源码官方:https://github.com/fudan-zvg/SETR

 第三方复现(Pytorch):https://github.com/gupta-abhay/setr-pytorch

二、论文解读

2.1 动机

自全卷积神经网络(FCN)提出以来,现有的语义分割框架大都是基于编码器-解码器(Encoder-Decoder)范式,其中:

编码器用于压缩原始输入图像的空间分辨率并逐步地提取更加高级的抽象语义特征;

解码器则用于将编码器所提取到的高级特征上采样到原始输入分辨率以进行像素级的预测;

上下文(context)信息是提升语义分割性能最关键的因素,而感受野(respect-field)则大致决定了网络能够利用到多少的信息。通常,在编码器中,我们会在下采样的过程中逐层的降低空间分辨率,以减少计算资源的消耗同时有效的扩大了网络的感受野。如此一来,CNN中不仅由于卷积的参数共享使得网络具有平移等变性(translation equivalence),而且还因为引入池化操作在一定程度上为网络引入了平移不变性(translation invariant),使网络对目标位置不那么敏感,间接地增强了网络对未知数据的推理能力,同时又通过共享卷积核来达到控制模型的复杂度。理论上,通过堆叠足够深的卷积层网络的感受野能够覆盖到输入图像的全局区域,然而:

(1)相关研究表明,网络的实际感受野远小于其理论感受野;

(2)考虑到参数量激增和计算量消耗与性能之间的平衡;

(3)过多的下采样操作会导致小目标的细节信息被严重损失甚至完全丢失;

因此,由于网络中的有效感受野是有限的(limited),这将会严重制约模型的表示能力。

其实,对于语义分割乃至分类、检测等几大主流的视觉任务来说,近几年的工作大都是基于一个核心点出发,即如何在保证效率的同时尽可能的捕获有效的上下文信息。主流方法主要有两种——改造原始的卷积操作或者在网络中引入注意力机制。

对于改造原始的卷积操作方式主要是通过扩大感受野从而来捕获局部的上下文信息:

  • large kernel sizes,e.g., Inception block;

  • atrous/dialted convolution, e.g., DeepLab series;

  • image/feature pyramid, e.g., PSPNet;

  • deformable convolution;

  • ...

而注意力方法则更倾向于从不同维度建立长距离的依赖从而来捕获全局的上下文信息:

  • channel attention, e.g., SENet;

  • spatial attention, e.g., DANet;

  • self-attention, e.g., NonLocalNet;

  • ...

作者认为,上述的方法均是基于FCN架构,均无法摆脱编码器需要 对输入特征图进行降采样的操作。而我们知道,Transformer 的一个特性便是能够保持输入和输出的空间分辨率不变,同时还能够有效的捕获全局的上下文信息。因此,作者这里便采用了类似ViT的结构来进行特征提取同时结合Decoder来恢复分辨率。在一定程度上可以避免审稿人质问:(1)Transformer和其它的自注意力的方法有啥区别?(2)利用Transformer进行特征提取相比于CNN有何优势?——写论文就是要会讲故事,让reviewer挑不出你的毛病。当然,这只是其中一关,除了故事本身的逻辑性,实验设置得是否合理以及充分也是个可以挑刺的地方。除此之外,我们知道TF的一个显著缺陷便是对计算和存储的要求特别高,如果没有进行底层优化,很难在GPU端飞起来。作者也是很巧妙,避开刷精度的路子,题目起了个"Rethinking",意在告诉审稿人我这只是一种尝试,我告诉后来人这条路走得通,可以往这走,至于效率优化方面就留点工作给别人,你也不要死揪着我这点不放哈哈。如果TF在分割这条路能一直火下去的话,ViT、DETR和SETR这三篇文章的引用量估计会获得爆发式的增长。关于TF的底层GPU优化,可以参考快手异构团队的工作。

为了避免给审稿人造成一种这就是一篇“ViT+Decoder”堆积木文章的错觉,作者还特地在引言末尾强调,话虽如此,但:

However, extending a pure transformer from image classification to a spatial location sensitive tasks of semantic segmentation is  non-trivial.

话说这句话我还是挺认同作者的。因此笔者在此之前基于Pytorch框架随手复现了下这个结构,基于ViT进行特征提取,然后把中间层间隔抽出来并结合Decoder进行输出,在利用多卡训练的过程种发现性能只不过跟UNet差不多,但是效率方面,额(⊙﹏⊙),而且会出现学习率稍微大点loss就nan等问题。本以为能一飞冲天,结果没两个epoch一言不合就给你搞到自闭。当然笔者也不是专门在研究这个只是跑着玩玩,没去了解过这方面的训练技巧和一些注意事项,可能我实现的姿势不对,说不定这家伙很好train呢?继续往下读读,看看有没有惊喜╰(*°▽°*)╯,毕竟作者在ADE20K这个数据集上过榜首,至少说明是能work的吧???

2.2 相关工作

主要介绍了下语义分割和Transformer这两大板块的内容。最后着重分析了与Axial-DeepLab的不同之处:

  • Axial有对输入图像进行下采样,而SETR则全程利用序列到序列的模式并没有降低分辨率;

  • Axial采用了专门的设计的轴向注意力(见下),这对于标准计算设备来说可扩展性差,而SETR则始终坚持使用纯正的TF模块,可以简化易用性;

说实话,这里给出的区别点有点牵强,不明白作者为何要在这里特别强调这个,可能是审稿人提出跟Axial的区别吧?要不然这里贸然的对比意义并不大。

Axial-DeepLab是发表于ECCV 2020的一篇spotlight文章《Axial-DeepLab: Stand-Alone Axial-Attention for Panoptic Segmentation》,其核心思想是利用轴向注意力,即通过将2D的自注意力分解为两个1D的自注意力来消除卷积操作种局部感受野的限制,在降低计算复杂度的同时建立远距离的依赖捕获全局的上下文信息。除此之外,作者还提出了一个对位置敏感的自注意力设计,两者共同结合开发出一个position-sensitive axial-attention layer。额,不仔细看还以为是CCNet的翻版,这操作明显跟CCNet很类似啊,作者并没比较,而是往Non-Local方向上去进行横向比较了。

2.3 方法

SETR主要由三部分组成:输入→转换→输出。

Schematic illustration of the proposed SEgmentation TRansformer (SETR) 。(a) 输入预处理及特征提取;(b)渐进式上采样;(c)多层级特征聚合。

2.3.1 Image to sequence

首先,需要将原始的输入图片处理成Transformer能够支持的格式,这里作者参考了ViT的做法,即对输入图像进行切片处理,将每一个2D的图像切片(patch)视为一个“1D”的序列作为整体输入到网络当中。通常来说,Transformer接收的输入是一个1维的特征嵌入序列  ,其中  为序列的长度,  为隐藏层的通道尺寸。因此,对于图像序列而言,我们也需要将输入  转换为  .

一种最直接的做法便是将输入展平为一个列向量,这样暴力的做法无疑会造成计算量的爆炸。因此,作者这里采用切片的方式,每个切片大小为16*16,那么对于一张256*256大小的图片来说就可以切成256块(  )。为了对每个切片的空间信息进行编码,可以为每个局部位置 都学习一个特定的嵌入  ,并将其添加到一个线性的投影函数  中来形成最终的输入序列  。如此一来,进行Transofomer是无序的,我们也仍然可以保留相对应的空间位置信息,因为我们对原始的位置信息进行了关联。

2.3.2 Transformer

通过将序列输入到Transformer架构可进行特征的提取,其主要包含两个部分Multi-head Self-Attention (MSA) and Multilayer Perceptron (MLP) blocks。具体的没啥好讲,自注意力核心就是QKV操作,而多头只不过是将它分组进行计算而已,稍微看下应该挺好理解的。

这里linear projection layers一般是指全连接层,用于改变通道维度。
标准的Transformer结构

关于Transformer家族,可参考下图:

2.3.3 Decoder

关于解码器,作者这里给出了三种结构。值得注意的是,经过TF所提取出的特征其输入和输出的维度是一致的,为了进行最终的像素级分割,我们需要将其reshape成原始的空间分辨率。

  • Naive upsampling:第一种上采样方法比较朴素,作者这里给出的是利用一个2层的网络,即“1*1卷积+sync BN+ReLU+1*1卷积”,然后直接双线性上采样回原图分辨率;

  • Progressive UPsampling:第二种方式是采用渐进式上采样。为了避免引入过度的噪声,同时避免adversarial的影响(其实就是边缘会出现锯齿状),作者避免一步上采样,而是逐步的2倍上采样回去,类似于U-Net的操作;

  • Multi-Level feature Aggregation:第三种上采样方式是采用基于金字塔特征融合策略的多层级特征聚合。当然,这里并非严格的金字塔融合,毕竟TF每一层的输出特征图分辨率都是相同的。具体地,每隔6层抽取一个输出特征,将将其reshape成  ,然后分别经过一个3层(1×1+3×3+3×3)的网络,其中第1层和第3层的特征图通道数将为原始的一半,即输出维度是  ,随后对其进行4倍的双线性上采样操作,因此输出维度为  。为了增强不同层特征之间的交互,采用了自顶向下逐层融合(element-wise addtion)的策略,同时在每一层的融合后面外接一个3×3的卷积操作。最后,再将顶层特征图以及三层融合后的输出层特征分别按通道维度进行拼接级联,然后直接4倍双线性上采样回去,最终的输出维度为  ,这里还需要接个根据类别数进行转换输出。

2.4 实验

  • 数据集

在Cityscapes[1]、ADE20K[2]以及PASCAL Context[3]这三个数据集上进行实验评估;

  • 实现细节

基于mmsegmentation框架里面默认的设置(如数据增强和训练策略):

(1) 先以0.5或2的比例随机resize原图,然后随机裁剪成768、512和480分别应用于上述三个数据集,紧接着执行随机的水平翻转;

(2) 对于Cityscapes数据集,采用的batch size为8;而两外两个数据集ADE20K和PASCAL 则分别采用batch size为8和16的大小迭代训练160k和80k次;

(3) 采用多项式的学习率衰减策略并基于SGD进行训练和优化,其中Momentum和Weight decay分别设置为0.9和0;

(4) 最后,对于上述三个数据集的初始学习率分别设置为0.01、0.001以及0.01.

  • 辅助损失

同PSPNet一样,作者在这里也引入了辅助损失。即监督不同的的层级输出:

(1) Naive upsampling——(Z10; Z15; Z20);

(2) Progressive UPsampling——(Z10; Z15; Z20; Z24);

(3) Multi-Level feature Aggregation——(Z6; Z12; Z18; Z24);

在PSPNet中最终的损失是  ,这里没有说加权应该是全部直接相加然后计算了。这里采用的是一个2层的(3×3 conv + Synchronized BN + 1×1 conv)网络进行中间层的输出。

  • 多尺度测试

首先将输入图像缩放到一个统一的尺寸,然后执行多尺度的缩放以及随机的水平翻转,尺度缩放因子分别为(0.5,0.75,1.0,1.25,1.5,1.75),紧接着采用滑动窗口的方式进行重叠的切片预测,最后再合并测试结果。如果移动的步长不足以得到一张完整的切片,那么以短边为例保持同等的aspect ratio。其中,由于采用的是多卡的分布式训练,因此Synchronized BN也被用于解码器和辅助损失头的训练过程中。为了简化训练过程,作者这里并没采用在线困难样本挖掘(OHEM)[4]之类的trick用于模型的训练。

  • 基准模型

采用mmsegmentation中自带的dilated FCN和Semantic FPN。注意到,考虑到计算的瓶颈,最终的FCN是8倍上采样回去,而本文所提出的SETF是进行16倍上采样。

  • SETR变体

SETR-Naive, SETR-PUP和SETR-MLA对应上述三种解码器。另外,对于编码器来说,采用的是M层的Transformer,这里根据M的大小划分为"T-Small"和"T-Large",分别对应12和24层。除非特别说明,本文默认采用的是24层的TF(这样一来就有3*2=6种组合)。初次之外,作者还涉及了一种结合CNN+TF的混合模型,即采用ResNet-50作为预编码器用于初步的特征提取,然后将所提取特征喂入SETR进行进一步的特征提取。为了降低GPU的计算开销,这里ResNet-50将原始输入图像下采样16倍,同时采用SETR-Naive-S的组合。

  • 预训练

作者将ViT训练出来的权重用于SETR的编码器进行权重初始化。额,说白了就是把它照搬过来微调了下(白嫖?)。值得注意,这里非常关键的一点是随机初始化和带ViT的预训练权重效果差别这么大:

  • 可视化

可以看出,在第1层的时候便可以捕获到全局的特征,越往后所提取到的特征越抽象。这足以证明Transformer建立长距离依赖的能力。

三、总结

总的来说,本文将Pure Transformer在自然图像的语义分割任务上进行了首次尝试,整体来说取得的效果是相当不错的。知乎貌似有许多人对其开炮,质疑其创新点不足或者没有放出参数量计算量等亦或是没跟基于自注意力的方法如CC-Net和EMA-Net等比较。然而,我个人的观点的是论文本身可以分为两种,一种是精度型,一种是探索型。大家纠结的原因就是将其归纳为前者,当然这里与作者反复强调在ADE-20k数据集上取得xx成绩也有关,很容易把节奏带进去。为了弥补,作者在题目又强调时Rethinking,即本文只是尝试可以这样做。且不论这个创新性有多强,这其实更应该被当成一篇实验性论文,告诉大家这条路可以走得通。其实,当看到这篇文章的时候,我最关注的地方并不是整体的结构,而是作者是如何将其训练到work的?毕竟这种结构我想绝大多数人都试到吐了,通过整篇文章读下来,才发现要训好这个网络步骤原来这么繁琐,难道笔者基于同样的结构训练一轮下来被直接摁在地下摩擦。最后,很好奇SETF是基于什么样的硬件设施下进行实验的? (作者已在知乎回答了这个问题:感谢解读,8块32GV100一个实验。我们会在更新版中给出参数GFLOPs以及FPS。我们三个variants都有着比ResNet269+PSP,ResNest200+DeepLabV3更小的GFLOPs以及接近的FPS)

Reference

[1] The cityscapes dataset for semantic urban scene understanding.

[2] Semantic understanding of scenes through the ade20k dataset.

[3] The role of context for object detection and semantic segmentation in the wild.

[4] Ocnet: Object context network for scene parsing

CV资源下载

后台回复:Transformer综述,即可下载两个最新的视觉Transformer综述PDF,肝起来!

重磅!CVer-Transformer交流群成立

扫码添加CVer助手,可申请加入CVer-Transformer方向 微信交流群,可申请加入CVer大群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、Transformer、PyTorch和TensorFlow等群。

一定要备注:研究方向+地点+学校/公司+昵称(如Transformer+上海+上交+卡卡),根据格式备注,才能通过且邀请进群

▲长按加微信群

▲长按关注CVer公众号

整理不易,请给CVer点赞和在看

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重新思考语义分割范式:SETR 的相关文章

  • socket网络编程几大模型?看看CHAT是如何回复的?

    CHAT回复 网络编程中常见的有以下几种模型 1 阻塞I O模型 Blocking I O 传统的同步I O模型 一次只处理一个请求 2 非阻塞I O模型 Non blocking I O 应用程序轮询调用socket相关函数检查请求 不需
  • 利用CHAT写实验结论

    问CHAT 通过观察放置在玻璃表面上的单个水滴 人们可以观察到水滴充当成像系统 探究这样一个透镜的放大倍数和分辨率 CHAT回复 实验报告标题 利用玻璃表面的单一水滴观察成像系统的放大倍数和分辨率 一 实验目的 通过对比和测量 研究和探索玻
  • 什么是充放电振子理论?

    CHAT回复 充放电振子模型 Charging Reversal Oscillator Model 是一种解释ENSO现象的理论模型 这个模型把ENSO现象比喻成一个 热力学振荡系统 在这个模型中 ENSO现象由三个组成部分 充电 Char
  • 基于java的物业管理系统设计与实现

    基于java的物业管理系统设计与实现 I 引言 A 研究背景和动机 物业管理系统是指对物业进行管理和服务的系统 该系统需要具备对物业信息 人员信息 财务信息等进行管理的能力 基于Java的物业管理系统设计与实现的研究背景和动机主要体现在以下
  • 打造完美人像,PixCake像素蛋糕助您一键修图

    您是否曾经为自己的人像照片需要进行繁琐的修图而感到困扰 是否曾经想要打造出完美的自拍照 却不知道该如何下手 现在 我们为您推荐一款强大的人像处理技术修图软件 PixCake像素蛋糕 PixCake像素蛋糕是一款基于AI人像处理技术的修图软件
  • 活动日程&直播预约|智谱AI技术开放日 Zhipu DevDay

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入 直播预约通道 关于AI TIME AI TIME源起于2019年 旨在发扬科学思辨精神 邀请各界人士对人工智能理论 算法和场景应用的本质问题进行探索 加强思想碰撞 链接全球AI学
  • 基于opencv的大米计数统计(详细处理流程+代码)

    在我每周的标准作业清单中 有一项是编写计算机视觉算法来计算该图像中米粒的数量 因此 当我的一个好朋友M给我发了一张纸上的扁豆照片 显然是受到上述转发的启发 请我帮他数一下谷物的数量时 它勾起了我怀旧的回忆 因此 我在我的旧硬盘上寻找很久以前
  • 无人机视角、多模态、模型剪枝、国产AI芯片部署

    无人机视角 多模态 模型剪枝 国产AI芯片部署是当前无人机技术领域的重要研究方向 其原理和应用价值在以下几个方面进行详细讲述 一 无人机视角 无人机视角是指在无人机上搭载摄像头等设备 通过航拍图像获取环境信息 并进行图像处理和分析 这种技术
  • 如何快速申请GPT账号?

    详情点击链接 如何快速申请GPT账号 一OpenAI 1 最新大模型GPT 4 Turbo 2 最新发布的高级数据分析 AI画图 图像识别 文档API 3 GPT Store 4 从0到1创建自己的GPT应用 5 模型Gemini以及大模型
  • 做大模型也有1年多了,聊聊这段时间的感悟!

    自ChatGPT问世以来 做大模型也有1年多了 今天给大家分享这一年后的感悟 过去一年应该是AI圈最万千瞩目的一年了 大家对大模型 OpenAI ChatGPT AI Native Agent这些词投入了太多的关注 以至于有一年的时间好像经
  • AI在保护环境、应对气候变化中的作用

    对于AI生命周期数据领域的全球领导者而言 暂时搁置我们惯常的AI见解和AI生命周期数据内容产出 来认识诸如世界地球日这样的自然环境类活动日 似乎是个奇怪的事情 我们想要知道 数据是否真的会影响我们的地球环境 简而言之 是 确实如此 但作为一
  • AI帮助终结全球饥饿问题

    全球饥饿问题是牵动人心的头等大事 5月28日是 世界饥饿日 这一问题更值得关注 让人人都能吃饱的想法不仅令人向往 而且很快就会变成现实 与大多数新事物引进一样 对于在控制世界粮食供应这样复杂的任务中AI究竟应该发挥多大的作用 人们还踟蹰不前
  • AI-基于Langchain-Chatchat和chatglm3-6b部署私有本地知识库

    目录 参考 概述 部署安装 环境准备 原理和流程图 一键启动 启动WebAPI 服务 启动WebUI服务 Docker部署
  • 短信系统搭建主要因素|网页短信平台开发源码

    短信系统搭建主要因素 网页短信平台开发源码 随着移动互联网的快速发展 短信系统已成为企业和个人进行信息传递的重要工具 建立一个高效可靠的短信系统对于企业来说非常重要 下面我们将介绍一些影响短信系统搭建的主要因素 1 平台选择 在搭建短信系统
  • 史上最全自动驾驶岗位介绍

    作者 自动驾驶转型者 编辑 汽车人 原文链接 https zhuanlan zhihu com p 353480028 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 求职交流 技术交流群 本
  • 网络安全(黑客)自学启蒙

    一 什么是网络安全 网络安全是一种综合性的概念 涵盖了保护计算机系统 网络基础设施和数据免受未经授权的访问 攻击 损害或盗窃的一系列措施和技术 经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 作
  • GPT4+Python近红外光谱数据分析及机器学习与深度学习建模

    详情点击链接 GPT4 Python近红外光谱数据分析及机器学习与深度学习建模 第一 GPT4 入门基础 1 ChatGPT概述 GPT 1 GPT 2 GPT 3 GPT 3 5 GPT 4模型的演变 2 ChatGPT对话初体验 注册与
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573
  • Making Large Language Models Perform Better in Knowledge Graph Completion论文阅读

    文章目录 摘要 1 问题的提出 引出当前研究的不足与问题 KGC方法 LLM幻觉现象 解决方案 2 数据集和模型构建
  • 网络安全行业热门认证证书合集

    网络安全认证证书 就和学历一样是敲门砖 拿到了可以用不到 但不能没有 技术大牛可以没有证书 但普通人不能没有 1 初级入门 就像学历在职场上展示一个人的基本素养一样 网络安全认证证书可以展示一个人在网络安全领域具备的基本知识和技能 它为初学

随机推荐

  • MacOS下终端可以连接mysql但是MySQLWorkbench无法连接

    亲测有效 很早前安装了mysql 一直在终端里使用 最近安装了MySQLWorkbench但始终无法连接 整个人都给晕了 但是在MySQLWorkbench的连接界面下始终无法连接成功 在终端测试同样的ip和端口是可以连接成功的 mysql
  • 一网打尽时钟树综合Clock Skew

    一网打尽时钟树综合Clock Skew 文章右侧广告为官方硬广告 与吾爱IC社区无关 用户勿点 点击进去后出现任何损失与社区无关 时间过得很快 今天又上班了 最重要的是公众号还得对得起各位粉丝一直以来的支持 所以必须抽时间码字更文 在五一期
  • C++ 自定义QPushButton有参信号

    C 自定义QPushButton有参信号 ifndef MYWINDOW H define MYWINDOW H include
  • 【无奈】Invalid byte 1 of 1-byte UTF-8 sequence解决方案

    今天在eclipse中编写pom xml文件时 注释中的中文被eclipse识别到错误 Invalid byte 1 of 1 byte UTF 8 sequence 曾多次遇到该问题 问题的根源是 The cause of this is
  • Vue路由hash模式下锚点滚动实现

    1 Vue路由在hash模式下 已被占用 无法使用浏览器的锚点功能 使用js实现锚点滚动功能 使用js实现锚点滚动功能 字符串需要是 id 锚点格式 数字的话标识要滚动的位置 param String Number selector exp
  • qt中自定义关闭按钮的时候绑定关闭事件

    qt中自定义了关闭按钮 如何简单的只用绑定信号跟槽就直接调用事件呢 1 首先在界面中放置一个按钮 重命名为CloseBtn 然后接下来就只需要在构造函数中加上如下的这句 connect ui gt CloseBtn SIGNAL click
  • DFS时,出现内存超限 Memory Limit Exceeded

    DFS时 出现内存超限 Memory Limit Exceeded 很大可能由于dfs死循环 比如 vis 数组一定优先赋值再dfs
  • 最小二乘曲线拟合——C语言算法实现一

    最小二乘曲线拟合 给定一组数据 我们要对这组数据进行曲线拟合 假定要拟合的曲线方程为 y a0 a1 x 1 a2 x 2 a3 x 3 an x n x y 0 995119 7 620000 2 001185 2 460000 2 99
  • Java算法之 n个整数中找出连续m个数加和是最大

    为什么80 的码农都做不了架构师 gt gt gt 分析 m个连续的整数加和是最大 那么最简单的实现方式就是 从下标为0查找m个元素 依次n个数组成的容器进行遍历 每次遍历判断当前最大的m个数之和 遍历结束后返回 public class
  • Linux系统下修改mysql数据库密码

    修改mysql数据库的方法有很多种 这个方法适用于忘记root用户密码或者刚安装mysql要进入mysql时发现系统报错及觉得默认密码太复杂想修改密码的 1 修改 etc my cnf 文件 在 mysql 后面任意一个地方添加以下内容 s
  • 常见问题-打不开宝塔面板

    解决方案 打不开宝塔面板 换个Chrome浏览器打开就可以了
  • jsp或html中给选中的a标签改变颜色和背景色(用源生js)

    我们直接看代码 我是循环遍历的a标签 给每个a标签一个class属性 然后在js中进行设置 这里的if比较是比较目前页面的a标签的值和我们点击传递的serlvet是否是同一个 如果是就改变颜色 我打印一下 在终端给看一下 好的 如果还有什么
  • SPSS(十九)SPSS之时间序列模型(图文+数据集)

    SPSS 十九 SPSS之时间序列模型 图文 数据集 时间序列是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列 正如人们常说 人生的出场顺序很重要 时间序列中隐藏着一些过去与未来的关系 时间序列分析试图通过研究过去来预测未来 时
  • js中请求数据的$post和$ajax区别(同步和异步问题)

    post和 Ajax都为页面上向后台发送请求 请求数据1 post 因为post默认为异步请求 可是有时候我们会发现 本来要求请求马上出现 可是异步会导致后面突然再执行 这样就出很多问题 2 Ajax 最原始的Ajax 可以控制同步或者异步
  • 1.3.1 手写数字识别之数据处理

    文章目录 概述 一 加载类库 二 读入数据并划分数据集 扩展阅读 为什么针对固定数据集的模型总在不断精进呢 三 训练样本乱序 生成批次数据 四 校验数据有效性 机器校验 人工校验 五 封装数据读取与处理函数 六 异步数据读取 七 扩展阅读
  • Python调用GPT3.5接口的最新方法

    GPT3 5接口调用方法主要包括openai安装 api requestor py替换 接口调用 示例程序说明四个部分 1 openai安装 Python openai库可直接通过pip install openai安装 如果已经安装ope
  • 【力扣】第302场周赛记录

    第302场周赛记录 6120 数组能形成多少数对 6164 数位和相等数对的最大和 6121 裁剪数字后查询第 K 小的数字 6122 使数组可以被整除的最少删除次数 6120 数组能形成多少数对 链接 数组能形成多少数对 描述 给你一个下
  • 深度学习常用激活函数

    神经网络构架过程中常用的激活函数表达式 函数图像和优缺点 激活函数决定输入信号是否或多大程度上应该通过节点 或神经元 传递到下一层 众所周知 神经网络的运算是线性的 引入非线性的激活函数 可以提高神经网络的拟合能力 下面讲解释一些常见的激活
  • spring源码中,委托模式的个人小感受

    文章目录 委托模式代码 代码感受 spring 源码中的应用 委托模式代码 注 不属于 23 种设计模式之一 是面向对象设计模式中常用的一种模式 public interface Cook void cook public class 川菜
  • 重新思考语义分割范式:SETR

    点击上方 CVer 选择加 星标 置顶 重磅干货 第一时间送达 本文作者 湃森 来源 知乎 已授权 https zhuanlan zhihu com p 348418189 一 论文信息 标题 Rethinking Semantic Seg