You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch目标检测使用Albumentations做数据增强触发AttributeError怎么解决?

问题原因
  • 核心原因:Albumentations 进行预处理时需要读取图像的shape属性来获取宽高信息,该属性仅 numpy 数组类型的图像具备,而 PyTorch 官方目标检测教程默认使用 PIL 库读取图像,得到的是 PIL.Image 类型对象,本身没有shape属性,所以触发该报错。
  • 附加代码笔误:你当前的__getitem__方法还存在两个明显笔误,后续也会触发报错:
    1. 第48行变量名错误,transformer 应为调用变换后得到的 transformed
    2. 第49行数据类型错误,不存在 torch.float332 类型,应为 torch.float32
  • 验证集变换不统一:你当前验证集使用的 ToTensor() 如果是 torchvision 提供的实现,和训练集使用的 Albumentations 提供的 ToTensorV2() 输出格式存在差异,会导致后续训练出现格式不匹配问题。
解决方法
  1. PIL图像转numpy数组
    在数据集__getitem__方法中,读取PIL图像后、传入数据增强逻辑前,新增转换代码:
import numpy as np

# 原读取图像代码
img = Image.open(image_path).convert("RGB")
# 新增转换为numpy数组代码
img = np.array(img)
# 后续正常构造image_data传入self.transforms即可
  1. 修正两处代码笔误
    将__getitem__中对应的两行代码修改为:
img = transformed['image']
target['boxes'] = torch.as_tensor(transformed['bboxes'], dtype=torch.float32)
  1. 统一验证集数据变换逻辑
    将验证集的变换改为和训练集同体系的Albumentations实现:
else:
    return A.Compose([
        ToTensorV2()
    ])

内容的提问来源于stack exchange,提问作者Atia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:15:02