PyTorch webdataset加载本地tar报no gopen handler defined错误如何解决
报错原因
ValueError: no gopen handler defined 是WebDataset的资源解析逻辑导致的:
- WebDataset依赖
gopen模块通过URL前缀匹配对应的资源处理函数,官方示例的网络路径自带http://前缀,能匹配到对应HTTP处理逻辑,因此可以正常运行 - Windows平台下直接传入本地磁盘路径(例如
C:\dataset\train.tar)时,没有对应的协议前缀标识这是本地文件,gopen无法匹配到处理函数就会抛出该错误
解决方案
按优先级选择以下任意一种即可:
- 给本地路径添加
file://协议前缀
Windows平台下路径需要调整为file:///盘符:/路径/文件名.tar的格式,注意盘符前有3个斜杠,路径分隔符统一用正斜杠避免转义冲突,示例:# 原路径 D:\dataset\coco_train.tar 调整后为 url = "file:///D:/dataset/coco_train.tar" train_dataset = wds.Dataset(url) - 显式注册本地文件处理handler
如果加前缀仍报错,可以在代码初始化阶段手动注册file协议的处理逻辑:import webdataset.gopen webdataset.gopen.register_scheme("file", webdataset.gopen.gopen_file) - 使用
wds.WebDataset替代wds.Dataset
高版本WebDataset的WebDataset接口对本地路径做了兼容优化,不需要加前缀也能直接识别本地tar文件:train_dataset = wds.WebDataset("D:/dataset/coco_train.tar")
修改后重新运行你的DataLoader测试代码即可正常读取样本。
内容的提问来源于stack exchange,提问作者praneeth
相关产品推荐
相关产品推荐

