当前位置: 首页 > news >正文

【深度学习与图神经网络核心技术实践应用高级研修班-Day4】图像标题生成-image_caption_generation(encoder-decoder)

图像标题生成

  • 1. 概述
    • 1.1 图像标题生成
    • 1.2 CNN
    • 1.3 Decoder
    • 1.4 与文本翻译模型对比
  • 2. 模型原理
    • 2.1 图像标题生成模型
    • 2.2 学习目标、损失函数
  • 3. 代码实现
    • 3.1 数据集
    • 3.2 数据预处理
    • 3.3 构建模型
  • 4. 实验结果
    • 4.1 损失曲线
    • 4.2 测试模型
  • 5. 参考文献

在这里插入图片描述
在这里插入图片描述

1. 概述

1.1 图像标题生成

图像标题生成模型结合了计算机视觉和机器翻译的最新进展,利用神经网络生成真实的图像标题。

图像标题模型以图像作为输入,最大化产生给定图像的真实标题的可能性,并且可以在新的图像上生成标题。

例如,下图是使用 MS COCO数据集训练的图像标题生成模型可能生成的图像标题。

在这里插入图片描述

1.2 CNN

图像标题生成模型的重要组成部分是卷积神经网络CNN。

CNN可以很好地处理图像分类任务。一般图像的大小约为50*50像素,如果采用全连接网络,神经元数量将十分庞大。CNN可以通过卷积、池化等操作降低输入图像的维度,将其转化为固定维度的特征表示。这不仅可以减少过拟合的问题,也能获得更多的特征信息。

在这里插入图片描述

1.3 Decoder

图像标题生成模型的另一个重要组成部分是解码器Decoder

Decoder是一个RNN或LSTM网络,它的作用是将CNN网络生成的图像的高维特征表示“翻译”为图像标题。

文本翻译模型中也有Decoder,它们的功能大同小异。这两个模型的结构相似。

1.4 与文本翻译模型对比

图像标注模型思路源于文本翻译模型。

翻译模型包括两大结构:

  • 编码器(Encoder)
  • 解码器(Decoder)

编码器将输入的源语句转换为一个高维特征表示(Context)。

解码器根据编码器的输出Context,使用RNN或LSTM逐步生成目标单词序列。

在这里插入图片描述
RNN或LSMT网络在处理具有时序性的问题时效果很好,因此文本翻译模型中的编码器与解码器均为RNN网络。

CNN将输入的图像转为高维特征表示。

使用CNN网络代替文本翻译模型中的RNN Encoder。

在这里插入图片描述

2. 模型原理

2.1 图像标题生成模型

图像标题生成模型 = Encoder(CNN)+ Decoder(RNN/LSTM)

  • CNN(图像分类模型):识别图像中的信息,将图像转为高维特征向量
  • RNN(文本生成模型):从图像的特征向量中解码,逐步生成单词

在这里插入图片描述

直接使用现有的的CNN模型作为Encoder,这样可以省去图像的预训练步骤,加速全局网络训练进程。

本实验中,使用VGG19网络模型的特征提取层作为Encoder CNN

Decoder使用LSTM网络,能够更好地处理长文本。

在这里插入图片描述

2.2 学习目标、损失函数

学习目标为

给定一张图像,最大化输出正确描述的概率。

公式如下:

在这里插入图片描述
其中 I 为输入图像,S 为图像的正确标题,θ 为模型参数。

损失函数为负对数似然:

在这里插入图片描述

3. 代码实现

3.1 数据集

MSCOCO2014数据集:该数据是微软提供的图像数据集,训练集包括8万多张图片,验证集包括4万多张图片,并且提供了每张图片对应的标题。每张图片的标题不止一个,因此训练集一共411593个标题,而验证集一共201489个标题,平均一张图片五个标题。

与PASCAL COCO数据集相比,COCO中的图片包含了自然图片以及生活中常见的目标图片,背景比较复杂,目标数量比较多,目标尺寸更小,因此COCO数据集上的任务更难,结果也更能表现水平。

3.2 数据预处理

导入依赖库

在这里插入图片描述
加载数据

一张图片可能对应多个标题,因此以一个图片id和一个标题为一条数据。

对于图像,从图像中心开始保留一个固定大小的区域;对于标题,保留最多20个单词。

在这里插入图片描述
图像标题中一共有23728个单词。建立单词和数
字id之间的映射,并添加三个特殊字符。

在这里插入图片描述

将所有图像标题转换为id表示的序列

在这里插入图片描述

3.3 构建模型

加载已经预训练好的VGG19模型。

定义一个函数,对于给定的输入,返回VGG19各个层的输出值。通过variable_scope实现网络的重用,将卷积层的输出作为原始图片的表示。

在这里插入图片描述
构建Decoder

有了原始图像的特征表示后,需要将其解码为图像标题对应的单词序列。

首先初始化Decoder的权值、定义超参数。

在这里插入图片描述
依次定义输出序列的占位符、初始化Decoder网络状态:

在这里插入图片描述
实现词嵌入、特征映射等部分,定义LSTM单元:

在这里插入图片描述
生成图像标题中的每个词。采用注意力模型,得到更准确的结果:

在这里插入图片描述
定义LSTM处理、计算输出、计算损失函数几个部分:

在这里插入图片描述
在损失函数中加入注意力正则项,定义优化器,模型整体代码完成:

在这里插入图片描述

训练模型代码如下:

在这里插入图片描述

4. 实验结果

4.1 损失曲线

经过20轮训练后,损失函数曲线如图:

在这里插入图片描述

4.2 测试模型

图像标题生成结果:

涵盖了新娘、新郎、摆pose、拍照等关键词,并且注意力可视化也很好地反映了生成每个词时模型对图片不同区域的关注度.

在这里插入图片描述

5. 参考文献

  • Oriol Vinyals.Show and Tell: Lessons learned from the 2015 MSCOCO Image Captioning Challenge.2015. https://arxiv.org/pdf/1609.06647.pdf.
  • 张宏伦.深度有趣.2018.https://juejin.im/post/5ba4de5af265da0a89302eba#heading-8.
  • O’Relly.Caption this, with TensorFlow!.2017.https://github.com/mlberkeley/oreilly-captions.

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-35469.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

原创-Kafka原理

Kafka原理 2017年09月22日 22:39:45317人阅读 评论(0) 收藏 举报 分类: Kafka(1) 目录(?)[] Kafka 这段时间研究RabbitMQ、Kafka、RocketMQ消息队列,发现对她们原理的介绍都过于简单,所以整理了众多资料&…...

ef dbcontext

dbcontext class 用来crud数据库,也用来配置实体类,关系映射,缓存,事务,变化追踪等 using System.Data.Entity;public class SchoolContext : DbContext {public SchoolContext(){}// Entities public DbSet&l…...

【ACWing】1273. 天才的记忆

题目地址: https://www.acwing.com/problem/content/1275/ 从前有个人名叫WNB,他有着天才般的记忆力,他珍藏了许多许多的宝藏。在他离世之后留给后人一个难题(专门考验记忆力的啊!),如果谁能轻…...

《Python 编程从入门到实践》———— 创建和使用类

创建类 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。…...

C语言中的整型提升

C语言中的整型提升 提到整型提升,可能刚学c语言的小伙伴们很头疼这个知识点吧,下面我就我的理解简单分析一下整型提升是怎么回事. 首先还是介绍一下整型提升的概念: ​ c的整型算术运算总是至少以缺省整型类型的精度来进行的. 为了获得这个精度,表达式中的字符和短整型操作数在…...

Dubbo(一)项目架构演变过程

Dubbo(一)项目架构演变过程架构演变过程单体架构垂直架构SOA(分布式架构)微服务架构架构演变过程 dubbo是一款高性能的java rpn框架。 随着互联网的发展,用户群体逐渐壮大,网站的流量成倍增长,…...

Nuxt 项目完结总结

1、状态保存,即localstorage。 这里选择了 nuxt-vuex-localstorage(^1.3.0) 来做store的持久化保存。 modules: [nuxtjs/style-resources,nuxtjs/axios,[nuxt-vuex-localstorage,{localStorage: [localStorage]}] ] 2、登录token保存&…...

浅入浅出实现一个异步求和函数

简化:两数之和 我们先来简单的实现一个异步两数之和函数 function sumT(a, b) {return await new Promise((resolve, reject) > {asyncAdd(a, b, (err, res) > {if(!err) {resolve(res)}reject(err)})}) }// 测试 const test await sumT(1, 2) console.log…...

入门图形学:屏幕波爆特效

最近bilibili看了黑神话悟空的UE5演示视频,感觉是真牛逼,地址:黑神花悟空UE5实机演示视频 遥想我也算是国内第一批用ue4的开发者了,15年开始用ue4.7源码版,做了一年多就又用回u3d了,哈哈,主要因…...

unity学习笔记(一)

unity基础简介(一) unity是如何跨平台的(附c和c#编译过程) 前言 游戏引擎为了兼顾易用性和性能,往往使用一种高效率语言编写核心,使用另一种高级语言作为脚本语言,大部分游戏引擎的底层核心由…...

浮动布局,定位布局,伸缩盒布局

布局 默认文档流 1.元素显示的顺序和代码的顺序是一致的 2.块级元素独占一行空间,默认宽度为父元素的100%,高度由内容或者子元素决定 3.行内元素共享一行空间,默认宽高都由内容决定 浮动布局 float(如果一个元…...

Python大数据分析学习基础篇(3)——数据结构

一、函数部分 1、闭包 所谓闭包其实跟回调函数有有相通之处。闭包可以延长作用时间和作用域。 def say(word):def name(name):print(word,name)return name hi say(你好) hi("小明") bye say("再见") bye("小明 ") 运行结果: …...

5V升压充电12.6V充电芯片

五串5911 四串HU5912 三串HU5913 两串HU5914,升压充电管理IC HU5912四节锂电池升压充电IC 概要 HU5912是一款 5V输入,支持四节锂电池的升压充电管理 IC。 HU5912 ,采用异步开关架构,使其在应用时仅需 要极少的外围器件,可有效…...

SQL 之共同使用ip用户检测问题【自关联问题】-HQL面试题48【拼多多面试题】

目录 0 问题描述 1 数据分析 2 小结 0 问题描述 1 数据分析 (1)数据准备 create table log (uid string,ip string,time string )row format delimited fields terminated by \t;insert into log values (a, 124, 2019-08-07 12:0:0), (a, 124, 2019-08-07 13:0:0), (b, 1…...

thinkphp6 通过命令行快速生成多应用模块报 【Command “build“ is not defined.】错误的解决办法

在项目下执行如下命令 php think build admin报如下错误 [rootlocalhost orange]# php think build admin[InvalidArgumentException] Command "build" is not defined. 解决办法: 1.查看官方文档: https://www.kancloud.cn/manual…...

线程的安全性 - 并发基础篇

简介 当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就说这个类是线程安全的。 目录 这次分三步走:关于相关知识点,放在文末的脑图里了,大家想看结论的,可直接下拉观看哦。 1.创建一个线…...

栈?队列?Java ArrayDeque常用首尾操作方法整理

对于用Java刷leetcode的同学一定很眼熟ArrayDeque这个数据结构,因为它既可以作为队列也可以作为栈,解题时使用频率很高。补充一嘴,Stack也能作为栈来用,但是作为存在设计缺陷的Vector类的子类,已经不推荐使用了。 Arr…...

开发程序流程

JavaWeb程序--> 将一个请求路径( 网络地址) 变成一条sql语句,发送给数据库进行查询; 会将获取的数据,通过页面的方式,展示给用户进行操作; Javaweb程序如何将一个路径变成一条sql语句?...

从入门到放弃:Markdown中的LaTeX使用教程

LaTeX CSDN不支持显示的语法我已用 标注显示 基本语法 展现形式 在正文中的LaTeX公式用$...$定义行内公式,$$...$$单独居中显示 希腊字母 显示命令显示命令α\alphaβ\betaγ\gammaδ\deltaε\epsilonζ\zetaη\etaθ\thetaι\iotaκ\kappaλ\lambdaμ\muν\…...

----- ElasticSearch -----

1.什么是RestFul 2.什么是全文检索 3.什么是Elastic Search 开源 Apache Lucen 工具包 java api特别多 solr 全文检索服务器 底层封装了lucene ElasticSearch 开源搜索引擎 java 4.ES中基本概念 1)接近实时(NRT Near Real Time 2)索引(index) 3&am…...

pydub 安装 win10

在 anaconda 环境下,pip install pydub,检测是否安装成功出现错误: RuntimeWarning: Couldnt find ffmpeg or avconv - defaulting to ffmpeg, but may not work warn("Couldnt find ffmpeg or avconv - defaulting to ffmpeg, but m…...

算法刷题计划一----数据结构2-6(leetCode)

415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。 提示: num1 和num2 的长度都小于 5100 num1 和num2 都只包含数字 0-9 num1 和num2 都不包含任何前导零 你不能使用任何內建 BigInteger 库, 也不能直接将输入的…...

HTML(菜鸡视角)

heading <h> 标题 </h> 多级标题时&#xff1a;<h1> <h2>......级联 Paragraph <p> 段落内容 </p> Note&#xff01; <!-- 注释内容 --> Element <main> 主要内容 </main> image <img src&quo…...

剑指Offer14-剪绳子12

题目描述–剪绳子1 思路分析 首先要分析出怎么切分是最优方案&#xff0c;显然和一定时&#xff0c;分成相等的数的乘积最大。用简单的数学归纳的思想可以发现&#xff0c;4对应2*2&#xff0c;5对应2x3&#xff0c;6对应3x3&#xff0c;7对应3x2x2&#xff0c;8对应3x3x2&…...

能被5和6同时整除 并且每10个数一行 用python编程 记录

2021-8-23 题列出为100到1000之间能同时被5和6整除的数&#xff0c;并且10个数为一列 接触该题 编写了下面的代码 下面展示一些 内联代码片。 for i in range(100, 1001):if i % 5 0 and i % 6 0:print(i, end" ")结果是&#xff1a; ** 120 150 180 210 240 270…...

解决国内下载vscode慢的方法

VSCO的的下载地址&#xff1a; https://code.visualstudio.com/Download 下载也太慢了 解决办法&#xff1a; 复制链接到新的窗口&#xff0c;将圈起来的地方改为国内镜像地址&#xff1a;vscode.cdn.azure.cn 然后几秒就下载好啦...

RobotFramework-RIDE简单使用

RobotFramework-RIDE简单使用 准备工作 环境准备&#xff08;Python 3.7.5&#xff0c;robotframework 4.1&#xff0c;robotframework-ride1.7.4.2&#xff09; 1&#xff09;pip install robotframework-ride&#xff08;根据本机Python和RobotFramework安装适配版本&#…...

阿里云短信集成dome

依赖&#xff1a; <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.0.6</version></dependency><dependency><groupId>com.aliyun</groupId><artif…...

【lssvm预测】基于鲸鱼算法优化lssvm数据预测matlab源码

1、最小二乘支持向量机LSSVM基本原理 最小二乘支持向量机是支持向量机的一种改进&#xff0c;它是将传统支持向量机中的不等式约束改为等式约束, 且将误差平方和(SumSquaresError)损失函数作为训练集的经验损失,这样就把解二次规划问题转化为求解线性方程组问题, 提高求解问题…...

数据库原理-ER模型转换为关系模型

1。ER图转换成关系模式集的算法(联系类型的转换&#xff09;:不同的情况做不同的处理。(二元联系类型的转换) ①若实体间联系是1:1&#xff0c;可以在两个实体类型转换成的两个关系模式中任意一个关系模式的属性中加入另一个关系模式的键和联系类型的属性。 若实体间联系是1:n…...

基于C语言开发的教师管理系统

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85673191 设计任务 ① 编写一个教室管理系统, 管理教师的信息和教师所上的课程的信息, 教师的信息包括:教师编号、姓名、性别、出生年月、职称、最后学历、工资、婚否、授课数据集; 授课信息包括&…...

计算机等级考试嵌入式三级重点考点归纳

选择题&#xff1a; 1.基址加变址寻址方式&#xff0c;字节数据存储指令用STRB; 2.SPI可以构成“一主一从式”、“一主多从式”、“多主多从式”和“互为主从式”系统。 3.USB 2.0采用半双工差分方式传送信息&#xff0c;速度为480Mb/s&#xff0c;USB3.0达到5Gb/s即640MB/s 4…...

Python源码剖析1-整数对象PyIntObject

1、PyIntObject 对象 [intobject.h] typedef struct {PyObject_HEADlong ob_ival; } PyIntObjectPyIntObject是一个不可变&#xff08;immutable&#xff09;对象。Python内部也大量的使用整数对象&#xff0c;我们在自己的代码中也会有大量的创建销毁整型对象的操作&#xff…...

详解 Spring Boot 项目中的日志文件

目录 1. 日志的作用 2. 自定义日志打印 2.1 日志的基本格式 2.2 得到日志对象 2.3 使用日志对象提供的方法&#xff0c; 打印自定义的日志内容 2.4 日志框架的说明 3. 日志的持久化 3.1 配置日志文件的文件名 3.2 配置日志文件的保存路径 3.3 持久化日志的特性 4. 日…...

平面设计转前端,啥都不会怎么办?

毕业三年&#xff0c;干了3年平面设计。现决定转行学习前端&#xff0c;寻求外单。 在我眼中技术类型的事情就是分为三大块 &#xff0c;一&#xff1a;理论 二&#xff1a;软件 三&#xff1a;平台 你会发现只要你是从事互联玩相关的任何行业这三种是必不可少的。 一&#xf…...

平面设计点线面在设计中的运用

本文由&#xff1a;“学设计上兔课网”原创&#xff0c;图片素材来自网络&#xff0c;仅供学习分享 平面设计点线面在设计中的运用&#xff0c;点、线、面是平面构成中最基础的要素&#xff0c;就是在同一个平面空间内,主角和配角元素组合&#xff0c;让配角有效的衬托主角&am…...

深度学习常见网络结构和设计思路总结(期末复习)

前言 该文的主要原因是深度学习期末开卷考试&#xff0c;因此整理了NN&#xff0c;CNN&#xff0c;RNN&#xff0c;GAN各个网络模型原理和相关知识。 并且对如何设计一个神经网络提出相关讨论&#xff0c;以及神经网络中损失函数&#xff0c;优化算法等也举例&#xff0c;希望…...

平面设计学习网

http://www.68pslm.com/...

Python 安装pandas模块

pandas Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具&#xff0c;该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型&#xff0c;提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和…...

《模拟电子技术》半导体原理部分笔记

《模拟电子技术》笔记绪论第一章 常用半导体器件第二章 基本放大电路绪论 有的人把三极管的出现作为电子技术工业革命的开始标志学习架构&#xff1a;半导体器件&#xff08;二极管、三极管、场效应晶体管&#xff09;、基于上述管的放大电路、集成运算放大器、放大电路的频率…...

毕业设计-基于机器视觉的车型识别系统

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…...

Unity3D实现场景跳转方法

一、搭建一个场景&#xff0c;创建Button按钮&#xff0c;在其Inspector版面创建脚本ChangeScene 二、编写ChangeScene脚本&#xff0c;实现场景跳转功能 三、选择菜单栏的File->Build Settings添加场景...

Unity创建超写实三维场景的一般步骤

使用Unity创建三维场景最容易想到的是手动在地形上刷草、刷树等&#xff0c;但是这种方法不仅工作量大&#xff0c;但不真实。最近学习了Gaia插件&#xff0c;发现Gaia用程序自动生成的&#xff0c;感觉这种思想太妙了&#xff0c;World Creator也采用了类似的方法&#xff0c;…...

Unity3D项目之游戏场景小地图制作

Unity3D项目之游戏场景小地图制作 创建一个场景资源&#xff0c;可在asset store资源商店下载&#xff0c;选择心仪场景。 链接:https://assetstore.unity.com/?localezh-CN 添加一个对象GameObject&#xff0c;命名为player,子物体包括&#xff1a;主摄像机&#xff0c;角色…...

QT3D场景快速绘制入门学习

在QT中实现3D绘制的方式&#xff1a; 1) 使用QT OpenGL模块&#xff08;QOpenGLWidget等&#xff09; 2) 使用QT 3D C类&#xff08;QEntity等&#xff09; 3) 使用QT 3D QML类&#xff08;Entity等&#xff09; QT3D场景提供了一种快速设置3D场景的一种方式&#xff…...

Jetson的mavros使用offboard模式,终端按键控制无人机飞行

基于Promethues根据wiki配置好之后可以实现使用终端控制&#xff0c;起飞&#xff1b;降落&#xff1b;前后左右飞行&#xff1b;上升下降左转右转&#xff1b; 开始我基于仿真测试实机不成功&#xff0c;是因为某个运行节点没有打开&#xff0c;仔细看gazebo.launch文件里仿真…...

ue4和Airsim仿真无人机,键盘控制无人机运动

代码 #键盘测试 import keyboard import airsimclient airsim.MultirotorClient() client.confirmConnection()def abc(x):w keyboard.KeyboardEvent(down, 28, w)s keyboard.KeyboardEvent(down, 28, s)a keyboard.KeyboardEvent(down, 28, a)d keyboard.KeyboardEvent(…...

Unity工具 - 工具聚合页(UEWindow)

随着项目工程的推进&#xff0c;开发者们会根据工作内容的需要在Unity内开发众多的工具。随着工具的增多&#xff0c;Unity 的Menu菜单也会逐渐臃肿&#xff0c;过于分散&#xff0c;工具代码也难以查找。在此问题的基础上&#xff0c;开发了工具聚合页(UEWindow) 这一功能来管…...

无人机相关知识解读

目录 1.什么是云台&#xff1f; 2.云台的工作原理&#xff1f; 3.无人机吊舱是什么&#xff1f; 4.什么是无人机&#xff1f; 5. 无人机都有哪些&#xff1f; 6.什么是多旋翼无人机&#xff1f; 7.什么是直升机无人机&#xff1f; 8.什么是固定翼无人机&#xff1f; 9…...

客户关系管理(增删查改)

完整项目代码: 第一次使用mvc设计模式开发项目&#xff0c;是一个功能简单的项目&#xff0c;业务层service的功能也很少。 需要用到的jar包&#xff1a; 直接上代码 链接&#xff1a;https://pan.baidu.com/s/1cNCUvQBWY_NGiJT4FRX2qw 提取码&#xff1a;kak7 CustomerServ…...