|
|
Вейвлет сжатие на CUDA (JPEG2000)
В системах скоростной съёмки обычно используются монохромные видеокамеры, поскольку их чувствительность значительно выше, чем у цветных, поэтому ниже мы рассмотрим задачу онлайн сжатия видеопотока от монохромной камеры. Наша цель состоит в том, чтобы успеть сделать сжатие в онлайне, а полученный выходной поток записать на жёсткий диск компьютера. Ранее для аналогичной задачи мы уже реализовали алгоритм сжатия JPEG с потерями, но для него характерны артефакты на границах блоков и меньшая степень сжатия при заданном качестве по сравнению с алгоритмом сжатия на базе вейвлетов. Поэтому мы сделали программное обеспечение для сжатия в онлайне потока данных от скоростных камер в формате JPEG2000 (вейвлет сжатие). Для сжатия с потерями использовался базис вейвлетов Добеши 9/7.
Вопрос быстрого декодирования для таких задач может быть критичен, поэтому мы реализовали и декодирование на видеокарте, и оно также намного быстрее, чем на CPU.
Общая схема работы приложения для онлайн кодера на базе вейвлетов
- Загрузка приложения, инициализация и нумерация устройств, проверка их возможностей.
- Выделение памяти, создание групп потоков, синхронизация с пользовательским приложением на CPU.
- Получение от драйвера фреймграббера или от пользовательского приложения адреса или номера для последнего полученного кадра, находящегося в оперативной памяти компьютера.
- Загрузка (копирование) кадра или серии последовательных монохромных кадров из оперативной памяти CPU в память GPU.
- Численные расчёты: разбиение изображения на тайлы, разбиение на блоки, дискретное вейвлетное преобразование (DWT), квантование, контекстное моделирование и арифметическое кодирование для каждой плоскости блока. Все кадры кодируются по отдельности, корреляция кадров не учитывается.
- Создание выходной строки байт для каждого сжатого блока, упорядоченная запись таких строк, запись выходного массива в отдельный буфер оперативной памяти или сразу на жёсткий диск компьютера. При этом вычисления для следующего кадра выполняются параллельно с записью результатов кодирования предыдущего.
Конфигурация компьютера
- Для тестирования программного обеспечения использовалась такая конфигурация компьютера: CPU AMD Ryzen9 7950X (16 ядер, 4.5–5.7 ГГц)
- Видеокарта для вычислений: GeForce RTX 4090
- Операционная система Windows-10, 64-bit, CUDA 12.6, драйвер 572.83
Результаты тестирования алгоритма сжатия JPEG2000 с потерями
Мы реализовали программное сжатие потока монохромных изображений в формат JPEG2000 на графических картах NVIDIA с помощью технологии CUDA. В качестве источника входных данных использовались скоростные видеокамеры Fastvideo. Для всех используемых в тесте видеокамер мы смогли в онлайне сжать видеопотоки и записать их на жёсткий диск в онлайне при использовании видеокарты GeForce RTX 4090.
Таким образом, показана принципиальная возможность онлайн сжатия входного потока данных от скоростных видеокамер, причём для довольно широкого класса графических карт, в том числе бюджетных и даже мобильных. Такое решение позволит значительно увеличить длительность скоростной съёмки и даст возможность записывать сжатый поток данных на жёсткий диск компьютера даже без использования RAID или SSD. Полученные на видеокарте GeForce RTX 4090 результаты значительно превосходят пропускную способность скоростных видеокамер, использовавшихся в тестах. Это говорит о том, что есть широкие возможности по использованию более сложных алгоритмов для онлайн обработки данных от таких видеокамер.
Приложения для систем онлайн-сжатия в формате JPEG2000
Данное решение может использоваться не только в скоростной видеосъёмке. Существует немало других задач, связанных с необходимостью быстрого сжатия больших объёмов данных:
- Системы получения, обработки и хранения медицинских изображений
- Охранные системы
- Промышленные системы
- Научные исследования
- Системы машинного зрения
В настоящее время реализован алгоритм сжатия с потерями не только для 8-битных монохромных изображений, но и для цветных изображений с разрядностью до 16 бит на канал.
Как достичь лучших результатов
Существует ряд методов, с помощью которых мы расчитываем в дальнейшем получить увеличение производительности подобных систем:
- Оптимизация алгоритма сжатия, схемы его распараллеливания и реализации.
- Использование новых решений NVIDIA в последних моделях видеокарт
- Использование более мощных видеокарт Quadro
- Распараллеливание алгоритма между разными видеокартами, увеличение количества видеокарт для организации параллельных вычислений.
|