M2 Mac Mini使用Layout Parser库遇Unsupported query remaining错误求助
解决M2 Mac Mini上Layout Parser加载Detectron2模型的缓存错误
你遇到的错误本质是detectron2的checkpoint加载器无法识别带URL查询参数的本地缓存文件路径,和M2 Mac的路径格式无关。错误信息里的?dl=1是模型下载URL的查询参数,被iopath缓存时保留在了文件名里,导致加载失败。
报错信息
Traceback (most recent call last): File "/Volumes/easystore/Pycharm/Study_GPT/test.py", line 7, in <module> model = lp.Detectron2LayoutModel('lp://PubLayNet/faster_rcnn_R_50_FPN_3x/config', ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Volumes/easystore/Pycharm/Study_GPT/venv/lib/python3.11/site-packages/layoutparser/models/detectron2/layoutmodel.py", line 119, in __init__ self._create_model() File "/Volumes/easystore/Pycharm/Study_GPT/venv/lib/python3.11/site-packages/layoutparser/models/detectron2/layoutmodel.py", line 122, in _create_model self.model = detectron2.engine.DefaultPredictor(self.cfg) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Volumes/easystore/Pycharm/Study_GPT/venv/lib/python3.11/site-packages/detectron2/engine/defaults.py", line 288, in __init__ checkpointer.load(cfg.MODEL.WEIGHTS) File "/Volumes/easystore/Pycharm/Study_GPT/venv/lib/python3.11/site-packages/detectron2/checkpoint/detection_checkpoint.py", line 62, in load ret = super().load(path, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Volumes/easystore/Pycharm/Study_GPT/venv/lib/python3.11/site-packages/fvcore/common/checkpoint.py", line 155, in load checkpoint = self._load_file(path) ^^^^^^^^^^^^^^^^^^^^^ File "/Volumes/easystore/Pycharm/Study_GPT/venv/lib/python3.11/site-packages/detectron2/checkpoint/detection_checkpoint.py", line 108, in _load_file raise ValueError( ValueError: Unsupported query remaining: f{'dl': ['1']}, orginal filename: /Users/.../.torch/iopath_cache/s/dgy9c10wykk4lq4/model_final.pth?dl=1
解决方案
方案一:清理iopath缓存(最推荐)
- 找到iopath的缓存目录:
/Users/你的用户名/.torch/iopath_cache/(替换成实际系统用户名) - 删除该目录下所有文件和子文件夹
- 重新运行代码,Layout Parser会自动重新下载模型,缓存文件名不再带查询参数
方案二:手动指定本地模型路径
- 手动下载对应模型的权重文件(比如PubLayNet的
faster_rcnn_R_50_FPN_3x权重),保存到本地路径(如./model_final.pth) - 修改模型初始化代码,手动指定权重路径:
import layoutparser as lp model = lp.Detectron2LayoutModel( 'lp://PubLayNet/faster_rcnn_R_50_FPN_3x/config', model_path='./model_final.pth' # 替换为实际本地文件路径 )
方案三:临时修改detectron2代码(应急用)
- 找到虚拟环境中detectron2的
detection_checkpoint.py文件,路径类似/Volumes/easystore/Pycharm/Study_GPT/venv/lib/python3.11/site-packages/detectron2/checkpoint/detection_checkpoint.py - 打开文件,在
_load_file方法开头添加代码去除URL查询参数:
def _load_file(self, path): # 添加以下代码 if '?' in path: path = path.split('?')[0] # 原有代码 if path.startswith("detectron2://"): ...
- 保存文件后重新运行代码,即可绕过查询参数问题
内容的提问来源于stack exchange,提问作者jjboi8708
相关产品推荐
相关产品推荐

