TopFormer中Attention的理解

BLIP2中Q-former详解 Querying Transformer,在冻结的视觉模型和大语言模型间进行视觉-语言对齐。为了使Q-Former的学习达到两个目标:学习到和文本最相关的视觉表示。这种表示能够为大语言模型所解释。需要在Q-Former结构设计和训练策略上下功夫。具体来说,Q-Former是一个轻量级的transformer,它使用一个可学习的query向量集,从冻结的视觉模型提取视觉特征。采取两阶段预训练策略。 阅读详情
  • Attention的基本流程是,查询q与键值k相乘获得权重a,a与值v相乘获得注意力值。这篇博客讲的很清晰。
  • TopFormer使用多头注意力机制
    • 查询qq的每个头中特征图的每个元素有key_dim个特征
    • 键值kk和qq维度相同,为了相乘进行了转置
    • 值vv和LeViT一致,扩大了每个元素的维度,特征更多
class Attention(torch.nn.Module):
    def __init__(self, dim, key_dim, num_heads,
                 attn_ratio=4,
                 activation=None,
                 norm_cfg=dict(type='BN', requires_grad=True),):
        super().__init__() 
        self.num_heads = num_heads
        self.scale = key_dim ** -0.5
        self.key_dim = key_dim
        self.nh_kd = nh_kd = key_dim * num_heads # num_head key_dim
        self.d = int(attn_ratio * key_dim)
        self.dh = int(attn_ratio * key_dim) * num_heads
        self.attn_ratio = attn_ratio

        self.to_q = Conv2d_BN(dim, nh_kd, 1, norm_cfg=norm_cfg)
        self.to_k = Conv2d_BN(dim, nh_kd, 1, norm_cfg=norm_cfg)
        self.to_v = Conv2d_BN(dim, self.dh, 1, norm_cfg=norm_cfg)

        self.proj = torch.nn.Sequential(activation(), Conv2d_BN(
            self.dh, dim, bn_weight_init=0, norm_cfg=norm_cfg))

    def forward(self, x):  # x (B,N,C)
        B, C, H, W = get_shape(x)
        
        # B*num_heads*hw*key_dim,每个像素有key_dim个特征
        qq = self.to_q(x).reshape(B, self.num_heads, self.key_dim, H * W).permute(0, 1, 3, 2)
        # B*num_heads*key_dim*hw
        kk = self.to_k(x).reshape(B, self.num_heads, self.key_dim, H * W)
        # B*num_heads*hw*d
        vv = self.to_v(x).reshape(B, self.num_heads, self.d, H * W).permute(0, 1, 3, 2)

        # B*num_heads*hw*hw
        attn = torch.matmul(qq, kk)
        # hw的每个元素与所有元素的权重,类似协方差矩阵
        attn = attn.softmax(dim=-1) # dim = k

        # B*num_heads*hw*d
        xx = torch.matmul(attn, vv)

        xx = xx.permute(0, 1, 3, 2).reshape(B, self.dh, H, W)
        xx = self.proj(xx)
        return xx
深度学习之Encoder-Only原理与实战 【代码】深度学习之Encoder-Only原理与实战。 阅读详情

相关推荐

实测对比:Gromacs GPU版vsCPU版性能差异到底有多大?2023最新基准测试

本文通过2023年最新基准测试,详细对比了Gromacs GPU版与CPU版的性能差异。测试显示,GPU版本在计算速度上可提升54倍,同时显著降低内存需求和能耗成本。文章还提供了GPU版安装优化实践和硬件选购指南,为计算生物学研究提供关键参考。

weixin_29243063的博客 326

TopFormer 使用指南

TopFormer 使用指南 1. 项目目录结构及介绍 TopFormer 是一款专为移动设备设计的语义分割模型,基于Token Pyramid Transformer架构。以下是其主要的目录结构及其简介: configs: 包含了各种配置文件,用于训练和评估模型,每个配置定义了模型结构、训练参数等。 demo: 提供示例代码,展示如何快速测试模型。 docker: Dockerfile及相关脚...

gitblog_00552的博客 484

MATLAB与STK互联23:卫星对象操作(14)—仿真分析案例1,建立8个地面站,分析对卫星的可见性

学习到这里,我们有必要做个仿真分析案例,把之前我们学习的零散知识点串起来,看一下在真实的分析中怎么应用。 分析要求:建立8个地面站,分析每个地面站对某个轨道高度500km、倾角60°圆轨道的卫星,1天内的可见次数、可见弧长以及可见弧段间隔列表。 基本约束:地面站仰角8°~90°,作用距离<2000km,太阳矢量与地面站到卫星视线夹角不小于15°,可见弧段应大于30s。地面站站址可随机生成,但要求在南北纬50°范围内。 下面上代码: uiap = actxserver(‘STK11.application’)

ltylty001的博客 7490

yolov3选取正负样本

负责预测目标网格中与ground truth的IOU最大的anchor为正样本(记住这里没有阈值的事情,否则会绕晕) 与全部ground truth的IOU都小于阈值的anchor为负样本 其他是忽略样本 代码未完待续

random_repick的专栏 4658

STM32H7多通道ADC数据采集实战:CubeMX配置ADC1/2/3+DMA/BDMA+Cache避坑全记录

本文详细解析了STM32H7多通道ADC数据采集的实战配置,涵盖CubeMX中ADC1/2/3与DMA/BDMA的协同设置及Cache一致性处理。通过硬件架构分析、DMA优化技巧和Cache避坑指南,帮助开发者实现高精度数据采集,适用于电机控制、环境监测等嵌入式系统。

weixin_28744613的博客 292

无需SLAM建图,直接生成Gazebo仿真环境的二维代价地图的功能包pgm_map_creator适配ROS Noetic编译报错及解决方法

在ROS Noetic中,使用`pgm_map_creator`功能包直接生成Gazebo仿真环境的二维代价地图时,可能会遇到各种编译和运行错误。本篇博客详细解析了在适配ROS Noetic过程中常见的报错及其解决方法,包括Boost文件结构更新、C++版本兼容性、Gazebo函数名变更、链接库缺失以及protobuf文件加载错误。通过逐步排查和修改,如更换头文件路径、调整C++标准、更新CMakeLists.txt文件等,成功解决了这些问题,使得`pgm_map_creator`功能包能够顺利编译和运行。

慕羽★的博客 2261

使用python3.6编译caffe

一、前言 使用snpe转换模型,调用的是python3 系统是ubuntu18.04 二、安装python3.6 使用anaconda安装python3.6和requirements.txt中的依赖(不用写版本号,都满足) conda create -n snpe python=3.6 三、修改Makefile.config 0.因为是用来转换模型,所以不用GPU和opencv 1.注释USE_CUDNN := 1 2.打开CPU_ONLY := 1和USE_OPENCV := 0 3.PYTHO

random_repick的专栏 3994

【异常】OpenClaw提示异常 1302:您的账户已达到速率限制,请您控制请求频率

摘要:系统返回1302错误码提示"账户已达到速率限制",表明请求频率超过服务阈值。主要原因是并发请求数达上限或请求过于密集。解决方案包括:降低并发请求量、引入请求队列机制平滑流量,或根据服务规则提升账户权益等级以获取更高并发额度。建议优先优化请求频率控制策略,避免触发系统限流机制。

奶爸的编程之路,也就一周冷个三天 1143

小白都能看懂的rk3399 pro使用

前言 在ubuntu上给rk3399 pro烧录debian 1. 准备 从这里下载debian固件 从这里下载烧录工具 2. 烧录 1、Type-C线连接主机端的USB接口和TB-RK3399Pro开发板的Type-C接口。 2、长按TB-RK3399Pro开发板上recovery按键后重启机器,进入Loader模式。 3、解压固件,将固件拷贝到linuxTool-v1.0/images目录下 4、执行sudo ./flash.py -l all,如何失败执行sudo python flash.py

random_repick的专栏 3769

基于 Langchain 开发一个完整的支持多轮数据分析(直连 mysql 数据,多表综合分析 SQL 取数,数据分析,报表生成)ChatBI 系统(前后端完整实现源代码)

ChatBI系统开发摘要 本文介绍了基于Langchain的多轮数据分析ChatBI系统开发方案。该系统支持MySQL数据库连接,提供多表分析、SQL查询、数据分析和报表生成功能。系统采用前后端分离架构:前端使用React+Ant Design+ECharts实现交互界面;后端基于FastAPI搭建服务,集成Langchain处理自然语言到SQL的转换;核心技术栈还包括SQLAlchemy、Pandas和Matplotlib。 系统核心模块包括: 数据库连接层:使用SQLAlchemy管理MySQL连接 L

AI天才研究院 814

2026年软考高级网络规划设计师第三版备考笔记

删除了所有已退出主流应用、行业淘汰的技术内容,如 HDLC、xDSL、WiMAX、HSRP/GLBP 等,让教材内容更聚焦当下一线网络工程实际场景,剔除无效考点。

鹿鸣天涯 1214

pytorch之vgg16特征图可视化

参考的这篇博客 改了图像保存方法,注释了不必要的内容 写这篇博客主要是为了自己以后能直接复制使用 import torch from torchvision import models, transforms from PIL import Image import matplotlib.pyplot as plt import numpy as np import scipy.misc import cv2, imageio # 将输入图片转化为卷积运算格式tensor数据 def trans.

random_repick的专栏 3090

【GameFramework框架内置模块】6、实体(Entity)

实体Entity就是一个实体的基本单元,类似于Unity的GameObject对象本体,然后这个本体上面附加其他各种各样组件,才能实现各种各样的功能。一般需要在游戏运行时动态加载的游戏对象,比如怪物、武器、子弹、特效,都需要给这个物体挂载一个实体Entity,这样的话就可以方便的对实例出来的对象进行管理。下面就来看一下如何使用吧。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 3137

voxelnet折腾史

1. 安装Python voxelnet要求Python3.5+,所以使用Anaconda3-5.1.0-Linux-x86_64.sh安装Python3.6 wget https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh ./Anaconda3-5.1.0-Linux-x86_64.sh 2. 安装tens...

random_repick的专栏 2867

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ubuntu16.04+GTX1660深度学习相关配置

1.前情提要 本文使用cuda10.1,cuda8不行,cuda9没试过 cudnn要使用显卡以后发布的版本 考虑到官网总是挂,可以在此下载cuda10.1,cudnn cudnn的developer版本安装失败,runtime版本缺少头文件,所以安装runtime版本,使用developer版本是头文件,注意头文件的命名 2.编译caffe遇到的问题 1、Check failed: err...

random_repick的专栏 2748

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

在自己的程序中使用caffe的CPU版本库

#include <caffe/caffe.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <string> #include <iostream> #include <sys/time.h> using namespace

random_repick的专栏 2637

darknet之yolo测试一批图片并保存结果

原则:尽量不删除源代码 用法:将要测试图片的绝对路径存入txt,例如000.txt,然后执行./darknet detector test data/candle.data cfg/yolov3.cfg backup/yolov3_1000.weights 000.txt,结果保存在results目录下。此法可代替原版的两种方式。 可使用ls ${PWD}/*jpg > 000.txt将当前目录下的jpg图片的绝对路径存入000.txt 添加函数get_image_name void get_im.

random_repick的专栏 2538

ubuntu16.04安装openvino及使用

一、CPU 1.安装Anaconda并使用python3.6,使用自带的python3.5能把人气死(笔者刚抢救过来) 2.参照官方安装,具体步骤是: 从这里下载 压缩包,解压,选项如图 执行sudo ./install.sh 安装依赖项cd /opt/intel/openvino_2021/install_dependencies,sudo -E ./install_openvino_dependencies.sh 设置环境变量:source /opt/intel/openvino_2

random_repick的专栏 2317

64位Ubuntu14.04+GTX960安装CUDA8.0及cudnn

0.检查gpu,系统版本和内核是否支持,一般没问题。 部分计算机需要在BIOS中关闭secure boot 如果出现黑屏问题,请看这里 1.gcc和g++调整:安装cuda对应的gcc和g++并进行软链接,本教程cuda对应4.8 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sud...

random_repick的专栏 2270

openvino最简单的部署

1.前言 openvino可以看成一个驱动,你只要找到合适的头文件和库,就可以使用相应的设备,如CPU、GPU、计算棒等等。 当然,你必须先有一个安装了openvino的设备,参考这里 2.头文件和库 头文件 /opt/intel/openvino/deployment_tools/inference_engine/include /opt/intel/openvino/deployment_tools/ngraph/include /opt/intel/openvino/deployment_to

random_repick的专栏 2096

tensorflow实现深度可分离卷积

数据库:MNIST,与这里对比 tf.nn.depthwise_conv2d的理解看这里,主要是对卷积核参数的理解,即(高度,宽度,输入通道,每个通道得到的输出通道数) 训练速度慢,收敛也慢,刚开始就像没训练的样子,只将一个卷积层改成深度可分离卷积就增加了12次迭代 import tensorflow as tf import numpy as np import random import cv2,sys,os import MyData data=tf.placeholder(tf.float32.

random_repick的专栏 1878

保姆级计算mAP的python代码

计算mAP python iou

random_repick的专栏 1790

ubuntu16.04使用yolox-tiny,训练自己的数据集并验证

yolox cd YOLOX git clone https://github.com/NVIDIA/apex conda install pytorch==1.2.0 torchvision==0.4.0 cudatoolkit=10.0 -c pytorch sudo pip3 install -v --disable-pip-version-check --no-cache-dir

random_repick的专栏 1760

pytorch之resnet18模型保存再训练

参考这里写的 学习率0.01在测试集上最高89%的准确率 import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim import torchvision import torchvision.transforms as transforms import os, cv2 from PIL import Image class MyData(torch.utils.data.

random_repick的专栏 1583

深度学习0:数学知识:正态分布1

步骤内容结果1引入e−x2e^{-x^2}e−x2钟形曲线2算它的面积I∫−∞∞e−x2dxI∫−∞∞​e−x2dx3平方变成二重积分I2I^2I24换极坐标简化计算5算出I2πI^2 = \piI2πIπIπ​6代入σ\sigmaσ和μ\muμ做变量替换得到σ2πσ2π​7除以它归一化得到正态分布公式2π2π​不是随便写的,它来自高斯积分∫−∞∞e−x2。

tellmewhoisi的博客 183

AlexNet技术剖析:2012年那场ImageNet比赛如何引爆深度学习

2012年,AlexNet在ImageNet竞赛中将图像识别错误率从26.2%降至15.3%,开启深度学习革命。其成功源于三大创新:ReLU激活函数缓解梯度消失、Dropout防止过拟合、GPU并行加速训练。结合大规模标注数据(ImageNet)与数据增强策略,AlexNet突破传统特征工程瓶颈,推动计算机视觉进入“

大雾的小屋的博客 355
上一篇: python直接在RGB调整饱和度,亮度,对比度
下一篇: Monodepth2和Lite-Mono准备数据集
刀么克瑟拉莫
博客等级 码龄14年 68粉丝 268原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刀么克瑟拉莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值