YoLo World代码块解读

devtools/2024/10/20 15:45:56/

MaxSigmoidAttnBlock

分别处理图像与文本特征,计算这两者的相关性,得到整个句子所有word中最大的相关性数值作为attention作用于图像特征中。

class MaxSigmoidAttnBlock(nn.Module):"""Max Sigmoid attention block."""def __init__(self, c1, c2, nh=1, ec=128, gc=512, scale=False):"""Initializes MaxSigmoidAttnBlock with specified arguments."""super().__init__()self.nh = nhself.hc = c2 // nhself.ec = Conv(c1, ec, k=1, act=False) if c1 != ec else Noneself.gl = nn.Linear(gc, ec)self.bias = nn.Parameter(torch.zeros(nh))self.proj_conv = Conv(c1, c2, k=3, s=1, act=False)self.scale = nn.Parameter(torch.ones(1, nh, 1, 1)) if scale else 1.0def forward(self, x, guide):"""Forward process."""bs, _, h, w = x.shapeguide = self.gl(guide)guide = guide.view(bs, -1, self.nh, self.hc)embed = self.ec(x) if self.ec is not None else xembed = embed.view(bs, self.nh, self.hc, h, w)aw = torch.einsum("bmchw,bnmc->bmhwn", embed, guide) #文本与图像的交叉注意力aw = aw.max(dim=-1)[0] #整个句子最大相关性数值作为attention作用于图像特征中。aw = aw / (self.hc**0.5)aw = aw + self.bias[None, :, None, None]aw = aw.sigmoid() * self.scalex = self.proj_conv(x)x = x.view(bs, self.nh, -1, h, w)x = x * aw.unsqueeze(2)return x.view(bs, -1, h, w)

WorldDetect

基本和Detect一样,主要是分类分支需要通过BNContrastiveHead将图像特征于文字特征计算相关性得到每个grid中所有类别的置信度。

class WorldDetect(Detect):def __init__(self, nc=80, embed=512, with_bn=False, ch=()):"""Initialize YOLOv8 detection layer with nc classes and layer channels ch."""super().__init__(nc, ch)c3 = max(ch[0], min(self.nc, 100))self.cv3 = nn.ModuleList(nn.Sequential(Conv(x, c3, 3), Conv(c3, c3, 3), nn.Conv2d(c3, embed, 1)) for x in ch)self.cv4 = nn.ModuleList(BNContrastiveHead(embed) if with_bn else ContrastiveHead() for _ in ch)def forward(self, x, text):"""Concatenates and returns predicted bounding boxes and class probabilities."""for i in range(self.nl):x[i] = torch.cat((self.cv2[i](x[i]), self.cv4[i](self.cv3[i](x[i]), text)), 1)#cv4可以获得类别编码,[512,80,80]*[4,512]=[4,80,80]

http://www.ppmy.cn/devtools/6749.html

相关文章

数据可视化-ECharts Html项目实战(13)

在之前的文章中,我们深入学习ECharts动态主题切换和自定义ECharts主题。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 数据可视化-ECharts Html项…

【vim】折叠代码

目录 简介操作创建折叠删除折叠打开或关闭折叠在折叠间移动简介 Vim编辑器中可以使用 foldmethod 选项设置折叠方法。 将 foldmethod 设置为 manual 以外的值时,将删除所有折叠并创建新折叠。切换到 manual 方法不会删除现有的折叠。由此可以先用自动定义折叠,然后手动更改它…

jenkins+docker集成harbor实现可持续集成

目录 一、前言 二、Harbor介绍 2.1 什么是Harbor 2.1.1 Harbor架构图 2.2 Harbor 特征

基于双向长短期神经网络bilstm的径流量预测,基于gru神经网络的径流量预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 BILSTM神经网络 基于双向长短期神经网络bilstm的径流量预测,基于gru神经网络的径流量预测 完整代码:基于双向长短期神经网络bilstm的径流量预测,基于gru神经网络的径流量预测(代码完整,数据齐全)资源-CSDN文库 https://dow…

JVM之JVM栈的详细解析

Java 栈 Java 虚拟机栈:Java Virtual Machine Stacks,每个线程运行时所需要的内存 每个方法被执行时,都会在虚拟机栈中创建一个栈帧 stack frame(一个方法一个栈帧) Java 虚拟机规范允许 Java 栈的大小是动态的或者是…

设计模式学习笔记 - 开源实战一(下):通过剖析JDK源码学习灵活应用设计模式

概述 上篇文章我们讲解了工厂模式、建造者模式、适配器模式适配器模式在 JDK 中的应用,其中 Calendar 类用到了工厂模式和建造者模式, Collections 类用到了装饰器模式和适配器模式。学习的重点是让你了解,在真实的项目中模式的实现和应用更…

【Leetcode每日一题】 动态规划 - 最小路径和(难度⭐⭐)(58)

1. 题目解析 题目链接:64. 最小路径和 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 算法思路梳理: 一、状态表示 在路径类问题中,状态表示通常有两种形式: 从 [i,…

5个常见的前端手写功能:New、call apply bind、防抖和节流、instanceof、ajax

实现New 首先创建一个新的空对象设置原型,将对象的原型设置为函数的prototype对象让函数的this指向这个对象,执行构造函数的代码判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类…