Image captioning评价方法之SPICE

2023-05-16

项目地址:https://panderson.me/spice/

上述的项目地址包含了论文地址和代码地址。

该方法是由The Australian National University和Macquarie University联合发表在ECCV2016上。

文章认为之前的评价方法采用n-gram的方式计算不是特别的好,例如下面例子

(a) A young girl standing on top of a tennis court.
(b) A giraffe standing on top of a green field.

a,b两个句子完全不是相同的意思,但是即使使用5-gram来度量,由于都存在‘standing on top of a’这个短语,导致这两个句子的相似度会很高。

而拿下面例子来说:

(c) A shiny metal pot filled with some diced veggies.
(d) The pan on the stove has chopped vegetables in it.

c,d是表达一个意思,但是拿n-gram来度量,它们相似度很低。

文章考虑利用scene graph来对两个句子之间的相似度进行度量。先要说明的是,SPICE(Semantic Propositional Image Caption Evaluation)从名字上看是为了image caption任务提出的,但是对结果进行评测时,实际是比较candidate caption和reference caption之间的关系,所以跟MT(machine translation)任务的评测很像。又由于文章使用了semantic结构对场景描述,给出了对应的名词,所以文章的方法更适合评价image captions任务。

先给出一些符号的定义,一个candidate caption用c表示,对应同一个图片的的reference captions集合用 S = { s 1 , . . . , s m } S=\{s_1, ..., s_m\} S={s1,...,sm}表示。评价的目的就是求c与S之间的相似度。

一、Semantic Parsing—Captions to Scene Graphs

在计算相似度之间,先介绍一下scene graph的概念,并且解释一下怎么将caption转换为scene graph。

给定一个目标类别(object classes)的集合C,一个关系类型(relation types)集合R,一个属性类型(attribute types)集合A,和一个caption c,将c转换为scene graph的方法用符号表示为

G ( c ) = ⟨ O ( c ) , E ( c ) , K ( c ) ⟩ G(c)=\langle O(c), E(c), K(c)\rangle G(c)=O(c),E(c),K(c)

式中, O ( c ) ⊆ C O(c)\subseteq C O(c)C表示c中提到的目标, E ( c ) ⊆ O ( c ) × R × O ( c ) E(c)\subseteq O(c)\times R\times O(c) E(c)O(c)×R×O(c)表示目标之间的连接, K ( c ) ⊆ O ( c ) × A K(c)\subseteq O(c)\times A K(c)O(c)×A表示目标与属性之间的关系连接。

文章先使用the Stanford Scene Graph Parser将caption转换为一个依赖树结构,然后利用九个简单的语言规则将树结构转换为一个scene graph。如下图所示,左边为一幅图和它对于的一些描述,右边为所有描述生成的一张scene graph。图中红色表示目标,绿色表示属性,蓝色表示关系。

在这里插入图片描述

二、SPICE计算

在上面流程等到了candidate和reference scene graphs后,需要将图中的连接逻辑用一系列的元组表示。用公式表示如下:

T ( G ( c ) ) = Δ O ( c ) ⋃ E ( c ) ⋃ K ( c ) T(G(c))\overset{\Delta}{=}O(c)\bigcup E(c)\bigcup K(c) T(G(c))=ΔO(c)E(c)K(c)

上式中,T表示将scene graph转换为元组集合。元组包含了一个或者两个或者三个元素,这些元素用来表示目标、属性、关系之间的关系。

如下图所示的的scene graph

在这里插入图片描述

表示成元组集合为:

{(girl), (court), (girl, young), (girl, standing), (court, tennis), (girl, on-top-of, court)}

知道如何将scene graph转换为元组集合后,那么就可以计算SPICE了,用公式表示如下:

P ( c , S ) = ∣ T ( G ( c ) ) ⨂ T ( G ( S ) ) ∣ ∣ T ( G ( c ) ) ∣ P(c, S)=\frac{|T(G(c))\bigotimes T(G(S))|}{|T(G(c))|} P(c,S)=T(G(c))T(G(c))T(G(S))

R ( c , S ) = ∣ T ( G ( c ) ) ⨂ T ( G ( S ) ) ∣ ∣ T ( G ( S ) ) ∣ R(c, S)=\frac{|T(G(c))\bigotimes T(G(S))|}{|T(G(S))|} R(c,S)=T(G(S))T(G(c))T(G(S))

S P I C E ( c , S ) = F 1 ( c , S ) = 2 ⋅ P ( c , S ) ⋅ R ( c , S ) P ( c , S ) + R ( c , S ) SPICE(c, S)=F_1(c,S)=\frac{2\cdot P(c, S)\cdot R(c,S)}{P(c, S)+R(c, S)} SPICE(c,S)=F1(c,S)=P(c,S)+R(c,S)2P(c,S)R(c,S)

式中 ⨂ \bigotimes 表示两个元组集合匹配上的元组,这里匹配采用的是与METEOR相同的规则,即形式不同或者同义词都认为是相同的词。

上述是一张图片的评测结果,如果是一个数据集,那么总的结果为所有结果求平均。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Image captioning评价方法之SPICE 的相关文章

  • 如何使图像呈现出陈旧、布满灰尘、颜色褪色的外观?

    我有旧画的图像 这些画很旧 布满灰尘 颜色褪色 如图所示here https i stack imgur com xuoEF jpg 如何赋予任何图像这种 旧 外观 我找不到任何过滤器或 openCV 函数来实现这种类型的外观 EDIT 我
  • Python - 查找图像中对象的中心

    我有一个具有白色背景和非白色对象的图像文件 我想使用 python Pillow 找到对象的中心 我在 C 中发现了类似的问题 但没有可接受的答案 如何找到物体的中心 https stackoverflow com questions 12
  • WPF 图片库

    我将驱动一个需要向用户呈现图像组的触摸屏应用程序 不是网络应用程序 我们的愿望是呈现具有页面前进 后退功能的 3x3 图像网格 他们可以选择一些 我将只展示这些图像 我没看到ListView完全符合我的要求 尽管 WPF 足够大 我很可能错
  • 通过内联样式动态设置背景 Div 图像时不显示 | Next.Js

    我试图通过使用地图和外部 js 文件将图像存储为对象来从组件渲染图像 然后通过它们设置循环 将其设置为创建的每个 div 的不同背景图像 如果有意义的话 我将提供代码来更清楚地说明我想要完成的任务 在地图过程中 我试图定位对象方法 但我相信
  • 将图像文件存储在猫鼬模式的二进制数据中并以html形式显示图像

    我正在使用 Express Node js 和 Mongodb 创建上传和显示图像文件的网页 我使用 schema 将图像的二进制文件保存在 mongodb 中 这是我在index js和db js中的一点代码 var Post mongo
  • 在 Java 中加载和缓存图像的最佳方法是什么?

    我有超过一千个 16 x 16 像素图块图像的大量集合 我在 Java 中制作的游戏需要这些图像 在不耗尽 JVM 可用内存的情况下存储切片的最佳方法是什么 我认为生成 1000 BufferedImages 可能并不明智 保持图像准备就绪
  • ImageMagick 更改图像宽度和高度

    我正在使用 ImageMagick 通过使用下面的命令行选项来调整图像分辨率 convert abc png set units PixelsPerInch density 75 abc a png 我需要这个 如果任何图像的宽度超过 30
  • 图像上的 JQuery 加载事件

    我想在加载图像时将图像父级的大小调整为与图像相同的大小 此时我正在使用这段代码 window load function image principale each function this parent css height this
  • 如何在 Node.js 中将 HTML 转换为图像

    我需要在 Node 服务器上将 HTML 模板转换为图像 服务器将以字符串形式接收 HTML 我尝试过 PhantomJS 使用一个名为 Webshot 的库 但它不能很好地与 Flex 框和现代 CSS 配合使用 我尝试使用 Chrome
  • 如何使用 Misc.imread 将图像分割为红色、绿色和蓝色通道

    我正在尝试将图像切片为 RGB 但在绘制这些图像时遇到问题 我使用此函数从某个文件夹获取所有图像 def get images path image type image list for filename in glob glob pat
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • Android 如何从我的应用程序使用 SD 卡中的文件路径预览图像

    文件存在于sdcard image jpg我想创建我自己的应用程序 活动 按下按钮时 需要使用内置图像查看器显示存储在 SD 卡中的图像 按图像查看器中的后退按钮后 它应该返回到我正在运行的应用程序 需要一些帮助 您可以为此创建一个具有适当
  • 将 UIImage 放入 UIButton 的简单方法

    我的 iPhone 应用程序中有一个 UIButton 我将其大小设置为 100x100 我有一个 400x200 的图像 我希望在按钮中显示它 按钮仍然需要保持在 100x100 并且我希望图像缩小以适应 但是 保持正确的纵横比 我想这就
  • 图片加载性能

    我已经尝试了几个小时从文件加载图像的各种方法 请看一下这两种方法 public Image SlowLoad string path return Image FromFile path public Image FastLoad stri
  • Android:自动从项目包中删除未使用的图像

    我正在开发一个相当大的android项目 并且在drawable文件夹中有很多图像 其中许多图像未在项目中使用 因为它们已被替换 并且占用了宝贵的空间 有什么方法可以自动找到这些图像并删除它们 而不是搜索项目中的每个图像 我使用过的一些工具
  • 在 Python 中倾斜数组

    我有一个 2D 数组 我将使用它保存为灰度图像scipy misc toimage 在此之前 我想将图像倾斜给定角度 像这样进行插值scipy ndimage interpolation rotate 上图只是为了说明倾斜过程 我知道我必须
  • 图像上的文字

    是否可以在 php 中动态地将文本放置在图像上 然后将其发送到 rss feed 是的 可以使用GD http www php net gd函数或图像魔术师 http www php net imagemagick功能 具体取决于您的服务器
  • 在 Swift 中将 gif 保存到 iOS 照片库

    我正在尝试保存位于已使用 Regift 代码创建的临时文件中的 GIF 图像 Regift https github com matthewpalmer Regift https github com matthewpalmer Regif
  • 将 System.Drawing.Image 转换为 System.Windows.Media.ImageSource 但没有结果

    我想在我的 WPF 应用程序中将 Image 转换为 ImageSource 我使用正常工作的 Code128 库 已在 WinForms 应用程序中检查 下面的函数返回具有适当大小的 ImageSource 但没有任何内容可见 priva
  • WPF 中按钮的启用和禁用状态的不同图像

    我想根据按钮的状态更改下面代码中按钮的图像 即使用不同的图像来启用和禁用状态

随机推荐