Вы устали от того, что ваши модели глубокого обучения неэффективны из-за ограниченности обучающих данных? Не бойся! Увеличение данных здесь, чтобы спасти положение. В этой статье блога мы рассмотрим различные мощные методы увеличения данных, которые могут значительно повысить производительность ваших моделей глубокого обучения. Итак, приступим!
Под расширением данных понимается процесс искусственного расширения набора обучающих данных путем применения различных преобразований к существующим данным, например изображениям. Этот метод помогает внести разнообразие в набор данных, делая ваши модели более надежными и способными лучше обобщать невидимые данные.
-
Случайные перевороты.
Одним из самых простых и эффективных методов увеличения данных является случайное переворот. Он включает в себя переворачивание изображений по горизонтали или вертикали. Этот метод особенно полезен при решении задач, инвариантных к переворотам, таких как классификация или обнаружение объектов.from tensorflow.keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator( horizontal_flip=True, vertical_flip=True )
-
Произвольное вращение.
Поворачивайте изображения на случайный угол, чтобы внести изменчивость и сделать ваши модели более устойчивыми к задачам инвариантности вращения. Хотя упомянутый вами методRandomRotation
может быть недоступен, вы можете добиться того же эффекта, используя классImageDataGenerator
.from tensorflow.keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator( rotation_range=30 # Random rotation between -30 and 30 degrees )
-
Произвольное масштабирование.
Увеличение или уменьшение изображения может помочь вашим моделям научиться фокусироваться на определенных объектах или деталях. Используйте параметрzoom_range
, чтобы произвольно масштабировать изображения.from tensorflow.keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator( zoom_range=[0.8, 1.2] # Random zoom between 80% and 120% )
-
Регулировка яркости.
Изменяйте яркость изображений для имитации различных условий освещения. Этот метод может быть особенно полезен для задач, связанных с обработкой изображений и компьютерным зрением.from tensorflow.keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator( brightness_range=[0.5, 1.5] # Random brightness adjustment between 50% and 150% )
-
Гауссов шум.
Добавьте гауссов шум к изображениям, чтобы сделать ваши модели более устойчивыми к шуму и улучшить их возможности обобщения.import numpy as np def add_gaussian_noise(image, mean=0, std=0.1): noise = np.random.normal(mean, std, image.shape) noisy_image = image + noise noisy_image = np.clip(noisy_image, 0, 1) # Clip values between 0 and 1 return noisy_image
-
Дрожание цвета.
Измените цвет изображений, применяя случайные преобразования к их значениям оттенка, насыщенности и яркости. Этот метод может помочь вашим моделям хорошо обобщать различные распределения цветов.from tensorflow.keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator( brightness_range=[0.8, 1.2], # Random brightness adjustment between 80% and 120% saturation_range=[0.8, 1.2], # Random saturation adjustment between 80% and 120% hue_range=(-10, 10) # Random hue adjustment between -10 and 10 )
-
Вырез:
Произвольно маскируйте прямоугольные области изображений, чтобы модели могли сосредоточиться на разных частях изображения и повысить их надежность.def cutout(image, mask_size): h, w, _ = image.shape mask_value = image.mean() top = np.random.randint(0 - mask_size // 2, h - mask_size) left = np.random.randint(0 - mask_size // 2, w - mask_size) bottom = top + mask_size right = left + mask_size image[top:bottom, left:right, :] = mask_value returnimage
-
Преобразование перспективы.
Применяйте преобразования перспективы к изображениям, чтобы имитировать различные точки обзора или ракурсы камеры. Этот метод может быть особенно полезен для задач, связанных с обнаружением или распознаванием объектов.import cv2 import numpy as np def perspective_transform(image): h, w, _ = image.shape pts1 = np.float32([[0, 0], [w, 0], [0, h], [w, h]]) pts2 = np.float32([[0, 0], [w, 50], [0, h], [w, h - 50]]) M = cv2.getPerspectiveTransform(pts1, pts2) transformed_image = cv2.warpPerspective(image, M, (w, h)) return transformed_image
-
Mixup:
Mixup – это метод дополнения данных, который объединяет два изображения и соответствующие им метки для создания новой обучающей выборки. Этот метод поможет упорядочить ваши модели и улучшить их обобщение.import numpy as np def mixup(image1, image2, label1, label2, alpha=0.2): mixed_image = alpha * image1 + (1 - alpha) * image2 mixed_label = alpha * label1 + (1 - alpha) * label2 return mixed_image, mixed_label
from tensorflow.keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(
width_shift_range=0.2, # Random horizontal shift between -20% and 20%
height_shift_range=0.2 # Random vertical shift between -20% and 20%
)
Используя эти методы увеличения данных, вы можете значительно повысить производительность своих моделей глубокого обучения, увеличив их способность обобщать новые и ранее неизвестные данные. Не забудьте выбрать подходящие методы в зависимости от вашей конкретной задачи и характеристик набора данных.
Итак, продолжайте расширять свои данные, как профессионал, и наблюдайте, как ваши модели достигают новых высот точности и надежности!