train: weights=pretrained/yolov5s.pt, cfg=mask_yolov5s.yaml, data=mask_data.yaml, hyp=data\hyps\hyp.scratch.yaml, epochs=100, batch_size=4, imgsz=640, rect=False, resume=False, nosave=False, noval=False, noautoanchor=False, evolve=None, bucket=, cache=None, image_weights=False, device=0, multi_scale=True, single_cls=False, adam=False, sync_bn=False, workers=0, project=runs\train, name=exp, exist_ok=False, quad=False, linear_lr=False, label_smoothing=0.0, patience=100, freeze=0, save_period=-1, local_rank=-1, entity=None, upload_dataset=False, bbox_interval=-1, artifact_alias=latest github: skipping check (not a git repository), for updates see https://github.com/ultralytics/yolov5 YOLOv5 2025-3-18 torch 2.4.1 CUDA:0 (NVIDIA GeForce RTX 4060 Laptop GPU, 8188MiB) hyperparameters: lr0=0.01, lrf=0.1, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=0.05, cls=0.5, cls_pw=1.0, obj=1.0, obj_pw=1.0, iou_t=0.2, anchor_t=4.0, fl_gamma=0.0, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, mosaic=1.0, mixup=0.0, copy_paste=0.0 Weights & Biases: run 'pip install wandb' to automatically track and visualize YOLOv5 runs (RECOMMENDED) TensorBoard: Start with 'tensorboard --logdir runs\train', view at http://localhost:6006/ train.py:115: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `to
首先,我需要回忆一下PyTorch中torch.load函数的相关知识。根据引用[1],这个警告是因为当前代码中使用了weights_only=False,而PyTorch未来版本会默认改为True。当weights_only=False时,PyTorch使用pickle加载模型,这可能执行任意代码,存在安全风险。而设置为True会限制只加载张量数据,避免执行恶意代码。因此,解决方案应该是修改代码,显式设置weights_only=True。
接下来,我需要检查用户提供的引用内容,确保解决方案正确。引用[1]明确指出建议设置weights_only=True,并且引用[4]也提到了类似的问题。因此,用户需要找到YOLOv5代码中使用torch.load的地方,并修改参数。
但YOLOv5的代码可能在哪里调用torch.load呢?通常,模型加载可能出现在训练脚本或者模型加载的部分。用户提到的是train.py,所以可能需要检查train.py中是否有加载预训练权重的代码。例如,在加载预训练模型时,可能会使用torch.load来读取.pth文件。
接下来,我需要考虑如何修改代码。根据PyTorch文档,torch.load的参数中有一个weights_only,从某个版本开始支持。用户需要确保他们的PyTorch版本足够新,支持这个参数。如果版本过低,可能没有这个选项,但根据警告信息,这应该是较新版本PyTorch的警告,所以用户可能已经使用了支持该参数的版本。
然后,用户需要找到代码中调用torch.load的位置,通常是这样的行: model = torch.load(weights_path, map_location=device) 然后将其改为: model = torch.load(weights_path, map_location=device, weights_only=True)
但是,需要确认torch.load是否接受weights_only参数。查阅PyTorch文档,发现从1.10.0版本开始,torch.load增加了weights_only参数。如果用户的PyTorch版本低于此,可能需要升级。不过,根据警告信息,用户可能已经使用了较新的版本,因为警告提到未来版本会更改默认值。
此外,用户可能还需要处理其他相关的问题,比如自定义的模型结构是否与加载的权重兼容。因为当weights_only=True时,只能加载张量数据,不能包含其他对象,如果保存的模型包含自定义类或函数,可能会出错。但YOLOv5的标准模型保存应该只包含状态字典,因此设置weights_only=True应该是安全的。
另外,用户提到的引用[3]和[4]中提到的其他警告,比如关于torch.cuda.amp.autocast的警告,可能需要另外处理,但当前问题集中在torch.load的警告上,所以可以暂时忽略其他警告,除非用户有进一步的问题。
总结步骤:
- 找到YOLOv5代码中使用torch.load的地方,通常在utils部分或train.py中加载模型权重的部分。
- 修改这些调用,添加weights_only=True参数。
- 确保PyTorch版本支持该参数,必要时升级PyTorch。
- 测试修改后的代码,确认警告消失,并且模型能正常加载和训练。
可能遇到的问题:
- 如果代码中有多个torch.load调用,需要全部修改。
- 如果保存的模型文件包含非张量数据,设置weights_only=True会导致加载失败,需要检查模型保存方式。但YOLOv5通常保存state_dict,所以应该没问题。
- 如果用户的PyTorch版本过低,可能不支持weights_only参数,需要升级到1.10及以上。
最后,生成相关问题,帮助用户深入理解可能遇到的关联问题,例如如何安全加载模型,处理其他PyTorch警告等。[用户可见层]
解决YOLOv5训练中torch.load
的FutureWarning警告
问题原因
- 安全性警告:YOLOv5的
train.py
在加载模型权重时使用了torch.load(weights, ..., weights_only=False)
,这会触发PyTorch的FutureWarning。该参数允许加载任意对象(包括潜在恶意代码),存在安全风险[^1]。 - 默认值变更:未来版本的PyTorch将默认使用
weights_only=True
,仅加载张量权重,避免执行不安全代码[^4]。
解决方案
显式设置
weights_only=True
修改YOLOv5代码中所有torch.load()
调用,添加参数weights_only=True
。例如:# 原代码 model = torch.load(weights_path, map_location=device) # 修改后 model = torch.load(weights_path, map_location=device, weights_only=True)
通常在以下文件中需要修改:
models/experimental.py
utils/torch_utils.py
(attempt_load
函数)train.py
中加载预训练权重的部分[^1]。
检查PyTorch版本
确保PyTorch版本≥1.10.0(支持weights_only
参数)。升级命令:pip install --upgrade torch
验证模型兼容性
weights_only=True
仅加载张量数据,需确保模型文件(如.pt
或.pth
)不包含自定义类或函数。YOLOv5的标准权重文件通常安全。
其他注意事项
- 依赖冲突:若存在其他库(如
mmcv
)导致环境冲突,建议卸载后重新安装YOLOv5的依赖[^3]。 - AMP警告处理:类似
torch.cuda.amp.autocast
的警告需修改为torch.amp.autocast('cuda', ...)
,但需确认代码库是否已适配新版语法[^2][^3]。
相关推荐


















