Пиксели, каналы и цветовые пространства
Компьютерное зрение с ИИ · Урок 2 / 22
Что именно попадает в модель
Изображение в памяти — массив чисел формы «высота × ширина × каналы». Для обычного снимка это H×W×3, тип uint8, значения 0–255 на канал. Кадр 1920×1080 занимает около 6 МБ в несжатом виде и 200–400 КБ в JPEG; на этом разрыве строится половина инженерных решений про хранение и передачу. Понимание раскладки массива нужно не ради теории: почти все «модель выдаёт мусор» на старте проекта объясняются перепутанным порядком осей, каналов или диапазона.
Четыре вещи, которые ломаются чаще всего
- Порядок каналов. Одна популярная библиотека читает файл как BGR, другая как RGB. Ошибка не вызывает исключения: картинка просто выглядит синеватой, а точность падает на 5–15 процентных пунктов на цветочувствительных классах.
- Порядок осей. Форматы H×W×C и C×H×W соседствуют в одном пайплайне. Перепутали — получите либо явную ошибку размерности, либо, что хуже, молчаливую интерпретацию строк как каналов.
- Диапазон. Модель ждёт 0–1 или нормализованные значения, а вы подаёте 0–255. Результат — уверенные и неверные предсказания.
- Ориентация из EXIF. Снимки с телефона хранятся горизонтально плюс флаг поворота. Библиотека, игнорирующая флаг, отдаст модели повёрнутый на 90° кадр — а разметка делалась в просмотрщике, который флаг учитывал.
Цветовые пространства и когда они помогают
RGB — вход почти любой обученной сети, дефолт
Grayscale — 1 канал; годится, если цвет не несёт информации
(рентген, ИК, текст) — экономит 2/3 входных данных
HSV — тон/насыщенность/яркость раздельно; полезно для
порогов по цвету, устойчивых к смене яркости
LAB — светлота отделена от цвета; удобно для коррекции
YCbCr — внутренний формат JPEG и видеокодеков
Практический смысл HSV: если вы отделяете жёлтую разметку от асфальта простым порогом, в RGB порог поедет при каждом облаке, а в HSV в основном изменится канал V, который вы в пороге не используете. Для нейросети выбор пространства почти не имеет значения: она выучит преобразование сама, если оно линейное. Разница возникает для эвристик и предобработки.
Глубина и специальные каналы
Восемь бит на канал — не универсум. Медицинские и промышленные камеры отдают 12–16 бит: в тёмных участках рентгена есть детали, которые при огрублении до 8 бит просто исчезают. Если вы конвертируете 16-битный снимок оконным преобразованием, окно становится частью модели — зафиксируйте его и повторяйте на инференсе. Отдельно живут не-цветовые каналы: глубина с ToF-камеры, тепловизор, ближний ИК. Их можно подать как дополнительный канал, но веса предобученной сети рассчитаны на три канала, и четвёртый придётся инициализировать вручную.
Шпаргалка
- Изображение — H×W×C, uint8 0–255; расхождения по осям и каналам молчаливы.
- BGR против RGB и EXIF-поворот — два самых частых источника тихой потери качества.
- HSV и LAB полезны для порогов и коррекции, сети хватает RGB.
- 12–16 бит несут детали в тенях; окно преобразования фиксируйте как часть пайплайна.
Возьмите 10 своих изображений из разных источников: телефон, скриншот, кадр с камеры, скан. Для каждого выпишите разрешение, число каналов, тип данных, наличие EXIF-поворота и размер файла. Загрузите их двумя разными способами (например, двумя библиотеками) и сравните: совпадают ли порядок каналов, ориентация и диапазон значений. Опишите найденные расхождения и то, какое из них молча испортило бы обучение.