下面是生成错误的代码
这是我的模型的基础结构。我导入的是MobileNetV2,但是我把最上面的图层去掉了。
baseModel = MobileNetV2(weights="imagenet", include_top=False, input_tensor=Input(shape=(224, 224, 3)))
然后我现在用opencv创建一个人脸检测器。人脸检测器捕获人脸,模型预测人脸是否戴口罩。
下面这行会产生错误,因为我没有将捕获的图像帧调整为模型输入的适当大小。
for (x,y,w,h) in faces:
face_img = grayscale_img[y:y+w,x:x+w]
resized_img = cv2.resize(face_img,(56,56))
normalized_img = resized_img/255.0
reshaped_img = np.reshape(normalized_img,(224, 224, 3))
result=model.predict(reshaped_img)
生成的错误在
下面ValueError: cannot shaping数组大小为3136成形状(224,224,3)
重塑这张图片的正确方法是什么?谢谢你
这个错误看起来就像数组可能只有1D,尽管没有足够的像素来组成一个224x224x3的图像。
如果人脸图像是灰度的,那么你就无法将其重塑为3通道,你必须将其复制到其他3通道:
grayscale_img = grayscale_img[y:y+w,x:x+w]
face_img = np.stack([grayscale_img,grayscale_img,grayscale_img], axis= -1)## three channels
或将您的模型顶部转换为单个通道,可能(我不确定)在创建模型时使用以下命令:
input_tensor=Input(shape=(224, 224, 1)
然后你可以使用opencv或np:
来调整图像的宽度和高度resized_img = cv2.resize(face_img, (224,224)) ## opencv
MobileNetv2需要在(-1,1)之间进行规范化,因此:
normalized_img = resized_img/128 -1
你可能想看看:
https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet_example.ipynb
如果您的灰度图像非常小,您可能需要尝试调整模型以接受较小的图像,而不是放大它们