提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 摘要
- Abstract
- 文献阅读:基于场景文字知识挖掘的细粒度图像识别算法
- 1、研究背景
- 2、方法提出
- 方法模块
- 3、试验
- 4、文章贡献
- 二、RNN代码学习
- 2.1、什么是RNN
- 2.2、RNN的处理过程
- 2.3、RNN简单代码实现
- 总结
摘要
本周主要阅读了2022CVPR的文章,基于场景文字知识挖掘的细粒度图像识别算法,该论文提出了一种通过挖掘场景文本背后的语义来增强分类模型理解图像内容的方法,该方法利用场景文字作为关键词,到Wikipedia知识库中检索出相关的知识,并获取其特征表达,和图像视觉特征进行融合理解,而并非仅仅利用场景文字的表面语义信息,这种方法能够更好地理解文字语义并不非常直观的内容,从而提升图像识别的性能。除此之外,我还学习复习了RNN的相关知识,并通过其实现过程来进行代码的学习。
Abstract
This week, I mainly read the articles of 2022 CVPR. The fine-grained image recognition algorithm based on scene text knowledge mining proposed in the paper utilizes scene text as keywords to retrieve relevant knowledge from the Wikipedia knowledge base and obtain its feature representation. This method fuses the visual features of images and semantic information behind scene text, rather than just utilizing the superficial semantic information of scene text. This method can better understand the semantics of text that are not very intuitive, thereby improving the performance of image recognition. Besides, I also reviewed the relevant knowledge of RNN and learned code through its implementation process.
文献阅读:基于场景文字知识挖掘的细粒度图像识别算法
Title: Knowledge Mining with Scene Text for Fine-Grained Recognition
Author:Hao Wang, Junchao Liao,Tianheng Cheng, Zewen Gao, Hao Liu, Bo Ren, Xiang Bai, Wenyu Liu
From:2022 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)
1、研究背景
文字是人类传达信息、知识和情感的重要载体,其蕴含了丰富的语义信息。利用文字的语义信息,可以更好地理解图像中的内容。和文档文本不同,场景文字具有稀疏性,通常以少许关键词的形式存在于自然环境中,通过稀疏的关键词,机器难以获取精准的语义。然而,人类能够较为充分地理解稀疏的场景文字,其原因在于,人类具有大量的外部知识库,能够通过知识库来弥补稀疏的场景文字所带来的语义损失。对于一些特定的细粒度的场景,挖掘场景文本背后丰富的语义信息能够进一步弥补场景文本的语义损失,从而更为准确地理解图像中的目标。
2、方法提出
文中提出了一种通过挖掘场景文本背后语义来增强分类模型理解图像内容的方法,该方法的核心是利用场景文字作为关键词,到wikipedia知识库中检索出相关的知识,并获取其特征表达,和图像视觉特征进行融合理解,而并非仅仅利用场景文字的表面语义信息。如下图所示,网络框架由视觉特征分支、知识提取分支和知识增强分支、视觉-知识注意力模块和分类器构成。算法输入包括3部分:图像,图像中包含的场景文本实例,外部知识库。其中场景文本实例通过已有的文字识别器从输入图像中获取,外部知识库采用了Wikipedia。知识提取分支提取场景文本实例背后的语义信息(知识特征),知识增强分支融合场景文本实例和挖掘出的知识特征。随后,视觉-知识注意力模块融合视觉和知识特征,并将其输入给分类器进行分类。
方法模块
基于场景文字知识挖掘的细粒度图像识别算法框架由视觉特征分支、知识提取分支和知识增强分支、视觉-知识注意力模块(VKAC)和分类器构成。
- 知识提取分支:该分支由实体候选选择器和实体编码器构成。在知识库中,同一关键词能够表示多个实体,比如apple可表示fruit apple,也可表示company apple。实体候选选择器预先在大量语料库上统计单词在所有可能实体上的概率分布,根据概率分布选取前10个候选实体,并将其输入给实体编码器进行特征编码。实体编码器在Wikipedia的数据库上进行预训练,预训练任务旨在通过Wikipedia上实体的描述来预测该页面的标题(实体名称)。通过此任务的学习,实体名称对于的特征编码了该词条的上下文信息。
- 知识增强特征分支:该分支主要由bert构成,在bert的第10层后插入知识注意力模块(KARC),该模块融合了文本实例特征和知识特征后,接着输入给bert剩余的层。Bert第12层输出的特征给VKAC模块。
- 视觉-知识注意力模块:并非所有的场景文本或知识对理解图像有积极作用,为选取和图像内容相关的场景文本和知识来加强对图像的理解。该模块以图像全局特征作为访问特征,从增强的知识特征中选取相关的知识特征来加强视觉特征。其网络结构由注意力模型构成。
3、试验
试验收集了一个关于人群活动的数据集。该数据集中的类别主要分为游行示威和日常人群密集活动两大类,细分为21类。具体分类如下图所示,是21种人类行为。
- 与SOTA对比:在公开数据集Con-Text、Bottles以及我们收集的Activity数据集上,在使用resnet50[3]和E2E-MLT[4]作为视觉特征提取器和文字提取器时,我们方法能在同等情况下取得最佳结果。当使用ViT和Google OCR时,其模型性能结果能进一步提升。
- 视觉、文本、知识特征对识别的影响:可以看出,文本的表面语义(Glove,fastText)在视觉网络为Resne50[3]的时候,能对识别性能有较大提升。当视觉网络为ViT[2]时,提升极其有限。如图5所示,Resnet50关注于主要于视觉目标具有区分力的区域,而ViT能同时关注在视觉目标和场景文字上。因此,再使用场景文字的表语含义难以对ViT有较大促进作用。而挖掘文本的背后语义后,能进一步提升ViT作为视觉backbone的模型的性能。
4、文章贡献
- 利用场景文本线索:传统的图像识别方法主要依赖于图像本身的视觉特征,如颜色、形状、纹理等。但这种方法在面对细粒度图像分类任务时,可能会遇到困难,因为细微的差异可能很难通过单纯的视觉特征来区分。而该算法利用了场景中的文本信息,为图像识别提供了额外的线索,从而提高了识别的准确性。
- 融合视觉和知识特征:该算法不仅关注图像的视觉特征,还通过知识提取和增强分支,挖掘场景文本背后的语义信息,并将其与视觉特征融合。这种融合的方式有助于更全面地理解图像内容,进一步提高了识别的性能。
- 弥补语义损失:在一些图像中,场景文本可能非常稀疏或者难以识别,这可能导致语义信息的损失。通过外部知识库的引入,该算法能够挖掘出这些稀疏文本背后的丰富语义,从而弥补了语义损失,使得识别更为准确。
- 提高模型泛化能力:通过引入外部知识库,该算法不仅在训练数据上表现优秀,而且具有较强的泛化能力。这意味着该算法在面对未见过的图像或新的场景时,也能有较好的表现。
- 促进人工智能与人类的结合:传统的图像识别方法主要依赖于机器学习和人工智能技术,而该算法则通过引入人类的知识和经验,使得图像识别更为准确。这种方法为人工智能与人类的结合提供了新的思路,有助于开发出更为智能、高效的图像识别系统。
二、RNN代码学习
2.1、什么是RNN
循环神经网络(Recurrent Neural Network,RNN)是一种深度学习模型,用于处理序列数据。RNN的核心特点是具有记忆单元,能够捕捉序列数据中的长期依赖关系。在RNN中,神经网络单元按照时间序列连接,每个单元的输出作为下一个单元的输入,从而实现信息的循环传递。RNN的应用领域非常广泛,包括自然语言处理、语音识别、机器翻译、时间序列预测等。常见的RNN变种包括长短时记忆网络(LSTM)和门控循环单元(GRU),它们通过引入不同的机制来改善RNN的训练和性能。
2.2、RNN的处理过程
- 对数据集进行向量化表示,例如使用词向量或one-hot编码。
- 前向过程:定义一个输出向量,该网络由n个RNN模块组成。将向量化的数据与一个矩阵W1相乘得到输出out1,将上一个RNN模块的输出out与一个矩阵W2相乘得到out2,将out1与out2相加得到当前RNN模块的输出out3,给out3施加一个激活函数得到out4,out4即为当前RNN模块的输出。
- 反向传播:利用梯度下降法对所有的RNN模块的W1和W2进行更新。
2.3、RNN简单代码实现
class SimpleRNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(SimpleRNN, self).__init__()
self.hidden_size = hidden_size
self.rnn = nn.RNN(input_size, hidden_size, batch_first=True)
self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x):
# 初始化隐藏状态
h0 = torch.zeros(1, x.size(0), self.hidden_size).to(x.device)
# 前向传播RNN
out, _ = self.rnn(x, h0)
# 获取最后一个时间步的输出
out = self.fc(out[:, -1, :])
return out
总结
本周主要阅读了2022CVPR的文章,基于场景文字知识挖掘的细粒度图像识别算法,该论文提出了一种通过挖掘场景文本背后的语义来增强分类模型理解图像内容的方法,该方法利用场景文字作为关键词,到Wikipedia知识库中检索出相关的知识,并获取其特征表达,和图像视觉特征进行融合理解,而并非仅仅利用场景文字的表面语义信息,这种方法能够更好地理解文字语义并不非常直观的内容,从而提升图像识别的性能。除此之外,我还学习复习了RNN的相关知识,并通过其实现过程来进行代码的学习。