Применение современных
графических процессоров для
обработки видеоданных

           Илья Цветков
             Video Group...
Only for
 Maxus 



                Содержание доклада
           Введение
           Устройство современного графическ...
Only for
 Maxus 



              Почему GPU?
           Пиковая производительность GPU
            последнего поколения...
Only for
 Maxus 



                Рост производительности GPU




                                            J. D. Owe...
Only for
 Maxus 
                Почему GPU так быстро
                работают

           CPU
               Оптимизи...
Only for
 Maxus 
             Устройство современного
             графического процессора

           Графический конве...
Only for
 Maxus 



                Графический конвейер
          CPU              RAM


                  GPU
         ...
Only for
 Maxus 



             Геометрия объектов


       CPU                 RAM


                 GPU
             ...
Only for
 Maxus 



                Геометрия объектов
           Является массивом сгруппированных точек,
            о...
Only for
 Maxus 



             Вершинный процессор


       CPU                 RAM


                 GPU
            ...
Only for
 Maxus 



               Вершинный процессор
           Полностью программируемый этап графического
          ...
Only for
 Maxus 



             Растеризация


       CPU                 RAM


                 GPU
                   ...
Only for
 Maxus 



              Растеризация
           Этап с фиксированной функциональностью
           Входные дан...
Only for
 Maxus 



             Текстуры


       CPU                 RAM


                 GPU
                       ...
Only for
 Maxus 



              Текстуры
           Текстуры  массивы
           Поддерживаются 1D-, 2D- и 3D-тексту...
Only for
 Maxus 



             Фрагментный процессор


       CPU                 RAM


                 GPU
          ...
Only for
 Maxus 



               Фрагментный процессор
           Полностью программируемый этап графического
        ...
Only for
 Maxus 



             Рендеринг в текстуру


       CPU                 RAM


                 GPU
           ...
Only for
 Maxus 



              Рендеринг в текстуру
           Текстуры могут быть использованы для
            сохра...
Only for
 Maxus 



              Multiple Rendering Target (MRT)

           Фрагментный шейдер может возвращать
      ...
Only for
 Maxus 
                Базовые концепции
                программирования на GPU

           Концепции програм...
Only for
 Maxus 



                Программа для CPU
      coef1 = 0.76;
      coef2 = 1.0 – coef1;

      for (int i = ...
Only for
 Maxus 



               Массивы  текстуры
           Двумерный массив  2D-текстура
           Структура те...
Only for
 Maxus 



               Тело цикла  шейдер
           Вычисления в теле цикла можно производить
            ...
Only for
 Maxus 



               Векторные типы данных
      float3 main(float2 coords : TEXCOORD0,
                  u...
Only for
 Maxus 



               Оператор перестановки
      float3 main(float2 coords : TEXCOORD0,
                  u...
Only for
 Maxus 



               Обращение к текстурам
      float3 main(float2 coords : TEXCOORD0,
                  u...
Only for
 Maxus 
               Постоянные параметры
               шейдера

      float3 main(float2 coords : TEXCOORD0,...
Only for
 Maxus 
               Переменные параметры
               шейдера

      float3 main(float2 coords : TEXCOORD0,...
Only for
 Maxus 



               Возвращаемое значение
      float3 main(float2 coords : TEXCOORD0,
                  u...
Only for
 Maxus 



               Вычисление  рисование
           Устанавливается текстура, в которую будет
         ...
Only for
 Maxus 



                Ограничения на шейдеры
           Количество инструкций в шейдере ограничено
       ...
Only for
 Maxus 



               Ограничения на шейдеры
                          Ограничения                      ATI ...
Only for
 Maxus 



              Метод пинг-понга
           Используются только две текстуры: X и Y
           В текс...
Only for
 Maxus 



               Редукция
           Применяется для нахождения суммы значений, минимума,
            ...
Only for
 Maxus 



               Использование min и max
           Пример  поиск медианы из трех значений a, b и с
 ...
Only for
 Maxus 



               Использование min и max
           Определим функцию clamp:
                         ...
Only for
 Maxus 
               Перенос вычислений на
               вершинный процессор
           Пример шейдера обращ...
Only for
 Maxus 
               Перенос вычислений на
               вершинный процессор
           Вершинный шейдер:
  ...
Only for
 Maxus 
               Перенос вычислений на
               вершинный процессор
           Тогда пиксельный шей...
Only for
 Maxus 
               Упаковка текстурных
               координат
           TEXCOORD0TEXCOORD7 могут быть в...
Only for
 Maxus 
                 Упаковка текстурных
                 координат
           Пример  координаты текстур ...
Only for
 Maxus 
                Алгоритмы обработки
                видео на GPU

           Motion Estimation (ME) на ...
Only for
 Maxus 



               Постановка задачи ME
           Текущий кадр разбивается на прямоугольные блоки
     ...
Only for
 Maxus 
              Внутреннее представление
              макро-блока

           Макро-блок разбивается на ...
Only for
 Maxus 



              Формат данных
           ME выполняется только для яркостной компоненты
            ка...
Only for
 Maxus 



                Вычисление SAD
           Пиксельный шейдер загружает из текстуры два
            со...
Only for
 Maxus 



                 Вычисление SAD



     float4 pix1, pix2;                         // Два соседних те...
Only for
 Maxus 



                Arithmetic Intensity
           Арифметическая интенсивность шейдера
            (ar...
Only for
 Maxus 



               Arithmetic Intensity
           Решением проблемы малой арифметической интенсивности
...
Only for
 Maxus 
               Производительность
               предлагаемого метода ME




           Накладные расхо...
Only for
 Maxus 



              Sub-pixel Motion Estimation

           Пиксельная точность обычно недостаточна для
  ...
Only for
 Maxus 



                Скорость интерполяции на GPU

                                                  CPU

...
Only for
 Maxus 



                Схема sub-pixel ME на GPU
                                                          ...
Only for
 Maxus 
                Производительность
                предлагаемого метода
                              CP...
Only for
 Maxus 
                  Точность предлагаемого
                  метода

            CPU




            GPU

...
Only for
 Maxus 
               Схема работы фильтра
               шумоподавления
           Схема фильтрации, полность...
Only for
 Maxus 



                Реализация на GPU
           Формат данных
               Фильтрация проводится отд...
Only for
 Maxus 



                 Реализация на GPU
           Для области 33 каждого пикселя вычисляется дисперсия
...
Only for
 Maxus 



                 Размытие на GPU
           Так как сила размытия должна быть различна в разных обла...
Only for
 Maxus 



               Размытие на GPU
           Получение коэффициентов матриц размытия для четырѐх
      ...
Only for
 Maxus 
                 Производительность шейдеров,
                 млрд. точек в секунду

                  ...
Only for
 Maxus 



                                 Производительность шейдеров
                            5
          ...
Only for
 Maxus 



                          Качество шумоподавления
                                  Предлагаемый филь...
Only for
 Maxus 



               Производительность

          40
          35
          30
          25
    FPS




  ...
Only for
 Maxus 



              Дальнейшая работа
           Реализация на GPU других методов
            шумоподавлен...
Only for
 Maxus 



                 Список литературы
           GPGPU
                http://www.gpgpu.org
          ...
Only for
 Maxus 



                 Список литературы
           Декодирование видео
                Guobin Shen, Guan...
Only for
 Maxus 
            Лаборатория компьютерной
            графики и мультимедиа

      Видеогруппа это:
       В...
Upcoming SlideShare
Loading in …5
×

Применение современных графических процессоров для обработки видео

8,387 views

Published on

This presentation contains basic

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
8,387
On SlideShare
0
From Embeds
0
Number of Embeds
6,693
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Применение современных графических процессоров для обработки видео

  1. 1. Применение современных графических процессоров для обработки видеоданных Илья Цветков Video Group CS MSU Graphics & Media Lab
  2. 2. Only for Maxus  Содержание доклада  Введение  Устройство современного графического процессора  Графический конвейер  Вершинные и пиксельные шейдеры  Базовые концепции программирования на GPU  Оптимизация  Алгоритмы обработки видео на GPU  Компенсация движения  Фильтрация  Результаты 2 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  3. 3. Only for Maxus  Почему GPU?  Пиковая производительность GPU последнего поколения  около 600 GFLOPS  Скорость обмена данными с видеопамятью составляет 60 Гбайт/с  Даже low-end видеокарты позволяют обрабатывать большие изображения быстрее чем CPU.  Очень широко распространены среди обычных пользователей компьютеров в отличие от FPGA или DSP. 3 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  4. 4. Only for Maxus  Рост производительности GPU J. D. Owens, D. Luebke et al., “A Survey of General-Purpose Computation on Graphics Hardware,” 4 CS MSU Graphics & Media Lab (Video Group) www.compression.ru EUROGRAPHICS 2005, State of the Art reports, 2005
  5. 5. Only for Maxus  Почему GPU так быстро работают  CPU  Оптимизирован для исполнения последовательных операций  Ориентирован на обработку скалярных данных  GPU  Графическому процессору необходимо производить однотипные операции над большими объемами данных  Изначально проектируется как векторный процессор 5 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  6. 6. Only for Maxus  Устройство современного графического процессора  Графический конвейер  Программируемый вершинный процессор  Растеризация  Текстуры  Программируемый фрагментный процессор  Рендеринг в текстуру 6 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  7. 7. Only for Maxus  Графический конвейер CPU RAM GPU Видеопамять Вершинный Фрагментный Кадровый Растеризация процессор процессор буфер Геометрия объектов  Каждый этап конвейера может быть настроен с помощью графического API (например OpenGL или Direct3D)  Некоторые этапы полностью программируемы, другие обладают фиксированной функциональностью 7 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  8. 8. Only for Maxus  Геометрия объектов CPU RAM GPU Видеопамять Вершинный Фрагментный Кадровый Растеризация процессор процессор буфер Геометрия объектов 8 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  9. 9. Only for Maxus  Геометрия объектов  Является массивом сгруппированных точек, обладающих атрибутами  Виды группировки:  отдельные точки;  пары точек  линии;  треугольники;  многоугольники  Атрибуты точек:  координаты точки в пространстве;  цвет;  координаты текстуры (до 8 различных векторов);  произвольные пользовательские атрибуты 9 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  10. 10. Only for Maxus  Вершинный процессор CPU RAM GPU Видеопамять Вершинный Фрагментный Кадровый Растеризация процессор процессор буфер Геометрия объектов 10 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  11. 11. Only for Maxus  Вершинный процессор  Полностью программируемый этап графического конвейера  Входные данные  последовательность точек (и их атрибутов), задающих геометрию объектов  Каждая точка обрабатывается независимо  Точки обрабатываются параллельно на нескольких вершинных процессорах (например, на 12)  Работает над векторами (координаты, цвет  вектора)  Может изменять произвольным образом координаты и атрибуты точек  Выходные данные  последовательность точек с преобразованными координатами и атрибутами  Может добавить новые или убрать некоторые атрибуты 11 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  12. 12. Only for Maxus  Растеризация CPU RAM GPU Видеопамять Вершинный Фрагментный Кадровый Растеризация процессор процессор буфер Геометрия объектов 12 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  13. 13. Only for Maxus  Растеризация  Этап с фиксированной функциональностью  Входные данные  набор преобразованных вершинным процессором точек  Группирует точки в полигоны  Проектирует полигоны на экран  Определяются пиксели экрана, покрываемые полигоном  Для каждого пикселя линейно интерполируются все атрибуты вершин (кроме координат)  Выходные данных  поток пикселей (фрагментов), обладающих атрибутами 13 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  14. 14. Only for Maxus  Текстуры CPU RAM GPU Видеопамять Вершинный Фрагментный Кадровый Растеризация процессор процессор буфер Геометрия объектов 14 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  15. 15. Only for Maxus  Текстуры  Текстуры  массивы  Поддерживаются 1D-, 2D- и 3D-текстуры  Ограничение на размер: максимум 40964096 пикселей для 2D-текстуры  Изначально поддерживаются только квадратные POT-текстуры  Существуют расширения для поддержки прямоугольных NPOT-текстур  Форматы пикселей: от однокомпонентных (только яркость) до четырехкомпонентных (ARGB)  Значения могут храниться в виде байта или числа с плавающей точкой 15 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  16. 16. Only for Maxus  Фрагментный процессор CPU RAM GPU Видеопамять Вершинный Фрагментный Кадровый Растеризация процессор процессор буфер Геометрия объектов 16 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  17. 17. Only for Maxus  Фрагментный процессор  Полностью программируемый этап графического конвейера  Входные данные  поток пикселей (фрагментов) с интерполированными атрибутами  Каждый фрагмент обрабатывается независимо  Пиксели обрабатываются параллельно на нескольких фрагментных процессорах (например, на 24)  Имеет доступ к видеопамяти и может получить по заданным координатам пиксель из текстуры (возможна интерполяция на лету)  Работает с векторами без потери в производительности  Является средством основных вычисление для GPGPU  Выходные данные  пиксели конечного изображения 17 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  18. 18. Only for Maxus  Рендеринг в текстуру CPU RAM GPU Видеопамять Вершинный Фрагментный Кадровый Растеризация процессор процессор буфер Геометрия объектов 18 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  19. 19. Only for Maxus  Рендеринг в текстуру  Текстуры могут быть использованы для сохранения результатов рендеринга  Текстура может находится либо в режиме только для чтения либо в режиме только для записи  Текстуры могут быть использованы для хранения промежуточных результатов вычислений  Текстуры могут быть выгружены обратно в оперативную память 19 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  20. 20. Only for Maxus  Multiple Rendering Target (MRT)  Фрагментный шейдер может возвращать несколько результатов  Рендеринг может производиться в несколько буферов одновременно  На данный момент максимальное число «целей рендеринга»  четыре  Использование MRT позволяет при вычислениях добиться оптимальной арифметической интенсивности алгоритмов 20 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  21. 21. Only for Maxus  Базовые концепции программирования на GPU  Концепции программирования на GPU  Массивы  текстуры  Тело цикла  шейдер  Вычисление  рисование  Метод пинг-понга  Редукция  Перенос вычислений на вершинный процессор 21 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  22. 22. Only for Maxus  Программа для CPU coef1 = 0.76; coef2 = 1.0 – coef1; for (int i = 0; i < imageHeight; ++i) { for (int j = 0; j < imageWidth; ++j) { imgA[i, j].red = coef1 * imgA[i, j].red + coef2 * imgB[i, j].red; imgA[i, j].green = coef1 * imgA[i, j].green + coef2 * imgB[i, j].green; imgA[i, j].blue = coef1 * imgA[i, j].blue + coef2 * imgB[i, j].blue; } } 22 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  23. 23. Only for Maxus  Массивы  текстуры  Двумерный массив  2D-текстура  Структура текстуры: RGB  Формат данных: байты  Необходимы 3 текстуры, т. к. к imgA нужен доступ в режиме чтения и записи одновременно  Создание необходимой текстуры средствами OpenGL: glTexImage2D( GL_TEXTURE_RECTANGLE_ARB, // Прямоугольная текстура GL_RGB8, // RGB, 8 бит на канал imageWidth, // Ширина текстуры imageHeight, // Высота текстуры 0, GL_BGR, // Структура данных в ОЗУ GL_UNSIGNED_BYTE, // Формат данных в ОЗУ imgA // Изображение ); 23 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  24. 24. Only for Maxus  Тело цикла  шейдер  Вычисления в теле цикла можно производить параллельно  Значение каждого пикселя  вектор  Пример кода на Сg, реализующего «ядро» вычислений: float3 main(float2 coords : TEXCOORD0, uniform samplerRECT imgA, uniform samplerRECT imgB, uniform float coef1, uniform float coef2) : COLOR { float3 valA = texRECT(imgA, coords).rgb; float3 valB = texRECT(imgB, coords).rgb; return valA * coef1 + valB * coef2; } 24 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  25. 25. Only for Maxus  Векторные типы данных float3 main(float2 coords : TEXCOORD0, uniform samplerRECT imgA, uniform samplerRECT imgB, uniform float coef1, uniform float coef2) : COLOR { float3 valA = texRECT(imgA, coords).rgb; float3 valB = texRECT(imgB, coords).rgb; return valA * coef1 + valB * coef2; }  Поддерживаются векторные величины (до четырех компонент в векторе)  Матрицы размера до 44 (например float3x4, float4x2)  Соответствующие операции: умножение вектора на число, скалярное произведение векторов и т. п. 25 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  26. 26. Only for Maxus  Оператор перестановки float3 main(float2 coords : TEXCOORD0, uniform samplerRECT imgA, uniform samplerRECT imgB, uniform float coef1, uniform float coef2) : COLOR { float3 valA = texRECT(imgA, coords).rgb; float3 valB = texRECT(imgB, coords).rgb; return valA * coef1 + valB * coef2; }  Компоненты в векторе могут быть переставлены  Примеры: float3 a = valA.gbr + valB.yzx; float2 b = valA.xy + valB.yz; float4 c = valA.xxyy + valB.yzzx; 26 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  27. 27. Only for Maxus  Обращение к текстурам float3 main(float2 coords : TEXCOORD0, uniform samplerRECT imgA, uniform samplerRECT imgB, uniform float coef1, uniform float coef2) : COLOR { float3 valA = texRECT(imgA, coords).rgb; float3 valB = texRECT(imgB, coords).rgb; return valA * coef1 + valB * coef2; }  Различные типы текстур используют различные типы адресации пикселей  Текстуры задаются в виде параметров шейдера 27 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  28. 28. Only for Maxus  Постоянные параметры шейдера float3 main(float2 coords : TEXCOORD0, uniform samplerRECT imgA, uniform samplerRECT imgB, uniform float coef1, uniform float coef2) : COLOR { float3 valA = texRECT(imgA, coords).rgb; float3 valB = texRECT(imgB, coords).rgb; return valA * coef1 + valB * coef2; }  Задаются функциями графической библиотеки  Одинаковы для всех обрабатываемых элементов 28 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  29. 29. Only for Maxus  Переменные параметры шейдера float3 main(float2 coords : TEXCOORD0, uniform samplerRECT imgA, uniform samplerRECT imgB, uniform float coef1, uniform float coef2) : COLOR { float3 valA = texRECT(imgA, coords).rgb; float3 valB = texRECT(imgB, coords).rgb; return valA * coef1 + valB * coef2; }  Являются атрибутами фрагментов, полученных после растеризации  Тип атрибута, соответствующий данному параметру, указывается после двоеточия 29 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  30. 30. Only for Maxus  Возвращаемое значение float3 main(float2 coords : TEXCOORD0, uniform samplerRECT imgA, uniform samplerRECT imgB, uniform float coef1, uniform float coef2) : COLOR;  Возвращение результата аналогично функциям в C  Возвращаемому значению также приписывается определенная семантика  При использовании MRT: struct output { float4 c0 : COLOR0; float4 c1 : COLOR1; }; output main(float2 coords : TEXCOORD0, uniform samplerRECT texture); 30 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  31. 31. Only for Maxus  Вычисление  рисование  Устанавливается текстура, в которую будет производиться рендеринг  Задается ортогональная проекция полигонов на экран  Рисуется прямоугольник соответствующего размера с необходимыми атрибутами вершин  Вершинный процессор может провести предварительные вычисления  В процессе растеризации для каждого пикселя генерируется фрагмент с некоторыми атрибутами  Пиксельный шейдер выполняется над каждым фрагментом  Результаты могут быть выгружены обратно в оперативную память или использоваться далее 31 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  32. 32. Only for Maxus  Ограничения на шейдеры  Количество инструкций в шейдере ограничено  Разделение шейдера на несколько частей и последовательное их исполнение  метод пинг-понга  Количество обращений к текстурам также ограничено  Метод редукции  Несмотря на наличие кеша, обращение к текстуре занимает больше времени, чем выполнение арифметической операции  Проектирование шейдера, в котором количество арифметических операций больше количества обращений к текстурам  Ветвление доступно, но является «дорогой» операцией  Использование доступных на GPU функций вычисления максимума, минимума и т. п. 32 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  33. 33. Only for Maxus  Ограничения на шейдеры Ограничения ATI 9600 ATI X800 Количество атрибутов 16 16 Вершинный Количество инструкций 256 256 шейдер Количество регистров 32 32 Количество атрибутов 10 10 Пиксельный Количество инструкций 64 512 шейдер Количество обращений к текстурам 32 512 Количество регистров 32 64  Количество инструкций измеряется в машинный командах вершинного и фрагментного процессоров  Количество доступных регистров важно, т. к. при сложных вычислениях нет возможности сохранить промежуточные результаты в основную память (в отличие от CPU) 33 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  34. 34. Only for Maxus  Метод пинг-понга  Используются только две текстуры: X и Y  В текстуру X загружаются данные  На первом шаге шейдер берет данные из текстуры X, а рендеринг происходит в текстуру Y  Изменяется шейдер, тектуры меняются ролями Шейдер A Шейдер B Шейдер C Текстура X Текстура Y Текстура X Текстура Y 34 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  35. 35. Only for Maxus  Редукция  Применяется для нахождения суммы значений, минимума, максимума в области  Рендеринг производится в два раза меньшую область  Шейдер находит локальный максимум в области 22 47 2 3 57 5 12 7 8 47 57 15 17 64 68 71 10 20 6 13 14 15 16 17 38 64 68 35 71 70 19 11 21 22 23 68 25 26 46 49 61 52 38 29 64 31 32 33 35 34 71 67 69 70 37 28 39 49 53 42 41 52 46 1 48 40 61 51 44 43 55 71 4 58 69 62 50 60 30 65 66 67 24 59 70 56 35 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  36. 36. Only for Maxus  Использование min и max  Пример  поиск медианы из трех значений a, b и с  Обычный код с использование условных операторов: if (a < b) { if (b < c) return b; else return (a > c) ? a : c; } else { if (b > c) return b; else return (a < c) ? a : c; } 36 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  37. 37. Only for Maxus  Использование min и max  Определим функцию clamp: a, x  a  (a  b) clamp( x, a, b)  max( a, min( b, x))   x, a  x  b b, x  b   Тогда медиану можно вычислить: median( a, b, c)  clamp(c, min( a, b), max( a, b))  Код вычисления медианы на Cg с использованием встроенной функции clamp: float4 a = texRECT(texA, coords); float4 b = texRECT(texB, coords); float4 c = texRECT(texC, coords); return clamp(c, min(a, b), max(a, b)); 37 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  38. 38. Only for Maxus  Перенос вычислений на вершинный процессор  Пример шейдера обращающегося к двум соседним текселям: float4 main(float2 coords : TEXCOORD0, uniform samplerRECT texture) : COLOR { float4 a = texRECT(texture, coords); float4 b = texRECT(texture, coords + float2(1, 0)); return abs(a – b); }  Выделенная операция сложения не является частью «полезных» вычислений, но будет выполняться для каждого обрабатываемого пикселя  Такие вычисления могут быть перенесены на вершинный процессор 38 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  39. 39. Only for Maxus  Перенос вычислений на вершинный процессор  Вершинный шейдер: void main(in float4 in_pos : POSITION, in float2 in_coords : TEXCOORD0, out float4 out_pos : POSITION, out float2 out_coords0 : TEXCOORD0, out float2 out_coords1 : TEXCOORD1) { out_pos = in_pos; out_coords0 = in_coords; out_coords1 = in_coords + float2(1, 0); }  На этапе растеризации TEXCOORD0 и TEXCOORD1 будут линейно интерполированы для каждого пикселя 39 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  40. 40. Only for Maxus  Перенос вычислений на вершинный процессор  Тогда пиксельный шейдер можно упростить: float4 main(float2 coords0 : TEXCOORD0, float2 coords1 : TEXCOORD1, uniform samplerRECT texture) : COLOR { float4 a = texRECT(texture, coords0); float4 b = texRECT(texture, coords1); return abs(a – b); }  Но число текстурных координат ограничено восемью и уже при реализации на GPU свертки с ядром 33 аналогичный способ применить не удастся  Для решение этой проблемы используют упаковку координат 40 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  41. 41. Only for Maxus  Упаковка текстурных координат  TEXCOORD0TEXCOORD7 могут быть векторами из четырѐх компонент  При выборке из 2D-текстуры нужно задать только две координаты  Вектором из четырех компонент можно задать до четырех точек в двумерном пространстве: y z y z w coords.xy coords.xz 1 2 x 1 2 3 x 3 4 w coords.xw coords.xz coords.wz coords.xy coords.wy 41 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  42. 42. Only for Maxus  Упаковка текстурных координат  Пример  координаты текстур для свѐртки 55 (c0c6 определяют координаты текстур TEXCOORD0TEXCOORD6 соответственно; c  исходные координаты TEXCOORD0): c0 = c.xyxy + float4(-2, 2,-1, 1); c1 = c.xyxy + float4( 0, 2, 1, 1); c2 = c.xyyy + float4( 2, 2, 1, 0); c3 = c.xyxy + float4(-2, 0,-1,-1); c4 = c.xyxy + float4( 0, 0, 1,-1); c5 = c.xyxy + float4( 1,-1, 2,-2); c6 = c.xxxy + float4(-2,-1, 0,-2); Viola, I., Kanitsar, A., Gröller, M.E., “Hardware-Based Nonlinear Filtering and Segmentation using High-Level 42 CS MSU Graphics & Media Lab (Video Group) www.compression.ru Shading Languages,” Proceedings of IEEE Visualization, 2003
  43. 43. Only for Maxus  Алгоритмы обработки видео на GPU  Motion Estimation (ME) на GPU  Постановка задачи ME  Реализация алгоритма на GPU  Sub-pixel Motion Estimation  Результаты  Фильтрация видео на GPU  Схема работы фильтра шумоподавления  Производительность  Результаты 43 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  44. 44. Only for Maxus  Постановка задачи ME  Текущий кадр разбивается на прямоугольные блоки  Для каждого блока текущего кадра в предыдущем кадре ищется наиболее «похожий» блок  В качестве меры схожести двух блоков B1 и B2 размера MN обычно выступает SAD: M N SAD( B1 , B2 )   B1 ( x, y )  B2 ( x, y ) x 1 y 1  Часто поиск векторов движения осуществляется только для яркостной составляющей изображения  Самым простым методом поиска векторов движения является полный перебор в некоторой области 44 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  45. 45. Only for Maxus  Внутреннее представление макро-блока  Макро-блок разбивается на 16 матриц 44  Каждая из матриц передается в шейдер как постоянный параметр. Это позволяет значительно уменьшить число обращений к текстурам // Установка параметра шейдера float matrix[16]; cgSetMatrixParameterfr(param, matrix); float3 main(float2 coords : TEXCOORD0, uniform samplerRECT texture, uniform float4x4 block) : COLOR { // Вычисления } C.-W. Ho, O. Au, S.-H. Chan, S.-K. Yip, and H.-M. Wong, “Motion Estimation for H.264/AVC using Programmable Graphics Hardware,” 45 CS MSU Graphics & Media Lab (Video Group) www.compression.ru Conference on Multimedia Expo, 2006. Proceedings IEEE International
  46. 46. Only for Maxus  Формат данных  ME выполняется только для яркостной компоненты кадра  Используются текстуры BGRA, 8 бит на канал  При загрузке изображения в текстуру исходные значения яркости упаковываются по 4 подряд идущих пикселя в один тексель Тексель 1 Тексель 2 B G R A B G R A 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 C.-W. Ho, O. Au, S.-H. Chan, S.-K. Yip, and H.-M. Wong, “Motion Estimation for H.264/AVC using Programmable Graphics Hardware,” 46 CS MSU Graphics & Media Lab (Video Group) www.compression.ru Conference on Multimedia Expo, 2006. Proceedings IEEE International
  47. 47. Only for Maxus  Вычисление SAD  Пиксельный шейдер загружает из текстуры два соседних текселя (8 значений яркости)  Вычисление SAD выполняется сразу для 4 соседних позиций  На примере одной строки блока 44: Строка: C1 , C2 , C3 , C4  ADi , j  Ri  C j C.-W. Ho, O. Au, S.-H. Chan, S.-K. Yip, and H.-M. Wong, “Motion Estimation for H.264/AVC using Programmable Graphics Hardware,” 47 CS MSU Graphics & Media Lab (Video Group) www.compression.ru Conference on Multimedia Expo, 2006. Proceedings IEEE International
  48. 48. Only for Maxus  Вычисление SAD float4 pix1, pix2; // Два соседних текселя float4 c; // Строка блока {C1, C2, C3, C4} float4 ad1, ad2, ad3, ad4; ad1 = abs(c.xxxx – pix1.xyzw); // {AD1,1, AD2,1, AD3,1, AD4,1} ad2 = abs(c.yyyy – float4(pix1.yzw, pix2.x)); // {AD2,2, AD3,2, AD4,2, AD5,2} ad3 = abs(c.zzzz – float4(pix1.zw, pix2.xy)); // {AD3,3, AD4,3, AD5,3, AD6,3} ad4 = abs(c.wwww – float4(pix1.w, pix2.xyz)); // {AD4,4, AD5,4, AD6,4, AD7,4} float4 sad = ad1 + ad2 + ad3 + ad4; // {SAD1, SAD2, SAD3, SAD4} C.-W. Ho, O. Au, S.-H. Chan, S.-K. Yip, and H.-M. Wong, “Motion Estimation for H.264/AVC using Programmable Graphics Hardware,” 48 CS MSU Graphics & Media Lab (Video Group) www.compression.ru Conference on Multimedia Expo, 2006. Proceedings IEEE International
  49. 49. Only for Maxus  Arithmetic Intensity  Арифметическая интенсивность шейдера (arithmetic intensity)  отношение числа операций АЛУ к числу выборок из текстур  Необходимо, чтобы арифметическая интенсивность шейдеров была достаточно высока  около 8 операций АЛУ на один доступ к текстуре  Причина  «медленный» доступ к памяти  Во время получения текселя АЛУ продолжает работу  Для различных GPU оптимальная арифметическая интенсивность различна  Решение  реализация нескольких версий шейдера для различных GPU 49 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  50. 50. Only for Maxus  Arithmetic Intensity  Решением проблемы малой арифметической интенсивности может быть использование MRT  Для одних и тех же текселей одновременно вычисляются сразу несколько результатов  В предлагаемой реализации ME SAD можно вычислять более чем для одного блока за один проход  Число выборок из текстуры при этом не изменяется, т. к. исходный блок задается в качестве параметра Сравнение времени выполнения ME для видео формата 1080p и областью перебора ±256 пикселей при различном числе обрабатываемых блоков за один проход на GeForce 7800GT PCIe C.-W. Ho, O. Au, S.-H. Chan, S.-K. Yip, and H.-M. Wong, “Motion Estimation for H.264/AVC using Programmable Graphics Hardware,” 50 CS MSU Graphics & Media Lab (Video Group) www.compression.ru Conference on Multimedia Expo, 2006. Proceedings IEEE International
  51. 51. Only for Maxus  Производительность предлагаемого метода ME  Накладные расходы вызовов API не позволяют полностью раскрыть потенциал GPU при малых областях перебора  «Узким местом» при вычислениях является выгрузка результатов C.-W. Ho, O. Au, S.-H. Chan, S.-K. Yip, and H.-M. Wong, “Motion Estimation for H.264/AVC using Programmable Graphics Hardware,” 51 CS MSU Graphics & Media Lab (Video Group) www.compression.ru Conference on Multimedia Expo, 2006. Proceedings IEEE International
  52. 52. Only for Maxus  Sub-pixel Motion Estimation  Пиксельная точность обычно недостаточна для качественной компенсации движения  Для повышения качества используется полупиксельная, четверть-пиксельная или бóльшая точность  Необходима интерполяция  GPU позволяет проводить билинейную интерполяцию текстур во время обращения к ним  Скорость интерполяции очень высока, т. к. эта функция GPU полностью реализована на аппаратном уровне 52 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  53. 53. Only for Maxus  Скорость интерполяции на GPU CPU GPU (readback) GPU (w/o readback) Сравнение времени выполнения билинейной интерполяции на Pentium 4 1,6 ГГц и GeForce FX 5600 с учетом времени выгрузки результатов обратно в ОЗУ и без него Francis Kelly and Anil Kokaram, “Fast Image Interpolation for Motion Estimation using Graphics Hardware,” IS&T/SPIE 53 CS MSU Graphics & Media Lab (Video Group) www.compression.ru  Real-Time Imaging VIII, 2004 Electronic Imaging
  54. 54. Only for Maxus  Схема sub-pixel ME на GPU  В видеопамять загружаются CPU текущий и предыдущий кадры Для каждого вектора движения из области поиска: Предыдущий Текущий кадр  Задаются два вектора кадр текстурных координат: для текущего кадра и предыдущего Смещение с учетом вектора движения Находится разность текущего и −  предыдущего кадров с учетом вектора движения Вычисление  Методом редукции для всех SAD блоков блоков вычисляется SAD GPU  Результаты выгружаются в ОЗУ Francis Kelly and Anil Kokaram, “Fast Image Interpolation for Motion Estimation using Graphics Hardware,” IS&T/SPIE 55 CS MSU Graphics & Media Lab (Video Group) www.compression.ru  Real-Time Imaging VIII, 2004 Electronic Imaging
  55. 55. Only for Maxus  Производительность предлагаемого метода CPU GPU (w/o SAD) GPU (with SAD) Время работы ME при различной точности и реализации без использования GPU, с использованием GPU и с использованием GPU в том числе и для вычисления SAD блоков Francis Kelly and Anil Kokaram, “Fast Image Interpolation for Motion Estimation using Graphics Hardware,” IS&T/SPIE 56 CS MSU Graphics & Media Lab (Video Group) www.compression.ru  Real-Time Imaging VIII, 2004 Electronic Imaging
  56. 56. Only for Maxus  Точность предлагаемого метода CPU GPU Качество кадров, скомпенсированных с Гистограмма ошибок вычисления SAD четверть-пиксельной точностью на CPU и полученных на GPU из-за погрешностей при GPU, по сравнению с исходным кадром интерполяции Francis Kelly and Anil Kokaram, “Fast Image Interpolation for Motion Estimation using Graphics Hardware,” IS&T/SPIE 57 CS MSU Graphics & Media Lab (Video Group) www.compression.ru  Real-Time Imaging VIII, 2004 Electronic Imaging
  57. 57. Only for Maxus  Схема работы фильтра шумоподавления  Схема фильтрации, полностью реализованная на GPU: Предыдущий Расчет дисперсии скомпенсированный области 33 кадр каждого пикселя − Усреднение в области 33 Размытие с Медианная Текущий кадр учетом дисперсии фильтрация области − Усреднение в области 33 Следующий скомпенсированный Результат кадр 58 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  58. 58. Only for Maxus  Реализация на GPU  Формат данных  Фильтрация проводится отдельно для яркостной и цветностных компонент  Изображения находятся в текстурах в упакованном виде  по четыре точки в одном текселе  Усреднение в области 33 реализовано в два прохода: суммирование проводится сначала по горизонтали, затем по вертикали  Медианная фильтрация  Проводится для пикселя только, если разности между скомпенсированными и исходным кадром в данной точке меньше заданного порога  Для реализации порога условный оператор не используется. Применяется функция step: 0, x  a step(a, x)    1, x  a 59 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  59. 59. Only for Maxus  Реализация на GPU  Для области 33 каждого пикселя вычисляется дисперсия  Расчет проводится по формуле (S  множество пикселей области; NS  число пикселей в S; f(q)  значение пикселя q):     2 D( S )  2 N S  f (q)    f (q)   1  2 N S  qS      qS    Вычисление проходит за 6 проходов  Вычисляется f (q) для каждого пикселя 2  Аналогично усреднению находятся суммы  Вычисляется результирующее значение  В зависимости от дисперсии, рассчитанной для области каждого пикселя, происходит размытие изображения полученного после медианной фильтрации 61 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  60. 60. Only for Maxus  Размытие на GPU  Так как сила размытия должна быть различна в разных областях изображения, то фильтр не может быть реализован как сепарабельный  Коэффициенты нормированы так, чтобы сумма элементов ядра свѐртки равнялась 1  Для области 33 в ядре свѐртки присутствуют только 3 различных значения  Все коэффициенты хранятся в видеопамяти в виде одномерной RGB- текстуры  Каждый тексель задает матрицу размытия  Различным точкам текстуры соответствуют матрицы размытия различной интенсивности  Элементы RGB-векторов  байты 51 32 19 63 31 17 71 32 14 0,066 0,122 0,066 (N − 1) Тексель N (N + 1) 0,122 0,248 0,122 tex1D(texture, N); 0,066 0,122 0,066 Приведение к float3 62 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  61. 61. Only for Maxus  Размытие на GPU  Получение коэффициентов матриц размытия для четырѐх соседних пикселей: float4 disp = texRECT(dispersion, c); // Получение дисперсии float4x3 kern; kern[0] = tex1D(kernel, disp.x).zyx; // Выборка коэффициентов kern[1] = tex1D(kernel, disp.y).zyx; kern[2] = tex1D(kernel, disp.z).zyx; kern[3] = tex1D(kernel, disp.w).zyx; float3x4 coef = transpose(kern); // Транспонирование float4 value = texRECT(texture, c) * coef[0]; // Вычисления  Транспонирование проводится для получения вектора, состоящего из четырех коэффициентов, отвечающих одной позиции в матрицах размытия четырех соседних пикселей 63 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  62. 62. Only for Maxus  Производительность шейдеров, млрд. точек в секунду Шейдер ATI 9600 ATI X800 ATI X1950 Вычисление разности 0,909 2,807 3,213 Суммирование по горизонтали 0,417 1,351 3,457 Суммирование по вертикали 0,522 1,550 2,076 Медианная фильтрация 0,412 1,272 3,546 Возведение в квадрат 1,162 2,886 4,430 Расчет дисперсии 0,546 1,763 2,225 Размытие 0,0842 0,288 1,152 Размытие (этап 1)1 0,273 0,859 3 Размытие (этап 2)1 0,124 0,407 3 1  из-за нехватки ресурсов ATI 9600 шейдер размытия пришлось разделить на два; 2  вычислено по результатов двух этапов размытия; 3  измерения не проводились 65 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  63. 63. Only for Maxus  Производительность шейдеров 5 4,5 4 Млрд. точек в секунду 3,5 3 2,5 2 1,5 1 0,5 0 Разность Сумма по Сумма по Медиана Квадрат Дисперсия Размытие горизонтали вертикали ATI 9600 ATI X800 ATI X1950 66 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  64. 64. Only for Maxus  Качество шумоподавления Предлагаемый фильтр на GPU MSU Denoiser 41 40,5 40 39,5 PSNR, дБ 39 38,5 38 37,5 37 36,5 0 20 40 60 80 100 120 Параметр 67 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  65. 65. Only for Maxus  Производительность 40 35 30 25 FPS 20 15 10 5 0 352288 720576 Предлагаемый фильтр на GPU MSU Denoiser 68 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  66. 66. Only for Maxus  Дальнейшая работа  Реализация на GPU других методов шумоподавления  Перенос компенсации движения на GPU  Создание фильтра шумоподавления для VirtualDub, выполняющего всю обработку исключительно на GPU  Перенос большинства алгоритмов обработки видео на GPU 69 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  67. 67. Only for Maxus  Список литературы  GPGPU  http://www.gpgpu.org  J. D. Owens, D. Luebke, N. Govindaraju, M. Harris, J. Kuger, A. E. Lefohn, and T. J. Purcell, “A survey of General-Purpose Computation on Graphics Hardware”. In EUROGRAPHICS 2005, State of the Art reports, pp. 21–51, 2005  Motion Estimation  Francis Kelly and Anil Kokaram, “General Purpose Graphics Hardware for Accelerating Motion Estimation,” in Irish Machine Vision and Image Processing Conference (IMVIP), Sept. 2003  Francis Kelly and Anil Kokaram, “Fast Image Interpolation for Motion Estimation using Graphics Hardware,” in IS&T/SPIE Electronic Imaging  Real-Time Imaging VIII, May 2004, vol. 5297, pp. 184–194  Sébastien Mazaré, Renaud Pacalet, Jean-Luc Dugelay, “Using GPU for Fast Block-matching,” EUSIPCO 2006, 14th European Signal Processing Conference, September 4–8, 2006, Florence, Italy  C.-W. Ho, O. Au, S.-H. Chan, S.-K. Yip, and H.-M. Wong, “Motion Estimation for H.264/AVC using Programmable Graphics Hardware,” Proceedings IEEE International Conference on Multimedia Expo (ICME) , pp. 2049–2052, Toronto, Canada, 9–12 July, 2006  Шумоподавление  Andreas Langs, Matthias Biedermann, “Filtering Video Volumes using the Graphics Hardware,” 15th Scandinavian Conference on Image Analysis, SCIA 2007, LNCS 4522, p. 878–887, June 10–14, 2007, Aalborg, Denmark  Ivan Viola, Armin Kanitsar, Meister Eduard Gröller, “Hardware-Based Nonlinear Filtering and Segmentation using High-Level Shading Languages,” Proceedings of the 14th IEEE Visualization 2003, 2003 70 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  68. 68. Only for Maxus  Список литературы  Декодирование видео  Guobin Shen, Guang-Ping Gao, Shipeng Li, Heung-Yeung Shum, and Ya-Qin Zhang, “Accelerate Video Decoding with Generic GPU,” IEEE Transactions on Circuits and Systems for Video Technology, vol. 15, no. 5, pp. 685–693, May 2005  Bart Pieters, Dieter Van Rijsselbergen, Wesley De Neve, Rik Van de Walle, “Motion Compensation and Reconstruction of H.264/AVC Video Bitstreams using the GPU,” Image Analysis for Multimedia Interactive Services, 6–8 June, 2007 pp. 69–69  Вейвлеты  Carsten Stocklöw, Stefan Noll, “Realtime Wavelet Video Encoding with Generic Graphics Processing Unit,” Proceedings Eurographics Italian Chapter Conference, 2007, pp. 73–78  T. T. Wong, C. S. Leung, P. A. Heng and J. Wang, “Discrete Wavelet Transform on Consumer-Level Graphics Hardware,” IEEE Transactions on Multimedia, Vol. 9, No. 3, April 2007, pp. 668–673  DCT/IDCT  Bo Fang, Guobin Shen, Shipeng Li, and Huifang Chen, “Techniques for Efficient DCT/IDCT Implementation on Generic GPU,” in Proceedings of the IEEE International Symposium on Circuits and Systems, May 2005, vol. 2, pp. 1126–1129 71 CS MSU Graphics & Media Lab (Video Group) www.compression.ru
  69. 69. Only for Maxus  Лаборатория компьютерной графики и мультимедиа Видеогруппа это:  Выпускники в аспирантурах Англии, Франции, Швейцарии (в России в МГУ и ИПМ им. Келдыша)  Выпускниками защищено 5 диссертаций  Наиболее популярные в мире сравнения видеокодеков  Более 3 миллионов скачанных фильтров обработки видео 72 CS MSU Graphics & Media Lab (Video Group) www.compression.ru

×