【CLIP系列】4:目标检测(ViLD、GLIP)
目录
- 1 ViLD
- 2 GLIP
- 2.1 前言
- 2.2 损失计算
- 2.3 模型框架
1 ViLD
OPEN-VOCABULARY OBJECT DETECTION VIA VISION AND LANGUAGE KNOWLEDGE DISTILLATION
从标题就能看出来,作者是把CLIP模型当成一个Teacher,去蒸馏他自己的网络,从而能Zero Shot去做目标检测。
现在的目标检测数据集标注的类别都很有限,这些有限的类别叫做base categories,如下图中的蓝框标注的东西都是玩具,在这种数据集上去训练一个目标检测器就只能检测出玩具,得不到更细致的检测结果。我们能不能在现有数据集的基础之上,不去额外标注这些黄鸭子或者绿鳄鱼,但模型能直接做到检测这些物体的能力,换句话说,就是模型应该有用能检测这种novel categories新类别的能力。

主体的方法如下图所示,
- a是Base方法,实际上是一个Mask RCNN,是一个两阶段的分类器,第一阶段会出一些region proposal,也就是图中的输入 N proposals;第二阶段就是把N个proposals经过Detection Head,得到N个region embeddings,然后再经过一些分类头,最后输出这些Bounding Box到底是什么类,这样就完成了目标检测。目标函数一般包括两个:定位和分类。
- b是ViLD的text部分,N个proposals经过检测头,经过投射和正则等操作之后,得到N个region embeddings。接下来我们要去算文本的embedding,就是把物体的类别拿过来给一些prompt,生成一个句子,经过文本编码器即可。ViLD-text和Base方法一样,也是在这些数据集上做有监督的训练,而且是在基础类上训练。在这个阶段,ViLD-text只是把图像的特征和文本的特征联系到一起,Zero Shot能力还有待加强。需要注意的是,不在基础类里的其他类别,都归到Background背景类。背景类的学习非常关键,专门有一个背景的embedding,需要在模型训练的时候去把它学好。
- c是ViLD的image部分,对于得到的M个bounding box,可以把它们抠出来并resize成特定大小例如224*224,这样就可以输入到CLIP预训练好的图像编码器,得到图像的特征,当做Teacher。Student网络就是常用的目标检测的框架,M个proposals经过一些层得到的图像特征,我们希望它们和CLIP的特征尽可能地接近,所以直接用一个简单的L1-Loss去做蒸馏就可以了。这里的监督信号不再是人工标注,而是CLIP的图像编码,所以不在受到基础类的限制了。ViLD-image通过利用CLIP模型,大大地加强了Open Vocabulary的能力。这里取M个而不是N个proposals,主要是CLIP抽取特征太慢了,因此需要减少proposal的数量来加速训练。
- d是ViLD-text和ViLD-image合体,右边蒸馏部分只有在训练的时候用到,测试的时候没有用到。

模型总览图如下图所示:

2 GLIP
2.1 前言
目标检测和分割一样,标注数据集都很贵,对于边边角角的类和层出不穷的新类,我们没有办法训练一个模型把这些都检测的很好。我们只能依赖于Open-vocabulary的目标检测模型,来把这些corner case都处理的很好。
而如果想训练一个很强的Open-vocabulary的目标检测模型,就只能像CLIP一样,可以利用上亿规模的的数据集,而且还要把图片-文本对应关系和定位都学的很好。那么 重点就是使用图片-文本对数据集的高效使用 ,因为很好收集。
Vision Language任务(图片-文本多模态任务)里有一类定位任务Vision grounding,主要就是根据文本定位出图片中对应的物体(短语定位phrase grounding),这与目标检测任务非常类似,都是去图中找目标物体的位置。
GLIP 的文章的出发点,就是将检测问题转换为短语定位(phrase grounding)问题,这样GLIP 模型就统一了目标检测和定位两个任务,可以使用更多的数据集。再配合伪标签的技术来扩增数据,使得训练的数据量达到了前所未有的规模(3M人工标注数据和24M图文对数据)。最后训练出来的模型GLIP-L,直接以 zero-shot 的方式在COCO 和LVIS 上进行推理,mAP分别达到了 49.8 和26.9,可见其性能非常的强。
GLIP = Detection + Phrase Grounding:给定一张图片和一个文本,根据这个文本把物体找出来。
效果展示:

2.2 损失计算
目标检测的损失函数由分类损失和定位损失组成。对于目标检测和Vision grounding而言,定位部分都差不多,二者的区别主要在于如何计算分类loss。因为 detection的标签是one-hot的类别单词,而Vision grounding的标签是一个句子。所以需要把二者的分类loss统一到一个框架下面,也就是:L = Lcls + Lloc.
detection 分类损失计算公式:

vision grounding分类损失计算:

2.3 模型框架
模型总览图如下图所示,由于所有数据集都是有标注的,所以模型是以有监督的方式进行训练。计算得到文本特征与图像特征的相似度之后,直接与 GT box计算对齐损失alignment loss即可(和ViLD-text分支一样)。这样就完成了文本和图像的特征融合,就可以进行zero-shot检测了。而定位损失也是直接与GT box计算L1 损失。
模型中间的融合层(Deep Fusion)和LSeg的做法一样,都是为了使图像特征和文本特征进一步交互,使最终的图像-文本联合特征空间(joined embedding space)训练得更好(相似的embedding拉近,不相似的拉远),图像特征和文本特征被训练的更强更有关联性,这样后面计算相似度矩阵的效果肯定就更好。
Deep Fusion层实际上是Cross Attention,也可以用其他的网络结构替代。

相关文章:
【CLIP系列】4:目标检测(ViLD、GLIP)
目录 1 ViLD2 GLIP2.1 前言2.2 损失计算2.3 模型框架 1 ViLD OPEN-VOCABULARY OBJECT DETECTION VIA VISION AND LANGUAGE KNOWLEDGE DISTILLATION 从标题就能看出来,作者是把CLIP模型当成一个Teacher,去蒸馏他自己的网络,从而能Zero Shot去…...
Cesium for Unity Linux版本
Cesium for Unity 直装不支持Linux 参照官方开发流程一些操作命令issues 宝藏最后运行图 参照官方开发流程 https://github.com/CesiumGS/cesium-unity/blob/main/Documentation~/developer-setup.md 系统已经安装过dotnet和cmake xuefeixuefei:~$ dotnet --version 9.0.102 …...
Spring Boot过滤器链:从入门到精通
文章目录 一、过滤器链是什么?二、为什么需要过滤器链?三、Spring Boot中的过滤器链是如何工作的?(一)过滤器的生命周期(二)过滤器链的执行流程 四、如何在Spring Boot中定义自己的过滤器&#…...
关于 IoT DC3 中驱动(Driver)的理解
在开源IoT DC3物联网系统中,驱动(Driver)扮演着至关重要的角色,它充当了软件系统与物理设备之间的桥梁。驱动的主要功能是依据特定的通信协议连接到设备,并根据设备模板中配置的位号信息进行数据采集和指令控制。不同的…...
微信小程序地图标记点,安卓手机一次性渲染不出来的问题
问题描述: 如果微信小程序端,渲染的标记物太多,安卓手机存在标记物不显示的问题,原因初步判断是地图还没有渲染完,标记物数据已经加载完了,导致没有在地图上显示。 解决办法: 使用map组件的b…...
一维差分与二维差分
差分(Difference)是一种与前缀和密切相关的技术,主要用于高效处理区间更新操作。差分数组的核心思想是通过记录相邻元素的差值来表示原数组的变化,从而将区间更新操作的时间复杂度从 O(n) 优化到 O(1)。下面详细讲解一维差分和二维…...
EasyRTC嵌入式WebRTC视频通话SDK支持Web浏览器、Linux、ARM、Android、iOS
随着互联网技术的飞速发展,实时通信(RTC)已经成为现代应用中不可或缺的一部分。无论是视频会议、在线教育、远程医疗,还是社交娱乐,实时通信技术都在其中扮演着重要角色。 然而,WebRTC技术在PC和移动端的支…...
数据库脚本MySQL8转MySQL5
由于生产服务器版本上部署的是MySQL5,而开发手里的脚本代码是MySQL8。所以只能降版本了… 升级版本与降级版本脚本转换逻辑一样 MySQL5与MySQL8版本SQL脚本区别 大多数无需调整、主要是字符集与排序规则 MySQL5与MySQL8版本SQL字符集与排序规则 主要操作&…...
【PGCCC】commit_delay 对性能的提升:PostgreSQL 基准测试
通过禁用参数可以来调整事务工作负载synchronous_commit。该措施有惊人效果。但在操作系统崩溃期间丢失已提交事务的可能性使其成为许多应用程序无法启动的因素。因此我决定写下来。 WAL 刷新是事务数据库工作负载的瓶颈 为了确保已提交的事务不会丢失,PostgreSQL…...
AI大模型随机初始化权重并打印网络结构方法(以Deepseekv3为例,单机可跑)
背景 当前大模型的权重加载和调用,主要是通过在HuggingFace官网下载并使用transformer的库来加以实现;其中大模型的权重文件较大(部分>100GB),若只是快速研究网络结构和数据流变化,则无需下载权重。本文…...
字符串解码——巧妙使用递归解题
题目描述 给定一个经过编码的字符串,返回它解码后的字符串。编码规则为 k[encoded_string],表示方括号内部的 encoded_string 重复 k 次。其中 k 是正整数,输入字符串确保符合格式要求且无额外空格。 示例: 复制 示例 1&#…...
Flask Web开发的重要概念和示例
一口气列举Flask Web应用的所有概念和示例 Flask Web 应用基本框架 路由(Routing) 模版(Template) request 对象 JSON 数据处理 redirect 示例 文件上传示例 文件下载示例 Session 示例 Cookie操作 Flask Web 应用基本框架 这是一个 最基础的 Flask Web 应用,…...
51-ArrayList
51-ArrayList Collection 类型介绍 仓颉中常用的几种基础 Collection 类型,包含 Array、ArrayList、HashSet、HashMap。 可以在不同的场景中选择适合对应业务的类型: Array:如果不需要增加和删除元素,但需要修改元素ÿ…...
Ollama+WebUI+DeepSeek部署自己的本地大模型
前言 使用AI几乎成为互联网工作者必备技能了,DeepSeek的出现把AI再次推向高潮,在本文中,我们将带领大家借助 Ollama、WebUI 和 deepseek 这三个工具,成功搭建属于自己的本地大模型环境。Ollama 作为一款轻量级的大模型运行工具&a…...
(篇六)基于PyDracula搭建一个深度学习的软件之新版本ultralytics-8.3.28调试
ultralytics-8.3.28版本debug记录 1传入文件 代码太多不粘贴在这里了,完整代码写在了篇三 def open_src_file(self):config_file config/fold.jsonconfig json.load(open(config_file, r, encodingutf-8))open_fold config[open_fold]if not os.path.exists(op…...
NLP Word Embeddings
Word representation One-hot形式 在上一周介绍RNN类模型时,使用了One-hot向量来表示单词的方式。它的缺点是将每个单词视为独立的,算法很难学习到单词之间的关系。 比如下面的例子,即使语言模型已经知道orange juice是常用组合词…...
基于 FPGA 的嵌入式系统硬件逻辑优化技术探究
在数字化浪潮席卷全球的当下,嵌入式系统已然成为众多领域不可或缺的核心力量。从我们日常使用的智能手机、智能穿戴设备等消费电子产品,到关乎工业生产效率与精度的工业控制系统,再到汽车电子领域的自动驾驶辅助系统以及航空航天领域的飞行器…...
使用HX搭建UNI-APP云开发项目(适合新手小白与想学云开发的宝子)
什么是uni-app云开发 uni-app云开发是uni-app提供的一套后端服务,它可以帮助开发者快速搭建起一个完整的后端服务,包括数据库、云函数、存储等。开发者只需要关注前端页面的开发,后端服务由uni-app云开发提供。 uni-app云开发的优势: 快速搭建后端服务:uni-app云开发提供了…...
sql:时间盲注和boolen盲注
关于时间盲注,boolen盲注的后面几个获取表、列、具体数据的函数补全 时间盲注方法 import time import requests# 获取数据库名 def inject_database(url):dataname for i in range(1, 20):low 32high 128mid (low high) // 2while low < high:payload &q…...
【STM32】ADC|多通道ADC采集
本次实现的是ADC实现数字信号与模拟信号的转化,数字信号时不连续的,模拟信号是连续的。 1.ADC转化的原理 模拟-数字转换技术使用的是逐次逼近法,使用二分比较的方法来确定电压值 当单片机对应的参考电压为3.3v时,0~ 3.3v(模拟信…...
arcgis for js实现层叠立体效果
在 Web 开发中,利用 ArcGIS for JS 实现一些炫酷的地图效果能够极大地提升用户体验。本文将详细介绍如何使用 ArcGIS for JS 实现层叠立体效果,并展示最终的效果图。 效果图 实现思路 要实现层叠立体效果,关键在于获取边界图形的坐标…...
多模态本地部署和ollama部署Llama-Vision实现视觉问答
文章目录 一、模型介绍二、预期用途1. 视觉问答(VQA)与视觉推理2. 文档视觉问答(DocVQA)3. 图像字幕4. 图像-文本检索5. 视觉接地 三、本地部署1. 下载模型2. 模型大小3. 运行代码 四、ollama部署1. 安装ollama2. 安装 Llama 3.2 Vision 模型3. 运行 Llama 3.2-Vision 五、效果…...
【DeepSeek】deepseek可视化部署
目录 1 -> 前文 2 -> 部署可视化界面 1 -> 前文 【DeepSeek】DeepSeek概述 | 本地部署deepseek 通过前文可以将deepseek部署到本地使用,可是每次都需要winR输入cmd调出命令行进入到命令模式,输入命令ollama run deepseek-r1:latest。体验很…...
【Git版本控制器】:第一弹——Git初识,Git安装,创建本地仓库,初始化本地仓库,配置config用户名,邮箱信息
🎁个人主页:我们的五年 🔍系列专栏:Linux网络编程 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 相关笔记: https://blog.csdn.net/dj…...
Fabric.js、leaferjs、pixi.js 库的对比分析
文章目录 一、引言二、参与对比的 canvas 库简介三、性能对比四、易用性对比五、功能特性对比六、综合评价与使用建议七、总结 在前端开发中,canvas 库为实现丰富的图形效果和交互功能提供了强大的支持。本文将对 Fabric.js、leaferjs 和 pixi.js 这三个常见的 canv…...
JVM——堆的回收:引用计数发和可达性分析法、五种对象引用
目录 引用计数法和可达性分析法 引用计数法: 可达性分析算法: 五种对象引用 软引用: 弱引用: 引用计数法和可达性分析法 引用计数法: 引用计数法会为每个对象维护一个引用计数器,当对象被引用时加1&…...
2.11 sqlite3数据库【数据库的相关操作指令、函数】
练习: 将 epoll 服务器 客户端拿来用 客户端:写一个界面,里面有注册登录 服务器:处理注册和登录逻辑,注册的话将注册的账号密码写入数据库,登录的话查询数据库中是否存在账号,并验证密码是否正确…...
开源模型应用落地-Qwen1.5-MoE-A2.7B-Chat与vllm实现推理加速的正确姿势(一)
一、前言 在人工智能技术蓬勃发展的当下,大语言模型的性能与应用不断突破边界,为我们带来前所未有的体验。Qwen1.5-MoE-A2.7B-Chat 作为一款备受瞩目的大语言模型,以其独特的架构和强大的能力,在自然语言处理领域崭露头角。而 vllm 作为高效的推理库,为模型的部署与推理提…...
相得益彰,Mendix AI connector 秒连DeepSeek ,实现研发制造域场景
在当今快速发展的科技领域,低代码一体化平台已成为企业数字化转型的关键工具,同时,大型语言模型(LLM)如 DeepSeek 在自动生成代码和提供智能建议方面表现出色。 Mendix 于近期发布的 GenAI 万能连接器,目前…...
英语笔记【一】词性
一、be 动词 be 动词,是英语中的一种词汇用法,一般用来表示“是”的意思,也可表示“成为”的意思。 be动词的用法有多种变化形式。英语的句子必有一个动词。be 动词自然也是动词的一种。 am 用于第一人称单数;is 第三人称单数&a…...
