问题遇到的现象和发生背景:
使用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
实在看不出来该怎么解决。
不知道你这个问题是否已经解决, 如果还没有解决的话: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脚本时无法显示目标检测图片:
解决方案如下:
# 找到parse_opt函数,将--source 对应的 default修改为存放视频或者图片的地址,如下所示
parser.add_argument('--source', type=str, default='data/images', help='source')
# 运行detect.py文件观察是否缺少某个依赖
python3 detect.py --weights runs/train/exp/weights/best.pt --source data/images/bus.jpg --save-txt
# 根据检查结果安装缺少的依赖
pip install -r requirements.txt
# 找到对每张图片/视频进行前向推理的代码块,可能是段落7中的代码,根据需要进行修改
t1 = time_synchronized()
pred = model(img, augment=augment)[0]
# 对每张图片/视频进行前向推理后的处理
# ...
print(f'{s}Done. ({t2 - t1:.3f}s)')
# 找到后续保存或者打印预测信息的代码块,可能是段落8中的代码,根据需要进行修改
# 后续保存预测信息的代码块,可能涉及框的绘制、图片保存等多个步骤,需要根据具体情况进行修改。
# ...
模型下载不完整导致的问题吧。你可以将你用的模型删除掉,然后重新运行,他会自动去网站上下载模型,盯着点下来进度条,如果下载到一半失败了,但是继续运行下去就会导致torch读取模型失败。
如果网络不好,你可以复制控制台输出中的下载路径到迅雷之类的下载,然后覆盖掉原来的模型即可。