RES 系列 GRES: Generalized Referring Expression Segmentation 论文阅读笔记

news2024/11/26 20:45:30

RES 系列 GRES: Generalized Referring Expression Segmentation 论文阅读笔记

  • 一、Abstract
  • 二、引言
  • 三、相关工作
    • 有关的指代任务和数据集
    • 指代分割方法
  • 四、任务设置及数据集
    • 4.1 GRES 设置
      • RES 回顾
      • 一般化的 RES
      • 评估
    • 4.2 gRefCOCO:一个大尺度的 GRES 数据集
      • 多目标样本
        • 计数表达式的使用
        • 没有集合关系的复合词语结构
        • 属性域
        • 更复杂的关系
      • 无目标样本
  • 五、提出的方法
    • 5.1 结构预览
      • 输出和损失
    • 5.2 ReLAtionship 建模
      • Region-Image Cross Attention (RIA)
      • Region-Language Cross Attention (RLA)
  • 六、实验
    • 6.1 评估指标
      • cIoU and Pr@X.
      • N-acc. and T-acc.
      • gIoU.
    • 6.2 消融研究
    • 6.3 在 GRES 上的结果
      • 与 RES sota 方法的比较
      • 定量结果
      • 失败的案例 & 讨论
    • 6.4 在经典 RES 上的结果
  • 七、结论

写在前面

  这一周又快结束了,没干啥东西。来学校之后把 ubuntu 系统重装了,之前的崩溃了。现在用命令行备份。
  这是一篇关于 RES 的新数据集文章,看看有没有啥机会能发点论文吧。

  • 论文地址:GRES: Generalized Referring Expression Segmentation
  • 代码地址:https://github.com/henghuiding/ReLA
  • 收录于:CVPR 2023

一、Abstract

  首先指出指代表达式分割 Referring Expression Segmentation (RES) 的定义,当前的经典 RES 数据集和方法一般仅支持单目标的表达式,即一个表达式对应一个目标,并未考虑多目标和无目标的表达式。于是本文提出一般性的指代表达式分割 Generalized Referring Expression Segmentation (GRES),使得表达式能够指向任意数量的目标类别。同时构建起第一个大尺度 GRES 数据集 gRefCOCO,包含多个目标、无目标、单个目标的表达式。实验表明 GRES 的主要问题在于复杂的关系建模。基于此,提出一种基于区域的 ReLA 模型,能够自适应将图像划分为包含实例的若干区域,显式地建模区域-区域和区域-语言的依赖关系。提出的 ReLA 在 GRES 和经典的 RES 数据集上表现很好。

二、引言

  
  Referring Expression segmentation (RES) 的定义,应用,数据集。

  • 经典 RES 的限制
    首先,经典的 RES 没有考虑不含目标的表达式,这意味着现有的 RES 方法无法定义那些目标不在输入图像上的图文对。其次,大多数现有的 RES 数据集,例如 RefCOCO 并未包含多个目标的表达式。如下图所示:

在这里插入图片描述
  实验表明传统的 RES 方法未能很好地识别这些多个目标或无目标的场景。

  • 新的 benchmark 和 dataset
    本文提出一个新的 benchmark:Generalized Referring Expression Segmentation (GRES),使得表达式能够指向任意数量的目标。GRES 同样以一张图像和一个指代表达式为输入,但进一步支持了多个目标蕴含在单个表达式中以及没有目标蕴含在图像中。相比之下,现有的指代表达数据集并不包含这些,而是仅仅单个目标的表达式。为 GRES 建立的新数据集称为 gRefCOCO,补充了 RefCOCO 两种类型的样本:多目标达表示式,无目标表达式。
  • 新的 baseline 方法
    区域-区域间的交互在 RES 中很重要,然而经典的 RES 方法仅需检测一个目标,以至于多数没有区域-区域交互建模的方法都能取得不错的性能。但是在 GRES 中,将会更加依赖长范围的区域-区域依赖建模。于是设计出一个网络将图像划分为若干区域,之后彼此间进行显式交互。此外,本文提出的网络能够软性地收集每个区域的特征,实现更大的弹性。大量的实验表明显示地建模区域特征的弹性交互能够有助于 GRES 的性能。

  本文贡献总结如下:

  • 提出一个 bechmark:Generalized Referring Expression Segmentation (GRES),使得 RES 更加弹性且容易部署到现实场景中。
  • 第一个提出一个大尺度的 GRES 数据集 gRefCOCO,能够支持任意数量目标的表达式。
  • 提出一个 baseline 方法:ReLA 来建模目标间复杂的关系,在经典的 RES 和 GRES 任务上实现了 SOTA。
  • 大量的实验分析了 RES 和 GRES 性能代沟的可能原因及新的挑战。

三、相关工作

有关的指代任务和数据集

  指代表达式理解 Referring Expression Comprehension (REC) 输出 bounding box,早期用于 RES 和 REC 的数据集有 ReferIt,但每个表达式仅指向单个实例。之后提出 RefCOCO、RefCOCOg 数据集。同样这些都是一个表达式对应一个实例。
  最近有一些新的数据集提出来,但不关注或不适合 GRES。例如 PhraseCut,包含多个目标表达式,但仅作为候选,即只有当一个目标不能作为独立指代时。此外,其表达式为模板合成,而非自然语言表达式。图像字幕 Image caption 同样接近于 RES,但不能确保表达式的混淆,因此不适合指代相关的任务。还有些指代数据集采用其他的模态或者学习计划,例如 Scanrefer 关注 3D 目标,Clevrtex 关注无监督学习。此外,这些数据集均不包含没有目标的表达式。

指代分割方法

  大致分为两种:单阶段(自上而下)和两阶段(自下而上)。单阶段方法通常是有着类似 FCN 的端到端网络,通过逐像素分类多模态特征来实现预测。两阶段方法首先找到一组实例 proposals 的集合,然后从中选择出目标实例。大多数 RES 为单阶段方法,而 REC 则为两阶段方法。最近的 Transformer 方法大幅超越了基于 CNN 的方法。Zero-shot 的分割方法使用类别名作为文本信息,关注鉴别新的类别,利用自然语言表达式来鉴定用户的关注目标。

四、任务设置及数据集

4.1 GRES 设置

RES 回顾

  当前的 RES 并未考虑无目标的表达式,因此现有的模型在应对多个指代或者无目标指代在输入图像上时,可能会输出错误的实例结果。如下图所示:

在这里插入图片描述

一般化的 RES

  为解决经典 RES 的限制,本文提出一个新的 bechmark:一般化的 Generalized Referring Expression Segmentation (GRES),能够让表达式指向任意数量的目标物体。一个 GRES 数据样本包含四要素:一幅图像 I I I,一条语言表达式 T T T,一个由 T T T 指向包含所有像素的 GT Mask M G T M_{GT} MGT,一个二值化的目标标签 E G T E_{GT} EGT,表明 T T T 是否是一个无目标表达式。 T T T 中的实例数量并无限制。GRES 模型以 I I I T T T 为输入,预测一个mask M M M。对于无目标表达式, M M M 应该为负值。
  多个目标表达式能够实现用户自定义式的开放词汇分割,无目标表达式能够鉴别图像中是否包含语言表达式中的目标,因此更加实用。

评估

  在 gRefCOCO 中,并不强制模型提供不同的实例说明。除了一般的 RES 性能指标:累计的 IoU(cIoU)和 Precision@X 外,进一步提出一种新的指标:一般化的 IoU(gIoU),将平均 IoU 拓展到所有样本上(包含无目标的样本)。此外,无目标样本的性能通过计算 No-target-ccuracy (N-acc.) 和 Target-accuracy (T-acc.) 分开进行评估。

4.2 gRefCOCO:一个大尺度的 GRES 数据集

  gRefCOCO 包含 27 8232 个表达式:8 0022 个多目标,3 2202 个无目标,指向 1 9994 张图像中的 6 0287 个显著实例。所有目标实例的 bounding box 和 mask 都给出。部分单目标表达式源于 RefCOCO。开发了一种在线标注工具来寻找图像,选择实例,书写表达式及验证结果。
  基础标注流程源于 ReferIt,确保了标注质量。保持数据集比例和 RefCOCO 中 UNC 的部分相同。

在这里插入图片描述

多目标样本

  通常用户根据逻辑关系或相似度来集中选择多个目标,而非随机装配多个目标。之后标注员书写一个不混淆的指代表达式来选择这些实例,有下列四个特性和挑战。

计数表达式的使用

  图 3(a) 中原始的表达式包含一个顺序词,于是模型必须从序数词数量中区分出重要的数量。显式或隐式的目标计数能力可以用于解决这类表达式。

没有集合关系的复合词语结构

  如图 3 中 “A and B”、“A except B”、“A with B or C”,这对模型理解图像-句子的长距离依赖提出了更高的要求。

属性域

  当一个表达式中存在多个目标时,不同的目标可能会共享相同或不同的属性。这使得模型需要理解所有的属性,并且能够映射这些属性到相应的目标上。

更复杂的关系

  如图 3(b) 所示,两个相似的表达式应用在一张图像上,但指向两个不同的目标集合。因而在 GRES 中,关系不仅用于描述目标且暗示着目标的数量。这使得模型需要理解所有实例间的交互。

无目标样本

  当不设定任何条件对的无目标表达式时,标注员倾向于书写大量的简单或通用的表达式,与那些有效表达式有很大不同。于是设定两个规则: 表达式不能与图像整体无关;标注员可以从其它相同数据分布的 RefCOCO 图像中选择一个误导性的表达式。

五、提出的方法

在这里插入图片描述

5.1 结构预览

  模型结构如上图所示,输入图像经过基于 Swin-Transformer 编码器提取出视觉特征 F i ∈ R H × W × C F_i\in \mathbb{R}^{H\times W\times C} FiRH×W×C,其中 H H H W W W 分别为图像的空间尺寸, C C C 为通道维度。输入的语言表达式经过 BERT 处理,得到语言特征 F t ∈ R N t × C F_t\in \mathbb{R}^{N_t\times C} FtRNt×C,其中 N t N_t Nt 是表达式中单词的数量。接下来, F i F_i Fi 送入像素解码器中得到 mask 特征 F m F_m Fm。同时 F i F_i Fi F t F_t Ft 送入到提出的 ReLAtionship 建模块中,进一步将特征图分解为 P × P = P 2 P\times P=P^2 P×P=P2 个区域,然后建模彼此间的关系。然而特征图的形状和尺寸及其空间区域并非是预定的,而是通过 ReLA 动态划分的。ReLA 产生两种类型的特征:区域特征 F r = { f r n } n = 1 P 2 F_r=\{f_r^n\}^{P^2}_{n=1} Fr={frn}n=1P2 和区域过滤器 F f = { f f n } n = 1 P 2 F_f=\{f_f^n\}^{P^2}_{n=1} Ff={ffn}n=1P2。对于第 n n n 个区域,其区域特征 f r n f_r^n frn 用于找到一个尺度 x r n x_r^n xrn,表明其包含目标的概率,其区域过滤器 f f n f_f^n ffn 与 mask 特征 F m F_m Fm 进行点乘得到区域分割 mask M r n ∈ R h × W M_r^n\in \mathbb{R}^{h\times W} MrnRh×W ,表明这一区域的面积。接下来通过加权在预测的 mask 上来聚合这些 masks:
M = ∑ n ( x r n M r n ) M=\sum_n(x_r^nM_r^n) M=n(xrnMrn)

输出和损失

  预测的 mask M M M 通过 GT mask M G T M_{GT} MGT 监督。 P × P P\times P P×P 概率图 x r x_r xr 通过从 M G T M_{GT} MGT 下采样到最小图来监督。同时,通过所有区域特征 F r F_r Fr 的全局平均特征来预测一个无目标的标签 E E E。在推理过程中,如果 E E E 预测的是正值,那么输出的 mask M M M 将会设为空。 M M M x r x_r xr E E E 通过交叉熵损失来引导训练。

5.2 ReLAtionship 建模

  提出的 ReLAtionship 建模包含两个模块:Region-Image Cross Attention (RIA)、Region-Language Cross Attention (RLA)。RIA 弹性地收集区域图像特征,RLA 捕捉区域-区域和区域-图像的依赖关系。

在这里插入图片描述

Region-Image Cross Attention (RIA)

  RIA 以视觉特征 F i F_i Fi P 2 P^2 P2 个可学习的基于区域的 queries Q r Q_r Qr 作为输入,通过图 4 中的最小图来监督。每个 query 都对应图像中的一个空间区域, 负责解耦这一区域的特征。其结构如图 5(a) 所示。首先,通过执行图像特征 F i F_i Fi P 2 P^2 P2 个 query embedding Q r ∈ R P 2 × C Q_r\in\mathbb{R}^{P^2\times C} QrRP2×C 间的注意力来产生 P 2 P^2 P2 个注意力图:
A r i = softmax ⁡ ( Q r σ ( F i W i k ) T ) A_{\boldsymbol{r}i}=\operatorname{softmax}(Q_r\sigma(F_iW_{\boldsymbol{i}k})^T) Ari=softmax(Qrσ(FiWik)T)其中 W r k W_{rk} Wrk C × C C\times C C×C 个可学习的参数, σ \sigma σ 为 GeLU。输出的结果 A r i ∈ R P 2 × H W A_{\boldsymbol{r}i}\in\mathbb{R}^{P^2\times HW} AriRP2×HW,赋值给每个 query 一个 H × W H\times W H×W 的注意力图,表明其在图像中的对应区域。接下来使用这些注意力图从相应的区域中得到区域特征:
F r ′ = A r i σ ( F i W i v ) T \begin{aligned}F_r'&=&A_{ri}\sigma({F_iW_{iv}})^T\end{aligned} Fr=Ariσ(FiWiv)T其中 W i v W_{iv} Wiv C × C C\times C C×C 个可学习的参数。在此方式下,每个区域的特征通过其相关位置进行动态收集。基于 mask 的预测 F r ′ F_r^{\prime} Fr 得到一个区域过滤器 F f F_f Ff,包含区域线索。 F r ′ F_r^{\prime} Fr 进一步送入到 RLA 中,用于区域-区域和区域-单词的交互建模。

Region-Language Cross Attention (RLA)

  区域图像特征 F r ′ F_r^{\prime} Fr 源于对那些不包含区域和语言信息关系的图像特征,于是提出 RLA 模块建模区域-区域和区域-语言交互。如图 5(b) 所示,RLA 由自注意力机制和多模态交叉注意力组成。自注意力模块建模区域-区域的依赖关系。通过计算单个区域与所有其它区域的注意力矩阵来输出关系感知区域特征 F r 1 F_{r1} Fr1。同时交叉注意力采用语言特征 F t F_t Ft 为 Value 和 key 的输入,区域图像特征 F t F_t Ft 作为 query 输入。于是建模每个词和每个区域的关系:
A l = softmax ⁡ ( σ ( F r ′ W l q ) σ ( F t W l k ) T ) A_l=\operatorname{softmax}(\sigma(F_r^{\prime}W_{lq})\sigma(F_tW_{lk})^T) Al=softmax(σ(FrWlq)σ(FtWlk)T)其中 A l ∈ R P 2 × N t A_l\in\mathbb{R}^{P^2\times N_t} AlRP2×Nt。之后将单词-区域的注意力来塑造成语言感知的区域特征: F r 2 = A l F t F_{r2}=A_lF_t Fr2=AlFt。最后,采用一个 MLP 来聚合交互感知区域特征 F r 1 F_{r1} Fr1 和语言感知的区域特征 F r 2 F_{r2} Fr2 以及区域图像特征 F r ′ F_r^{\prime} Fr F r = MLP ( F r ′ + F r 1 + F r 2 ) F_r=\text{MLP}(F_r^{\prime}+F_{r1}+F_{r2}) Fr=MLP(Fr+Fr1+Fr2)

六、实验

6.1 评估指标

  除了广泛使用的 RES 指标:cumulative IoU (cIoU) 和 Precision@X (Pr@X) 外,进一步引入 No-target accuracy (N-acc.)、Target accuracy (T-acc.)、generalized IoU (gIoU) 用于 GRES。

cIoU and Pr@X.

  cIoU 计算总体的交集像素与全集像素之比,Pr@X 统计的是当 IoU 大于某个阈值 X X X 时的样本数量百分比。Pr@X 中不计算无目标的样本。由于多目标样本有着更大的前景区域,因此更容易得到更高的 cIoU 得分。于是阈值 X X X 从 0.7 开始用于 Pr@X。

N-acc. and T-acc.

  这俩指标评估模型在无目标样本上的性能:对于无目标样本,当预测中没有任何前景像素时为正样本(TP),否则为负样本(FN)。之后 N-acc. 用于衡量模型在无目标样本上的性能: N-acc. = T P T P + F N \text{N-acc.} =\frac{{T}P}{TP+FN} N-acc.=TP+FNTP

  T-acc. 反应的是无目标样本影响目标样本的程度,即多少个有目标的样本被误分类为无目标样本: T-acc. = T N T N + F P \text{T-acc.} =\frac{{T}N}{TN+FP} T-acc.=TN+FPTN

gIoU.

  由于 cIoU 中更大的物体有更高的得分,恰好 GRES 中的目标有着更大的前景。于是引入一般化的 IoU(gIoU),平等对待所有样本。gIoU 计算每个图像在所有样本上的平均值。对于那些无目标样本,正的无目标样本的 IoU 值视为 1,而假的有目标的负样本的 IoU 值视为 0。

6.2 消融研究

数据集的必要性

在这里插入图片描述

RIA 设计的可选项

在这里插入图片描述

RLA 设计的可选项

在这里插入图片描述

区域 P P P 的数量

在这里插入图片描述

6.3 在 GRES 上的结果

与 RES sota 方法的比较

在这里插入图片描述

定量结果

在这里插入图片描述

失败的案例 & 讨论

在这里插入图片描述
  主要还是表达式的欺骗性太高,模型需要进一步查找所有物体的细粒度细节,并理解图像上下文的细节。

6.4 在经典 RES 上的结果

在这里插入图片描述

七、结论

  本文分析和解决了经典 RES 任务的限制,即不能解决多模态和无目标的表达式。基于此,提出一种新的 benchmark:Generalized Referring Expression Segmentation (GRES),使得表达式中可以包含任意数量的目标。相应地构建了一个大尺度数据集 gRefCOCO,提出了一个 baseline 方法: ReLA,显式地建模不同图像区域和单词间的关系,在经典的 RES 和 GRES 任务上实现了新的 SOTA。提出的 GRES 开放了新的应用场景,例如图像检索。

写在后面

  这是一篇工作量很大的文章,提出了数据集、方法、指标,可以说是挖了个大坑吧,感兴趣的同学建议关注下。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用腾讯云轻量服务器Matomo应用模板建网站流量统计系统

腾讯云百科分享使用腾讯云轻量应用服务器Matomo应用模板搭建网站流量统计系统,Matomo 是一款开源的网站数据统计软件,可以用于跟踪、分析您的网站的流量,同时充分保障数据安全性、隐私性。该镜像基于 CentOS 7.6 64位操作系统,已预…

Docker技术入门教程

Docker技术入门教程 一、docker概念 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后&a…

Digital thread中文术语标准化|Digital thread何时是“数字主螺纹”的意思?

文章仅供个人学习使用,请勿传播! 原文来源: 段海波 数字孪生体实验室 2021-12-30 18:22 https://mp.weixin.qq.com/s/-bgMkSewxOsjhTiagUnfsw 作者一直以来主张区分数字孪生系统和数字孪生体,进而构建系统化的数字孪生概念和术语体…

时序预测 | MATLAB实现基于BiLSTM双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于BiLSTM双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于BiLSTM双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 Matlab实现BiLST…

个人对哈希数据结构学习总结 -- 理论篇

个人对哈希数据结构学习总结 -- 理论篇 引言哈希表设计思考哈希冲突Hash Functions冲突解决开放地址法(Open Addressing)分离链表法(Separate Chaining)Two-way Chaining Dynamic Hash Tableschained Hashingextendible hashinglinear hashing说明 spiral storage 使用场景小结…

深入了解 Postman Test 校验的使用方法

Postman 是一个广泛使用的 API 开发工具,它允许开发人员测试 API 的各个方面,包括请求、响应、身份验证等等,其中最常用的功能之一就是 Test 校验。那今天就一起来看看 Postman 的 Test 校验该如何使用。 Test 校验是什么? Test…

Java中的继承

目标: 1,认识继承 Java中提供了一个关键字extends,用这个关键字,可以让一个类和另一个类建立起父子关系。 继承的特点: 子类可以继承父类的非私有成员(成员变量,成员方法)&#x…

LeetCode_04Java_88. 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组…

第三章 图论 No.11二分图,匈牙利算法与点覆盖

文章目录 二分染色:257. 关押罪犯增广路径372. 棋盘覆盖 最小点覆盖376. 机器任务 最大独立集378. 骑士放置 最小路径点覆盖 二分染色:257. 关押罪犯 257. 关押罪犯 - AcWing题库 最大最小问题,一眼二分 答案的范围在 [ 1 , 1 e 9 ] [1, 1…

数据驱动与关键字驱动

初次接触自动化测试时,对数据驱动和关键字驱动不甚理解,觉得有点故弄玄须,不就是参数和函数其嘛!其实其也体现了测试所不同与开发的一些特点(主要指系统测试),以及和对技术发展的脉络的展现。 …

MyBatisPlus通用枚举

数据库表中加一个字段sex(为int类型) 新加一个枚举的包,然后创建类的时候选择枚举类 Getter public enum SexEnum {MALE(1, "男"),FEMALE(2, "女");EnumValue//将注解标识的属性的值存储到数据库中private Integer sex;…

JZ36二叉搜索树与双向链表

题目地址:二叉搜索树与双向链表_牛客题霸_牛客网 题目回顾: 解题思路: 由题目可知,这里的二叉搜索树转成双向链表的符合左根右的逻辑顺序,且是一个递增序列。 创建两个指针,一个指向head,一个…

手把手教你,Selenium 遇见伪元素该如何处理?

问题发生 在很多前端页面中,大家会见到很多::before、::after 元素,比如【百度流量研究院】: 比如【百度疫情大数据平台】: 如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B…

NLP文本分类

NLP文本分类 落地实战五大利器!_kaiyuan_sjtu的博客-CSDN博客https://zhuanlan.zhihu.com/p/432619164 https://github.com/alibaba/EasyNLP/blob/master/README.cn.md

MySQL 索引 详解(保姆级教程)

一、索引概述 索引是帮助 MySQL 高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上…

面试热题(合并两个有序列表)

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 合并链表这类型题也是比较经典的题了,因为链表是由指针相互指向而确定位置,所以我们只需要改变某些节点的指针便可以做到对链表进行排序 今天这个方法…

【人工智能124种任务大集合】-集齐了自然语言处理(NLP),计算机视觉(CV),语音识别,多模态等任务

大家好,我是微学AI,今天给大家介绍一下人工智能124种任务大集合,任务集合主要包括4大类:自然语言处理(NLP)、计算机视觉(CV)、语音识别、多模态任务。 我这里整理了124种应用场景任…

代码审计-ASP.NET项目-未授权访问漏洞

代码审计必备知识点: 1、代码审计开始前准备: 环境搭建使用,工具插件安装使用,掌握各种漏洞原理及利用,代码开发类知识点。 2、代码审计前信息收集: 审计目标的程序名,版本,当前环境(系统,中间件…

词法分析器的设计与实现

1、实验目的及要求 1.1、实验目的 加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。 1.2、实验要求 1)对单词…

深入理解JVM之.intern()的用法

intern只在常量池里记录首次出现的实例引用 来看一段代码 public class RuntimeConstantPoolOOM {public static void main(String[] args) {String str1 new StringBuilder("计算机").append("软件").toString();System.out.println(str1.intern() st…