ValueError:不能将大小为921600的数组重塑为形状(224,224,3)



我使用迁移学习(InceptionV3)训练了一个模型,当我试图预测结果时,它显示:

ValueError: cannot reshape array of size 921600 into shape (224,224,3)
我用来训练模型的图像生成器是:
root_dir = 'G:/Dataset'
img_generator_flow_train = img_generator.flow_from_directory(
directory=root_dir,
target_size=(224,224),
batch_size=32,
shuffle=True,
subset="training")
img_generator_flow_valid = img_generator.flow_from_directory(
directory=root_dir,
target_size=(224,224),
batch_size=32,
shuffle=True,
subset="validation")
base_model = tf.keras.applications.InceptionV3(input_shape=(224,224,3),
include_top=False,
weights = "imagenet"
)

实现代码为:

cap=cv.VideoCapture(0)
facedetect=cv.CascadeClassifier(cv.data.haarcascades + 'haarcascade_frontalface_default.xml')
model=load_model('Signmodel.h5')
while cap.isOpened():
sts,frame=cap.read()
if sts:
faces=facedetect.detectMultiScale(frame,1.3,5)
for x,y,w,h in faces:
y_pred=model.predict(frame)
print(y_pred,"printing y_pred")
cv.putText(frame,y_pred,(x,y-30), cv.FONT_HERSHEY_COMPLEX, 0.75, (255,0,0),1, cv.LINE_AA)

我试着调整帧的大小:

frame=cv.resize(frame,(224,224),3)

但是当这样做时,我得到:

ValueError: Input 0 of layer "sequential" is incompatible with the layer: expected shape=(None, 224, 224, 3), found shape=(32, 224, 3)

我该怎么做才能解决这个问题?

谢谢! !

您是否尝试先将图像转换为灰色?

detectMultiScal()需要CV_8U格式的图像。

https://docs.opencv.org/3.4/d1/de5/classcv_1_1CascadeClassifier.html aaf8181cb63968136476ec4204ffca498

cap=cv.VideoCapture(0)
facedetect=cv.CascadeClassifier(cv.data.haarcascades + 'haarcascade_frontalface_default.xml')
model=load_model('Signmodel.h5')
while cap.isOpened():
sts,frame=cap.read()
if sts:
frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
faces=facedetect.detectMultiScale(frame,1.3,5)
for x,y,w,h in faces:
y_pred=model.predict(frame)
print(y_pred,"printing y_pred")
cv.putText(frame,y_pred,(x,y-30), cv.FONT_HERSHEY_COMPLEX, 0.75, (255,0,0),1, cv.LINE_AA)

调整图像大小并将其重塑为所需格式,为我解决了这个问题:

while cap.isOpened():
sts,frame=cap.read()
frame1=cv.resize(frame,(224,224))
frame1 = frame1.reshape(1,224,224,3)
if sts:
faces=facedetect.detectMultiScale(frame,1.3,5)
for x,y,w,h in faces:
y_pred=model.predict(frame)

我看到你有提到TL,我将假定您正在使用一个VGG模型,我使用其中一个嗜睡预测,我有同样的问题,当我试图使用一个28 x28大小的图片,我有错误告诉我,大小限制不允许我适应它224 x224输入大小,所以我做了一些我用一滴函数增加图像的大小规模扩大224 x 224的尺寸,问题是,如果您使用的图像具有敏感数据(尽管我猜您正在使用它用于现实生活中的数据,因为您正在使用工作相机而不是图片加载),像素失真将破坏所有和任何类型的敏感数据。

希望对你有帮助。

相关内容

  • 没有找到相关文章

最新更新