大模型背景下计算机视觉年终思考小结(二)

1. 引言


尽管在过去的一年里大模型在计算机视觉领域取得了令人瞩目的快速发展,但是考虑到大模型的训练成本和对算力的依赖,更多切实的思考是如果在我们特定的小规模落地场景下的来辅助我们提升开发和落地效率。本文从相关数据集构造,预刷和生成方向进行相关大模型落地的切入和思考。

闲话少说,我们直接开始吧!

2. 构造数据集


使用这些新的大模型的一个切实想法是保留我们的之前标准训练流程框架,举个栗子,通常在检测领域我们使用的 Yolo 检测器中,我们可以通过生成新的训练图像或生成新的标注来改进我们的训练数据集。具体流程如下:
在这里插入图片描述

如上图所示:

  1. 标准数据集由一组人工标注好的训练集和验证集组成

  2. 数据集扩充将使用强大的通用大模型来添加自动化标注:

    • 对未标记图像进行新的标注 ⇒ 这需要一个已经适合该任务的模型。一般来说大家可以使用一个非常大的通用模型,需要大家提供小样本标注示例或文本提示词,来执行零样本或小样本自动化标注,甚至从现有的人工标注数据中微调非常大的模型。
    • 当前已标注文件中添加新任务的标注信息。例如对于2D检测任务可以利用SAM模型来对2D框添加语义分割的mask作为标注信息,可以在训练的时候添加额外的分割监督头。
  3. 生成式的数据集将由生成的图像及其对应的标注组成。当你构建了一个由图像或文本组成的语义提示后,可以用以生成成千上万个图像及其对应的标注。我们可以直接使用大模型的API生成这些带标注的图像(与人工收集和人工标注相比,成本应该很小)

当我们需要验证训练好的模型在人工标注的数据集上的实际性能时,将验证集与生成或扩充的数据集分开是至关重要的。这意味着,在实践中,即使我们选择了新的生成技术或基础模型,我们仍然需要对真实图像进行一些人工手动标注。

3. 扩充数据集


这个想法是从现有的图像开始,通过丰富标注的标签或使其更容易标注来改进标注结果。一些数据标注平台现在通常使用SAM或DINOv2,通过预先分割图片中的对象来提升标注的效率。

在这里插入图片描述

													Annotation Tool using SAM

在这里插入图片描述

							                  	    Anylabeling

更多细节可以访问附录里的相关链接。

4. 生成数据集


虽然生成数据集的想法已经存在很长时间了,并最先被广泛应用于训练 LLM,但实际上要针对小规模应用程序开发利用高效生成的数据(自动化标注或纯合成数据)是相当具有挑战性的。

● 不使用基础大模型,而是使用简单的渲染pipeline,例如合成数据集生成示例,通常做法是使用 python 脚本对感兴趣的对象进行裁剪,之后进行随机缩放、旋转并添加到背景中;对应的标注文件也是使用同一处理流程进行创建。在这种方法下,我们创建的图像不完全是真实的照片,但这些图像上的对象和背景是 100% 真实的。

在这里插入图片描述

● 许多人使用类似3D 渲染来生成数据,例如如下流程:
在这里插入图片描述

基于图像渲染仿真系统,将 3D 模型作为输入,并生成一组训练图像作为输出,通过给定多个渲染参数 θ,该系统将使用3D模型生成多个图像,从所有可能的视角、不同尺寸大小、不同照明条件、不同遮挡量和不同背景等角度来对输出进行建模。相关示例如下:
在这里插入图片描述

● 使用人工来进行图像收集和标注既费时又费力。相比之下,合成数据集可以使用生成式模型(例如,DALL-E、Stable Diffusion)免费获得。在本文中,我们展示了可以自动获得由预训练的稳定扩散生成式模型来生成图像的准确语义掩码,该稳定扩散模型在训练过程中仅使用文本-图像对。

在这里插入图片描述

上述方法称之为 DiffuMask,它利用了文本和图像之间交叉注意力映射的潜力,这是自然和无缝的,可以将文本驱动的图像合成技术扩展到语义掩码生成。DiffuMask 使用文本引导的交叉注意力信息来定位特定类别的区域,并将其与实用技术相结合,以创建一种新颖的高分辨率像素掩码。这些方法显然有助于降低数据收集和人工标注成本。

5. 注意事项


这里值得一提的是使用 CV 合成技术来构建数据集(例如,将对象粘贴到背景以执行分割任务)的问题在于,数据的质量很大程度上取决于生成图像的质量,因此大家必须投入大量精力来构建正确的渲染步骤。

使用纯生成式模型来生成数据集的成功例子(DeepDetectionModels)还不多,但考虑到最近图像生成式 AI模型的渲染质量和可操纵性,这只是时间的问题。从现有的分割或轮廓开始,可以使用ControlNet来生成我们已经有标签的新图片,但目前尚不清楚它是否适用于分布外的类别(即不是标准的COCO类),或者成像质量是否足够好。

论文(Segmentation-ControlNet)提出了一个类似的想法,即修改现有的标记图片,以生成共享分割掩码的新图片,从而实现超强的语义数据增强。
在这里插入图片描述

论文DeepDetectionModels 提出了一个通过微调预训练的稳定扩散模型来生成合成数据集的框架,然后对合成数据集进行手动注释,并用于训练各种目标检测模型。图示如下:
在这里插入图片描述

6. 知识蒸馏


我们通过使用人类手动标注数据集训练模型来进行现代计算机视觉的方式即将被新的大型基础模型彻底改变。大型基础模型有时具有轻量级的版本,专为在低端服务器甚至嵌入式应用程序上进行推理而设计。然而,对于许多应用程序来说,它们仍然太大了。在短期实时应用上,我们不会使用超过 500M+ 参数量的视觉 `transformer` ,而是使用更小、更专业的模型。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/ea2ac5dd48c14629a977c5b1cf55a636.png#pic_center)

尽管如此,即使是小规模推理和低算力资源上的开发,我们也会利用大型基础模型来作为辅助,要么通过使用 API/本地推理直接调用这些模型,要么使用其中一些模型学到的先验知识。今天介绍的主要是通过数据标注来展开,其实也可以通过其他知识转移的方式——例如通过蒸馏或 LoRA。对于检测或分割任务,没有标准流程或广泛的首选方法来从这些大型或生成式模型中转移这些知识,但它可能会在 2024 年普及!

7. CNN和Transformer之争


大多数小规模的 CV 应用程序都涉及 CNN(卷积神经网络),而最近所有大型 AI 系统都涉及 Transformers。我们是否应该从CNN换到Transformer呢?
  • 首先上述问题并没有确定的答案。Transformer 无处不在,因为它们可以更好地随着数据量大小和参数数量的扩展而扩展,这是所有新的大型生成式 AI 系统的先决条件。此外,它们还可以更好地集成多模态输入,因为我们可以轻松地将文本信息和图像特征进行融合,并让交叉注意力机制混合这些信息以产生良好的输出。最后,LoRA 等技术的发展也需要transformer架构。
  • 其次对于低端设备上的大多数实时应用来说,这些大型transformer模型在效率方面还不具备与经典卷积网络相比的竞争力!然而,由于许多人正试图加速边缘设备上transformer结构的推理,这种情况可能会在不久的将来发生改变。

8. 总结


本文重点介绍了在大模型发展背景下,如何在日常开发中合理利用大模型的能力来构建合成数据集和丰富数据集的标注类别等应用,同时随着技术的发展,未来大模型在日常开发中会带来更多的应用和落地点,希望大家也可以结合自己具体的业务来思考如何和现有大模型进行结合。

您学废了嘛?

9. 参考链接

SAM

DINOV2

anylabeling

imageAnnotationTool

CreateSyntheticDataset

DiffuMask

DeepDetectionModels

ControlNet

segmentation-ControlNet

LoRA

AutoDistill

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/334732.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rust使用protobuf

前言 c,java,go 等直接是用 ,具体就不说了,这章主要讲述rust 使用protobuf 这章主要讲述2种 1 > protoc protoc-gen-rust plugin 2> protoc prost-build 1:环境 win10 rustrover64 25-2 下载地址 https://github.com/protocolbu…

《WebKit 技术内幕》之四(3): 资源加载和网络栈

3. 网络栈 3.1 WebKit的网络设施 WebKit的资源加载其实是交由各个移植来实现的,所以WebCore其实并没有什么特别的基础设施,每个移植的网络实现是非常不一样的。 从WebKit的代码结构中可以看出,网络部分代码的确比较少的,它们都在…

2.4 网络层03

2.4 网络层03 2.4.7 路由表 1、什么是路由? 路由就是报文从源端到目的端的路径。当报文从路由器到目的网段有多条路由可达时,路由器可以根据路由表中最佳路由进行转发。 2、什么是路由表? 在计算机网络中,路由表&#xff08…

鸿蒙原生应用/元服务实战-AGC中几个菜单栏的关系

大家是否清楚AGC这几个菜单栏的相互关系? 我的元服务:点击后跳转到“我的应用”列表中的“HarmonyOS”页签,并且过滤出元服务。开发者可以在此模块中管理和运营元服务,例如创建元服务、发布元服务等。 我的应用:开发者…

2024最新Java高频面试题总结(附答案PDF)春招面试必备!

《Java面试全解析》1000道 面试题大全详解 本人是 2009 年参加编程工作的,一路上在技术公司摸爬滚打,前几年一直在上海,待过的公司有 360 和游久游戏,因为自己家庭的原因,放弃了阿里钉钉团队的 offer 回到了西安。 从…

Qt事件过滤

1.相关说明 监控鼠标进入组件、出组件、点击组件、双击组件的事件,需要重写eventFilter函数 2.相关界面 3.相关代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui-&…

解决国内Linux服务器无法使用Github的方法

解决思路:修改Host https://www.ipaddress.com/ 利用上面的网站查询github.com和raw.githubusercontent.com的DNS解析的IP地址 最后,修改服务器的/etc/hosts 添加如下两行: 140.82.112.3 github.com 185.199.108.133 raw.githubuserconte…

04 MyBatisPlus之逻辑删除+锁+防全表更新/删除+代码生成插件

1 逻辑删除 1. 1 什么是逻辑删除 , 以及逻辑删除和物理删除的区别? 逻辑删除,可以方便地实现对数据库记录的逻辑删除而不是物理删除。逻辑删除是指通过更改记录的状态或添加标记字段来模拟删除操作,从而保留了删除前的数据,便于后续的数据…

flink operator 拉取阿里云私有镜像(其他私有类似)

创建 k8s secret kubectl --namespace flink create secret docker-registry aliyun-docker-registry --docker-serverregistry.cn-shenzhen.aliyuncs.com --docker-usernameops_acr1060896234 --docker-passwordpasswd --docker-emailDOCKER_EMAIL注意命名空间指定你使用的 我…

MeterSphere本地化部署实践

项目结构 搭建本地环境 安装JDK11,配置好JDK环境,系统同时支持JDK8和JDK11安装IEAD,配置JDK环境配置maven环境,IDEA配置(解压可以直接使用)无限重置IDEA试用期配置redis环境(解压可以直接使用) 配置kafka环境 安装mysql-5.7环境&#xff…

Java并发基础:一文讲清util.concurrent包的作用

java.util.concurrent包是 Java 中用于并发编程的重要工具集,提供了线程池、原子变量、并发集合、同步工具类、阻塞队列等一系列高级并发工具类,使用这些工具类可以极大地简化并发编程的难度,减少出错的可能性,提高程序的效率和可…

街机模拟游戏逆向工程(HACKROM)教程:[13]68K汇编-jmp指令

在68K汇编中,有多个可以改变PC寄存器的指令: jmp 该指令在之前的章节已经介绍,该指令可以把目的操作数传递到PC寄存器,实现程序的流程控制。 bra 该指令的作用与jmp几乎相同,同样可以把目的操作数传递到PC寄存器&a…

【论文阅读】ControlNet、文章作者 github 上的 discussions

文章目录 IntroductionMethodControlNetControlNet for Text-to-Image DiffusionTrainingInference Experiments消融实验定量分析 在作者 github 上的一些讨论消融实验更进一步的探索Precomputed ControlNet 加快模型推理迁移控制能力到其他 SD1.X 模型上其他 Introduction 提…

贪心算法 ——硬币兑换、区间调度、

硬币兑换: from book:挑战程序设计竞赛 思路:优先使用大面额兑换即可 package mainimport "fmt"func main() {results : []int{}//记录每一种数额的张数A : 620B : A//备份cnts : 0 //记录至少需要多少张nums : []int{1, 5, 10, 5…

idea中使用git提交代码报 Nothing To commit No changes detected

问题描述 在idea中右键,开始将变更的代码进行提交的时候,【Commit Directory】点击提交的时候 报 Nothing To commit No changes detected解决方案 在这里点击Test 看看是不是能下面显示git版本,不行的话 会显示一个 fix的字样,行…

专业130+总分380+哈尔滨工程大学810信号与系统考研经验水声电子信息与通信

今年专业课810信号与系统130,总分380顺利考上哈尔滨工程大学,一年的努力终于换来最后的录取,期中复习有得有失,以下总结一下自己的复习经历,希望对大家有帮助,天道酬勤,加油!专业课&…

SSE[Server-Sent Events]实现页面流式数据输出(模拟ChatGPT流式输出)

文章目录 前言SSE 简介应用场景区分浏览器支撑性 实现过程Web VUE核心解析数据代码实例demo参考 前言 服务端向客户端推送消息,除了用WebSocket可实现,还有一种服务器发送事件(Server-Sent Events)简称 SSE,这是一种服务器端到客户端(浏览器)…

C++大学教程(第九版)5.25去除break语句 5.27去除cintinue语句

5.25题目 (去除break和continue)break和continue 语句遭到质疑的原因是它们的非结构化性。实际上,break和continue 语句总能用结构化的语句取代。请详述如何从程序的一条循环语中去除break语句,并用某种结构化的手段替代。提示:break 语句用于在循环体内离开一个循…

Addressables(1) 从安装到加载单个/多个资源

不想再配改那些狗屎路径,准备研究一下Adressable,据说可以用key加载指定的资源 刚安装下来,随便搞了个资源勾选了一下addressable的框框,多了好多东西啊 概念铺天盖地而来,ok 没事的 慢慢来! 前置知识 P…

pytorch GPU版本安装 python windows

annanconda环境 创建虚拟环境 pytorch19_gpu create -n pytorch19_gpu python3.9 激活环境 conda activate pytorch19_gpu 查找CUDA版本是12.0,查找方式,win r输入cmd进入命令行模式,输入nvidia-smi,如下, 查找如…