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

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

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

详解这段代码:

python 复制代码
 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维度进行拼接:

python 复制代码
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
相关推荐
Faker66363aaa几秒前
煤矿杂质识别与分类---基于YOLOv5-FasterNet的目标检测系统实现
yolo·目标检测·分类
jay神几秒前
基于MobileNet花卉识别系统
人工智能·深度学习·计算机视觉·毕业设计·花卉识别
极智视界几秒前
无人机场景 - 目标检测数据集 - 垂直视角车辆检测数据集下载
yolo·数据集·无人机·车辆检测·voc·coco·垂直视角
智驱力人工智能2 分钟前
无人机目标检测 低空安全治理的工程实践与价值闭环 无人机缺陷识别 农业无人机作物长势分析系统 森林防火无人机火点实时识别
人工智能·opencv·安全·yolo·目标检测·无人机·边缘计算
qq_526099132 分钟前
如何选择适合的工业级图像采集卡
图像处理·计算机视觉·自动化
YuTaoShao3 分钟前
【LeetCode 每日一题】3013. 将数组分成最小总代价的子数组 II
算法·leetcode·职场和发展
zhangfeng11333 分钟前
大语言模型llm 量化模型 跑在 边缘设备小显存显卡 GGUF GGML PyTorch (.pth, .bin, SafeTensors)
人工智能·pytorch·深度学习·语言模型
纤纡.3 分钟前
深度学习环境搭建:CUDA+PyTorch+TorchVision+Torchaudio 一站式安装教程
人工智能·pytorch·深度学习
是小蟹呀^6 分钟前
图像识别/分类常见学习范式:有监督、无监督、自监督、半监督……(通俗版)
人工智能·深度学习·分类
kebijuelun7 分钟前
Towards Automated Kernel Generation in the Era of LLMs:LLM 时代的自动化 Kernel 生成全景图
人工智能·gpt·深度学习·语言模型