2

我使用自己的自定义数据集训练了一个 CNN,其中调整数据集图像的大小是使用 PIL 库完成的。现在,当我尝试预测数据集中输入图像的标签时,它可以正常工作。我在 CNN 类中的预测函数如下:

def predict(self, X):

    X = np.asarray(X, dtype=np.float32)

    if self.pred is None:
        try:
            self.pred = theano.function([self.input_var], T.argmax(self.get_output(network=self.network, deterministic=True), axis=1))

        except:
            print("failed")
    else:
        pass

    dim = X.ndim
    if dim == 3:
        X = X[newaxis,:,:,:]
    elif dim == 2:
        X = X[newaxis, newaxis, :, :]
    else:
        pass

    try:
        predicted_label = self.pred(X)
        return int(predicted_label)
    except:
        print("failed")

像这样从 main 调用:

 [bilder, label, names] = read_images1(dataset_path, sz=im_size, na=False)

bilder = np.asarray(bilder, dtype=np.float32)
print("The shape of bilder is; number of images: {}, height: {}, width: {}".format(bilder.shape[0], bilder.shape[1], bilder.shape[2]))

pred = model.predict(bilder[0])
print("Predicted label for image is: {}".format(pred))
bilder1 = bilder[0]
#bilder1 = cv2.resize(bilder1, (58, 58), interpolation=cv2.INTER_CUBIC)

pred1 = model.predict(bilder[400])
print("Predicted label for image is: {}".format(pred1))

bilder 几乎是一个具有形状(图像、高度、宽度)的数组,如果我运行代码,输出如下:

 The shape of bilder is; number of images: 442, height: 58, width: 58
 Predicted label for image is: 3
 Predicted label for image is: 39

 Process finished with exit code 0

请注意:

 #bilder1 = cv2.resize(bilder1, (58, 58), interpolation=cv2.INTER_CUBIC)

已注释且未使用。现在,如果我在其中发表评论,则会得到以下输出:

 The shape of bilder is; number of images: 442, height: 58, width: 58
 Predicted label for image is: 3

这意味着它会卡在这部分,直到我自己停止代码:

    try:
        predicted_label = self.pred(X)
        return int(predicted_label 

这个我完全不明白。存储在 bilder1 中的图像甚至没有用于预测,因为它只是存储在 bilder1 中,然后当我继续尝试预测 bilder 中的图像 nr 400 时,它会卡住.. 这只是我尝试实时进行的测试通过网络摄像头进行识别,在调整人脸图像大小后会出现同样的问题。

编辑:问题似乎与使用 cv2 库对图像所做的任何更改一致。这些图像是否用于神经网络似乎并不重要。

4

0 回答 0