FileNotFoundError: [WinError 3] 系统找不到指定的路径。
💥 一、错误根因
错误核心是:
FileNotFoundError: [WinError 3] 系统找不到指定的路径。:
'C:\\Users\\Desktop\\NLPrompt-master\\data\\caltech-101\\101_ObjectCategories\\caltech-101\\101_ObjectCategories'
也就是说,程序在尝试访问这个路径:
C:\Users\Desktop\NLPrompt-master\data\caltech-101\101_ObjectCategories\caltech-101\101_ObjectCategories
你可以看到路径中出现了 重复的 caltech-101\101_ObjectCategories
——
这说明你的数据路径在配置中被拼接了两次。
🧩 二、错误来源分析
从调用栈看:
datasets\caltech101.py -> DTD.read_and_split_data(self.image_dir)
其中的 self.image_dir
是由配置文件中 cfg.DATASET.ROOT
和数据集内部定义路径拼接而成的。
也就是说:
-
你在命令行里传入了:
-
而
datasets/caltech101.py
里又写着类似:self.image_dir = osp.join(self.root, "caltech-101", "101_ObjectCategories")
这就导致路径变成了:
...data\caltech-101\101_ObjectCategories\caltech-101\101_ObjectCategories
⟹ 于是报错。
✅ 三、解决方案(选其一)
✅ 方案一(推荐)
修改命令行参数中的 --root
为数据集上层目录,而不是包含子文件夹的完整路径
即改成:
python train.py ^
--root "C:\Users\lxl\Desktop\NLPrompt-master\data" ^
--seed 1 ^
--trainer NLPrompt ^
--dataset-config-file configs\datasets\caltech101.yaml ^
--config-file configs\trainers\NLPrompt\rn50.yaml ^
--output-dir output\caltech101\NLPrompt\rn50_16shots\noise_sym_0.50\seed1 ^
DATASET.NUM_SHOTS 16 ^
DATASET.NOISE_RATE 0.50 ^
DATASET.NOISE_TYPE sym ^
DATASET.num_class 100
✅ 这样 datasets/caltech101.py
拼接后的路径就是:
C:\Users\lxl\Desktop\NLPrompt-master\data\caltech-101\101_ObjectCategories
—— 这是正确的。
✅ 方案二
如果你更希望保持命令行不动,可以改 datasets/caltech101.py
文件。
找到这行(大约第 33–35 行):
self.image_dir = osp.join(self.root, "caltech-101", "101_ObjectCategories")
改为:
self.image_dir = self.root
这样无论你传什么路径,它就直接使用 --root
参数指定的目录。
✅ 方案三(检查文件夹结构)
确保你的数据文件夹结构如下(推荐标准):
C:\Users\Desktop\NLPrompt-master\data\
│
└── caltech-101\└── 101_ObjectCategories\├── accordion\├── airplanes\├── ...
而不是:
C:\Users\Desktop\NLPrompt-master\data\caltech-101\101_ObjectCategories\caltech-101\101_ObjectCategories\
如果确实有重复嵌套的 caltech-101\101_ObjectCategories
,请删除最外层重复部分。
🧠 四、总结快速修正表
问题原因 | 修正方法 |
---|---|
传入路径过深(重复拼接) | 改为 --root "C:\Users\Desktop\NLPrompt-master\data" ✅ |
源码硬编码路径多拼了一层 | 修改 datasets/caltech101.py 第 35 行为 self.image_dir = self.root |
数据集解压路径错误 | 保证目录结构是 data\caltech-101\101_ObjectCategories\类别文件夹 |
💡 建议采用方案一(修改命令行参数) —— 这是最安全、最符合官方逻辑的做法。