- Вейвлет сжатие монохромных изображений на CUDA. Вейвлет сжатие в JPEG2000 на GPU. Вейвлет кодер для видеокарты. Wavelet gpu cuda. JPEG2000 on CUDA.
высокоскоростная съёмка скоростная съёмка Fastvideo Фаствидео
Fastvideo
Fastvideo
Фаствидео ГЛАВНАЯ
Fastvideo
  ВИДЕОКАМЕРЫ
видеокамеры
  ПРОГРАММЫ
софт
  РЕШЕНИЯ
решения
  ПРОЕКТЫ
проекты
  НОВОСТИ
новости
  ИНФО
информация
  ВАКАНСИИ
вакансии
  АДРЕС
адрес
  КАРТА САЙТА
карта сайта
  ENGLISH VERSION
fastvideo.ru - English version
 
  Поиск по сайту:
скоростные видеокамеры
скоростные камеры
фаствидео камеры

бенчмарки Fastvideo SDKВейвлет сжатие на CUDA (JPEG2000)

В системах скоростной съёмки обычно используются монохромные видеокамеры, поскольку их чувствительность значительно выше, чем у цветных, поэтому ниже мы рассмотрим задачу онлайн сжатия видеопотока от монохромной камеры. Наша цель состоит в том, чтобы успеть сделать сжатие в онлайне, а полученный выходной поток записать на жёсткий диск компьютера. Ранее для аналогичной задачи мы уже реализовали алгоритм сжатия JPEG с потерями, но для него характерны артефакты на границах блоков и меньшая степень сжатия при заданном качестве по сравнению с алгоритмом сжатия на базе вейвлетов. Поэтому мы сделали программное обеспечение для сжатия в онлайне потока данных от скоростных камер в формате JPEG2000 (вейвлет сжатие). Для сжатия с потерями использовался базис вейвлетов Добеши 9/7.

Вопрос быстрого декодирования для этих задач не критичен, поэтому декодирование можно делать на CPU стандартным образом.

сжатие изображений по алгоритму JPEG2000 на CUDAОбщая схема работы приложения для онлайн кодера на базе вейвлетов

  • Загрузка приложения, инициализация и нумерация устройств, проверка их возможностей.
  • Выделение памяти, создание групп потоков, синхронизация с пользовательским приложением на CPU.
  • Получение от драйвера фреймграббера или от пользовательского приложения адреса или номера для последнего полученного кадра, находящегося в оперативной памяти компьютера.
  • Загрузка (копирование) кадра или серии последовательных монохромных кадров из оперативной памяти CPU в память GPU.
  • Численные расчёты: разбиение изображения на тайлы, Level shift, DWT, Quantization, разбиение полученного массива данных на блоки 8х8, RLE, Huffman для каждого блока. Для кодирования используются статические таблицы Хаффмана. Все кадры кодируются по отдельности, корреляция кадров не учитывается.
  • Создание выходной строки байт для каждого сжатого блока, упорядоченная запись таких строк, запись выходного массива в отдельный буфер оперативной памяти или сразу на жёсткий диск компьютера. При этом вычисления для следующего кадра выполняются параллельно с записью результатов кодирования предыдущего.

Конфигурация компьютера, видеокамеры, ОС и источника данных

  • Для тестирования программного обеспечения использовалась такая конфигурация компьютера: ASUS P6T Deluxe V2 LGA1366, X58, ATX Core i7 920, 2,67 ГГц, DDR-III 6 ГБайт.
  • Видеокарты для вычислений: GeForce GT 240 (CC=1.2, 96 ядер) или GeForce GTX 580 (CC=2.0, 512 ядер).
  • Операционная система Windows-7, 64-bit, CUDA 4.1, драйвер 296.10

Оценка латентности отдельных стадий обработки данных алгоритма сжатия JPEG с потерями

Для скорости сжатия одного монохромного 8-битного изображения с разрешением 640 х 480 (сжатие по алгоритму JPEG2000 с потерями, коэффициент сжатия = 20, сжимаются отдельные кадры независимо друг от друга, кадр находится в оперативной памяти компьютера, видеокарта модели GeForce GTX 580, измерение времени проводится встроенным профайлером CUDA_PROFILE_LOG_VERSION 2.0) были получены следующие результаты для времени выполнения отдельных стадий обработки данных:

  • HostIO (загрузка данных в оперативную память компьютера) - этой задержки нет, поскольку данные от скоростной видеокамеры уже лежат в оперативной памяти
  • Host-to-Device (время копирования данных в память GPU) - 53 мкс
  • Tiling, Level shift, DWT, Quantization, Zig-Zag - 18 мкс
  • DPCM, RLE, Huffman, склеивание выходной строки - 119 мкс
  • Device-to-Host (запись выходной строки из видеокарты в оперативную память компьютера) - 5 мкс

Основной результат: 137 микросекунд необходимо видеокарте GeForce GTX 580 для сжатия примерно в 20 раз 8-битного изображения 640 х 480 по алгоритму JPEG2000 без учёта загрузки и выгрузки данных. Таким образом, получена производительность вычислений более 1 ГБайт/с для компрессии в джипег на видеокарте NVIDIA.

Даже с учётом загрузки и выгрузки, на видеокарте GeForce GTX 580 cжатие в JPEG2000 примерно в 20 раз для одного 8-битного кадра 640 х 480 от монохромной видеокамеры выполняется всего за 195 микросекунд, что соответствует производительности 1,5 ГБайт/с или 5000 кадров в секунду. Однако эти данные соответствуют ситуации, когда все стадии алгоритма сжатия выполняются последовательно (внутри каждой стадии организована параллельная обработка). Если же распараллеливается не только обработка отдельных блоков изображения, но и стадии обработки, то имеет смысл говорить о времени выполнения всей задачи, а не о времени выполнения отдельных стадий. При использовании видеокарт с технологией Fermi, стадии Host-to-Device, Device-to-Host и вычисления могут выполняться одновременно, поэтому желательно выбирать видеокарту, которая удовлетворяет этому условию. В этом случае (если удастся это сделать) можно добиться дополнительного увеличения производительности сжатия. При работе с изображениями большего размера производительность алгоритма также увеличивается.

К сожалению, в настоящее время у нас нет аппаратного решения, которое могло бы генерировать такой поток данных. Наша самая быстрая видеокамера может дать до 700 МБайт в секунду. Тем не менее, мы работаем над аппаратным решением, которое даст поток видеоданных в диапазоне 1-3 ГБайт в секунду.

Результаты тестирования алгоритма сжатия JPEG2000 с потерями

Мы реализовали программное сжатие потока монохромных изображений в формат JPEG2000 на графических картах NVIDIA с помощью технологии CUDA. В качестве источника входных данных использовались скоростные видеокамеры Fastvideo. Для всех используемых в тесте видеокамер мы смогли в онлайне сжать видеопотоки и записать их на жёсткий диск в онлайне при использовании видеокарты GeForce GTX 580. Были получены следующие результаты для средней пропускной способности используемого алгоритма на разных видеокартах (время загрузки изображений и их выгрузки после сжатия включено в представленные результаты):

  • GeForce GT 330M (48 ядер, мобильный вариант) - 120 МБайт в секунду
  • GeForce GT 240 (96 ядер) - 210 МБайт в секунду
  • GeForce GTX 580 (512 ядер) - 1,5 ГБайт в секунду

Таким образом, показана принципиальная возможность онлайн сжатия входного потока данных от скоростных видеокамер, причём для довольно широкого класса графических карт, в том числе бюджетных и мобильных. Такое решение позволит значительно увеличить длительность скоростной съёмки и даст возможность записывать сжатый поток данных на жёсткий диск компьютера даже без использования RAID или SSD. Полученные на видеокарте GeForce GTX 580 результаты значительно превосходят пропускную способность скоростных видеокамер, использовавшихся в тестах. Это говорит о том, что есть широкие возможности по использованию более сложных алгоритмов для онлайн обработки данных от таких видеокамер.

Приложения для систем онлайн-сжатия в формате JPEG2000

Данное решение может использоваться не только в скоростной видеосъёмке. Существует немало других задач, связанных с необходимостью быстрого сжатия больших объёмов данных:

  • Системы получения, обработки и хранения медицинских изображений
  • Охранные системы
  • Промышленные системы
  • Научные исследования
  • Системы машинного зрения

В настоящее время реализован алгоритм сжатия с потерями только для 8-битных монохромных изображений. Если к нему добавить возможность восстановления цвета и сжатия цветных изображений, то количество возможных приложений значительно увеличится.

Сравнение с самыми быстрыми программными кодерами на CPU

Производительность системы сжатия в JPEG2000 на видеокарте GeForce GTX 580 оказалась намного выше, чем у самых лучших коммерческих программных решений. Одни из самых быстрых кодеров JPEG2000 предлагают следующие компании:

  • IPP 7.0 JPEG2000 Encoder - функция кодирования в JPEG2000, производительность до 40 МБайт/с.
  • Kakadu JPEG2000 Encoder (Speed pack) - функция кодирования в JPEG2000, производительность до 75 МБайт/с.

Сравнение с самыми быстрыми аппаратными кодерами на FPGA

Интересно отметить, что производительность системы сжатия в JPEG2000 с потерями на базе видеокарты GeForce GTX 580 оставила позади лучшие на сегодняшний день системы аппаратного сжатия, построенные на ПЛИС (FPGA). Одни из самых быстрых систем на ПЛИС предлагают следующие компании:

  • Alma-Tech (JPEG2K-E JPEG 2000 Encoder Megafunction) - функция аппаратного кодирования в JPEG2000 для FPGA Altera/Xilinx, производительность до 150 МБайт/с.
  • Barco BA130 JPEG 2000 Sub-frame latency Encoder (Real-time JPEG 2000 encoder core for high-speed and low-latency applications) - функция аппаратного кодирования в JPEG2000 для FPGA, производительность до 500 МБайт/с.
  • IntoPix (Digital Cinema JPEG 2000 Encoders & Decoders IP-cores) - функция аппаратного кодирования в JPEG2000 для FPGA Xilinx, производительность до 720 МБайт/с.

Эти высокопроизводительные решения написаны на Verilog/VHDL и являются оптимальными для компактных (встраиваемых) систем с минимальными требованиями по питанию и габаритам.

Сравнивая наше решение с аппаратными кодерами на ПЛИС, стоит отметить, что кроме более высокой производительности и масштабируемости полученного нами решения, по сравнению с Verilog/VHDL, код на Си для CUDA намного более понятный и приспособленный для модификации и создания на его базе новых, более сложных систем обработки и сжатия изображений.

Как достичь лучших результатов

Существует ряд методов, с помощью которых мы расчитываем в дальнейшем получить увеличение производительности подобных систем:

  • Оптимизация алгоритма сжатия, схемы его распараллеливания и реализации.
  • Использование новых решений NVIDIA в последних моделях видеокарт: возможности архитектуры Fermi и др.
  • Использование более мощных видеокарт Quadro и Tesla.
  • Распараллеливание алгоритма между разными видеокартами, увеличение количества видеокарт для организации параллельных вычислений.
fast camera
скоростная камера скоростная съемка быстрые видеокамеры Fastvideo
скоростной софт Rambler's Top100 НПО Астек - официальный дилер "Фаствидео"
Москва, 129344, ул. Искры 17А, корп. 3, тел: +7 (495)-542-04-49
высокоскоростные камеры