Image captioning评价方法之CIDEr

2023-05-16

文章地址:CIDEr: Consensus-based Image Description Evaluation

代码地址(非官方,且代码实现的是CIDEr-D):https://github.com/tylin/coco-caption

文章由微软和Virginia Tech联合发表在CVPR2015上。

CIDEr是专门用来评价image captioning效果的评价指标。

下面先定义一些符号。对于一张图片 I i I_i Ii,candidate sentence定义为 c i c_i ci, reference sentences定义为 S i = { s i 1 , . . . , s i m } S_i=\{s_{i1}, ..., s_{im}\} Si={si1,...,sim}。一个n元组(n-gram)定义为 ω k \omega_k ωk,一个n元组为一个或者多个单词组成的有序序列。本文n取1,2,3,4。

一、CIDE

在进行CIDE计算之前,先将所有句子中的单词转换为原始形式,及“fishes”、“fishing”、“fished”都转换为fish。

文章认为评价指标应该考虑几点:

  1. candidate sentence中的n-grams在reference sentences中出现的频率
  2. 类似1,没在reference sentences中出现的n-grams也不应该在candidate sentence中出现
  3. 在所有图片的描述经常出现的n-grams,应该降低它们的权重(因为这种n元组没有太多针对性的信息含量,即与当前图片的信息相关性较小)

基于上述三点,文章提出一个叫TF-IDF(Term Frequency Inverse Document Frequency)的概念,TF表示在当前candidate sentence中出现的频率,IDF表示反比在所有reference sentences出现的频率。

对于一个n元组 ω k \omega_k ωk出现在某一个reference sentence s i j s_{ij} sij中的次数记为 h k ( s i j ) h_k(s_{ij}) hk(sij),同理, h k ( c i ) h_k(c_i) hk(ci)表示该n元组出现在 c i c_i ci的次数。那么对于该n元组的TF-IDF表示为

g k ( s i j ) = h k ( s i j ) ∑ ω l ∈ Ω h l ( s i j ) l o g ( ∣ I ∣ ∑ I p ∈ I m i n ( 1 , ∑ q h k ( s p q ) ) ) g_k(s_{ij})=\frac{h_k(s_{ij})}{\sum_{\omega_l\in{\Omega}} h_l(s_{ij})}log(\frac{|I|}{\sum_{I_p\in I}min(1, \sum_q h_k(s_{pq}))}) gk(sij)=ωlΩhl(sij)hk(sij)log(IpImin(1,qhk(spq))I)

式中 Ω \Omega Ω表示所有的n元组的个数, I I I表示所有的图片个数。

可以看出对于某一个n元组 ω k \omega_k ωk来说,TF-IDF就是TF*IDF, 式子的左边就是TF右边就是IDF。在 s i j s_{ij} sij中n元组出现次数越多,TF值就越大。n元组在所有的 s p q s_{pq} spq中出现的次数越多,IDF就越小。

C I D E r n CIDEr_n CIDErn则是用来计算candidate sentence和reference sentences在n长度的元组表示时的相似度,用公式表示为

C I D E r n ( c i , S i ) = 1 m ∑ j g n ( c i ) ⋅ g n ( s i j ) ∣ ∣ g n ( c i ) ∣ ∣ ⋅ ∣ ∣ g n ( s i j ) ∣ ∣ CIDEr_n(c_i, S_i)=\frac{1}{m}\sum_j\frac{\textbf{g}^n(c_i)\cdot \textbf{g}^n(s_{ij})}{||\textbf{g}^n(c_i)||\cdot ||\textbf{g}^n(s_{ij})||} CIDErn(ci,Si)=m1jgn(ci)gn(sij)gn(ci)gn(sij)

式中 g n ( c i ) \textbf{g}^n(c_i) gn(ci)是由n-gram取长度n时 g k ( c i ) g_k(c_i) gk(ci)组成的向量,对应的 ∣ ∣ g n ( c i ) ∣ ∣ ||\textbf{g}^n(c_i)|| gn(ci)表示该向量的模。 g n ( s i j ) \textbf{g}^n(s_{ij}) gn(sij)含义类似。m为对应图片 I i I_i Ii有多少个reference sentences。

从式中可以看出,就是向量的内积除以向量的模,含义就是两个向量的相似程度。

最终n变化时,所有的 C I D E r n CIDEr_n CIDErn取平均得到 C I D E r CIDEr CIDEr

C I D E r ( c i , S i ) = ∑ n = 1 N ω n C I D E r n ( c i , S i ) CIDEr(c_i, S_i)=\sum^N_{n=1}\omega_nCIDEr_n(c_i, S_i) CIDEr(ci,Si)=n=1NωnCIDErn(ci,Si)

其中 ω n = 1 / N \omega_n=1/N ωn=1/N, 文章取N=4。

二、CIDEr-D

文章提出了CIDEr的修改版本CIDEr-D,目的是为了防止评价指标的gaming问题。gaming问题就是防止针对某一种评价指标来优化算法使得当人类给出的分很低,但是评价指标给出的分很高。

首先,去除了将句子中的单词转换为原始形式这一步,为了就是让句子生成时对应的状态是对的。

第二,在CIDEr评价指标中,对一些重复单词得到的长句子,CIDEr的分数越高,为了减少这种影响,文章加入了高斯因子,用于惩罚candidate和reference sentence长度相差较大的情况。

最后,给一些重复高置信度(即信息含量较多的句子,比如图片有一条鱼,那句子重复说fish的情况)的单词的句子加惩罚。例如对于某个指定的n元组来说,取该n元组在candidate和reference sentence出现次数最小的数。(类似于Bleu的操作)

那么 C I D E r − D n ( c i , S i ) CIDEr-D_n(c_i, S_i) CIDErDn(ci,Si)

C I D E r − D n ( c i , S i ) = 10 m ∑ j e − ( l ( c i ) − l ( s i j ) 2 2 σ 2 ∑ j m i n ( g n ( c i ) , g n ( s i j ) ) ⋅ g n ( s i j ) ∣ ∣ g n ( c i ) ∣ ∣ ⋅ ∣ ∣ g n ( s i j ) ∣ ∣ CIDEr-D_n(c_i, S_i)=\frac{10}{m}\sum_j e^{\frac{-(l(c_i)-l(s_{ij})^2}{2\sigma^2}}\sum_j\frac{min(\textbf{g}^n(c_i),\textbf{g}^n(s_{ij}))\cdot \textbf{g}^n(s_{ij})}{||\textbf{g}^n(c_i)||\cdot ||\textbf{g}^n(s_{ij})||} CIDErDn(ci,Si)=m10je2σ2(l(ci)l(sij)2jgn(ci)gn(sij)min(gn(ci),gn(sij))gn(sij)

式中, l ( c i ) l(c_i) l(ci) l ( s i j ) l_(s_{ij}) l(sij)表示candidate和reference sentences的长度,10是为了将CIDEr-D的值和其它评价指标的值大小相似, σ = 6 \sigma=6 σ=6

那么CIDEr-D的计算方式为

C I D E r − D ( c i , S i ) = ∑ n = 1 N ω n C I D E r − D n ( c i , S i ) CIDEr-D(c_i, S_i)=\sum^N_{n=1}\omega_nCIDEr-D_n(c_i, S_i) CIDErD(ci,Si)=n=1NωnCIDErDn(ci,Si)

其中 ω n = 1 / N \omega_n=1/N ωn=1/N

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

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

  • 如何从浮点数组创建新的 QImage

    我有一个代表图像的浮点数数组 列在前 我想在 QGraphicsSecene 上将图像显示为 QPixmap 为了做到这一点 我尝试使用 QImage 构造函数 QImage const uchar data int width int h
  • 如何从 dataurl 在服务器上创建图像文件

    我有一个 dataurl 格式的图像 例如 data image jpeg base64 9j 4AAQSkZJRgABAQAAAQABAAD 2wBDAAMCAgMCAgMDAwMEAwME iiigAooooAKKKKACiiigAoo
  • PHP cURL 代理带标头?

    我正在制作一个 PHP 图像代理脚本 我需要它不仅能够回显其请求的图像的内容 而且还能够以相同的方式重现图像请求的标头 我见过一个 另一个 但没有同时看到过 这些 cURL 选项让我感到困惑 我该怎么做 抱歉 我不确定你想要什么 这是从图像
  • 在本地 UIWebView 中使用 Retina 图像

    由于某种原因 我无法让 UIWebView 与我的新 Retina 图像 很好地配合 问题 一步一步 我正在从捆绑包中加载一系列 HTML 帮助文件 如果是 iPhone 4 我的代码会加载不同的 HTML 文件 LWERetinaUtil
  • 如何缩小 BufferedImage 的大小和质量?

    我正在开发一个项目 一个名为 远程桌面控制 的客户端服务器应用程序 我需要做的是获取客户端计算机的屏幕截图并将该屏幕截图发送到服务器计算机 我可能需要每秒发送 3 到 5 张图像 但考虑到发送BufferedImage直接的过程成本太高 我
  • Tiff 的 getImageWritersByFormatName 中存在问题。获取图像作家

    我正在尝试将 PDF 转换为 tiff 图像 我使用以下代码按格式获取图像编写器 Iterator
  • iOS 非矩形图像裁剪? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • HTTP 重定向图像可以吗?

    返回图片资源时返回301 302 303代码可以吗 我过去曾这样做过 而且似乎有效 这是好的做法吗 它与大多数浏览器兼容吗 是的 您可以重定向图像 浏览器将遵循重定向 但出于性能原因 您通常希望将重定向保持在最低限度 因为每个重定向都需要单
  • android:web服务图像替换为本地文件夹中的图像

    我进入了 Android 聊天应用程序的最后阶段 我在使用图像和网络服务时遇到了一些问题 因此 当我选择图像并将该图像发送到 Web 服务时 我从服务获取 URL 我如何将该网址转换为本地文件夹中的图像 我很困惑如何才能使其发挥作用 我想在
  • 如何获取 android.widget.ImageView 的宽度和高度?

    ImageView Actual image 60px height of ImageView
  • Image.FromStream() 方法返回 Invalid Argument 异常

    我正在从智能相机成像器捕获图像 并通过套接字编程从相机接收字节数组 NET 应用程序是客户端 相机是服务器 问题是我在运行时收到 System InvalidArgument 异常 private Image byteArrayToImag
  • Go 中的 WebP 编码器/解码器

    是否有一个完整的 WebP 编码器和解码器与当前每周 或可分叉 兼容 它的速度与标准 png 相当吗 这个人在 GitHub 上有一个包 其中包含 WebP 的编码器和解码器 https github com chai2010 webp h
  • Django / PIL - 上传图像时保存缩略图版本

    这是我的 forms py class UploadImageForm forms ModelForm class Meta model UserImages fields photo 这是我的 models py class UserIm
  • Google API 返回的 Google+ 个人资料图片网址是否会发生变化?

    因此 我使用 Google API 通过用户的 user id 来获取人们的个人资料图片 Google API 返回如下 JSON image url https lh5 googleusercontent com OGjgCn9fCPk
  • 如何在Android中将位图转换为PNG,然后转换为base64?

    正如标题所暗示的 我试图让我的 Android 应用程序的用户从他的设备中选择一个图像 完成 然后我想缩小图像 完成 将图像压缩 转换为 png 并发送它作为 Base64 字符串发送给 API 所以我目前调整图像大小 如下所示 optio
  • 使用 OpenCV 和 Python 叠加两个图像而不丢失颜色强度

    如何叠加两个图像而不损失两个图像的颜色强度 我有图像1和图像2 2 我尝试使用 0 5 alpha 和 beta 但它给我的合并图像的颜色强度只有一半 dst cv2 addWeighted img1 0 5 img2 0 5 0 但是当我
  • 减少非常大图像的文件大小,而不改变图像尺寸

    考虑一个处理可能非常大的 PNG 文件上传的应用程序 所有上传的文件必须存储到磁盘以供以后检索 但是 PNG 文件的大小最大可达 30 MB 但磁盘存储限制规定每个文件的最大大小为 1 MB 问题是获取文件大小高达 30 MB 的输入 PN
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 图像随机损坏(但刷新后加载)并显示“资源解释为图像但使用 MIME 类型 text/html 传输”

    我目前正在开发一个简单的 php 网站 问题是 我的整个网站中的图像 发生在所有 php 文件中 随机损坏并显示错误资源解释为图像 但以 MIME 类型 text html 传输但是 如果我尝试多次刷新页面 可以再次加载图像并且错误消失 我
  • 将 SVG 文件转换为多个不同大小的 PNG 文件

    我有一个 SVG 格式的徽标图像 我想知道是否有办法生成多个不同大小的 png 文件 例如 我设置了 20 个不同的宽度和高度 它会生成 20 个 PNG 文件 如果我必须一次处理 5 张图像也没关系 我已经安装了 illustrator

随机推荐