开放式的目标检测

最近做了一个很有意思的工作,可以总结为使用自然语言描述的目标的目标检测。预期使用场景是视频理解,语义检索这一类的场景。

传统的目标检测技术,大概可以归纳为,采集数据、标注目标类别和位置,训练,测试使用。这里的主要问题是很多带标注的数据成本很贵,而且很多应用中的目标类别其实挺少见的。学术上的说法是分布成长尾形态(LongTail),顺带专门有一帮学者搞零样本、少样本的检测。

两年前,大家的做法是弄一个query(输入图像),再指定一个suport(要检索目标的图像,模板图像),让后通过同样的网络生成两个不同尺寸的特征图,然后将suport的特征图作为卷积核和query特征图做卷积。按照匹配区域最大的原理确定目标位置。

目前最新的做法是是使用自然语言作为suport特征。这是由于去年openai公布了一个clip模型,这个模型在4亿文本图像对上训练完成的,能够将NLP特征和CV特征映射到一个语义特征空间!!效果确实很惊人(详细可以参考这里)。这里不得不说clip确实是开辟了一个新的领域,成功的将CV与NLP绑定到了一块,开启了NLP与CV的多模态时代....

由于clip搭建了一个CV和NLP的桥梁,所以衍生了很多交叉应用,啥zeroshot分类,视频语义检索,文本语义检索、根据图像检索文本、根据文本检索图像、文本检索文本、图像检索图像等等……

在检测任务上,一个朴素的想法是,做一个单纯的目标检测(概念上的目标,只分有无目标两类,具体做可以将coco数据集上80类当成一个类,其实就是一个RPN网络),然后将检测到候选框图片输入到clip上图像编码器上,将生成的特征编码作为输出一个软标签。然后检索时候,将需要检索的物体用一句话(prompt)或一个词输入到clip的文本编码器中抽取文本特征。然后由于clip的图像编码器与文本编码器指向同一个特征空间,所以直接衡量两个特征的归一化余弦距离就可以直接检测出文本所指向的目标位置。

后来考虑网络体量限制,进一步的改进是将二阶段模型类别输出头修改成512维度的特征,然后训练时候让特征输出头尽可能和clip输出特征头对齐(可以理解为局部蒸馏)。这样做的优点是模型backbone部分更新会引入clip的语义编码指引,是的检测模型更有可能学到一些概念上标签,模型就是一个标准二阶段模型,输出类别为512维度特征(可以说就是语义标签了。。),理想情况下这个512维度特征就是clip模型的特征空间,然后无论是文本特征匹配还是图像特征匹配都可以作为检测目标!!一个缺点是这里肯定不是理想情况.....clip在4亿图像对上训练的,我们在一个coco数据集上做一个局部蒸馏,最后出来的特征空间不一定能和clip的特征空间完全对齐!

一些结果:

开放式的目标检测

这里输入检测的三个词分别是”计算机”、”键盘”、”鼠标”,这三个都是coco数据集中原有的标签。模型的训练其实是没有给coco的onehot标签,而是一个512维的特征编码.在经过RPN网络后生成的候选框特征和clip对应的特征做MSEloss.可以认为在clip的特征空间中,触摸板所在的候选框的特征和”鼠标”这个文本对应的特征相近。从这个角度上说利用clip特征确实能够学到一些开放概念,而不仅仅是已有的标签类别。

开放式的目标检测

这个检测词分别是”茶水”、”茶杯”,这个一开始没检测到,调低了相识度阈值才出现的....

开放式的目标检测

这个检测的是”棒棒糖”、”笔”,小目标精度还行。

一个简单的demo:

https://github.com/Linzmin1927/objection_detection_use_NLP

Original: https://blog.csdn.net/weixin_42754237/article/details/123995432
Author: 橘子都吃不起!
Title: 开放式的目标检测

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/681574/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球