【新手也能读懂的超详细论文解读】Show and Tell: A Neural Image Caption Generator

本文主要是介绍【新手也能读懂的超详细论文解读】Show and Tell: A Neural Image Caption Generator,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Show and Tell: A Neural Image Caption Generator

  • 前言(与论文无关)
  • 简介
  • 模型
  • 总结

前言(与论文无关)

最近事情比较多,除了考试还有导师布置的任务,还有几门考试,当然还要花时间打游戏,所以呢没有时间每天都更新。不过我还是希望不要颓废,这个定时看论文写笔记的习惯要好好保持。那就决定以后每周会固定更新两篇,空闲时间多的话会再多写。封锁在学校里最大的影响就是没法练琴了,啊啊啊啊好想谈琴啊!!!

简介

这同样是cvpr 2015的一篇文章,也是师姐叮嘱专门读的一篇。这篇读完可以算是对图像描述这个方向有个大体的了解,里面所使用的编码-解码的结构甚至到现在都是很实用的,后来的大多数这方面的文章都是在该模型的基础上进行的优化改良。

文章开篇就讲,这篇论文将最近比较火的计算机视觉和机器翻译两个领域融合起来,从而有了这个模型。图像描述比目标检测和图像分类更加难一点,因为好的描述不仅仅要抓住图像中的客观物体,更要表述出这些目标之间的关系。不仅如此,还得考虑语义,不同的语言还得考虑语法。

那个时候现有的办法都是讲解决上述每个子问题的方法合在一起来生成图像描述,而这篇论文则首次提出用一个模型来解决所有的问题,俗称一步到胃(狗头)。

这篇论文的几个创新点(原文):

  • First, we present an end-to-end system for the problem. It is a neural net which is fully trainable using stochastic gradient descent.
    提出了一个 Neural Image Caption(NIC)模型来生成图像描述,该模型的优化目标可以使用梯度下降来训练。

  • Second, our model combines state-of-art sub-networks for vision and language models. These can be pre-trained on larger corpora and thus can take advantage of additional data.
    该模型结合了现有的一些用于视觉和语言模型的最新子网,所以可以保证有足够的数据来进行预训练。

  • Finally, it yields significantly better performance compared to state-of-the-art approaches.
    最后呢,当然是每篇论文都有的话,只不过这篇说的更拽一点:我们的模型优于现有的所有模型。

模型

这个模型的意思呢就是参考机器翻译那样,把图像编码成一种可以用来表示主要特征的机器语言,然后再讲该语言像中英文翻译的那种方法来“翻译”出来,从而形成图像描述。我们可以通过以下公式最大化生成单词的概率:
在这里插入图片描述
其中cita是模型的参数,I代表输入图像,S是图像的正确描述。由于S的长度是不固定的,所以我们需要用链式法则来求联合概率分布,公式则变为:
在这里插入图片描述
在训练时,(S,I)是一组训练数据,同时在训练过程中使用随机梯度下降对第二个公式进行优化。自然而然地我们可以用RNN为概率p(St|I,S0,…,St−1) 进行建模,其中不同地单词用固定长度的隐藏状态或者记忆ht来表示。其中ht是在收到一个输入Xt之后通过一个非线性函数变换得到:
在这里插入图片描述
要是的这个RNN更加具体我们需要关注这两个问题:函数f的具体形式是什么?图像和单词是如何变为输入Xt的?

我想这个在前面介绍里面已经或多或少的提到过了。函数f是解码环节的LSTM模型,而Xt的形成则是编码环节的CNN。而整体的模型是这个亚子的:
在这里插入图片描述
值得一提的是LSTM在第t-1时间步产生的输出St-1会再带入到第t时间步中去,这其实算是LSTM的一个特性吧。文章中还花了大篇幅讲解LSTM模型的原理,这里我就不多赘述。总之,模型展开是这样的:
在这里插入图片描述
我们的损失是每一步正确单词的负对数似然之和,如下所示:
在这里插入图片描述

总结

这篇文章提出了一个可以自动查看图像并以简单的英语生成合理描述的端到端神经网络系统,称之为NIC。这个模型在后面读其他图像描述模型时会经常出现。NIC由一个CNN来对图像进行编码,以及LSTM进行解码的模型。该模型的优化目标为最大化给定图像产生句子的似然。从这些实验中可以清楚地看出,随着可用的图像描述数据集的大小增加,NIC等方法的性能也会提高。 此外,有趣的是,人们将如何使用无监督数据(无论是单独的图像还是单独的文本)来改善图像描述方法。

这篇关于【新手也能读懂的超详细论文解读】Show and Tell: A Neural Image Caption Generator的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/583977

相关文章

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

MySQL之搜索引擎使用解读

《MySQL之搜索引擎使用解读》MySQL存储引擎是数据存储和管理的核心组件,不同引擎(如InnoDB、MyISAM)采用不同机制,InnoDB支持事务与行锁,适合高并发场景;MyISAM不支持事务,... 目录mysql的存储引擎是什么MySQL存储引擎的功能MySQL的存储引擎的分类查看存储引擎1.命令

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill

java时区时间转为UTC的代码示例和详细解释

《java时区时间转为UTC的代码示例和详细解释》作为一名经验丰富的开发者,我经常被问到如何将Java中的时间转换为UTC时间,:本文主要介绍java时区时间转为UTC的代码示例和详细解释,文中通... 目录前言步骤一:导入必要的Java包步骤二:获取指定时区的时间步骤三:将指定时区的时间转换为UTC时间步

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

MySQL批量替换数据库字符集的实用方法(附详细代码)

《MySQL批量替换数据库字符集的实用方法(附详细代码)》当需要修改数据库编码和字符集时,通常需要对其下属的所有表及表中所有字段进行修改,下面:本文主要介绍MySQL批量替换数据库字符集的实用方法... 目录前言为什么要批量修改字符集?整体脚本脚本逻辑解析1. 设置目标参数2. 生成修改表默认字符集的语句3