понеділок, 31 липня 2023 р.

Зменшення розміру зображення в два рази за допомогою Keras

В даному пості ми розглянемо, як використовувати бібліотеку глибокого навчання Keras для зменшення розміру зображення в два рази. Це можна зробити за допомогою так званого "пулінгового" шару.

Що таке пулінговий шар?

Пулінговий шар - це шар, який часто використовується в згорткових нейронних мережах для зменшення просторового розміру (ширина і висота) вхідного об'єкта. Він працює, виконуючи певну операцію (наприклад, максимум або середнє значення) на пікселях в певному вікні на вхідному об'єкті і виводячи результат.

Створення пулінгового шару в Keras

Ми можемо створити пулінговий шар за максимумом в Keras за допомогою класу MaxPooling2D:
from keras.models import Sequential
from keras.layers import MaxPooling2D

# створення моделі з одним шаром MaxPooling2D, який зменшує розмір зображення в два рази
model = Sequential()
model.add(MaxPooling2D(pool_size=(2, 2), input_shape=(None, None, 3)))
Ця модель прийматиме зображення будь-якого розміру з 3 каналами кольору (RGB) і зменшить його в два рази. Використання моделі для зменшення зображення

Тепер, коли у нас є модель, ми можемо використовувати її для зменшення розміру зображення:

import cv2
import numpy as np
Lena = cv2.imread('Lena.jpg')
image=Lena/255.0
image = np.expand_dims(image, axis=0)
output = model.predict(image)
output_image = output[0, :, :, :3]
У цьому коді ми завантажуємо та нормалізуємо зображення 'Lena.jpg', а потім передаємо його в модель Keras для зменшення розміру в два рази. На виході ми отримуємо зображення, розмір якого зменшений в два рази за допомогою моделі, та витягуємо RGB канали цього зображення.

Рядок

np.expand_dims(image, axis=0)
додає нову вісь до масиву image на позиції 0. Наприклад, якщо вихідне зображення має форму (висота, ширина, канали), після додавання нової осві форма зображення змінюється до (1, висота, ширина, канали). Це робиться для того, щоб підготувати зображення до передачі в нейронну мережу, оскільки багато функцій Keras очікують вхідні дані у формі батчу (масиву зразків), навіть якщо цей батч містить лише один зразок. Також в моделях можна використати інші типи пулінгових шарів попередньо імпортувавши їх
 from keras.layers import AveragePooling2D
# Створення моделі
model = Sequential()
# Додавання шару AveragePooling2D
model.add(AveragePooling2D(pool_size=(2, 2), input_shape=(None, None, 3)))
У цьому прикладі, pool_size=(2, 2) означає, що пулінговий шар буде брати середнє значення кожного вікна розміром 2x2 пікселів в початковому зображенні.

Вхідне зображення повинно мати 3 канали кольору (RGB).

Це все можна було зробити і без створення моделі, просто застосувавши пулінговий шар як оператор до зображення

avg_pool_layer = AveragePooling2D(pool_size=(2, 2))
output = avg_pool_layer(image)
output_image = output[0, :, :, :].numpy()

Звичайно ніхто так зменшувати зображення не буде, мета цього посту продемострувати функціональні можливості Keras навіть для невластивих для нього задач.

Немає коментарів:

Дописати коментар