Как обрабатывать изображения с разным разрешением?
Обработка изображений с разным разрешением — важная задача в компьютерном зрении, особенно в реальных сценариях, где данные собираются с разных устройств (камеры, спутники, смартфоны и др.), имеющих разный размер, пропорции, масштаб и качество изображения. Нейронные сети, в частности сверточные (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
-
Рекомендуется балансировать между качеством и ресурсами
Обработка изображений с разным разрешением — это важный компонент предобработки и архитектурных решений, влияющий на качество и стабильность обучения. Правильный выбор метода зависит от контекста задачи, модели и требований к обобщению.