基于 Tensorflow CNN 的时尚识别模型虽然所谓的准确率接近 95%,但屡次不准确

问题描述 投票:0回答:1

我正在尝试自动化一项服务,该服务获取客户的照片并返回他身上的衣服,例如一件外套。 我尝试编写一个基于张量流的专用模块来提供此服务,并且他的准确性似乎很好。该模型基于“fashion_mnist”数据集(https://www.kaggle.com/datasets/zalando-research/fashionmnist)进行训练,并且可以与数据集提供的图像正常工作。 但是,每当我尝试将自定义图像上传到模型并根据要求进行调整时,我总是会得到分类“bag”。我想是这样的,因为袋子只是一个“基本”且无深度的物体,人工智能更容易将其预测重新路由到它。 这就是我一直在尝试运行的代码:

import tensorflow as tf
from tensorflow import keras
import numpy as np
import cv2

fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
train_images = train_images.reshape(train_images.shape[0], 28, 28, 1) / 255.0
test_images = test_images.reshape(test_images.shape[0], 28, 28, 1) / 255.0

model = keras.Sequential([
    keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.MaxPooling2D((2, 2)),
    keras.layers.Flatten(),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5)

model.save('fashion_mnist_cnn_model.h5')

model = keras.models.load_model('fashion_mnist_cnn_model.h5')

image_path = 'path_to_your_image.jpg'
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
image = cv2.resize(image, (28, 28))
image = image.astype('float32') / 255.0
image = np.expand_dims(image, axis=-1)

prediction = model.predict(np.array([image]))
predicted_class = np.argmax(prediction)

class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
               'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
print(f'Predicted Class: {class_names[predicted_class]}')

您知道如何让他更准确,或者只是如何解决一般问题吗? (也许这与他的准确性无关)

该模型仅不准确的一个例子是: 提供的图片:

分类:

python tensorflow conv-neural-network
1个回答
0
投票

我认为这主要是训练数据集中图像的尺寸太小,这限制了您调整测试图像的大小,并且本质上是下采样和丢失信息。

为了给您一些视角,将鞋子图像调整为

28 x 28
后,它看起来像这样:

我知道这会被误认为是一个包。我尝试了其他一些示例图像,在某些情况下,您训练的模型会正确或至少接近(例如,将连衣裙错误分类为衬衫),因此从这个意义上说,您的模型按预期工作,但并不总是如此正确。

机器学习模型的好坏取决于它所训练的数据,虽然时尚 mnist 并不是一个糟糕的起点,但如果你想要最好的结果,你可能想要训练更大的图像(DeepFashion数据集)可能值得研究)。此外,我想有很多预训练的模型可以用于对图像中的服装进行分类,因此您不需要从头开始创建模型来重新发明轮子(尽管这是获得编写 ML 模型经验的好方法)

© www.soinside.com 2019 - 2024. All rights reserved.