【图像分割】视觉大模型SEEM(Segment Everything Everywhere All at Once)原理解读
文章目录
- 摘要(效果)
- 二、前言
- 三、相关工作
- 四、method
- 4.1 多用途
- 4.2 组合性
- 4.3 交互式。
- 4.4 语义感知
- 五、实验
论文地址:https://arxiv.org/abs/2304.06718
测试代码:https://github.com/UX-Decoder/Segment-Everything-Everywhere-All-At-Once
来自:威斯康辛麦迪逊、微软、港科大等
摘要(效果)
随着交互式人工智能系统的需求增长,视觉方面的人-AI交互的综合研究也受到基于提示的LLM通用接口开发的启发,本文提出了SEEM,一个快速的、交互式的模型,用于在图像中一次性分割一切。
1.文本提示。通过用户输入的文本生成掩模,进行一键分割(SEEM可以适应卡通、电影和游戏领域中的各种类型的输入图像)。
2.图像提示。给一个擎天柱卡车的图,就能分割任何目标图像上的擎天柱
3.点击与涂鸦提示。SEEM通过对引用图像的简单点击,或涂鸦,就能够对目标图像上有相似语义的对象进行分割。
4.此外,SEEM非常了解空间关系。左上行斑马被涂鸦后,也会分割出最左边的斑马。
5.视频分割:
SEEM有四个需求:
1)通过引入 不同类型的通用提示引擎 ,包括点、框、涂鸦、掩码、文本和另一幅图像的参考区域;
2)通过 学习联合视觉-语义空间 进行视觉和文本提示,动态查询进行推理,如上图所示;
3)通过合并可学习的记忆提示,通过掩码引导的交叉注意保留对话历史信息;
4)使用文本编码器编码文本查询,并掩码标签进行开放词汇表分割。
当SEEM学会了在一个统一的表示空间中编写不同类型的提示时,它显示出了概括到看不见的用户意图的强大能力。SEEM可以有效地使用一个轻量级的提示解码器处理多轮交互。
二、前言
像ChatGPT 这样的大型语言模型(LLM)的成功显示了现代人工智能模型在与人类互动中的重要性。与人类互动的能力需要一个用户友好的界面,它可以接受尽可能多的人类输入,并产生人类很容易理解的反应。在NLP中,这种通用的交互界面已经出现并发展了一段时间,从早期的模型,如GPT和T5(Exploring the limits of transfer learning with a unified text-to-text transformer),到一些更先进的技术,如 prompt 和chain of thought。SAM支持多个提示。但是,下图所示的SAM只支持有限的交互类型,如点和盒子,并且不支持高级语义任务,因为它不输出语义标签(图中,SEEM在两种交互方法,如示例图像的参考区域和语义空间上都有更丰富的上下文)。
文章提倡一个通用的界面,用多模态提示来分割 everything!通用性:SEEM模型可以处理输入提示的任何组合(点、掩码、文本、方框,甚至另一个图像的参考区域,在相同的联合视觉-语义空间中形成提示),从而导致强大的组合性。交互性,我们进一步引入了内存提示来压缩之前的分割信息,然后与其他提示进行通信。对于语义感知,我们的模型为任何输出分割提供了一个开放集的语义。将所有5种不同类型的提示映射到联合视觉-语义空间,通过zero-shot 适应实现看不见的用户提示。通过对不同分割任务的训练,模型能够处理各种提示。
除了较强的泛化能力外,SEEM运行也很快。我们将提示作为解码器的输入。因此,当与人类进行多轮交互时,模型只需要在一开始就运行一次特征提取器。在每次迭代中,我们只需要使用新的提示再次运行轻量级解码器。在部署模型时,通常在服务器上运行繁重的特性提取器,并在用户的机器上运行相对轻量级的解码器,以减少多个远程调用中的网络延迟。
1.设计了一个统一的提示方案,可以将各种用户意图编码到一个联合的视觉-语义空间中,该空间具有通用性、组合性、交互性和语义意识等特性,导致对分割提示的 zero-shot 能力
2.将新设计的提示机制集成到一个用于所有分割任务的轻量级解码器中,构建了一个通用的交互式分割界面SEEM。
3.在许多分割任务上实验和可视化,包括闭集和开放集的全光分割、交互分割、参考分割和组合提示分割任务,证明了性能。
三、相关工作
闭集分割
通用分割技术包括几个子任务,包括实例分割、语义分割和全光分割,每个子任务都集中于不同的语义级别。例如,语义分割的目标是根据图像中对应的语义类来识别和标记图像中的每个像素。另一方面,实例分割涉及到将属于同一语义类的像素分组到单独的对象实例中。近年来,基于Transformer结构的(DETR)模型在分割任务方面取得了重大进展。然而,这些方法不能识别训练集中缺少的对象,这将模型限制在有限的词汇量大小内。
开放集分割
参考分割模型的目标是语言描述分割,这本质上是开放词汇表。然而,由于参考分割数据有限,训练后的模型往往在目标数据集上表现良好,但很难推断到实际应用中。最近,一些模型提出了许多开放词汇分割模型,它使用大型的预先训练的视觉语言模型,如CLIP,通过冻结或调整它们的权重来转移视觉语义知识。最近,X-Decoder提出了一种单一化的方法来处理各种分割和开放词汇分割的视觉语言任务。为了扩大词汇量的规模,OpenSeeD提出使用大量的检测数据和一种联合训练方法来改进分割。ODISE 利用了一个文本到图像的扩散模型作为开放词汇表分割的主干。
交互式分割
交互式分割是通过交互式地获取用户输入来分割对象。通常,交互类型可以采取各种形式,如点击、方框、多边形和涂鸦,其中基于点击的交互模型是最普遍的。SAM提出了一个在1100万张图像上训练的快速分割模型,显示了很强的zero shot 性能。它将用户交互作为一般分割的提示。但是SAM产生没有语义意义的分割。且提示的类型仅限于点、方框和文本。
四、method
SEEM采用了一种通用的编-解码器架构,在查询和提示之间具有复杂的交互,如下图(a),所示给定一个输入图像 I∈RH×W×3,一个图像编码器首先用于提取图像特征z,SEEM解码器基于查询输出的Omh(mask嵌入)和Och(类嵌入)与视觉、文本和内存提示 Pt,Pv,Pm的交互,从而预测掩码M和语义C。
(a)左边是对该模型的概述。首先,特征 和 提示 由其相应的编码器或采样器编码到一个联合的视觉-语义空间。而可学习的查询则是随机初始化的。SEEM解码器将查询、特征和提示作为输入和输出,并将类和掩码嵌入用于掩码和语义预测。右边部分是SEEM解码器和视觉采样器的细节。(b)显示了多轮的交互作用。每一轮都包含一个人的循环和一个模型循环。在人循环中,人接收最后一次迭代的掩模输出,并通过视觉提示对下一轮解码的正或负反馈。在模型循环中,模型接收并更新内存提示,以便进行未来的预测。
4.1 多用途
在SEEM中,我们引入了视觉提示Pv来处理所有非文本输入,如点、框、涂鸦和另一个图像的参考区域。当文本提示无法识别正确的数据段时,这些非文本查询有助于消除用户意图的歧义。对于交互式分割,以前的工作要么将空间查询转换为掩码,并将它们输入图像主干,要么为每种输入类型(点、框)使用不同的提示编码器。第一种方法在应用中过于heavy,每个交互都要求图像通过特征提取器。第二种方法很难推广到不可见的提示中。为了解决这些限制,SEEM提出了一个视觉采样器(图3 (a)),将各种非文本查询转换为位于同一视觉嵌入空间中的视觉提示:
其中, Z ^ \hat{Z} Z^是从目标图像(即 Z ^ \hat{Z} Z^=Z)或参考图像中提取的特征图,而s(方框、涂鸦、多边形)是用户指定的采样位置。我们首先通过点采样从图像特征中汇集相应的区域。 对于所有的视觉提示,最多从提示指定的区域均匀插值512个点特征向量。方法的另一个优点是,视觉提示自然与文本提示很好地对齐,模型通过全景分割和参考分割不断地学习一个共同的视觉-语义空间。
全景分割 Panoptic Segmentation :要求图像中的每个像素点都必须被分配给一个语义标签和一个实例id
参考分割 referring segmentation: 跨模态分割,给定一个语句描述,分割出图像对应的物体区域
4.2 组合性
在实践中,用户需要使用不同的或组合的输入类型来实现意图。常见模型训练中有两个问题。首先,训练数据通常只涵盖单一类型的交互(例如:空白、文本、视觉)。其次,使用视觉提示来统一所有非文本提示,并将它们与文本提示对齐,但其嵌入空间在本质上仍然不同。为了解决这个问题,我们建议用不同的输出来匹配不同类型的提示。考虑到视觉提示来自图像特征,而文本提示来自文本编码器,我们分别将视觉提示和文本提示与掩码嵌入Om h或类嵌入Oc h进行匹配,从而选择匹配的输出索引。
其中IoUmask是真实掩码和预测掩码之间的交并比。所提出的分离匹配方法优于在所有提示中只与Om h或Oc h匹配的方法。
经过训练,我们的模型熟悉所有提示类型,并支持多种组合方式,如没有提示,一种提示类型,或使用相同的模型和权重的视觉和文本提示。特别是,视觉提示和文本提示可以简单地连接并输入到SEEM解码器中,即使它从未接受过这样的训练。
4.3 交互式。
交互式分割通常不能在一次完成,需要多次交互进行细化,类似于ChatGPT这样的会话代理。SEEM提出了一种新的提示类型Pm,并使用它们将上一次迭代中的mask 知识传递给当前iter。此处没有引入额外的模块,只引入了一些内存提示,负责通过使用mask引导的交叉注意层来编码历史信息:
其中,Mp是上一个掩模,Z是图像特征图。因此,交叉注意只在前一个掩码指定的区域内生效。更新后的记忆提示Plm通过自注意力与其他提示进行交互,以传达当前一轮的历史信息。这种设计可以很容易地扩展到支持多个对象的同时分割。
4.4 语义感知
SEEM 以zero shot 的方式为各种提示组合的 mask 提供语义标签。因为视觉提示特征是在一个联合的视觉-语义空间中与文本特征对齐的。如下图所示,语义标签将通过Och(视觉查询的输出)和词汇表的文本嵌入直接计算。虽然我们没有训练任何针对交互式分割的语义标签,但计算出的对数对齐得很好,受益于联合的视觉-语义空间。
五、实验
数据集和设置 SEEM采用三种数据类型进行训练:全视分割、参考分割和交互分割。采用COCO2017 训练全景和交互分割,总共得到了10个7K的分割图像。对于参考分割,我们使用Ref-COCO、Ref-COCOg和RefCOCO+的组合来进行COCO图像注释。评估了所有的分割任务,包括通用分割(实例/全景/语义)、参考分割和交互式分割。
实施细节和评估指标。SEEM框架遵循X-Decoder框架,除了解码器部分(视觉骨干、语言骨干、编码器和seem解码器组成)。对于视觉骨干,我们使用FocalT [54]和DaViT-d3 (B) [9]。对于语言编码器,我们采用了一个UniCL或佛罗伦萨文本编码器[55,59]。分割任务的评估指标为PQ(全光学质量)用于全光分割,AP用于实例分割,mIoU的语义分割。对于交互式分割,通过自动将预测的分割与GT的分割进行比较,来模拟用户的点击。在一次点击图像生成预测的掩模后,下一次点击将被放置在分割误差最大的区域的中心。使用点击次数(NoC)度量来评估交互式分割性能,它度量实现某一IoU所需的点击次数,即85%和90%,分别表示为NoC@85和NoC@90。
- 交互式分割
表1将SEEM与最先进的交互式分割模型进行了比较,获得了与RITM、SimpleClick等相当的性能,与使用比SEEM多×50个分割数据的SAM 相比非常相似。
-
一般分割
在所有分割任务上预先训练一套参数,我们直接评估其在一般分割数据集上的性能。 -
参照Referring 分割
如下表所示,通过添加视觉组合提示,在微型模型的cIoU、mIoU和AP50指标下,参考分割性能得到了提高,分别为5.7、3.6和4.2点。该间隙在基础模型上进行了再训练,分别提高了2.5、1.5和0、4点。具体来说,这个数字是由类嵌入Och(outtut-q-文本)计算的。而当使用掩码嵌入Omh(Output-Q-Visual)计算边界时,边界甚至更大,如下表。此外,我们对一般组合(直接结合视觉和文本掩码的输出概率)进行基准测试。
4. 消融实验
当添加迭代和负视觉提示时,通用分割的性能略有下降。此外,如果我们从头开始训练模型,通用分割的性能下降更多。正如预期的那样,当从零开始训练时,参考分割性能下降。然而,当添加负面的视觉提示时,它会进一步减少。另一方面,在交互分割任务中添加迭代次数可以略微提高接地性能。通过添加迭代和负视觉提示,交互式分割性能逐渐提高,而从头开始训练令人惊讶地使Pascal VOC数据集的性能略有提高。
下表中,“Iter”表示多轮迭代分割。“negtive”表示在交互式分割过程中添加负点。
5. 定性结果
见摘要。
相关文章:
【图像分割】视觉大模型SEEM(Segment Everything Everywhere All at Once)原理解读
文章目录 摘要(效果)二、前言三、相关工作四、method4.1 多用途4.2 组合性4.3 交互式。4.4 语义感知 五、实验 论文地址:https://arxiv.org/abs/2304.06718 测试代码:https://github.com/UX-Decoder/Segment-Everything-Everywher…...
Linux: command: ibstat; infiniband
文章目录 如何在Linux上安装infiniband相关的软件。ibstat相关资料 如何在Linux上安装infiniband相关的软件。 https://access.redhat.com/solutions/301643 https://docs.oracle.com/cd/E19436-01/820-3522-10/ch3-linux.html yum groupinstall “Infiniband Support” Pack…...
UML简介与类图详解
1 UML简介 1.1 UML是什么 UML,全称为Unified Model Language,即统一建模语言,是由一整套图表组成的,为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言。UML 代表了一组最佳工程实践,这些实践已被证明在…...
【每日一题】1994.好子集的数目
1994.好子集的数目 题目描述解决方案:状态压缩动态规划代码:Python 题目来源:LeetCode 原文链接:https://mp.weixin.qq.com/s/myI7_ZwJM7kizrwUtWgAZQ 难度级别:困难 题目描述 给你一个整数数组 nums。如果 nums 的一…...
坚持伙伴优先,共创数据存储新生态
4 月 26 日,2023 阿里云合作伙伴大会上,阿里巴巴集团董事会主席兼 CEO、阿里云智能集团 CEO 张勇表示,阿里云的核心定位是一家云计算产品公司,生态是阿里云的根基。让被集成说到做到的核心,是要坚定走向“产品被集成”…...
树形结构的三级分类如何实现?
概述: 本三级联动分类服务端使用的是: Springboot MyBatis-plus,前端使用的是:VueElementUI,树形控件使用的是el-tree。本三级联动分类可以把任一子项拖拽到其它目录,可以添加、编辑、删除分类。 效果图:…...
SSM整合完整流程
🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前在某公司实习…...
虹科方案 | 助力高性能视频存储解决方案-2
上篇文章《虹科方案 | 助力高性能视频存储解决方案-1》我们分享了虹科&ATTO 和 Avid 共同创建协作解决方案,助力高性能视频存储,今天我们再深入介绍一下我们的案例详情。 一、行业挑战 从高端广播设施到小型独立工作室的媒体后期制作环境都需要允许多…...
java版深圳 工程管理系统软件 自主研发,工程行业适用 软件源码
Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示…...
云原生Istio架构和组件介绍
目录 1 Istio 架构2 Istio组件介绍2.1 Pilot2.2 Mixer2.3 Citadel2.4 Galley2.5 Sidecar-injector2.6 Proxy(Envoy)2.7 Ingressgateway2.8 其他组件 1 Istio 架构 Istio的架构,分为控制平面和数据面平两部分。 - 数据平面:由一组智能代理([En…...
吹爆,全网第一个手把手教你从零开始搭建Spring Cloud Alibaba的笔记
Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。 Springcloud 和 Srpingcloud Alibaba 区别? SpringCloud: 部分组件停止维护和更新,给开发带来不便;SpringCl…...
企业短信遭疯狂盗用,可能是没配置验证码
手机短信作为一种快捷的通讯方式被广泛应用。不仅在个人日常生活中,企业也习惯使用手机短信来进行验证和提醒,以保证业务的正常进行。随着数字化的发展,手机短信也成为了不法分子滥用的目标之一,给个人和企业带来不同经济损失。 个…...
【UE】直升机沿样条线移动
效果 步骤 1. 将虚幻商城中的免费资产导入工程 下载完毕后可以看到如下文件 2. 新建一个Actor蓝图类,命名为“Track”,这个蓝图就是用来画样条线的 打开“Track”,添加样条组件 3. 打开“BP_West_Heli_AH64D” 在事件图表中先新建一个时间轴…...
GaussDB_200_6.5.1部署安装
目录 安装前准备 安装依赖 修改/etc/hosts 上传解压介质 预安装 拷贝安装包 预安装配置 编辑preinstall.ini配置文件 编辑host0配置文件 执行预安装命令 安装FusionInsight_Manager 修改install安装配置文件 执行安装命令 web操作安装数据库 GaussDB200测试 配…...
软件工具 | Python调用运筹优化求解器(一):以CVRPVRPTW为例
目录 1. 引言2. 求解器介绍3. 基础语言3.1 创建模型3.2 添加变量3.3 添加目标函数3.4 添加约束3.5 设置参数3.6 求解 4. 数学模型4.1 [CVRP数学模型](https://mp.weixin.qq.com/s/DYh-5WkrYxk1gCKo8ZjvAw)4.2 [VRPTW数学模型](https://mp.weixin.qq.com/s/tF-ayzjpZfuZvelvItue…...
如何在JAVA中实现网络编程?
在Java中实现网络编程通常需要使用Java提供的网络编程库——Java Networking API。Java Networking API支持常见的TCP和UDP协议,包括Socket、ServerSocket、DatagramSocket等类,通过这些类,我们可以创建、连接、监听和传输数据。 下面是在Ja…...
【redis】redis的缓存过期淘汰策略
【redis】redis的缓存过期淘汰策略 文章目录 【redis】redis的缓存过期淘汰策略前言一、面试题二、redis内存满了怎么办?1、redis默认内存是多少?在哪查看?如何修改?在conf配置文件中可以查看 修改,内存默认是0redis的默认内存有…...
ASP.NET动态Web开发技术第8章
第8章ASP.NET数据访问 一.预习笔记 1.SqlDataSource控件 SqlDataSource数据源控件支持连接SQL关系数据库,它使用SQL命令来检索和修改数据。通常将SqlDataSource数据源控件与数据绑定控件一起使用。 属性1:ID:当前数据源控件的唯一标识符 …...
【旋转编码器如何工作以及如何将其与Arduino一起使用】
在本教程中,我们将学习旋转编码器的工作原理以及如何将其与Arduino一起使用。您可以观看以下视频或阅读下面的书面教程。 1. 概述 旋转编码器是一种位置传感器,用于确定旋转轴的角度位置。它根据旋转运动产生模拟或数字电信号。 有许多不同类型的旋转编码器按输出信号或传感…...
Tre靶场通关过程(linpeas使用+启动项编辑器提权)
Tre靶场通关 通过信息收集获得到了普通用户账号密码,利用PEASS-ng的linpeas脚本进行提权的信息收集,根据已有信息进行提权。 靶机下载地址: https://download.vulnhub.com/tre/Tre.zip 信息收集 靶机IP探测:192.168.0.129 a…...
java多线程下
ThreadLocal ThreadLocal 有什么用?通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢?JDK 中自带的ThreadLocal类正是为了解决这样的问题。 ThreadLocal类主要解决的就…...
使用无标注的数据训练Bert
文章目录 1、准备用于训练的数据集2、处理数据集3、克隆代码4、运行代码5、将ckpt模型转为bin模型使其可在pytorch中运用 Bert官方仓库:https://github.com/google-research/bert 1、准备用于训练的数据集 此处准备的是BBC news的数据集,下载链接&…...
《Netty》从零开始学netty源码(五十二)之PoolThreadCache
PoolThreadCache Netty有一个大的公共内存容器PoolArena,用来管理从操作系统中获得的内存,在高并发下如果所有线程都去这个大容器获取内存它的压力是非常大的,所以Netty为每个线程建立了一个本地缓存,即PoolThreadCacheÿ…...
放弃40k月薪的程序员工作,选择公务员,我来分享一下看法
我有一个朋友,拒绝了我为他提供的4万薪水的工作,去了一个体制内的银行,做程序员,即使薪水减半。他之前在北京一家大公司做程序员,一个月30k。当我开始创业时,我拉他来和我一起干,但那时我们太小…...
【MybatisPlus】高级版可视化、可配置 自动生成代码
今天看别人使用了一个更加智能的生成代码工具,可视化、可配置策略,非常方便,配置一次,在哪都可以使用,也不会跟项目藕合下面简单说一下使用方式。 1、介绍mybatis-plus-generator-ui 主要是封装了mybatis-plus-gener…...
【图像分割】【深度学习】Windows10下f-BRS官方代码Pytorch实现
【图像分割】【深度学习】Windows10下f-BRS官方代码Pytorch实现 提示:最近开始在【图像分割】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【图像分割】【深度学习】Windows10下f-BRS官方代码Pytorch实现前言f-BRS模型运行环境安装1.下载源码并…...
2023/5/4总结
刷题: 第二周任务 - Virtual Judge (vjudge.net) 这一题用到了素筛,然后穷举即可 #include<stdio.h> #define Maxsize 500000 int a[Maxsize]; long long b[Maxsize]; long long max0; int sushu() {a[0]a[1]0;int i,j,k;for(i2,k0;i<Maxsize;i){if(a[i…...
electron+vue3全家桶+vite项目搭建【17】pinia状态持久化
文章目录 引入问题演示实现效果展示、实现步骤1.封装状态初始化函数2.封装状态更新同步函数3.完整代码 引入 上一篇文章我们已经实现了electron多窗口中,pinia的状态同步,但你会发现,如果我们在一个窗口里面修改了状态,然后再打开…...
java基础入门-05-【面向对象进阶(static继承)】
Java基础入门-05-【面向对象进阶(static&继承)】 13、面向对象进阶(static&继承)1.1 如何定义类1.2 如何通过类创建对象1.3 封装1.3.1 封装的步骤1.3.2 封装的步骤实现 1.4 构造方法1.4.1 构造方法的作用1.4.2 构造方法的…...
day12 IP协议与ethernet协议
目录 IP包头 IP网的意义 IP数据报的格式 IP数据报分片 以太网包头(链路层协议) IP包头 IP网的意义 当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互联的各具体的网络异构细节; 如果在这种覆盖…...
梅陇做网站/百度热搜seo
这次写一下精灵创建的几种类型: 一、通过文件创建: 在原有的基础上加入例如以下代码: //一、通过文件创建精灵 CCSprite *bg CCSprite::create("map.png"); CCSize winSize CCDirector::sharedDirector()->getWinSize(); //得到屏幕的尺寸…...
oss做静态网站/宁波谷歌优化
光学三维测量是什么? 光学三维测量时通过运动适当的光学和电子仪器非接触地获取被测物体外部形貌的方法和技术。光学三维测量是指对物体空间外形和结构进行扫描,以获得物体表面点的三维空间坐标的一项技术。 有什么用? 光学测量在工业自动检测…...
图片压缩wordpress/有哪些搜索引擎网站
x365 安装 Windows 2003 Enterprise Server 中文版(使用IBM ServeRAID控制器) 适用机型:所有xSeries 365文档内容:测试机型: x Series 365 (8862-3RX)磁盘接口: IBM ServeRAID 4Lx RAID 控制器(BIOS Ver:6.11.07)系统BIOS: Version: 1.00, …...
做网站点/广告公司的业务范围
简评:Java var ! JavaScript var。 Java 10 中引入了新的语法用于局部变量类型推断,很多开发者有所疑惑,希望这篇文章能帮到你。 什么是类型推断 其实在 Java 中类型推断早就存在了,看下下面的例子: public void doSom…...
厦门网站建设方案报价/站长工具seo推广秒收录
new words: picnic n. 野餐 vi. 去野餐 过去式 picnicked过去分词 picnicked现在分词 picnicking复数 picnics第三人称单数 picnics bamboo n. 竹,竹子 vt. 为…装上篾条 adj. 竹制的;土著居民的 复数 bamboos On the go Do you wanna…...
酒店网站html模板/网络销售靠谱吗
1.创建文件myrule 2.编写myrule内容 package com.myrule;Configuration public class MySelfRule {Beanpublic IRule myRule(){return new RandomRule(); //随机的方法} }3.在主启动类中加入这个注解 CLOUD-PAYMENT-SERVICE为服务名称 configuration为刚才我们写的类 Ribbon…...