Sherry__Conan 2023-05-08 18:06 采纳率: 0%
浏览 39

运行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

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

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-09 08:46
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: 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中的代码,根据需要进行修改
      # 后续保存预测信息的代码块,可能涉及框的绘制、图片保存等多个步骤,需要根据具体情况进行修改。
      # ...
      

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

报告相同问题?

问题事件

  • 创建了问题 5月8日