PyTorch 1.7运行官方目标检测微调教程报utils未定义错误
报错根因
这个NameError: name 'utils' is not defined的触发逻辑非常直接,和检测模型搭建、数据集读取的逻辑都没有关系,完全是代码执行顺序错位导致的:
- 你在代码中段的测试片段里,第一时间就把
utils.collate_fn作为DataLoader的批处理对齐参数传入
也就是触发报错的那行代码:data_loader = torch.utils.data.DataLoader(dataset, batch_size=2, shuffle=True, num_workers=4, collate_fn=utils.collate_fn) - 但你对
utils模块的导入语句,是放在这段测试代码往后几十行的位置才写的:from engine import train_one_epoch, evaluate import utils
Python是从上到下逐行解释执行的,当代码运行到上面那行DataLoader初始化时,解释器还没读取到后面的import utils语句,根本不知道utils这个名字指向什么,自然直接抛出未定义错误。
另外需要明确:utils不是PyTorch内置的库模块,它是目标检测教程配套的独立工具脚本,里面封装了批数据对齐、训练日志打印等通用辅助逻辑,需要把这个脚本和你的训练代码放在同一级工作目录下,才能正常导入。
修复操作
- 把所有涉及外部依赖的导入语句,全部移动到代码文件的最开头,不要把导入逻辑穿插在业务代码中间
可以把原本靠后的导入段调整到文件顶部的导入区:import os import numpy as np import torch from PIL import Image # 提前加载工具依赖,避免后续调用时触发未定义错误 from engine import train_one_epoch, evaluate import utils - 检查当前工作目录下是否存在
utils.py文件,确认文件内确实实现了collate_fn函数(该函数的作用是将不同尺寸的图像、标注数据做格式对齐,适配检测模型的批量输入要求) - 调整完导入顺序后重新运行代码,原位置的NameError就会消失。
内容的提问来源于stack exchange,提问作者batuman
相关产品推荐
相关产品推荐

