You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向COCO Detectron2加载图像时无法可视化且报TypeError如何解决

错误原因

报错触发自第8行的img[:,:,::-1]切片操作,TypeError: 'NoneType' object is not subscriptable说明cv2.imread(s['file_name'])返回了None,即图片读取失败。本地运行正常、Colab/Kaggle报错的核心原因是两类环境的文件路径、文件系统规则存在差异,不存在代码逻辑本身的问题。

报错解决方法
  • 先添加读图校验逻辑,避免单张图片读取失败中断整个流程,修改代码如下:
for s in random.sample(dataset_custom, n):
    img = cv2.imread(s['file_name'])
    # 新增校验逻辑
    if img is None:
        print(f"跳过读取失败的文件:{s['file_name']}")
        continue
    v = Visualizer(img[:,:,::-1], metadata = dataset_custom_metadata, scale = 0.5)
    v  = v.draw_dataset_dict(s)
  • 核对云平台的文件路径:Colab挂载谷歌盘后的文件路径前缀为/content/drive/MyDrive/,Kaggle上传的数据集默认存储在/kaggle/input/[你设置的数据集名称]/下,需要把s['file_name']的路径前缀替换为云环境对应的实际路径。
  • 确认数据集状态:检查云平台上的数据集是否完整解压、文件没有上传损坏,避免因文件不存在导致读取失败。
  • 兼容特殊文件名:如果文件名包含中文、空格等非ASCII字符,OpenCV在云环境下大概率读取失败,可改用PIL读取图片:
from PIL import Image
import numpy as np
img = np.array(Image.open(s['file_name']))[:, :, ::-1]
Visualizer相关说明

Visualizer不是分割流程的必需组件,它的唯一作用是可视化标注结果、模型预测结果,完全不参与模型训练、推理、精度计算等核心环节。如果你不需要校验标注质量、查看预测效果,直接删除整段可视化代码即可,不会对分割任务产生任何影响。


内容的提问来源于stack exchange,提问作者Saltanat Khalyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:15:07