(open3d) D:\Code\xionglei_code\KBNet-main>D:/Environment/Anaconda3/envs/open3d/python.exe d:/Code/xionglei_code/KBNet-main/Deraining/test.py ** Deraining/Options/kbnet_l.yml pretrained_models/derain.pth Traceback (most recent call last): File "d:/Code/xionglei_code/KBNet-main/Deraining/test.py", line 44, in <module> checkpoint = torch.load(pth_path) File "D:\Environment\Anaconda3\envs\open3d\lib\site-packages\torch\serialization.py", line 705, in load with _open_zipfile_reader(opened_file) as opened_zipfile: File "D:\Environment\Anaconda3\envs\open3d\lib\site-packages\torch\serialization.py", line 242, in __init__ super(_open_zipfile_reader, self).__init__(torch._C.PyTorchFileReader(name_or_buffer)) RuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory
时间: 2025-06-17 12:15:26 浏览: 17
<think>好的,用户遇到了PyTorch加载预训练模型时的RuntimeError,错误信息是“PytorchStreamReader failed reading zip archive: failed finding central directory”。首先,我需要回忆一下这个错误的常见原因。根据提供的引用内容,这个错误通常与模型文件损坏、路径错误或者PyTorch版本不兼容有关。
接下来,我需要整理解决步骤。首先应该检查模型文件是否存在,用户可能输入了错误的路径,或者文件被移动、删除了。然后,确认文件完整性,比如检查文件大小是否与预期一致,或者计算MD5哈希值。如果文件损坏,需要重新下载。
另外,文件路径中的特殊字符或者中文可能导致问题,建议使用绝对路径并避免特殊字符。还有,PyTorch版本问题,如果模型是用新版本保存的,旧版本可能无法加载,所以需要更新PyTorch或者转换模型格式。
用户可能是在加载模型时使用了错误的函数,比如应该用torch.load却用了其他方法。此外,存储设备的问题,比如硬盘错误,也可能导致读取失败,需要排除硬件故障。
最后,如果所有方法都无效,建议用户提供更多细节,比如操作系统、PyTorch版本、错误日志,以便进一步诊断。需要确保回答结构清晰,步骤具体,让用户能一步步排查问题,同时引用提供的参考资料来支持解决方案。</think>### 解决 PyTorch RuntimeError "failed finding central directory" 的步骤
当加载预训练模型(`.pth` 文件)时遇到 `RuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory`,通常与模型文件损坏、路径问题或版本不兼容有关。以下是逐步排查和解决方法:
---
#### 1. **检查模型文件是否存在**
- **问题**:文件路径错误或文件被删除。
- **解决**:
1. 使用绝对路径加载模型:
```python
model_path = "/完整路径/模型名.pth"
model = torch.load(model_path)
```
2. 检查文件是否存在:
```python
import os
if not os.path.exists(model_path):
print("模型文件不存在!")
```
3. 避免路径中的特殊字符(如中文、空格),建议使用纯英文路径[^4][^5]。
---
#### 2. **验证模型文件完整性**
- **问题**:文件下载不完整或损坏。
- **解决**:
1. 检查文件大小是否与官方发布的一致。
2. 重新下载模型文件,确保下载过程中网络稳定。
3. 通过计算 MD5/SHA1 哈希值对比官方提供的校验值[^3]。
---
#### 3. **检查 PyTorch 版本兼容性**
- **问题**:模型由高版本 PyTorch 保存,但当前环境版本过低。
- **解决**:
1. 升级 PyTorch 到最新版本:
```bash
pip install torch --upgrade
```
2. 如果无法升级,尝试在保存模型时指定兼容性(需有模型源码):
```python
torch.save(model.state_dict(), "model.pth", _use_new_zipfile_serialization=False)
```
---
#### 4. **排除文件权限问题**
- **问题**:权限不足导致文件无法读取。
- **解决**:
1. 在终端中检查文件权限:
```bash
ls -l 模型路径/模型名.pth
```
2. 修改权限:
```bash
chmod 755 模型路径/模型名.pth
```
---
#### 5. **使用正确的加载方式**
- **问题**:模型加载代码错误。
- **解决**:
1. 确保使用 `torch.load()` 并指定 `map_location`(如跨设备加载):
```python
model = torch.load("model.pth", map_location=torch.device('cpu'))
```
2. 如果模型是 `state_dict` 而非完整模型,需先初始化模型结构:
```python
model = MyModelClass()
model.load_state_dict(torch.load("model.pth"))
```
---
#### 6. **检查存储设备状态**
- **问题**:硬盘损坏导致文件读取失败。
- **解决**:
1. 尝试将模型文件复制到其他目录或其他存储设备。
2. 运行磁盘检测工具(如 `chkdsk` on Windows, `fsck` on Linux)。
---
#### 7. **其他可能性**
- **问题**:文件格式被篡改。
- **解决**:
1. 确认文件扩展名正确(如 `.pth` 而非 `.zip` 或 `.tar`)。
2. 尝试用压缩软件打开 `.pth` 文件(PyTorch 模型本质是 ZIP 存档),若无法打开则文件已损坏[^1]。
---
### 总结流程图
```mermaid
graph TD
A[出现错误] --> B{文件是否存在?}
B -->|否| C[重新下载或修复路径]
B -->|是| D{文件完整性?}
D -->|损坏| C
D -->|正常| E{PyTorch版本兼容?}
E -->|不兼容| F[升级/降级PyTorch]
E -->|兼容| G{权限问题?}
G -->|是| H[修改权限]
G -->|否| I[检查加载代码]
I --> J[成功加载]
```
阅读全文
相关推荐




