《CounTR: Transformer-based Generalised Visual Counting》CVPR2023

news2024/9/21 4:38:32

摘要

本论文考虑了通用视觉对象计数问题,目标是开发一个计算模型,用于计算任意语义类别的对象数量,使用任意数量的“样本”(即可能为零样本或少样本计数)。作者提出了一个新颖的基于Transformer的架构,称为Counting TRansformer(CounTR),它通过注意力机制显式捕获图像块之间的相似性或与给定“样本”的相似性。此外,作者采用了两阶段训练机制,首先通过自监督学习预训练模型,然后进行有监督的微调。作者还提出了一个简单、可扩展的流程来合成训练图像,这些图像包含大量实例或来自不同语义类别,明确迫使模型利用给定的“样本”。通过在大规模计数基准测试(例如FSC147)上进行彻底的消融研究,证明了在零样本和少样本设置下达到了最先进的性能。

拟解决的问题

论文旨在解决通用视觉对象计数问题,即在一个图像中识别任意语义类别的显著对象的数量。这包括从零样本到少样本对象计数的挑战。

创新之处

  1. 提出了一个新颖的基于Transformer的架构CounTR,利用注意力机制显式捕获图像块之间的相似性或与给定样本的相似性。
  2. 采用了两阶段训练机制,包括自监督预训练和有监督微调,有效提高了计数性能。
  3. 提出了一个简单、可扩展的流程来合成训练图像,这些图像包含大量实例或来自不同语义类别,以解决现有数据集中的长尾问题。
  4. 在大规模计数基准测试上进行了彻底的消融研究,证明了模型在零样本和少样本设置下达到了最先进的性能。

方法

  • 架构:提出了Counting TRansformer (CounTR),它包括视觉编码器、特征交互模块(FIM)和视觉解码器。
  • 两阶段训练:首先通过掩码图像重建 (MAE) 使用自我监督对模型进行预训练,然后对下游计数任务进行微调。
  • 数据合成:提出了一种新颖且可扩展的马赛克管道来合成训练图像,以解决现有对象计数数据集中长尾分布(即具有大量实例的图像往往不太频繁)的挑战。
  • 测试时归一化:对于少样本计数,引入了测试时归一化策略来校准输出密度图。

4.1 架构

  1. 视觉编码器(Visual Encoder):将输入图像和用户提供的样本映射到高维特征空间。
  2. 特征交互模块(Feature Interaction Module, FIM):通过一系列的标准Transformer解码器层来融合来自视觉编码器的信息。
  3. 视觉解码器(Visual Decoder):将特征交互模块的输出重新塑形为2D特征图,并恢复到输入图像的原始分辨率。

视觉编码器:由两部分组成:

  • ViT编码器:基于Vision Transformer(ViT),将输入图像分割成小块,并通过一系列Transformer编码层处理,输出为一系列D维的特征向量。
  • 样本编码器:对于少样本计数,使用轻量级卷积神经网络(CNN)来提取样本的视觉特征。
  • 在没有给出示例的零样本场景下,我们采用可学习的 [SPE] 标记作为替代来为模型提供线索。

特征交互模块:FIM由一系列标准的Transformer解码器层构成,其中图像特征作为查询(Query),样本特征或特殊学习到的标记(在零样本情况下)作为键(Key)和值(Value)。这样的设计使得FIM的输出维度与图像特征相同。

视觉解码器:解码器采用渐进式上采样设计,将向量序列首先重塑为密集的特征图,然后通过基于卷积神经网络的解码器进行处理。最终通过一个线性层作为密度回归器,输出单通道的密度热图。

4.2 两阶段训练方案 

  1. 自监督预训练:使用遮蔽图像建模(Masked Image Modeling)来训练视觉编码器,通过部分观察到的图像块来重建输入图像。
  2. 有监督微调:在预训练的基础上,使用训练集中的图像和样本对模型进行微调,以适应具体的计数任务。

第一阶段:自监督预训练:目的是利用图像内部的冗余信息,通过图像重建任务来学习有效的视觉表示,而不依赖于标注数据。

方法:

  • 遮蔽图像建模(Masked Image Modeling, MAE):这是一种自监督学习方法,通过随机遮蔽图像中的部分区域,然后训练模型预测这些被遮蔽区域的内容。这种方法可以看作是图像版本的BERT,即通过遮蔽部分图像并让模型预测这些部分来学习图像的表示。
  • ViT编码器训练:在CounTR模型中,首先使用MAE对基于Vision Transformer(ViT)的视觉编码器进行预训练。具体来说,将输入图像分割成固定大小的块,随机遮蔽一部分图像块,然后使用剩余的图像块作为输入,训练模型来重建整个图像。

第二阶段:在自监督预训练的基础上,通过有监督学习进一步优化模型,使其更好地适应特定的视觉对象计数任务。

方法:

  • 模型初始化:使用自监督预训练得到的ViT编码器的权重作为初始化,固定这些权重。
  • 任务特定训练:在固定的视觉编码器基础上,添加特征交互模块(FIM)和视觉解码器,然后使用标注的数据集(如FSC-147)对整个模型进行微调。模型的输入包括图像和用户给定的样本,输出为对应的密度图。
  • 损失函数:使用像素级均方误差(MSE)作为损失函数,计算模型预测的密度图和真实密度图之间的差异。

 4.3 可扩展的马赛克

解决通用视觉对象计数数据集中的长尾问题,即大多数图像只包含少量对象,而少量图像包含大量对象。方法如下:

  • 增加背景多样性:通过结合不同图像的区域,增加训练图像的背景多样性。
  • 合成更多实例:在单个图像中合成更多的对象实例,帮助模型更好地学习和泛化到包含大量对象的场景。

拼贴步骤涉及从单个或多个图像中裁剪区域,并将这些区域组合成一个新的图像。 

简单的裁剪和拼贴可能会在图像的边界处留下明显的人工痕迹。为了解决这个问题,在图像的边界处使用随机宽度的α通道混合,使图像的组合更加真实。

4.4 测试时间归一化

针对少样本计数场景提出的一种策略,用于在模型推理阶段校准输出密度图,以提高计数的准确性。 

在少样本计数任务中,用户提供的“样本”(即示例对象)对于模型预测图像中的目标对象至关重要。测试时归一化的目的是利用这些样本信息来校正模型在测试阶段的输出,确保计数的准确性。

  1. 样本位置的密度图预测:模型首先对输入图像进行预测,生成一个包含对象位置的密度图。

  2. 计算样本位置的平均预测值:在得到的密度图中,计算与用户提供的样本相对应的区域的平均预测值。这些区域通常由样本的边界框(bounding boxes)标识。

  3. 归一化处理:如果样本位置的平均预测值超过了预设的阈值(例如1.8),则将整个密度图的值除以该平均值进行归一化。这样做的原因是,如果模型在样本位置的预测值过高,可能意味着它将对象的一部分错误地计为多个实例,或者反之,将多个实例错误地计为一个。

  4. 最终计数:经过归一化处理后,通过累加密度图中的所有值来得到最终的对象计数。

在测试时间归一化中,如果密度图中样本位置的平均总和超过 1.8,则密度图的总和将除以该平均值以获得最终的预测。在测试时间裁剪中,如果至少有一个样本的边长小于10个像素,则将图像裁剪成9个片段,模型将分别处理这9幅图像。最终预测将是这 9 张图像的结果之和。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端面试】leetcode树javascript

写一个树 // 定义二叉树节点 function TreeNode(val, left, right) {this.val = (val === undefined ? 0 : val)this.left = (left === undefined ? null : left)this.right = (right === undefined ? null : right) }// 示例使用 const root = new TreeNode(1,new TreeNod…

Javaweb开发总结(2)

1.处理项目中的异常 利用全局异常处理器 单独创建一个类来处理全局的异常,并对其做出相应回应 /* * 全局异常处理器 * */ RestControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(Exception.class)//代表我们要捕获所有异常public Result ex…

STL-string对字符串进行操作

C形式下的字符串:c_str() string s1("hello"); const char* str s1.c_str(); while (*str) {cout << *str << " ";str; } cout << "\n"; 获取字符数组首地址&#xff0c;用C字符串的形式遍历 区别&#xff1a; cout <…

c++实现生产者消费者的供需关系

一、生产者&消费者模式 生产者-消费者模式&#xff08;Producer-Consumer Pattern&#xff09;是一种常见的并发设计模式&#xff0c;这种模式最常见&#xff0c;所以把它单独拿出来&#xff0c;这种模式用于处理生产者和消费者之间的协调问题。生产者和消费者之间不直接关…

leveldb源码解析(一)——编解码

leveldb中&#xff0c;数字的存储统一采用小端序&#xff0c;通过对数字编码和压缩&#xff0c;节省了存储空间。 变长编码 小端序中&#xff0c;每个字节的最低位存储状态&#xff0c;其余7位存储数据。 status状态值说明&#xff1a; 1&#xff1a;该字节不是当前数字最后…

《Few-shot Object Counting and Detection》CVPR2022

概述 摘要&#xff1a; 论文提出了一个新的任务——少量样本目标计数和检测&#xff08;Few-shot Object Counting and Detection, FSCD&#xff09;。在这项任务中&#xff0c;研究者们旨在通过给定少量目标类别的示例边界框来计数和检测图像中所有目标对象。这项任务与少量样…

Your connection to this site is not secure

chrome 打开某一个网站的网页地址栏提示Your connection to this site is not secure,同一个网站的其它地址栏打开不会 无效的方案 浏览器地址栏输入: chrome://flags 找到下边的选项&#xff0c;从Default改为Disabled即可成功解决 亲测这个方法不行 解决方案 点击右上角的3个…

力扣每日一题 一个小组的最大实力值 线性DP

Problem: 2708. 一个小组的最大实力值 &#x1f468;‍&#x1f3eb; 灵神题解 class Solution {public long maxStrength(int[] nums) {// 初始化mn和mx为第一个元素的值long mn nums[0];long mx nums[0];// 从第二个元素开始遍历数组for (int i 1; i < nums.length; i…

vue项目生成插件的LICENSE文件

一、安装license-webpack-plugin npm install --save-dev license-webpack-plugin 二、添加webpack配置 const {LicenseWebpackPlugin} require(license-webpack-plugin)module.exports {configureWebpack: {plugins: [new LicenseWebpackPlugin()]} }三、执行npm run buil…

jpg图片怎么转换成png?值得推荐给大家的几种转换方法

jpg图片怎么转换成png&#xff1f;将jpg图像转换为png格式可以显著提升图像的质量和清晰度&#xff0c;并满足一些特殊需求&#xff0c;例如透明背景。png格式采用无损压缩&#xff0c;这意味着图像在转换过程中不会丢失任何细节或质量&#xff0c;相比于jpg的有损压缩&#xf…

day06 1.继承和多态

#include "work.h"Stack:: Stack():size(10) {data new char[size];top -1;cout <<"无参构造"<<endl; }Stack:: Stack(const char* s) {size strlen(s);data new char[size];strcpy(data,s);top size-1;cout <<"有参构造"…

Android之Handler的post方法和sendMessage的区别

目录 post 方法方法特点 sendMessage 方法方法特点 使用场景区别总结 Handler 类在 Android 中用于在不同线程之间传递消息和执行代码。它提供了两种主要的方式来执行任务&#xff1a;通过 post 方法和通过 sendMessage 方法。这两种方法有不同的使用场景和特点。 post 方法 方…

【系统架构设计】嵌入式系统设计(2)

【系统架构设计】嵌入式系统设计&#xff08;2&#xff09; 嵌入式网络系统嵌入式 Internet 的接入方式嵌入式 TCP/IP 协议栈 嵌入式数据库管理系统数据的一致性高效的事务处理数据的安全性 实时系统与嵌入式操作系统对实时系统划分根据实时性的强弱根据对错失时限的容忍程度或…

Android Google Maps

Android 谷歌地图 前言正文一、设置Google Cloud 项目二、项目配置① 设置SDK② 配置API密钥③ 配置AndroidManifest.xml 三、添加地图四、定位当前① 请求定位权限② 我的位置控件③ 获取当前位置 五、配置地图① xml配置地图② 代码配置地图③ 地图点击事件④ 管理Marker 六、…

达梦SQL 优化简介

目录 一、定位慢 SQL &#xff08;一&#xff09;开启跟踪日志记录 1.跟踪日志记录配置 &#xff08;二&#xff09;通过系统视图查看 1.SQL 记录配置 2.查询方式 二、SQL分析方法 &#xff08;一&#xff09;执行计划 1.概述 2.查看执行计划 &#xff08;二&#x…

使用LLaMA-Factory快速训练自己的专用大模型

本文聊聊 LLama-Factory&#xff0c;它是一个开源框架&#xff0c;这里头可以找到一系列预制的组件和模板&#xff0c;让你不用从零开始&#xff0c;就能训练出自己的语言模型&#xff08;微调&#xff09;。不管是聊天机器人&#xff0c;还是文章生成器&#xff0c;甚至是问答…

物联网能源管理平台

能源管理平台可以对接各种物联网设备&#xff0c;感兴趣的朋友可根据下方方式联系获取演示账号 1.介绍 2.智慧照明接入 设备远程控制&#xff0c;灯光亮度感应等模式设置&#xff0c;用电耗能分析 3.温控器接入 温控器&#xff08;空调面板&#xff09;接入&#xff0c;实现…

GB/T28181规范和JT1078交通部标差异

技术背景 好多开发者区分不太清楚GB/T28181和JT1078规范&#xff0c;实际上&#xff0c;二者在规范定义、技术特点、过检认证以及应用场景等方面均存在显著差异。两者各有其适用领域和优势&#xff0c;但在某些特定场景下也可能需要相互协作以实现更全面的监控和管理。 规范定…

C#复习之封装_静态成员

知识点一 静态成员的基本概念 知识点二 早已出现的静态成员 知识点四 静态成员的使用 知识点五 为什么可以直接点出来 //记住&#xff01; //程序中是不能无中生有的 //我们要使用的对象&#xff0c;变量&#xff0c;函数都是要在内存中分配内存空间的 //之所以要实例化对象…

TWS蓝牙耳机发展历史以及涉及的相关技术知识

TWS(True Wireless Stereo)蓝牙耳机是近年来迅速发展的消费电子产品之一。它们的诞生和发展经历了多个阶段,并涉及到多项关键技术。以下是 TWS 蓝牙耳机的发展历史及相关技术知识的详细解析。 1. TWS 蓝牙耳机的发展历史 1.1 初期阶段(2014年之前) 在 TWS 蓝牙耳机出现之…