Computer vision. Повысить контрастность
Работаю с цветными изображениями английского алфавита. Данные идут сразу в формате ndarrey, 20.000 изображений для обучающей выборки, размер обучающей выборки (20000, 48, 48, 3).
Код будет далее.
Получаю значение метрики довольно небольшие. Хочу повысить контрастность изображений перед обучением. Недопонимаю как это сделать на массиве.
Помогите с увеличением контрастности изображений. Может дополнительно еще как-то обработать данные или как-то переписать модель обучения.
import numpy as np
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, BatchNormalization, Activation
from keras.constraints import maxnorm
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.utils import np_utils
# обучающая выборки
images = np.load('images.npy')
# для проверки
labels = np.load('labels.npy')
# тестовая выборка
images_sub = np.load('images_sub.npy')
input_shape = (48, 48, 3)
images = images.astype('float32')
images_sub = images_sub.astype('float32')
images = images / 255
images_sub = images_sub / 255
model = keras.Sequential([ # замените на вашу модель
keras.Input(shape = (48, 48, 3)),
keras.layers.Conv2D(32, (3, 3), activation = 'relu'),
keras.layers.Conv2D(64, (3, 3), activation = 'relu'),
keras.layers.MaxPooling2D(),
keras.layers.BatchNormalization(),
keras.layers.Conv2D(64, (3, 3), activation = 'relu'),
keras.layers.Conv2D(128, (3, 3), activation = 'relu'),
keras.layers.MaxPooling2D(),
keras.layers.BatchNormalization(),
keras.layers.Flatten(),
keras.layers.Dense(256, activation = 'relu'),
keras.layers.Dense(128, activation = 'relu'),
keras.layers.Dense(26, activation = 'softmax')
])
model.compile(loss = 'sparse_categorical_crossentropy', optimizer = 'adam', metrics = 'accuracy')
model.fit(images, labels, batch_size = 64, verbose=1, validation_split = 0.1, epochs = 25)
predictions = model.predict(images_sub).argmax(axis = 1)
submission = pd.DataFrame({'Id': list(range(len(predictions))), 'Category': predictions})
submission.to_csv('submission.csv', index = False)
Ответы (1 шт):
Автор решения: Alex Kart
→ Ссылка
Можно использовать автоконтраст из PIL:
import numpy as np
from PIL import Image, ImageOps
images = np.load('images.npy')
im1 = Image.fromarray(images)
im2 = ImageOps.autocontrast(im1, cutoff=40)
im2.show()
Понятно, что модель будет натренирована на контрастные изображения, что надо учитывать при деплое.