当前位置: 首页 > news >正文

ultalytics代码中模型接收多层输入的处理

yaml文件中,输入来自上一层和第六层的输入:

是将这两个输入打包成列表

 详解这段代码:

 x = y[m.f] if isinstance(m.f, int) else [x if j == -1 else y[j] for j in m.f]  # from earlier layers

输入来源 m.f

  • m.f:表示当前层的输入来源,可以是一个整数或一个列表。这个属性通常在模型的构建阶段定义,指明了当前层的输入是来自哪个层。
  • 也就是第一列参数:

检查 m.f 的类型

  • isinstance(m.f, int):检查 m.f 是否是一个整数。如果是整数,说明当前层的输入仅来自于一个特定的前置层。

从 y 列表中获取输入

  • y[m.f]
    • 如果 m.f 是一个整数,直接使用 y[m.f] 获取对应层的输出。
    • y 列表在模型的前向传播过程中存储了各个层的输出。因此,通过 y[m.f] 可以获得之前某一层的输出,作为当前层的输入。

 从多个层中获取输入

  • else [x if j == -1 else y[j] for j in m.f]
    • 如果 m.f 是一个列表,说明当前层需要从多个前置层获取输入。
    • 在这个列表推导式中,x 的值取决于 m.f 中每个元素 j 的值。x 将通过列表推导式生成一个列表。

这里的y[]列表 是根据 parse_model函数中创建 的save列表对save[]列表中记录的层数输出进行保存;save只保存明确指定层的层数,-1这种上一层不保存。


假设 f = [-1, 6]。列表推导式的工作方式如下:

  1. 初始状态

    • 假设当前层的输入(在模型的前向传播中)是一个张量,比如 input_tensor
  2. 遍历 m.f

    • 对于 j = -1
      • 根据条件 if j == -1,将 x 赋值为当前层的输入,即 x = input_tensor
    • 对于 j = 6
      • 根据条件 else y[j],将 y[6] 的输出添加到 x 中。

最终,x = [ input_tensor,  y[6] ]


所以这里,用-1,6 两层concat:

也就是对列表中的两个张量在第1维度进行拼接:
 

import torch
import torch.nn as nn# 假设我们有两个张量
input_tensor = torch.randn(2, 3, 4, 4)  # 形状为 (N=2, C1=3, H=4, W=4)
y_6 = torch.randn(2, 5, 4, 4)  # 形状为 (N=2, C2=5, H=4, W=4)# 将张量放入列表
tensors = [input_tensor, y_6]# 使用 torch.cat 进行连接
result = torch.cat(tensors, dim=1)  # 在通道维度上连接# 显示结果的形状
print(result.shape)  # 输出: torch.Size([2, 8, 4, 4]),其中 8 = 3 + 5

http://www.dtcms.com/a/192608.html

相关文章:

  • 《山东欧曼谛:美业梦想的启航港》
  • 面试 Linux 运维相关问题
  • 微信小程序van-dialog确认验证失败时阻止对话框的关闭
  • 嵌软面试每日一阅----FreeRTOS
  • CertiK荣获以太坊基金会两项资助,领跑zkEVM形式化验证
  • 【专栏启动】开篇:为什么是 Django + Vue3?测试平台的技术选型与架构蓝图
  • 基于微信小程序的在线聊天功能实现:WebSocket通信实战
  • C++从入门到实战(十五)String(上)介绍STL与String的关系,为什么有string类,String有什么用
  • 【深度学习之四】知识蒸馏综述提炼
  • Vue2在子组件上使用v-model实现数据的双向绑定、.sync修饰符
  • Windows软件插件-写mp3
  • 全链路压测实战指南:从理论到高可用架构的终极验证
  • 【Python】在vscode利用pyinstaller中的.spec文件把py项目打包为.exe实现非py环境下使用的操作步骤
  • 【实战教程】从零实现DeepSeek AI多专家协作系统 - Spring Boot+React打造AI专家团队协作平台
  • wps excel将表格输出pdf时所有列在一张纸上
  • 28、动画魔法圣典:Framer Motion 时空奥义全解——React 19 交互动效
  • 智能手表集成测试报告(Integration Test Report)
  • lesson02-PyTorch开发环境安装
  • 游戏行业DDoS攻击类型及防御分析
  • 详细解释api
  • MySQL 迁移至 Doris 最佳实践方案
  • std::deque和std::vector对比
  • 使用Python与正则表达式高效提取Excel中的票号数据
  • CSS 布局系统深度解析:从传统到现代的布局方案
  • 1C:ENTERPRISE 8.3 实用开发者指南-示例和标准技术(Session1-Session3)
  • Android开发-在应用之间共享数据
  • 使用 Modern CMake 构建现代 C++ 项目:target从入门到实践
  • RK3568下QT实现输入框支持虚拟键盘
  • PYTHON训练营DAY26
  • 《Navicat之外的新选择:实测支持国产数据库的SQLynx核心功能解析》