2, memory: 20149, loss_prob: 0.3275, loss_cls: 0.5341, loss_lovasz: 0.5319, loss: 1.3935, grad_norm: 3.4085 2025-03-26 20:17:10,404 - mmdet - INFO - Saving checkpoint at 28130 iterations 100%|??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????| 6019/6019 [00:52<00:00, 114.81it/s] Finished. Traceback (most recent call last): File "tools/occ_train.py", line 266, in <module> main() File "tools/occ_train.py", line 255, in main custom_train_model( File "/root/Desktop/ViewFormer-Occ-main/projects/mmdet3d_plugin/bevformer/apis/train.py", line 27, in custom_train_model custom_train_detector( File "/root/Desktop/ViewFormer-Occ-main/projects/mmdet3d_plugin/bevformer/apis/mmdet_train.py", line 212, in custom_train_detector runner.run(data_loaders, cfg.workflow) File "/root/miniconda3/envs/myconda/lib/python3.8/site-packages/mmcv/runner/iter_based_runner.py", line 144, in run iter_runner(iter_loaders[i], **kwargs) File "/root/miniconda3/envs/myconda/lib/python3.8/site-packages/mmcv/runner/iter_based_runner.py", line 70, in train self.call_hook('after_train_iter') File "/root/miniconda3/envs/myconda/lib/python3.8/site-packages/mmcv/runner/base_runner.py", line 317, in call_hook getattr(hook, fn_name)(self) File "/root/miniconda3/envs/myconda/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 266, in after_train_iter self._do_evaluate(runner) File "/root/miniconda3/envs/myconda/lib/python3.8/site-packages/mmdet/core/evaluation/eval_hooks.py", line 63, in _do_evaluate key_score = self.evaluate(runner, results) File "/root/miniconda3/envs/myconda/lib/python3.8/site-packages/mmcv/runner/hooks/evaluation.py", line 367, in evaluate eval_res = self.dataloader.dataset.evaluate( File "/root/Desktop/ViewFormer-Occ-main/mmdetection3d/mmdet3d/datasets/nuscenes_dataset.py", line 503, in evaluate result_files, tmp_dir = self.format_results(results, jsonfile_prefix) TypeError: cannot unpack non-iterable NoneType object
时间: 2025-05-15 07:01:21 浏览: 37
从您提供的日志来看,这是一个深度学习训练过程中遇到的问题。以下是问题的分析及解决思路:
### 问题描述
在运行 `tools/occ_train.py` 脚本时,程序报错提示:
```
TypeError: cannot unpack non-iterable NoneType object
```
此错误发生在文件 `/mmdet3d/datasets/nuscenes_dataset.py` 的第503行:
```python
result_files, tmp_dir = self.format_results(results, jsonfile_prefix)
```
这表明函数 `self.format_results` 返回了 `None` 或其他无法解包的对象。
---
### 可能的原因
1. **数据未正确生成**
函数 `format_results` 应返回两个值 (`result_files`, `tmp_dir`),但如果结果为空或格式化失败,则可能导致其返回 `None`。
2. **模型预测异常**
模型的推理部分可能存在问题,导致传递给 `evaluate` 方法的结果无效(如空列表或其他非预期结构)。
3. **配置文件设置不当**
配置文件中可能存在某些参数未正确指定,例如路径、格式等,使得 `jsonfile_prefix` 参数无效或未生效。
4. **代码逻辑问题**
如果自定义修改过 `nuscenes_dataset.py` 文件中的相关逻辑,可能会引入新的 Bug 导致该问题。
---
### 解决方案
#### 步骤一:检查输入数据是否有效
确保传入 `evaluate` 和 `format_results` 的 `results` 数据是非空且正确的。可以在调试模式下打印出 `results` 内容进行验证。
```python
print("Results:", results) # 添加到 nuscenes_dataset.py 第 503 行附近
```
如果发现 `results` 为空或内容不符合预期,请回溯至前序步骤(通常是模型推理阶段),找出原因并修正。
---
#### 步骤二:确认 `format_results` 实现逻辑
打开 `nuscenes_dataset.py` 中的 `format_results` 方法,查看其内部实现是否存在潜在问题。重点关注以下方面:
- 是否有返回值缺失的情况;
- 是否对特定条件下的异常情况进行了捕获和处理。
可以尝试临时添加断点或日志信息以便定位问题。
---
#### 步骤三:检查配置文件
核对当前使用的配置文件,特别是涉及评估的部分,比如 `data_config` 或者 `evaluation` 相关字段。确保所有必要参数均已正确设定,并指向合法路径。
示例配置片段:
```yaml
evaluation:
interval: 1
metric: 'bbox'
save_best: True
rule: greater
```
如果不明确具体选项含义,参考官方文档或默认模板调整即可。
---
#### 步骤四:更新依赖库版本
有时由于第三方库版本差异也会引发兼容性问题。建议同步升级 MMDetection 系列工具链及相关组件至最新稳定版。
命令如下:
```bash
pip install --upgrade mmcv-full==latest.mmlab mmdet==latest.mmlab mmdet3d==latest.mmlab
```
完成后重新构建环境并测试脚本运行状态。
---
###
阅读全文
相关推荐



















