مجموعه داده تصاویر خودروها از دانشگاه Stanford

مجموعه تصاویر برچسب گذاری شده خودروها، ارائه شده از سوی دانشگاه Stanford، شامل ۱۶،۱۸۵ تصویر دسته بندی شده در ۱۹۶ طبقه (Class) است. هر طبقه به سال ساخت، برند کارخانه سازنده و مدل خودرو (Make, Model, Year) اشاره دارد. این تصاویر در پوشه هایی بر اساس طبقه مربوطه شان دسته بندی شده و ارائه گردیده اند.

تعداد ۸،۱۴۴ تصویر به عنوان داده های آموزش و ۸،۰۴۱ تصویر به عنوان داده های آزمایش (اعتبارسنجی یا Validation) در نظر گرفته شده اند. این تقسیم بندی به نحوی صورت گرفته است که تصاویر مربوط به هر طبقه نیز بین دو گروه آموزش و آزمایش به سهم مساوی تقسیم شده باشند.

اگر از چهارچوب تنسورفلو (TensorFlow) و یا کراس (Keras) برای توسعه مدل های درهم پیچیده (Convolutional) در طبقه بندی تصاویر استفاده می کنید، توجه داشته باشید که این چهارچوب ها توابع ساده ای برای معرفی داده های برچسب گذاری شده به شیوه پوشه بندی به مدل ارائه کرده اند. در بلاک کُد زیر، نمونه ای از این توابع نمایش داده شده است:

# ### The CNN model structure
model = tf.keras.models.Sequential(
    [
        tf.keras.layers.Conv2D(
            16, (3, 3), activation="relu", input_shape=(150, 150, 3)
        ),
        tf.keras.layers.MaxPooling2D(2, 2),
        tf.keras.layers.Conv2D(32, (3, 3), activation="relu"),
        tf.keras.layers.MaxPooling2D(2, 2),
        tf.keras.layers.Conv2D(64, (3, 3), activation="relu"),
        tf.keras.layers.MaxPooling2D(2, 2),
        tf.keras.layers.Conv2D(64, (3, 3), activation="relu"),
        tf.keras.layers.MaxPooling2D(2, 2),
        tf.keras.layers.Conv2D(64, (3, 3), activation="relu"),
        tf.keras.layers.MaxPooling2D(2, 2),
        tf.keras.layers.Flatten(),
        tf.keras.layers.Dense(512, activation="relu"),
        tf.keras.layers.Dense(1, activation="sigmoid"),
    ]
)

# ### Check model summary
model.summary()

# ### Model settings and compilation
model.compile(
    optimizer=tf.keras.optimizers.RMSprop(lr=0.001),
    loss="binary_crossentropy",
    metrics=["acc"],
)

# ### Use subfolder names as labels for the training and validation data
training_data_gen = tf.keras.preprocessing.image.ImageDataGenerator(
    rescale=1. / 255.,
)
training_data = training_data_gen.flow_from_directory(
    training_dir, batch_size=128, class_mode="binary", target_size=(150, 150)
)
validation_data_gen = tf.keras.preprocessing.image.ImageDataGenerator(
    rescale=1. / 255.
)
validation_data = validation_data_gen.flow_from_directory(
    validation_dir, batch_size=32, class_mode="binary", target_size=(150, 150)
)

# ### Training the model
history = model.fit_generator(
    training_data,
    validation_data=validation_data,
    steps_per_epoch=8,
    epochs=50,
    validation_steps=8,
    verbose=1,
)