Как обрабатывать изображения с разным разрешением?

Обработка изображений с разным разрешением — важная задача в компьютерном зрении, особенно в реальных сценариях, где данные собираются с разных устройств (камеры, спутники, смартфоны и др.), имеющих разный размер, пропорции, масштаб и качество изображения. Нейронные сети, в частности сверточные (CNN), требуют фиксированного входного размера, поэтому изображения необходимо привести к общему формату без потери ключевой информации. Способы обработки зависят от задачи: классификация, детекция, сегментация, восстановление и т.д.

1. Изменение размера (Resizing)

Простейший и самый распространённый подход — изменение разрешения всех изображений до одного фиксированного размера.

Методы:

  • cv2.resize(img, (H, W)) — OpenCV

  • PIL.Image.resize() — Pillow

  • torchvision.transforms.Resize(), TensorFlow tf.image.resize()

Интерполяции:

  • cv2.INTER_LINEAR — по умолчанию

  • cv2.INTER_AREA — при уменьшении

  • cv2.INTER_CUBIC, cv2.INTER_LANCZOS4 — при увеличении

Проблемы:

  • Исказится аспект (соотношение сторон)

  • Возможна потеря деталей (особенно при уменьшении)

  • При увеличении — размытость, артефакты

2. Масштабирование с сохранением пропорций (Aspect ratio preserving)

Применяется, если важно сохранить форму объектов.

Подход:

  • Масштабировать изображение до нужной стороны (ширина или высота)

  • Добавить отступы (padding) до нужного размера

Padding-стратегии:

  • Zero padding — заполнение чёрным

  • Reflect padding — зеркальное отражение

  • Mean/constant padding — среднее значение или фиксированный цвет

Пример:

import torchvision.transforms as T
transform = T.Compose(\[
T.Resize(256),
T.CenterCrop((224, 224))
\])

3. Center Crop / Random Crop / FiveCrop

Для задач классификации полезно не просто изменить размер, а вырезать центральный или случайный регион нужного размера.

  • CenterCrop — для валидации/теста

  • RandomCrop — для аугментации на обучении

  • FiveCrop / TenCrop — усреднение нескольких регионов

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

4. Adaptive Pooling

В сверточных нейросетях можно использовать адаптивное усреднение/максимум:

  • **AdaptiveAvgPool2d(output_size=(H, W))
    **
  • Работает на фичах: автоматически адаптирует фичи любого размера к нужной форме

Подходит для ResNet-подобных архитектур при переменных входных размерах, особенно в global pooling перед полносвязным слоем.

5. Пакетная обработка с динамическими размерами

Некоторые фреймворки поддерживают переменный размер входа (в частности, PyTorch, TensorFlow):

  • Можно обрабатывать изображения разного разрешения по одному (batch=1)

  • Или с padding внутри батча (dynamic padding)

Но это усложняет batching на GPU, особенно при использовании ускоренных библиотек (cuDNN предпочитает фиксированные размеры).

6. Bucket-стратегия (для ускорения)

  • Группировка изображений по схожим размерам (например, 224×224, 256×256, 512×512)

  • Используется в NLP и CV

  • Внутри каждого бакета — фиксированный размер → быстрая обработка

Часто используется при обучении на больших датасетах с var-size изображениями (COCO, Open Images).

7. Изменение размера только на уровне фичей

При использовании feature pyramid networks (FPN), detection heads или multi-scale обучения, можно работать с изображениями разного разрешения, сопоставляя признаки разной плотности.

  • Пример: RetinaNet, Faster R-CNN работают с изображениями разного размера.

  • В случае трансформеров (ViT, Swin) используют patch resizing или переменные входные grid'ы.

8. DataLoader-level padding (collate_fn)

Если в batch попадают изображения разного размера, можно реализовать функцию collate_fn, которая будет автоматически дополнять меньшие изображения паддингом.

def pad_batch(images):
\# вычислить max_height, max_width
\# pad каждое изображение до этих размеров
return padded_images

9. Multiscale training / Test-time augmentation (TTA)

Multiscale Training

  • Обучение модели на изображениях разного разрешения

  • Пример: на одной итерации resize в (640×640), на другой в (512×512)

Test-time augmentation

  • Тестирование модели на нескольких вариантах масштабов, с последующим усреднением предсказаний

Полезно в object detection, semantic segmentation и robust классификации.

10. Визуальные трансформеры и переменный размер (Vision Transformers)

Модели типа ViT требуют фиксированного количества патчей → фиксированного разрешения.

  • Swin Transformer, DeiT используют window-based attention, поддерживают масштабируемость

  • SAM (Segment Anything) и подобные используют большие картинки с динамическим семплированием

11. Нормализация масштаба объектов

При обучении важно, чтобы объекты имели сравнимый физический размер на изображениях. Примеры:

  • В медицинских снимках — один и тот же орган должен занимать одинаковую долю изображения

  • В OCR — символы должны быть одного масштаба

Для этого нужно:

  • Центрировать объект

  • Масштабировать его до заданного размера

  • Выравнивать DPI (dots per inch)

12. Адаптация к реальному масштабу (Scale-aware models)

Некоторые архитектуры учитывают масштаб:

  • Scale-variant models — обучаются с учетом размера объекта

  • Scale-invariant models — учатся игнорировать масштаб

  • Используют:

    • FPN (feature pyramid)

    • Deformable convolutions

    • Atrous (dilated) convolutions

    • Multi-scale context (PSPNet, DeepLab)

13. Восстановление разрешения (Super-resolution)

Если данные слишком маленькие или нечёткие:

  • Используйте модели: ESRGAN, SRGAN, Real-ESRGAN

  • Интерполяция: bicubic или Lanczos

  • Super-resolution может быть предварительным шагом перед классификацией или детекцией

14. Выбор стратегии в зависимости от задачи

Задача Подход к разрешению
Классификация Resize + CenterCrop или Pad до 224×224
--- ---
Детекция объектов Resize с сохранением пропорций + Pad
--- ---
Сегментация Resize до фиксированного, кратного stride
--- ---
OCR Normalize height, pad width (или наоборот)
--- ---
Медицинские изображения Center crop по органу + стандартизация DPI
--- ---
Спутниковые снимки Тайл-резка, resize по геометке
--- ---

15. Учет GPU и batch size

  • Мелкие изображения: больше batch size, выше скорость

  • Крупные: GPU может не вместить batch > 1

  • Рекомендуется балансировать между качеством и ресурсами

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