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

使用ART库在YOLOv5生成对抗样本时遇transpose参数错误

解决ART库FastGradientMethod攻击YOLOv5时的transpose报错问题

问题根源

报错TypeError: transpose() received an invalid combination of arguments的核心原因是:ART生成的对抗样本是PyTorch张量,但YOLOv5的common.py中默认按numpy数组的语法调用transpose((1,2,0))——而PyTorch张量的transpose()方法只接受两个单独的维度参数(如transpose(1,2)),不支持传入tuple,因此触发参数错误。

具体解决方案

方案1:修改YOLOv5代码适配张量输入

找到common.py中报错的im.transpose((1,2,0))代码行,替换为兼容numpy数组和PyTorch张量的逻辑:

# 替换原有的im.transpose((1,2,0))
if isinstance(im, torch.Tensor):
    im = im.permute(2, 0, 1)  # PyTorch张量用permute实现维度转置
else:
    im = im.transpose((1, 2, 0))  # numpy数组保留原写法

这样不管输入是numpy数组还是PyTorch张量,都能正确完成维度转置。

方案2:将ART生成的对抗样本转为numpy数组后再传入YOLOv5

在调用YOLOv5模型前,把ART输出的张量格式对抗图像转为numpy数组:

# 假设adv_images是ART生成的对抗样本张量
adv_images = adv_images.cpu().numpy()  # 先转到CPU再转numpy
# 如果是批量数据,需要调整维度顺序(ART输出一般是(batch, 3, H, W),转为YOLOv5需要的(batch, H, W, 3))
adv_images = adv_images.transpose(0, 2, 3, 1)

之后再将处理后的numpy数组传入YOLOv5即可。

额外修正:图像后缀匹配问题

代码中筛选.png文件,但测试用的是KITTI的.jpg图像,需要修改文件筛选逻辑,比如:

# 替换原有的只筛选.png的代码
image_paths = [p for p in os.listdir(data_dir) if p.endswith(('.png', '.jpg'))]

确保能加载到正确的测试图像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:00:14