运行YOLOv5包里的detect.py后发生错误

问题遇到的现象和发生背景:
使用YOLOv5的detect.py来验证是否安装成功,结果运行的时候出不来目标检测的图片

D:\anaconda\envs\lzypytorch\python.exe C:/Users/19043/Desktop/yolov5-6.0/detect.py
detect: weights=yolov5s.pt, source=data\images, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs\detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False
YOLOv5  2021-10-12 torch 1.13.1 CPU

Traceback (most recent call last):
  File "C:\Users\19043\Desktop\yolov5-6.0\detect.py", line 307, in <module>
    main(opt)
  File "C:\Users\19043\Desktop\yolov5-6.0\detect.py", line 302, in main
    run(**vars(opt))
  File "D:\anaconda\envs\lzypytorch\lib\site-packages\torch\autograd\grad_mode.py", line 27, in decorate_context
    return func(*args, **kwargs)
  File "C:\Users\19043\Desktop\yolov5-6.0\detect.py", line 82, in run
    model = torch.jit.load(w) if 'torchscript' in w else attempt_load(weights, map_location=device)
  File "C:\Users\19043\Desktop\yolov5-6.0\models\experimental.py", line 94, in attempt_load
    ckpt = torch.load(attempt_download(w), map_location=map_location)  # load
  File "D:\anaconda\envs\lzypytorch\lib\site-packages\torch\serialization.py", line 777, in load
    with _open_zipfile_reader(opened_file) as opened_zipfile:
  File "D:\anaconda\envs\lzypytorch\lib\site-packages\torch\serialization.py", line 282, in __init__
    super(_open_zipfile_reader, self).__init__(torch._C.PyTorchFileReader(name_or_buffer))
RuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory

进程已结束,退出代码1

实在看不出来该怎么解决。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7762455
  • 你也可以参考下这篇文章:将Yolov5的detect.py修改为可以直接调用的函数
  • 除此之外, 这篇博客: yolov5 参数使用中的 detect.py 的使用, 结果存放在 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    python detect.py --source 0  # webcam
                                file.jpg  # image
                                file.mp4  # video
                                path/  # directory
                                path/*.jpg  # glob
                                'https://youtu.be/NUsoVlDFqZg'  # YouTube video
                                'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream
    
  • 您还可以看一下 卢未来老师的搞定系列:yolov5检测封装成类调用课程中的 认识detect.py检测流程小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    根据参考资料中的提示,可能是以下几种原因导致运行YOLOv5的detect.py脚本时无法显示目标检测图片:

    1. 传入的source值不正确,需要注意是否为文件路径或者数字0(表示使用电脑自带摄像头),还需要判断是否为网络流传入。
    2. 缺少某些依赖项,需要先运行detect.py文件检查所需依赖,然后安装相关依赖。
    3. 需要修改detect.py文件中的代码,以进行预测时的前向传播和NMS。

    解决方案如下:

    1. 检查source值是否正确,尝试修改其对应的默认值为存放图片或视频的地址(如runs/detect/..下),或者修改为对应摄像头的号码(如数字0表示电脑自带摄像头)。
    # 找到parse_opt函数--source 对应的 default修改为存放视频或者图片的地址如下所示
    parser.add_argument('--source', type=str, default='data/images', help='source')
    
    1. 运行detect.py文件检查依赖项,检查是否缺少某些依赖,并安装缺少的依赖。
    # 运行detect.py文件观察是否缺少某个依赖
    python3 detect.py --weights runs/train/exp/weights/best.pt --source data/images/bus.jpg --save-txt
    
    # 根据检查结果安装缺少的依赖
    pip install -r requirements.txt
    
    1. 修改detect.py文件中的前向传播和NMS代码。
    # 找到对每张图片/视频进行前向推理的代码块,可能是段落7中的代码,根据需要进行修改
    t1 = time_synchronized()
    pred = model(img, augment=augment)[0]
    # 对每张图片/视频进行前向推理后的处理
    # ...
    print(f'{s}Done. ({t2 - t1:.3f}s)')
    
    # 找到后续保存或者打印预测信息的代码块,可能是段落8中的代码,根据需要进行修改
    # 后续保存预测信息的代码块,可能涉及框的绘制、图片保存等多个步骤,需要根据具体情况进行修改。
    # ...
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

模型下载不完整导致的问题吧。你可以将你用的模型删除掉,然后重新运行,他会自动去网站上下载模型,盯着点下来进度条,如果下载到一半失败了,但是继续运行下去就会导致torch读取模型失败。
如果网络不好,你可以复制控制台输出中的下载路径到迅雷之类的下载,然后覆盖掉原来的模型即可。