10 мощных методов увеличения данных для глубокого обучения: подробное руководство

Вы устали от того, что ваши модели глубокого обучения неэффективны из-за ограниченности обучающих данных? Не бойся! Увеличение данных здесь, чтобы спасти положение. В этой статье блога мы рассмотрим различные мощные методы увеличения данных, которые могут значительно повысить производительность ваших моделей глубокого обучения. Итак, приступим!

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

  1. Случайные перевороты.
    Одним из самых простых и эффективных методов увеличения данных является случайное переворот. Он включает в себя переворачивание изображений по горизонтали или вертикали. Этот метод особенно полезен при решении задач, инвариантных к переворотам, таких как классификация или обнаружение объектов.

    from tensorflow.keras.preprocessing.image import ImageDataGenerator
    datagen = ImageDataGenerator(
       horizontal_flip=True,
       vertical_flip=True
    )
  2. Произвольное вращение.
    Поворачивайте изображения на случайный угол, чтобы внести изменчивость и сделать ваши модели более устойчивыми к задачам инвариантности вращения. Хотя упомянутый вами метод RandomRotationможет быть недоступен, вы можете добиться того же эффекта, используя класс ImageDataGenerator.

    from tensorflow.keras.preprocessing.image import ImageDataGenerator
    datagen = ImageDataGenerator(
       rotation_range=30  # Random rotation between -30 and 30 degrees
    )
  3. Произвольное масштабирование.
    Увеличение или уменьшение изображения может помочь вашим моделям научиться фокусироваться на определенных объектах или деталях. Используйте параметр zoom_range, чтобы произвольно масштабировать изображения.

    from tensorflow.keras.preprocessing.image import ImageDataGenerator
    datagen = ImageDataGenerator(
       zoom_range=[0.8, 1.2]  # Random zoom between 80% and 120%
    )
  4. 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%
    )
  5. Регулировка яркости.
    Изменяйте яркость изображений для имитации различных условий освещения. Этот метод может быть особенно полезен для задач, связанных с обработкой изображений и компьютерным зрением.

    from tensorflow.keras.preprocessing.image import ImageDataGenerator
    datagen = ImageDataGenerator(
       brightness_range=[0.5, 1.5]  # Random brightness adjustment between 50% and 150%
    )
  6. Гауссов шум.
    Добавьте гауссов шум к изображениям, чтобы сделать ваши модели более устойчивыми к шуму и улучшить их возможности обобщения.

    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
  7. Дрожание цвета.
    Измените цвет изображений, применяя случайные преобразования к их значениям оттенка, насыщенности и яркости. Этот метод может помочь вашим моделям хорошо обобщать различные распределения цветов.

    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
    )
  8. Вырез:
    Произвольно маскируйте прямоугольные области изображений, чтобы модели могли сосредоточиться на разных частях изображения и повысить их надежность.

    
    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
  9. Преобразование перспективы.
    Применяйте преобразования перспективы к изображениям, чтобы имитировать различные точки обзора или ракурсы камеры. Этот метод может быть особенно полезен для задач, связанных с обнаружением или распознаванием объектов.

    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
  10. 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

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

Итак, продолжайте расширять свои данные, как профессионал, и наблюдайте, как ваши модели достигают новых высот точности и надежности!