基于深度学习的图像标题自动生成模型
项目背景
21世纪是一个充满信息的时代,图像作为人类感知世界的视觉基础,是人类获取信息、表达信息和传递信息的重要手段。人工智能是长久以来人类不断探索的一个重要方向,如何让计算机学会人类的能力有着非常重要的意义。得益于计算机并行计算能力的提高和数据爆炸式的增长,产生了大量神经网络类的算法,这类神经网络算法通常网络层数更多,因此又叫做深度神经网络或者深度学习算法。深度学习算法对于复杂的人工智能任务有着惊人的有效性,在多个领域都有所应用。本项目的主要研究内容是图像标题生成算法和应用,由于该任务是计算机视觉与自然语言处理两个领域交叉产生的,因此更加复杂。我们将使用深度学习算法对图像标题生成任务中的不同部分进行设计和建模,图像标题生成算法的思想也可应用在验证码图像识别任务中。
项目意义
传统单词与图像内容相对应的方式,缺乏对后续输出的影响,需要先使用数字图像处理的方法对验证码图片进行处理,需要人工操作,系统的移植性也不高。基于深度学习的图像标题生成算法以注意力模型为算法的基本思想,在编码器-解码器框架下进行,通过编码器将图像信息编码,然后使用编码器的输出循环解码成一句话,从而将验证码图片作为输入,字符作为标题句子,把该问题转换为验证码标题识别问题发挥深度学习端对端优势。
项目原理
项目设计
该项目通过下载MS-COCO数据集用于训练一个基于注意力的模型,从而得出模型在生成标题时所关注的图像的哪些部分,以达到该项目生成任意图片标题的目标。具体训练流程为,使用Inception V 3对图像进行预处理和缓存图像子集,再对编解码模型进行训练,最后使用经过训练的模型在新图像上生成标题。
项目步骤如下:
1. 下载MS-COCO数据集,再限制训练集大小为30000个标题及其相应图像的子集用于训练基于注意力模型。
2. 使用InceptionV 3对每个图像进行分类。并从最后一个卷积层中提取特征。首先,使用预处理方法将图像规范化,使其包含范围为-1到1的像素,这与用于训练InceptionV 3的图像格式相匹配。
3. 初始化InceptionV 3并加载预先训练的Imagenet权重。创建一个tf.keras模型,其中输出层是InceptionV 3体系结构中的最后一个卷积层。并通过网络转发每个图像,并将生成的向量存储在字典中。在通过网络传递所有图像之后,对字典进行筛选,并将其保存到磁盘中。缓存从InceptionV 3提取的特性。使用InceptionV 3对每个映像进行预处理,并将输出缓存到磁盘。我们标记标题创建数据中所有独特词汇的词汇表。再将词汇量限制在前5,000个单词,并用标记“UNK”替换所有其他单词。然后创建字到索引和索引到字的映射。最后,将所有序列与最长序列的长度相同。
4.创建一个tf.data数据集,用于训练项目的模型;提取存储在.npy文件,然后通过编码器传递这些功能。将编码器输出、隐藏状态(初始化为0)和解码器输入(这是开始令牌)传递给解码器。解码器返回预测和解码器隐藏状态。然后将解码器隐藏状态传递回模型,并使用预测来计算损失。使用教师强制决定下一个输入到解码器。教师强制是将目标词作为下一个输入传递给解码器的技术。
5. 计算梯度,并将其应用于优化器和反传播。
项目展示
图片标题生成:(A panda sitting in a tree)
图片标题生成:(A tiger running in the water)
图片标题生成:(A man riding a wave on top of a surfboard)
图片标题生成:(A female tennis player in action on the court)
图片标题生成:(There are two rows of yellow trees on either side of a road)