随着人工智能技术的飞速发展,其在各个领域的应用也日益广泛。在时尚设计行业中,AI技术的应用可以极大地提高设计效率,帮助设计师更好地理解消费者的需求。本文将介绍一个基于AI的深度学习系统,它能够通过分析大量的时尚设计数据,辅助设计师进行创新设计。
将展示一个使用Jupyter Notebook作为集成开发环境(IDE),并结合TensorFlow2.0、NumPy和Matplotlib等库的AI系统。将使用DeepFashion数据集的一个自定义子集,以减少计算和内存的开销。
在开始之前,假设读者已经熟悉深度学习的概念,以及Jupyter Notebooks和TensorFlow的使用。如果是Jupyter Notebooks的新手,可以从这个教程开始。欢迎下载项目代码。
在这个项目中,将使用TensorFlow和Keras来微调VGG16,因为Keras提供了易于使用的工具来加载数据、加载预训练模型和微调。ImageDataGenerator工具将帮助加载、标准化、调整大小和重新缩放数据。
首先,让导入将需要的库:
import os
import matplotlib.pyplot as plt
import matplotlib.image as img
import tensorflow.keras as keras
import numpy as np
import tensorflow as tf
config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
tf.compat.v1.keras.backend.set_session(tf.compat.v1.Session(config=config))
现在已经准备好了基础,让导入ImageDataGenerator,添加数据目录,并开始加载训练和验证数据。验证数据将只占训练数据的10%:只需要验证数据来在训练过程中微调VGG16的超参数。在这部分代码中,可以设置批量大小。可以将其值设置为适合机器能力和内存。
datasetdir = r'C:\Users\myuser\Desktop\DeepFashion\Train'
os.chdir(datasetdir)
from tensorflow.keras.preprocessing.image import ImageDataGenerator
batch_size = 3
def DataLoad(shape, preprocessing):
imgdatagen = ImageDataGenerator(
preprocessing_function = preprocessing,
horizontal_flip = True,
validation_split = 0.1,
)
height, width = shape
train_dataset = imgdatagen.flow_from_directory(
os.getcwd(),
target_size = (height, width),
classes = [
'Blazer',
'Blouse',
'Cardigan',
'Dress',
'Jacket',
'Jeans',
'Jumpsuit',
'Romper',
'Shorts',
'Skirts',
'Sweater',
'Sweatpants',
'Tank',
'Tee',
'Top',
],
batch_size = batch_size,
subset = 'training',
)
val_dataset = imgdatagen.flow_from_directory(
os.getcwd(),
target_size = (height, width),
classes = [
'Blazer',
'Blouse',
'Cardigan',
'Dress',
'Jacket',
'Jeans',
'Jumpsuit',
'Romper',
'Shorts',
'Skirts',
'Sweater',
'Sweatpants',
'Tank',
'Tee',
'Top',
],
batch_size = batch_size,
subset = 'validation'
)
return train_dataset, val_dataset
现在DataLoad函数已经设置好,让使用它来提取训练和验证数据,并将图片调整到适合预训练模型的形状:224 x 224 x 3。
train_dataset, val_dataset = DataLoad((224, 224), preprocessing=vgg16.preprocess_input)
可以使用ImageDataGenerator的next函数作为迭代器,按顺序加载单个数据集中的图片。使用next,将有训练图片和标签分别保存在X_train和y_train参数中。可以将相同的函数应用于验证和测试数据。
X_train, y_train = next(train_dataset)
如所见,有7,656张图片作为训练数据,属于15个不同的类别,以及842张验证图片。
是时候从Keras加载VGG16网络并显示其基线了:
vgg16 = keras.applications.vgg16
conv_model = vgg16.VGG16(weights='imagenet', include_top=False)
conv_model.summary()
接下来,加载这个网络的ImageNet权重,以便在迁移学习中使用它们。
conv_model = vgg16.VGG16(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
x = keras.layers.Flatten()(conv_model.output)
x = keras.layers.Dense(100, activation='relu')(x)
x = keras.layers.Dense(100, activation='relu')(x)
x = keras.layers.Dense(100, activation='relu')(x)
predictions = keras.layers.Dense(15, activation='softmax')(x)
full_model = keras.models.Model(inputs=conv_model.input, outputs=predictions)
full_model.summary()