Windows10运行KITS19仓库遇路径错误,训练RESUNET报TypeError
解决方案:修复KITS19 ResUNET训练的路径类型错误
问题根源分析
从报错栈可以明确看到,错误出在dataset/kits19.py第106行的路径拼接代码:
case_root = root / data / f'case_{case:05d}'
这里的data变量被传入了模块对象(module),而非预期的字符串/路径对象,导致pathlib2在处理路径拼接时抛出TypeError: expected str, bytes or os.PathLike object, not module。这种情况大多是变量名冲突,或是调用方法时传错了参数类型导致的。
分步修复步骤
1. 定位参数传入错误
打开dataset/kits19.py,找到调用_read_npy的_get_data方法(第67行左右):
train_imgs, train_labels, train_case_slice_num = self._read_npy(self._root, self._train_case, is_test=False)
这里的第二个参数self._train_case应该是数据集目录名(比如'imagesTr'或'labelsTr'),但实际传入的是训练案例ID列表或其他非字符串对象,甚至可能是误导入的data模块。
2. 修正_read_npy的调用参数
修改_get_data中的调用逻辑,确保传给_read_npy的第二个参数是正确的字符串路径。比如读取训练图像和标签需要分开调用:
# 读取训练图像 train_imgs, _, train_case_slice_num = self._read_npy(self._root, 'imagesTr', self._train_case, is_test=False) # 读取训练标签 _, train_labels, _ = self._read_npy(self._root, 'labelsTr', self._train_case, is_test=False)
同时检查_read_npy方法的定义,确保参数顺序匹配:
def _read_npy(self, root, data_dir, cases, is_test=False): # 方法逻辑... case_root = root / data_dir / f'case_{case:05d}' # ...
3. 适配Windows路径规则
在Windows系统下,确保self._root是有效的路径对象或字符串:
- 避免使用未转义的反斜杠,推荐用正斜杠
'F:/Uni/203/cse465/kits19-challenge/data'或原始字符串r'F:\Uni\203\cse465\kits19-challenge\data' - 优先用pathlib的Path对象初始化根路径:
from pathlib2 import Path self._root = Path(r'F:\Uni\203\cse465\kits19-challenge\data')
4. 排查变量名冲突
检查代码顶部是否有类似import data的导入语句,这会导致data变量被覆盖为模块对象,和路径字符串变量冲突。如果有,修改导入别名:
import data as dataset_data # 重命名避免冲突
额外验证点
- 确认KITS19数据集的目录结构正确:根目录下必须包含
imagesTr、labelsTr、imagesTs文件夹,每个文件夹内是case_00000.npy格式的文件。 - 运行前可添加调试代码验证变量类型:
# 在_read_npy方法开头添加 print(type(data_dir), data_dir) # 确认输出是<class 'str'>和正确的目录名
内容的提问来源于stack exchange,提问作者Samiha Akhter
相关产品推荐
相关产品推荐

