Python Forum
How do I classify colored images into 3 classes
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How do I classify colored images into 3 classes
#1
I'm struggling with the problem to write a program for classifying images (which are just colors) into 3 groups. I expect to obtain from each image a 3 vector [x,y,z].
The blue ones should be [1,0,0], green ones [0,1,0] and everything else beyond mixture of green and blue, such as red or yellow should yield [0,0,1].
The numbers are expected to be output of a softmax function and hence should be probabilities, each vector like this: [0.6,0.4,0]
for almost blue and with trace of green. I have written the following code so far but it gives a wrong results, see below, can anyone give me a hint on how to fix the code to yield proper vectors [x,y,1-x-y] ? There is apparently some bug as yellow gives this [0.0, 1.0, 0.0] instead of [0.1,0.2,0.7]. Thank you so much:

import tensorflow as tf from tensorflow.keras import layers, models from tensorflow.keras.preprocessing.image import ImageDataGenerator import numpy as np import os # Define your image dimensions img_width, img_height = 150, 150 # Define the path to your dataset train_data_dir = 'C:/Users/Hynek/Desktop/HU/train' test_data_dir = 'C:/Users/Hynek/Desktop/HU/test' # Updated path for the test directory # Build a CNN model with three classes model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(img_width, img_height, 3))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(128, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Flatten()) model.add(layers.Dense(128, activation='relu')) model.add(layers.Dense(3, activation='softmax')) # Change the output to 3 classes and use softmax activation # Compile the model model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # Use data augmentation for training train_datagen = ImageDataGenerator( rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True ) train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(img_width, img_height), batch_size=32, class_mode='sparse', # Use 'sparse' for integer-encoded labels ) # Check if the generator has data if len(train_generator) == 0: print("Error: No data found in the generator.") else: # Train the model model.fit(train_generator, epochs=15, verbose=1, steps_per_epoch=len(train_generator)) # Save the trained model weights model.save_weights('C:/Users/Hynek/Desktop/HU/trained_model_weights.h5') # Use data normalization for testing without data augmentation test_datagen = ImageDataGenerator(rescale=1./255) # Load test data without specifying classes test_generator = test_datagen.flow_from_directory( test_data_dir, target_size=(img_width, img_height), batch_size=32, class_mode=None, shuffle=False ) # Check if the generator has data if len(test_generator) == 0: print("Error: No data found in the test generator.") else: # Make predictions on the test set predictions = model.predict(test_generator) # Define the class labels class_labels = ['1', '0', 'A'] # Adjusted class labels # Iterate through predictions and corresponding file names for prediction, file_name in zip(predictions, test_generator.filenames): # Reorder probabilities to match the adjusted class labels reordered_prediction = [prediction[1], prediction[0], prediction[2]] # Print the file name, the predicted class, and the probabilities for each class predicted_class = class_labels[np.argmax(reordered_prediction)] print(f"File: {file_name}, Predicted class: {predicted_class}, Probabilities: {reordered_prediction}")
Output:
File: 2\blue_image_1.jpg, Predicted class: 1, Probabilities: [1.0, 3.7408753e-32, 3.4386737e-35] File: 2\border_color_image_1.jpg, Predicted class: 1, Probabilities: [1.0, 0.0, 0.0] File: 2\border_color_image_10.jpg, Predicted class: 1, Probabilities: [1.0, 6.0347886e-11, 1.1029443e-32] File: 2\border_color_image_11.jpg, Predicted class: 1, Probabilities: [0.98777896, 0.012221043, 1.5617029e-29] File: 2\border_color_image_12.jpg, Predicted class: 0, Probabilities: [1.1639881e-06, 0.9999988, 1.8019694e-32] File: 2\border_color_image_13.jpg, Predicted class: 0, Probabilities: [5.1332073e-15, 1.0, 3.781179e-38] File: 2\border_color_image_14.jpg, Predicted class: 0, Probabilities: [6.26071e-22, 1.0, 0.0] File: 2\border_color_image_15.jpg, Predicted class: 0, Probabilities: [1.1328224e-26, 1.0, 0.0] File: 2\border_color_image_16.jpg, Predicted class: 0, Probabilities: [3.3592798e-31, 1.0, 0.0] File: 2\border_color_image_17.jpg, Predicted class: 0, Probabilities: [8.1737104e-35, 1.0, 0.0] File: 2\border_color_image_18.jpg, Predicted class: 0, Probabilities: [0.0, 1.0, 0.0] File: 2\border_color_image_19.jpg, Predicted class: 0, Probabilities: [0.0, 1.0, 0.0] File: 2\border_color_image_2.jpg, Predicted class: 1, Probabilities: [1.0, 0.0, 0.0] File: 2\border_color_image_20.jpg, Predicted class: 0, Probabilities: [0.0, 1.0, 0.0] File: 2\border_color_image_3.jpg, Predicted class: 1, Probabilities: [1.0, 0.0, 0.0] File: 2\border_color_image_4.jpg, Predicted class: 1, Probabilities: [1.0, 0.0, 0.0] File: 2\border_color_image_5.jpg, Predicted class: 1, Probabilities: [1.0, 0.0, 0.0] File: 2\border_color_image_6.jpg, Predicted class: 1, Probabilities: [1.0, 3.5060138e-35, 0.0] File: 2\border_color_image_7.jpg, Predicted class: 1, Probabilities: [1.0, 2.9402174e-30, 0.0] File: 2\border_color_image_8.jpg, Predicted class: 1, Probabilities: [1.0, 1.0288415e-25, 0.0] File: 2\border_color_image_9.jpg, Predicted class: 1, Probabilities: [1.0, 1.00328885e-17, 1.8057328e-35] File: 2\green_image_2.jpg, Predicted class: 0, Probabilities: [0.0, 1.0, 0.0] File: 2\red_image.jpg, Predicted class: 1, Probabilities: [0.9999999, 6.662962e-08, 3.89023e-20] File: 2\yellow_image.jpg, Predicted class: 0, Probabilities: [0.0, 1.0, 0.0]

Attached Files

Thumbnail(s)
   
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
Question Colored text Alivegamer 3 7,600 Feb-28-2022, 02:43 AM
Last Post: BashBedlam
  fontforge Emoji encoding and colored glyphs pauf28 0 3,498 Dec-22-2020, 10:05 AM
Last Post: pauf28
  Error printing colored text julio2000 0 2,196 Feb-02-2020, 07:04 PM
Last Post: julio2000
  colored input() Trianne 6 23,804 Oct-15-2018, 07:50 PM
Last Post: wavic
  Using classes? Can I just use classes to structure code? muteboy 5 7,313 Nov-01-2017, 04:20 PM
Last Post: metulburr

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020
This forum uses Lukasz Tkacz MyBB addons.
Forum use Krzysztof "Supryk" Supryczynski addons.