一、问题展示
Traceback (most recent call last):File "/media/hadoop/yolov5-7.0/detect.py", line 259, in <module>main(opt)File "/media/hadoop//yolov5-7.0/detect.py", line 254, in mainrun(**vars(opt))File "/home/hadoop/anaconda3/envs/xxx/lib/python3.9/site-packages/torch/utils/_contextlib.py", line 115, in decorate_contextreturn func(*args, **kwargs)File "/media/hadoop/yolov5-7.0/detect.py", line 115, in runfor path, im, im0s, vid_cap, s in dataset:File "/media/hadoop/yolov5-7.0/utils/dataloaders.py", line 305, in __next__assert im0 is not None, f'Image Not Found {path}'
AssertionError: Image Not Found /media/hadoop/VOC/images/val/3070.jpg
二、问题分析
定位到此张图片是存在的,分析到此张图片的详细信息如下:
可以查看到此张图的位深度为8,按如下表格分析到此张图为位图模式、灰度图或者r\g\b单通道图片等
在yolon5模型训练、验证时如果遇到位深度不足24的图片则会出现如下图过滤信息,代表此张图不使用;datect.py推理则会直接报错停测,如出现标题主题的现象。
三、解决方案
方案一、.图片筛选:(我使用的方式)
在图片批量使用前,使用文件位深度排序方式删除位深度不足24的图像数据,步骤如下;
方案二、yolo程序修改
将dataset中的第161行
p = str(Path(path).resolve()) # os-agnostic absolute path
改为
p = str(Path(path)) # os-agnostic absolute path
方案三、代码进行图片位深度转换
Python将8位的图片转为24位的图片
import numpy as np
from PIL import Image
import os
import syspath='XXXXXXXXX/'
newpath='XXXXXXXXX/'
def Img8to24(path):files = os.listdir(path)files = np.sort(files)i=0for file in files:imgpath = os.path.join(path, file)#转换img=Image.open(imgpath).convert('RGB')savepath = os.path.abspath(newpath,file)img.save(savepath)Img8to24(path)
完结*0*
参考链接:
python——PIL,Image,cv2读取、修改图片_img.load()-CSDN博客
YOLOv5 detect运行报错assert img0 is not None, f‘Image Not Found {path}‘解决方案_yolov5detect大量数据读取时报错assert im0 is not none, f'ima-CSDN博客