Мы сделали классификацию отходов между органическими и перерабатываемыми, которая может предсказать новые изображения отходов с помощью CNN.

Задача

В этом проекте мы будем классифицировать отходы (среди 2 органических и перерабатываемых) на основе изображения.

Предварительная обработка -

  • Во-первых, импортируйте все необходимые библиотеки -
  • Загрузите данные и разархивируйте их, чтобы получить доступ к изображениям и этикеткам из вашей записной книжки.

Перечислите все имена папок в вашем наборе данных и проверьте количество классификаций, которые нужно сделать.

Выход:

{'O': 0, 'R': 1}

Чтобы лучше понять наш набор данных, покажите несколько изображений:

Выход:

Разделите набор обучающих данных на обучающий и проверочный наборы.

  • Выполните увеличение данных с помощью ImageDataGenerator, чтобы мы могли получать более релевантные данные из существующих изображений, внеся незначительные изменения в набор данных.
  • Разделите набор данных для обучения на набор для обучения и набор для проверки.

Выход:

Found 6400 images belonging to 2 classes.
Found 1600 images belonging to 2 classes.

Обучение модели:

Выход:

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_6 (Conv2D)            (None, 100, 100, 32)      896       
_________________________________________________________________
max_pooling2d_6 (MaxPooling2 (None, 50, 50, 32)        0         
_________________________________________________________________
conv2d_7 (Conv2D)            (None, 50, 50, 64)        18496     
_________________________________________________________________
max_pooling2d_7 (MaxPooling2 (None, 25, 25, 64)        0         
_________________________________________________________________
conv2d_8 (Conv2D)            (None, 25, 25, 64)        36928     
_________________________________________________________________
max_pooling2d_8 (MaxPooling2 (None, 12, 12, 64)        0         
_________________________________________________________________
conv2d_9 (Conv2D)            (None, 12, 12, 64)        36928     
_________________________________________________________________
max_pooling2d_9 (MaxPooling2 (None, 6, 6, 64)          0         
_________________________________________________________________
conv2d_10 (Conv2D)           (None, 6, 6, 64)          36928     
_________________________________________________________________
max_pooling2d_10 (MaxPooling (None, 3, 3, 64)          0         
_________________________________________________________________
dropout_2 (Dropout)          (None, 3, 3, 64)          0         
_________________________________________________________________
conv2d_11 (Conv2D)           (None, 3, 3, 64)          36928     
_________________________________________________________________
max_pooling2d_11 (MaxPooling (None, 1, 1, 64)          0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 64)                0         
_________________________________________________________________
dense_2 (Dense)              (None, 256)               16640     
_________________________________________________________________
activation_2 (Activation)    (None, 256)               0         
_________________________________________________________________
dropout_3 (Dropout)          (None, 256)               0         
_________________________________________________________________
dense_3 (Dense)              (None, 2)                 514       
_________________________________________________________________
activation_3 (Activation)    (None, 2)                 0         
=================================================================
Total params: 184,258
Trainable params: 184,258
Non-trainable params: 0
_________________________________________________________________

Скомпилируйте и подгоните модель:

Выход:

Epoch 1/5
200/200 [==============================] - 178s 890ms/step - loss: 0.5065 - accuracy: 0.7566 - val_loss: 0.4218 - val_accuracy: 0.8231
Epoch 2/5
200/200 [==============================] - 177s 887ms/step - loss: 0.4279 - accuracy: 0.8209 - val_loss: 0.3954 - val_accuracy: 0.8138
Epoch 3/5
200/200 [==============================] - 176s 882ms/step - loss: 0.3911 - accuracy: 0.8397 - val_loss: 0.3798 - val_accuracy: 0.8275
Epoch 4/5
200/200 [==============================] - 177s 883ms/step - loss: 0.3680 - accuracy: 0.8470 - val_loss: 0.3782 - val_accuracy: 0.8331
Epoch 5/5
200/200 [==============================] - 178s 888ms/step - loss: 0.3413 - accuracy: 0.8619 - val_loss: 0.3204 - val_accuracy: 0.8669

Производительность модели:

Выход:

Делаем прогнозы:

Случайным образом выберите изображение из тестового набора и передайте его нашей модели, чтобы делать прогнозы.

Выход:

Prediction is R.

DeepCC:

Ссылка на блокнот: