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 的相关文章

  • 在Android内存中存储gif图像

    我对安卓还很陌生 我想将图像保存到内存中 然后从内存中检索图像并将其加载到图像视图中 我已使用以下代码成功将图像存储在内存中 void saveImage String fileName img cnt jpg File file new
  • 在 JavaScript 函数中加载图像

    我有获取图像像素颜色的功能 function getImage imgsrc var img img src imgsrc var imageMap new Object img load function var canvas
  • 鼠标悬停时放大图像而不使用 Jquery 推送其他图像?

    当您将鼠标悬停在图像缩略图上 例如 Google 图片正在使用的缩略图 时 我正在尝试创建图像放大效果 但是 我遇到了一个问题 即放大的图像根据放大的图像的位置不断将另一张图像推到另一个位置 这是我到目前为止所拥有的
  • 为 iOS 应用程序加载基于 SVG 的图像资源

    我从 thenounproject 购买了一个图标作为 SVG 图像 然后我使用一个名为的 macOS 程序Gapplin http gapplin wolfrosch com 将此 SVG 导出为 PNG 图像 它显示为 100x100
  • HTML5 仅拖放图像

    我想做的是 如果所有拖动的文件都是图像 则将其删除 但如果有其他文件扩展名 则不要删除它们 而仅删除图像 这是我的尝试 HTML div div JavaScript var dropzone document getElementById
  • 加载位图图像至特定尺寸

    我正在尝试使用 allegro 将位图加载到特定大小 al crate bitmap x y 创建特定大小的位图 al load bitmap filename 加载我需要的图像 但为其原始大小 我需要将位图加载到我设置的大小 有任何想法吗
  • 正在使用 PIL 保存损坏的图像

    我遇到一个问题 操作图像像素导致保存损坏的图像 因此 我使用 PIL 打开图像 然后将其转换为 NumPy 数组 image Image open myimage png np image np asarray image 然后 我转置图像
  • 使用 PHP 中的 GD 库在图像上绘图

    我创建了一个代码来生成随机图案图像 它创建一个具有给定宽度和高度的图像 并用 40x40 像素的小矩形填充它 这是我的代码
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • 取消html5浏览器中的单图请求

    我正在动态加载 大 图像以绘制到 html5 画布中 如下所示 var t new Image t onload t src http myurl 但每隔一段时间就会想取消图片请求完全地 我想出的唯一方法是设置src to i e t sr
  • 图像梯度角计算

    我实际上是按照论文的说明进行操作的 输入应该是二进制 边缘 图像 输出应该是一个新图像 并根据论文中的说明进行了修改 我对指令的理解是 获取边缘图像的梯度图像并对其进行修改 并使用修改后的梯度创建一个新图像 因此 在 MATLAB Open
  • 如何用python创建透明的径向渐变?

    我正在尝试创建一个渐变到清晰背景的径向渐变 我的目标是创建这个渐变并将其作为背景粘贴到另一个图像 到目前为止 我已经能够创建圆形渐变 但它不透明 我在 stackoverflow 中找到了以下代码 imgsize 650 650 image
  • 如何以编程方式将多个 JPEG 合并为无损 wav 中的更大 JPEG (.net)

    我有几张 JPEG 图像 我想将它们组合成一张大 JPEG 图像 我可以通过创建一个来做到这一点Bitmap然后将它们组合在一起 但这样如果我再次将其保存为 JPEG 图像将会恶化 那么 有没有什么方法可以在解码 编码时在不损失质量的情况下
  • 正确的标头 php mysql blob 显示图像

    我正在尝试在我的 PHP 页面中显示来自 mysql blob 的图像 我知道这不是最佳实践 然后我会将其引入我的 iOS 应用程序中 我在设置页面标题时遇到问题 我认为需要将其设置为图像 所以 这显示了图像 但我不相信页眉是正确的 hea
  • SVG 转 JPG / PNG

    有没有工作模块可以convert a SVG image into像素格式如JPEG or PNG 看看蜡染工具包 具体来说是光栅化器 http xmlgraphics apache org batik tools rasterizer h
  • 如何通过 md5 比较图像?

    该方法是否比较图像的像素值 我猜它不会起作用 因为它们的尺寸彼此不同 但如果它们相同但格式不同怎么办 例如 我截图并保存为 jpg另一个并保存为 gif MD5哈希是实际的二进制数据 因此不同的格式将具有完全不同的二进制数据 因此 要使 M
  • Matlab下降低图像质量

    问候 我正在尝试找到一种简单的方法来处理图像 以便将其质量从 8 位降低到 3 位 实现这一目标的最简单方法是什么 干杯 如果要线性缩放 只需将每个像素值除以 255 7 即 如果原始图像存储在矩阵 I 中 则让低分辨率图像 J I 255
  • 使用 Opera 在 JavaScript 中更新图像源

    我定期使用 Image 对象加载远程图像 以便稍后在画布上绘制 Image 对象仅在 JS 中创建 它不存在于 DOM 中 该代码在 Chrome 和 Firefox 上运行良好 在 Opera 中 问题在于 每当修改图像源时 浏览器似乎总
  • Java 扫描仪问题 (JFrame)

    我正在尝试使用扫描仪来编辑塔防游戏的级别 但是 它不会将级别 图块图像 更新为自定义文件的级别 0 是草 1 是石头 1 是什么都没有 等等 我发现了错误 但如何修复它 我需要添加 更改什么才能消除这个错误 java lang NullPo
  • 更新图像而不闪烁 ASP.NET C#

    我正在编写一个网站 该网站的页面必须显示图像 该图像是由 HttpHandler 使用查询字符串命令创建的 如何才能使其正常工作而不会出现任何闪烁 提前致谢 如果您需要一些代码 我很乐意分享 您可以使用 2 个 UpdatePanel 并在

随机推荐