【论文阅读】多模态——ViLD

文献基本信息

背景与意义

  • 上图是一个zero-shot检测器的例子,在基础类别(紫色)上训练ViLD之后,可以使用新增类别(粉红色)的文本嵌入来检测训练数据集中不存在的新增类别

研究方法与创新点

总览

  • ViLD的整体设计如上图所示,其中预训练的图像编码器和预训练的文本编码器是CLIP预训练得到的。

训练阶段

  • 先将图像标注区域的图像裁剪出来,通过预训练的图像编码器编码,得到标注区域的图像嵌入(红色部分),同时通过Mask R-CNN(backbone+RPN+RoI对齐支路)产生类别无关的区域嵌入(紫色部分),图像嵌入和区域嵌入需要进行知识蒸馏
  • 基本类别(绿色部分)转化成文本送入预训练的文本编码器,产生文本嵌入(绿色部分),将区域嵌入和文本嵌入进行点积,然后softmax归一化,监督信号是对应类别位置1,其余位置为0。

推理阶段

  • 将基本类别和新增类别转化成文本送入预训练的文本编码器,产生文本嵌入(分别为绿色和蓝色部分),同时通过Mask R-CNN产生类别无关的区域嵌入,然后将区域嵌入和文本嵌入进行点积,然后softmax归一化,新增类别(蓝色部分)取最大值的类别为该区域的预测结果。

裁剪区域

  • 裁剪和调整大小的proposal(即${\text{crop}}\left( {I,r} \right)$)定义为CLIP的图像输入,ViLD同时集成了$1 \times$$1.5 \times$(更多的上下文)的裁剪区域,并且进行归一化,公式如下:

{\bf{v}} = {\cal V}\left( {​{\text{crop}}\left( {I,{r_{1 \times }}} \right)} \right) + {\cal V}\left( {​{\text{crop}}\left( {I,{r_{1.5 \times }}} \right)} \right)

{\cal V}\left( {​{\text{crop}}\left( {I,{r_{1.5 \times }}} \right)} \right) = \frac{​{\bf{v}}}{​{\left\| {\bf{v}} \right\|}}

  • 然后通过NMS保留置信度为前$k$名的区域。
  • 该方法速度会非常慢,因为是一个一个区域送入CLIP的,其实就是最原始的R-CNN做法(这是可以改进的点)。

知识蒸馏

  • 上图(a)是Mask R-CNN的框架,$N$个proposal送入头得到$N$个区域嵌入,然后送入分类器进行分类。
  • 上图(b)是ViLD的框架,其中文本嵌入是通过预训练的文本编码器产生的,将$M$个需要进行蒸馏的proposal同时送入左分支右分支,左分支的$M$个proposal经过归一化得到$M$个区域嵌入,和右分支产生的$M$个图像嵌入进行蒸馏(为了保证ViLD的区域嵌入和CLIP的图像嵌入映射空间一致),其他由Mask R-CNN产生的$N$个区域嵌入按照IoU给标签,其中没有匹配标签的标记为背景,并且给背景增加了一个可学习的嵌入(${​{\bf{e}}_{bg}}$)。
  • 假设区域嵌入表示为${\cal R}\left( {\phi \left( I \right),r} \right)$${\cal T}\left( {​{C_B}} \right)$表示文本嵌入,${y_r}$表示区域$r$的类别,那么ViLD-text分支的交叉熵损失函数为:

{​{\bf{e}}_r} = {\cal R}\left( {\phi \left( I \right),r} \right)

{\bf{z}}\left( r \right) = \left[ {​{\text{sim}}\left( {​{​{\bf{e}}_r},{​{\bf{e}}_{bg}}} \right),{\text{sim}}\left( {​{​{\bf{e}}_r},{​{\bf{t}}_1}} \right), \cdots ,{\text{sim}}\left( {​{​{\bf{e}}_r},{​{\bf{t}}_{\left| {​{C_B}} \right|}}} \right)} \right]

{​{\cal L}_{​{\text{ViLD - text}}}} = {​{\cal L}_{​{\text{CE}}}}\left( {​{\text{softmax}} \left( {​{\bf{z}}\left( r \right)/\tau } \right),{y_r}} \right)

  • 其中,${\text{sim}}\left( {​{\bf{a}},{\bf{b}}} \right) = {​{\bf{a}}^\top}{\bf{b}}/\left( {\left\| {\bf{a}} \right\|\left\| {\bf{b}} \right\|} \right)$。推理阶段因为新增类别,${\cal T}\left( {​{C_B}} \right)$会变成${\cal T}\left( {​{C_B} \cup {C_N}} \right)$
  • ViLD-image分支的知识蒸馏函数为:

{​{\cal L}_{​{\text{ViLD - image}}}} = {\left\| {​{\cal V}\left( {​{\text{crop}}\left( {I,{​{\tilde r}_{\left\{ {1 \times ,1.5 \times } \right\}}}} \right)} \right) - {\cal R}\left( {\phi \left( I \right),\tilde r} \right)} \right\|_1}

  • 最终ViLD的训练损失函数为:

{​{\cal L}_{​{\text{ViLD}}}} = {​{\cal L}_{​{\text{ViLD - text}}}} + w \cdot {​{\cal L}_{​{\text{ViLD - image}}}}

研究结论

  • ViLD在新增类别上的精度大幅度超过之前的监督方法。

  • 可视化说明了ViLD能够检测新增类别和基本类别的对象,并且新增类别有着高质量的边界框和mask

存在的问题

  1. 训练量很大。
  2. 为了适配CLIP,将分类任务和定位任务解耦,导致Mask R-CNN部分需要将所有目标类别的语义和位置信息整合成一个,同时由于缺乏分类任务的指导,一定程度上引起了模型定位任务的表现下降
  3. zero-shot分类部分整体来看更像是一个ensemble的方案,虽然本文这样设计的初衷是为了让两个分支分别侧重已知类别与未知类别的预测,但是只保留一个分支并不影响模型的功能,是否还能进行进一步的精简

启发与思考

  1. zero-shot在图像分类、检测这些任务上具有媲美有监督方法的实力。
  2. ViLD给其他下游任务如何使用CLIP来做zero-shot做了示范,值得参考。
  3. 写作:“Introduction”部分开门见山,直接点明本文试图解决的问题和解决方案的关键,这样的写法值得学习。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值