近年来,随着基于自节点结构的模型的开发,尤其是变压器模型的建议,它极大地促进了自然语言处理模型的开发。到了变压器的计算效率和可扩展性,它一直是能够使用超过100b参数的空前比例训练模型。
VIT是自然语言处理和计算机视觉的整合。没有卷积操作的依赖性,它仍然可以在图像分类任务中取得良好的结果。
VIT模型的主要结构是基于变压器模型的编码器部分(调整了某些结构序列,例如:归一化的位置与标准变压器不同)。结构图如下:
VIT模型应用于图像分类领域。因此,与传统变压器相比,其模型结构具有以下特征:
代码实例将进行详细说明,以基于VIT实施ImageNet分类任务。
此情况基于Mindspore-GPU版本,并在单个GPU卡上完成了模型培训和验证。
首先导入相关模块,配置相关的超级巨星和读取数据集。该代码的这一部分直接在Vision套件中具有API。有关详细信息,请参阅以下链接:https://gitee.com/mindspore/vision。
您可以通过:http://image-d.org/下载数据集。
在加载前定义数据集路径,请确保您的数据集路径如下。
下面将通过代码仔细分析VIT模型的内部结构。
变压器模型来自2017年的一篇文章[2]。基于本文注意机制的编码器型结构在自然语言处理领域取得了巨大成功。模型结构如下图所示:
它的主要结构由多个编码器和解码器模块组成。编码器和解码器的详细结构如下图::
编码器和解码器由许多结构组成,例如:多头注意层,前馈层,正常化的层甚至残留的连接。但是,最重要的结构是多头注意,该结构基于自我注重机制并且是多重自我的平行组成。
因此,理解自我已获得变压器的核心。
以下是自我意见的解释。核心内容是为每个单词输入向量学习一个重量。通过给定任务相关的查询向量查询向量,计算查询与每个键之间的相似性或相关性,以获取注意力分布,即获得每个键的重量系数密钥对应于该值,然后加权值并获得最终注意力。值。
在自我意见中:
3.最终输出是通过矢量V的软总和获得权重总和。在全球情况下,可以将此过程理解为自付的关注。结束,这是自我规定获得的最终结果。结果是将当前向量与其他向量相结合后获得。
通过下图,您可以掌握整个自我意识的整个过程。
多头注意的注意机制是将原始自我处理处理的矢量分为多个负责人进行处理。这也可以从代码中反映出来。这也是可以加速平行的注意力结构的一个方面。
总而言之,当维持参数总数时,相同的查询,键和值将映射到不同子空间的原始高维空间(q,k,v)(q_0,k_0 ,, k_0 ,, q_0,k_0 ,,,k_0 ,, v_0)计算自我注意事项,最后将注意力信息合并在不同儿童空间中。
因此,对于相同的输入向量,可以同时处理多种注意力机制,即使用并行计算加速处理过程,并在处理时进行更充分的分析和使用的矢量特征。机制。并行功能主要反映在下面的图中的$ A_1 $和$ A_2 $的部门中。
以下是视觉套件中的多头注意代码,结合上述解释,该代码清楚地显示了此过程。
在理解了自我之间的结构之后,可以通过结构的缝制(例如饲料向前,残留的连接)来形成变压器基础架构的缝线。接下来,使用自我分配来构建VIT模型中的变压器部分,类似于构建变压器编码器部分。
从以下源代码可以清楚地看到变压器的结构。变形金学结构与多层感知(MLP)的组合构成了VIT模型的主干部分。
传统的变压器结构主要用于处理自然语言领域中的vector(单词嵌入或单词向量)。矢量和传统图像数据之间的主要区别在于,矢量通常由1维矢量堆叠,图片是两个维度矩阵矩阵。当1-维单词向量堆叠时,在单词向量之间提取连接,这是语义语义,它使变压器在自然语言处理领域中非常有用,以及2维图矩阵如何具有1个维度,具有1个维度。1具有1个维度的维度。单词向量的变换成为变压器进入图像处理字段的小门槛。
在VIT模型中:
这是图像输入网络的第一步。特定补丁嵌入的代码如下:
从论文中的模型结构中,可以知道,将输入图像分为补丁后,它将传递pos_embedding和class_embedding的过程。
从论文中,pos_embedding中有4个解决方案。但是,在作者的论点之后,只有pos_embedding,而没有pos_embedding会产生重大影响。至于pos_embedding是1D还是2维,对分类结果几乎没有影响。因此,在我们的代码中,1-维pos_embemdding也使用1个-dimensional pos_embemding.class_embedding在pos_embedding之前添加,因此pos_embedding的尺寸将比贴片的拉伸尺寸为1。
通常,VIT模型在处理语义语义时仍使用变压器模型的优势,将图像转换为“变体矢量”,然后处理。。
以下代码构建了一个完整的VIT模型。
在模型培训和推理模型培训模型开始培训之前,您需要设置损失功能,优化器,回调功能等。直接调用MindVision提供的接口以促进实例化。
结果:
模型验证过程主要应用NN,模型,上下文,Imagenet,CrossNtropymooth和VIT_B_16和其他接口。
验证集可以通过更改成像网接口的拆分参数来调用。
与训练过程相似,首先调用VIT_B_16接口来定义网络结构以加载前训练模型参数。SUB后来设置损失函数,评估索引等,并在编译模型后验证模型。
结果:
在执行模型推理之前,我们必须首先定义一种预处理数据预处理图片处理的方法。该方法可以通过调整大小和正常化的理由图片进行处理,以匹配培训期间的输入数据。
接下来,我们将模型推理的预测方法称为预测方法。应当指出的是,需要准备推理图片。同时,给出了使用read_dataset接口读取推理图片路径的准确路径,并使用GeneratorDataset来生成测试集。
在推理过程中,ImageNet接口主要负责配对原始数据集标签和模型输出。可以通过index2label获得相应的标签,并且结果通过Show_result接口写在相应的图片上。
结果:
推理过程完成后,图片的推理结果可以在推理文件夹下找到,如下图所示:
此案完成了Imagenet数据的培训,验证和推理的过程,该过程解释了关键的VIT模型结构和原理。通过学习此情况,了解源代码可以帮助学生掌握关键概念,例如多头关注,TransformerenCoder,,pos_embedding。如果您想详细了解VIT的模型原理,建议根据对源代码的更深入阅读来参考愿景套件:
https://gitee..com/mindspore/vision/tree/master/examples/classification/vit。
[1] Dosovitskiy,Alexey等。“图像价值16x16单词:用于大规模图像识别的变压器。”ARXIV预印型ARXIV:2010.11929(2020)。
[2] Vaswani,Ashish等。“关注您所需要的。”神经信息处理系统的进步。(2017)。
原始:https://juejin.cn/post/7097089867141611528