pytorch时空数据处理2——图像转文本/字幕Image-Captionning(一)

  • pytorch时空数据处理2——图像转文本/字幕Image-Captionning(一)
    • 最终目标
    • 主要技术概念
    • 模型实现概述
      • Encoder
      • Decoder
      • Attention
      • Putting it all together 结合以上细节实现模型
      • Beam Search
      • 下一篇博客:[代码实现与解析](https://blog.csdn.net/u013398034/article/details/114163436)

pytorch时空数据处理2——图像转文本/字幕Image-Captionning(一)

前言:pytorch入门学习链接;深度学习入门前戏 文章内容主要参考翻译于:链接

最终目标

构建一个用于生成图像描述、字幕或标题的模型。为了更快实现目的,让我们将复现“Show, Attend, and Tell”这篇论文。这并不是目前最好的解决方案,但效果依旧让人满意。作者最初的实现可以在这里找到。这个模型学会了去何处寻找关注点,当一个字一个字生成标题时,我们能够通过可视化的看到模型的“目光”在图像上移动。其中的关键在于它的注意力机制,并允许它集中注意力在图像中与它接下来要说的单词最相关的部分。以下是在训练或验证过程中模型没有先验知识的测试图像上生成的一些标题:



主要技术概念

  • Image captioning 图像字幕
  • Encoder-Decoder 架构 编码器解码器架构:通常,一个生成序列的模型将使用一个编码器将输入编码成固定的形式,一个解码器将其逐字的解码回序列。
  • Attention 注意力:注意力网络在深度学习中被广泛使用,并且得到了充分的认同。这是一种让模型只选择它认为与手头任务相关的编码部分的方法。相同机制可以用于任何模型,其中编码器的输出在空间或时间上有多个点。在图像字幕中,可以认为某些像素比其他像素更重要。同样在对机器翻译之类的任务进行排序时,通常也会考虑一些单词比其他单词更重要。
  • Transfer Learning 迁移学习:这是通过在新模型中使用部分现有模型来借用现有模型的方式。这几乎总是比从头开始训练新模型(即一无所知)要更优。正如接下来要讲到的一样,我们通常可以根据手头的具体任务来微调这些已有的知识。例如,使用预先训练的单词嵌入是一个看似愚蠢但有效的例子。对于我们的图像字幕问题,我们将使用预先训练的编码器,然后根据需要对其进行微调。
  • Beam Search 波束搜索:这就是你不能让你的解码器懒惰的地方,简单地选择在每个解码步骤得分最高的单词,但这不是最优的选择。波束搜索对于任何语言建模问题都很有用,因为它可以找到最优的序列。(后续会详细说明过程)

模型实现概述

在本节中,我将介绍此模型的概述。如果已经熟悉它,可以直接阅读[下一篇博客](https://blog.csdn.net/u013398034/article/details/114163436)

Encoder

编码器将具有3个颜色通道的输入图像编码为具有“learned”通道的较小图像。这个较小的编码图像是原始图像中所有有用内容的汇总表示。由于我们要对图像进行编码,所以我们使用卷积神经网络(CNN)。

我们不需要从头开始训练编码器。为什么?因为已经有经过训练的CNN来表示图像。多年来,人们一直在建立模型,这些模型非常擅长将图像归类到一千种类别中的一种。理所当然,这些模型能够很好地捕捉到图像的本质。

我选择使用在ImageNet分类任务中训练的101分层残差网络,PyTorch中已经提供了该网络。如前所述,这是迁移学习的一个例子。因此可以选择对其进行微调以提高性能。


这些模型逐渐创建了原始图像的越来越小的表示形式,并且每个后续表示形式都更“learned”能力,有更多的通道。由我们的ResNet-101编码器产生的最终编码的大小为14x14,具有2048个通道,即20481414大小张量。

鼓励尝试其他经过预先培训的体系结构。这篇论文使用的是VGGnet,也是在ImageNet上预先训练的,但没有微调。无论哪种方式,修改都是必要的。由于这些模型中的最后一层或两层是线性层,并结合Softmax激活进行分类,因此我们将其去掉。(因为它不是需要的输出形式)

Decoder

解码器的工作是查看编码图像并逐字生成字幕。因为它正在生成一个序列,所以它需要是一个递归神经网络(RNN)。我们将使用LSTM(LSTM理解与代码实现)。
在没有注意的典型设置中,您可以简单地平均所有像素上的编码图像。然后,无论是否进行线性变换,您都可以将其作为第一个隐藏状态输入到解码器中,期间每个预测单词被用来生成下一个单词,最终生成字幕。

在需要注意的情况下,我们希望解码器能够在序列中的不同点查看图像的不同部分。例如,当一个人拿着足球时,解码器会知道要专注于足球!如下图所示

我们不会简单的使用平均值,而是使用所有像素的加权平均值,其中重要像素的权重较大。图像的该加权表示可以在每个步骤与先前生成的单词连接以生成下一个单词。

Attention

通常使用注意力网络计算这些像素点的权重。凭直觉,你会如何评估图像某一部分的重要性呢?我们需要知道到目前为止已经生成的序列,这样就可以查看图像并决定下一步需要描述什么。例如,在你提到一个人之后,宣布他拿着足球是合乎逻辑的。这正是注意力机制所做的——它能够考虑到目前为止生成的序列,并关注下一步需要描述的图像部分。

我们将使用软注意力,其中像素的权重加起来为1。如果我们的编码图像中有P个像素,则在每个时间步长t时间段内权重和为1。可以将整个过程解释为计算像素是生成下一个单词的位置的概率。

Putting it all together 结合以上细节实现模型

现在可能已经很清楚这次实现的联合网络是什么样子了。如下图所示:

  • 在编码阶段一旦编码器生成编码图像,我们就转换编码,为LSTM解码器创建初始隐藏状态h(和单元状态C)。
  • 在解码阶段:
    • 编码图像和先前的隐藏状态被用来为注意力网络中的每个像素生成权重。
    • 先前生成的字和编码的加权平均被馈送到LSTM解码器以生成下一个字。

Beam Search

我们使用线性层将解码器的输出转换为词汇表中每个单词的分数。

最直接和最贪婪的选择是选择得分最高的单词,并用它来预测下一个单词。但这并不是最优的,因为序列的其余部分取决于您选择的第一个单词。如果这个选择不是最好的,那么接下来的一切都是次优的。而且不只是第一个单词,序列中的每个单词都会对后面的单词产生影响。如果你在第一步选择第三个最好的词,在第二步选择第二个最好的词,以此类推,很可能会发生这种情况。这将是你能产生的最好的序列。如果我们在完全解码完成之前不能做出决定,并从一篮子候选序列中选择总得分最高的序列,那将是最好的。

波束搜索就是这样做的:

  • 在第一个解码步骤中,考虑前k个候选。 为这k个第一个单词中的每一个生成k个第二个单词。
  • 根据加法分数选择前k个[第一个单词,第二个单词]组合。
  • 对于这k个第二个单词中的每一个,选择k个第三个单词,选择前k个[第一个单词、第二个单词、第三个单词]组合。 在每个解码步骤中重复。
  • K个序列终止后,选择综合得分最高的序列。

    如图中所示,一些序列(删除)可能会提前失败,因为它们在下一步无法到达顶部k。一旦k个序列(带下划线)生成< end >标记,因此我们选择得分最高的一个。

下一篇博客:代码实现与解析

pytorch时空数据处理2——图像转文本/字幕Image-Captionning(一)相关推荐

  1. 1个模型横扫40+个SOTA!22位华人共同打造佛罗伦萨模型,一统图像视频文本,含9亿图像-文本对...

    关注公众号,发现CV技术之美 本文转载自新智元 编辑:小咸鱼 好困 LRS [导读]近日,微软正式发布了一个新的计算机视觉基础模型Florence(佛罗伦萨),要用一个模型一统多模态天下!Floren ...

  2. 个人永久性免费-Excel催化剂功能第86波-人工智能之图像OCR文本识别全覆盖

    在上一年中,Excel催化剂已经送上一波人工智能系列功能,鉴于部分高端用户的需求,再次给予实现了复杂的图像OCR识别,包含几乎所有日常场景,让公司个人手头的图像非结构化数据瞬间变为可进行结构化处理分析 ...

  3. LeCun点赞!data2vec:适用于图像/语音/文本的自监督算法来了!拿下多项SOTA

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 转载自:机器之心 |  编辑:陈萍.小舟 人类似乎对不同的学习模式有着相似的认知,机器也应该如此! 自监督学 ...

  4. 【项目实战课】基于Pytorch的DANet自然图像降噪实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的DANet自然图像降噪实战>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战讲 ...

  5. 使用OpenAI CLIP链接图像和文本

    介绍 尽管深度学习已经彻底改变了计算机视觉和自然语言处理,但使用当前最先进的方法仍然很困难,需要相当多的专业知识. 诸如对比语言图像预训练(CLIP)等OpenAI方法旨在降低这种复杂性,从而使开发人 ...

  6. CVPR2022 | ZeroCap:零样本图像到文本生成的视觉语义算法

    CVPR2022 | ZeroCap:零样本图像到文本生成的视觉语义算法 [写在前面] 最近的文本到图像匹配模型将对比学习应用于大量未经管理的图像和句子对.虽然此类模型可以为匹配和后续的zero-sh ...

  7. R语言使用ggpubr包的ggarrange函数组合多张结论图:使用ggpubr包将图像、文本、表格组合在一起展示

    R语言使用ggpubr包的ggarrange函数组合多张结论图:使用ggpubr包将图像.文本.表格组合在一起展示 目录 R语言使用ggpubr包的ggarrange

  8. Python为图像添加文本内容(Writing Text on Image)

    Python为图像添加文本内容(Writing Text on Image) #原始图像 #图像添加文本 # from PIL import Image, ImageDraw, ImageFontim ...

  9. PyTorch框架学习六——图像预处理transforms(二)

    PyTorch框架学习六--图像预处理transforms(二) (续)二.transforms的具体方法 4.图像变换 (1)尺寸变换:transforms.Resize() (2)标准化:tran ...

最新文章

  1. 北方工业大学计算机科学与技术复试分数线,北方工业大学复试分数线
  2. python之迭代锁与信号量
  3. EF中三大开发模式之DB First,Model First,Code First以及在Production Environment中的抉择
  4. 计算机屏幕怎么睡眠状态,解决办法:显示器进入睡眠状态时如何解决问题
  5. springboot---request 中Parameter,Attribute区别
  6. eclipse 关闭时progress information弹框_Spring开发环境搭建(Eclipse)
  7. Linux内核crypto子系统的调用逻辑
  8. 新突破!CVPR2019接收论文:新的基于自编码变换的无监督表示学习方法—AET
  9. pytorch torch.nn.TransformerEncoder
  10. 配置devtools热部署
  11. 视频去水印工具-视频去水印哪个软件好用免费
  12. 2021 考研数学一/二/三难度如何,有什么特点?
  13. 软文发布时标题怎么写,这几点值得注意!
  14. 5g网络技术目前怎么样?5g网络什么时候出?
  15. asterisk拨号计划中Hangup() App执行规则
  16. Python-100-Days学习笔记day09
  17. Git基础(三)--常见错误及解决方案
  18. 从开始到现在······
  19. 手机怎么登虚拟服务器,如何用手机号登录云服务器
  20. python怎么安装scrapy_windows下安装python+scrapy

热门文章

  1. cesium只展示某个区域市省地图
  2. Android 再次探究Fragment在各种情况下的onResume与onPause
  3. 神经网络的阈值是什么,神经网络权重取值范围
  4. 插入排序算法——C++
  5. QtQuick 麦克风采集生成波形图(二)
  6. 物联网学习之C语言的运用
  7. wps计算机课笔记,学霸笔记|2022一轮复习课本-WPS Office.doc
  8. 低功耗蓝牙BLE之AES-128加密算法
  9. 点击忘记密码,显示重置密码的方式(五)
  10. 机器学习5-线性回归算法的代码实现