在使用yolov3进行目标检测的过程中,我遇到了这样的一个奇怪的错误
当时第一时间我也没有多想这个错误具体是什么情况,下意识网https://www.cnblogs.com/wywshtc/p/12699028.html上冲浪搜了搜这个错误看了前人所留的知识,果不其然我发现了应该这样修改代码
img = transforms.ToTensor()(Image.open(img_path).convert('RGB'))
# img = transforms.ToTensor()(Image.open(img_path))
# 把下面这行代码加入.convert('RGB')
果不其然代码正常运行了,detect检测出了目标,检测结束之后检查output结果让我大吃一惊
图像变成这个样子了,要知道我送进去的可是x-ray铸件图片,黑白的灰度图像。
在师兄的提示后联想到了开始的错误,我进行过gray2RGB的处理,也就是将单通道的gray转成了三通道的RGB,虽然不知道为什么会变成这个明晃晃的颜色,但是至少定位了错误的具体位置。
分析:灰度图像只有一个通道,而RGB有三个通道
解决办法
将一个通道的灰度图像,复制两次,得到三通道所需图像
写一个脚本,专门用来处理送进检测网络的图片
import cv2
import os
from PIL import Image
import numpy as np
file_dir = "/home/jx/PyTorch-YOLOv3/data/samples/"
out_dir = "/home/jx/PyTorch-YOLOv3/data/test/"
a = os.listdir(file_dir)
for i in a:
print(i)
I = Image.open(file_dir + i)
L = I.convert('L')
a = np.array(L)
image = np.expand_dims(a, axis=2)
image = np.concatenate((image, image, image), axis=-1)
cv2.imwrite(out_dir + i, image)
处理完成之后,再次将图片送到检测网络,继续使用
img = transforms.ToTensor()(Image.open(img_path))
程序没有报错,同时出现bbox网络检测出缺陷
参考:
https://www.cnblogs.com/wywshtc/p/12699028.html