Разработка фильтра для MediaSDK энкодера
Характеристика основных методов оптимизации алгоритма шумоподавления видео. Исследование способов устранения различных шумов, вызванных, например, зернистостью пленки, с целью улучшения визуального восприятия видео и увеличения четкости изображения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 04.12.2019 |
Размер файла | 3,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ОБРАЗОВАНИЯ
«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ
«ВЫСШАЯ ШКОЛА ЭКОНОМИКИ»
Факультет информатики, математики и компьютерных наук
Программа подготовки бакалавров по направлению
09.03.04 «Программная инженерия»
ВЫПУСКНАЯ КОНТРОЛЬНАЯ РАБОТА
«Разработка фильтра для MediaSDK энкодера»
Лосев Иван Сергеевич
Научный руководитель:
Набиуллин Олег Ривхатович
Нижний Новгород, 2019
Оглавление
Введение
Постановка задачи
Цели работы
Поставленные задачи
Пример входных и выходных данных:
Описание алгоритма
Анализ существующих решений
Анализ алгоритма “Shrinkage” и методов его оптимизации
Особенности оптимизации алгоритма с помощью CM шейдеров
Реализация классов для работы с CM шейдерами
* Class SeparatedNV12CmKernels
* Class CmUniqueStore
* Class SeparatedSurfaces
Оптимизация “Initialize AB”
* CM Kernels
* Streaming SIMD Extensions
* Сравнение результатов работы
Оптимизация “IIR by Width”
* CM Kernels
* Streaming SIMD Extensions
* Сравнение результатов работы
Оптимизация “IIR by Height”
* CM Kernels
* Streaming SIMD Extensions
* Сравнение результатов работы
Оптимизация “Correct Frame”
* CM Kernels
* Streaming SIMD Extensions
* Сравнение результатов работы
Оценка времени работы алгоритма
Заключение
Ссылки
Введение
шумоподавление видео четкость изображение
В текущей работе будет рассмотрена оптимизация алгоритма шумоподавления видео [1], то есть устранения различных шумов, вызванных, например, зернистостью плёнки, с целью улучшения визуального восприятия видео и увеличения чёткости изображения.
Рисунок 1 - Изображение с шумом и без него
На рисунке выше представлен пример работы одного из шумоподавляющих фильтров. Помимо улучшения качества картинки, повышается эффективность использования кодека. Поскольку с кадров убирается ненужная информация (шум), то уменьшается и межкадровая разница что позволяет кодировать видео с меньшим битрейтом (количеством бит, используемых для передачи/обработки информации в единицу времени).
Рассматриваемая в данной работе идея поиска и устранения шумов не новая и берёт своё начало с классической работы академика А.Н. Тихонова [2] 1963 года, где он дал определение регуляризующего функционала. Данный же алгоритм представляет одну из возможных реализаций этой идеи для получения оптимального результата при обработке 8-битных видео.
Также, в процессе работы будет производиться сравнение скоростей работы наивной реализации алгоритма, реализации, с использованием Intel Streaming SIMD Extensions [3] (SSE - встроенных инструкций процессора Intel) и реализации с использованием графического чипсета Intel.
Постановка задачи
Цели работы:
1) Изучить возможности CPU (с использованием SSE [3]) и GPU оптимизаций алгоритма шумоподавления для принятия решения о включении данного фильтра в промышленную библиотеку видеокодирования MediaSDK.
2) Провести сравнительный анализ использования вышеописанных реализаций алгоритма.
Поставленные задачи:
· Провести рефакторинг кода алгоритма
· Спроектировать общий интерфейс для применения шумоподавляющего фильтра и написать наивную реализацию алгоритма
· Провести анализ наивной реализации алгоритма
· Изучить документацию C for Media (CM) языка [4] для написания шейдеров (небольших программ, запускающихся на ядрах графического процессора).
· Проанализировать результаты использования SSE[3] инструкций и CM[4] шейдеров для оптимизации шумоподавляющего фильтра
Пример входных и выходных данных:
Для запуска программы необходимо предоставить следующие параметры:
1) Используемая реализация (SW, SSE, CM)
2) Декодированное видео в формате YU12[5] или ключ “-test”
3) Ширину и высоту изображения
4) Количество кадров
5) Дополнительные параметры, зависящие от конкретной реализации
Примеры командной строки для запуска программы:
shrink.exe CM -test -w 736 -h 2304 -n 300 -cm_kernel_sizes [8,16,4,16,4,16,8,16] -cm_info true -cm_alg_stages [1,0,0,0] -disable_checks
shrink.exe SW -i input.yu12 -o out.yu12 -w 1280 -h 720 -n 100
shrink.exe SSE -test -w 3480 -h 2172 -n 25
Примеры выходных данных:
Рисунок 2 - Вывод программы (с момента запуска), с использованием реализации на CM шейдерах и указанием ключа “-cm_info”
В качестве выходных данных, программа предоставляет информацию о системе, на которой производится запуск, различных параметрах конфигурации, а так же среднее время работы алгоритма. Помимо этого, если не указан ключ “-test”, то программа будет сохранять результат применения шумоподавляющего фильтра в файл.
Описание алгоритма
Основная идея заключается в нахождении, для каждого пикселя, дельты (назовём её ДAB) между значениями одного и того же пикселя на трёх подряд идущих кадрах с последующим применением к полученным значениям фильтра с бесконечной импульсной характеристикой [6] (IIR фильтра). IIR фильтр применяется 4 раза: 2 раза по ширине (слева на право и справа на лево) и два раза по высоте. Полученные значения ДAB используются для разделения всех пикселей на две категории: стационарные и не стационарные. В первую категорию попадают пиксели, у которых значение ДAB оказывается больше константы sresh (1750), значение которой было подобрано для получения оптимального результата работы алгоритма, а все остальные значения - во вторую.
В данной работе стационарность точки определяет способ нахождения значения Gtemp, используемого для шумоподавления, то есть, если точка стационарна, значит, отклонения значений пикселя в этой точке на предыдущем и последующем кадрах оказались в пределах допустимой нормы и их можно использовать для вычисления значения Gtemp (используется фильтр по времени). Если точка оказалась не стационарна, то для вычисления значения Gtemp необходимо использовать значения 8 соседних пикселей (используется пространственный фильтр).
Найденное значение Gtemp может быть как положительным, так и отрицательным и характеризует “ величину шума” для пикселя. То есть, если Gtemp будет превышать некоторое ожидаемое значение lambda (которое задаётся пользователем), значит, значение пикселя превысило допустимую норму и его надо уменьшить, если Gtemp окажется меньше -lambda, то значение пикселя наоборот надо увеличить. В противном случае, будем считать, что отклонение значения пикселя находится в пределах допустимой нормы, то есть в данной точке может присутствовать незначительный шум, которым можно пренебречь.
Анализ существующих решений
На данный момент существует большое количество алгоритмов шумоподавления. На рисунке ниже представлена классификация различных техник, используемых при создании алгоритмов шумоподавления.
Рисунок 3 - Классификация техник создания шумоподавляющих алгоритмов
В своей работе [7], Сергеев Е.В. рассматривает проблему фильтрации аддитивного белого гауссовского шума (АБГШ) в полутоновых и первичных байеровских изображениях с целью разработки подавления таких шумов. В процессе исследования была проведена оценка уже существующих методов и создан новый алгоритм, использующий первоначальную оценку изображения с помощью Вейвлет-предобработки, а так же фильтры АГК и Виннера с последующей постобработкой, в основе которой положена новая идея критерия набора подобных блоков, для его восстановления. Средние оценки пиков ОСШ и КСП показали эффективность разработанного метода.
Напротив, в работе Benjamin Guedj и Juliette Rengot [8] рассматривается использование методов машинного обучения для создания и тренировки нейронной сети, определяющий тип шума, присутствующий на изображении, и применяющий наиболее подходящие фильтры для его устранения. Особенностью этой работы является применение сразу нескольких фильтров, причём это количество может варьироваться от пикселя к пикселю. В качестве результата приводится сравнительная таблица, показывающая, что использование комбинации из нескольких фильтров позволяет получить лучший результат, чем при использовании только одного фильтра.
Изучая работы по созданию новых или улучшению уже существующих алгоритмов шумоподавления, можно отметить, что шумоподавляющие фильтры востребованы во многих областях. Так, в работе Sheng-Yong Niu и его коллег [9] рассматривается проблема шумов, возникающих при проведении глубокой тканевой визуализации (в биомедицинских исследованиях). Проблема заключается в том, что требуется не только удалить возникающие шумы на полученном изображении, но и сохранить важные клеточные особенности, например границы между клетками, поскольку обычный фильтр может их смазать или даже полностью удалить. Созданная, в результате работы, модель DDAE не только превзошла многие имеющиеся алгоритмы при сравнении их значений PSNR и SSIM (используются при измерении уровня искажения изображения).
Вышеописанные работы предлагают эффективные методы подавления шумов, но при их оценке, необходимо учитывать не только качество получившегося изображения, но и скорость работы. Например, использование медленного алгоритма для улучшения качества передаваемого изображения в Skype, вызовет задержку при показе изображения пользователю, что является недопустимым в системах реального времени. Поэтому, целью данной работы является именно создание наиболее эффективной реализации выбранного алгоритма, для проведения дальнейших оценок на возможность добавления данного фильтра в промышленную библиотеку видеокодирования MediaSDK, а не сравнительный анализ данного алгоритма с уже существующими решениями.
Анализ алгоритма “Shrinkage” и методов его оптимизации
Прежде чем приступить к реализации алгоритма, необходимо было реализовать класс для замера времени выполнения алгоритма. Для работы со временем использована стандартная библиотека chrono. Базовый интерфейс разработанного класса содержит 3 основных метода: Benchmark::start(test_id, test_name), Benchmark::end(test_id) и Benchmark::printAllResult(). Внутри класса результаты хранятся в ассоциативном контейнере std::map<int, TestResult>где ключ - это номер теста, а TeskResult - структура, содержащая в себе поля для хранения минимального, максимального и среднего значения времени выполнения в наносекундах. Пример использования:
Рисунок 4 - Использование класса Benchmark
Вывод Benchmark::printAllResult():
Рисунок 5 - Пример вывода данных о замерах времени работы
Для оценки времени работы было скачано видео в форматах: 720p, 1080p, 1440p и 2160p, а затем, с помощью ffmpeg, декодировано и сохранено в формате YU12. Для декодирования использовалась команда “ffmpeg -i video.mp4 -vcodec rawvideo -pix_fmt yuv420p -vfames 100 out.yuv”.
Результаты работы алгоритма:
Initialize AB |
IIR by Width |
IIR by Height |
Correct Frame |
Algorithm |
||
5632 x 4608 |
53,3 |
260,6 |
1219,5 |
320 |
1853,4 |
|
2816 x 2304 |
11 |
53 |
145,2 |
81,3 |
290,5 |
|
1408 x 1152 |
2,5 |
13,2 |
26,1 |
20,1 |
61,9 |
|
704 x 576 |
0,4 |
3,3 |
3,4 |
4,9 |
12 |
|
352 x 288 |
0,1 |
0,9 |
0,9 |
1,1 |
3 |
Все измерения сделаны в миллисекундах и показывают среднее время работы в пределах одного кадра. Algorithm - суммарное время работы алгоритма.
Как видно из диаграмм, время работы “Initialize AB”, “Correct Frame” и “IIR by Width” увеличивается почти пропорционально размеру кадра, но “IIR by Height” при четырёхкратном уменьшении размера кадра, уменьшается в 7,5 раз. Это можно объяснить особенностью алгоритма, поскольку при уменьшении размера изменяется не только количество элементов, которые необходимо обработать, но и размер шага итерации. Так же можно обратить внимание, что” IIR by Height” и “Correct Frame” занимают наибольшее время выполнения, поэтому следует сконцентрироваться на оптимизации именно этих частей алгоритма.
Особенности оптимизации алгоритма с помощью CM шейдеров
Запуск алгоритма с использованием CM шейдеров можно разделить на несколько этапов:
1) Создание CmDevice, отвечающего за создание и удаление большинства компонентов.
2) Создание нескольких поверхностей в графической памяти с помощью CmDevice::CreateSurface2D(width, height, type, ptr)
3) Чтение и загрузка программы CmDevice::LoadProgram(ptr, size, program)
4) Создание шейдеров CmDevice::CreateKernels(program, kname, kernel)
5) Подготовка шейдеров к запуску
6) Группировка шейдеров для создания задач CmDevice::CreateTask(task) CmTask::AddKernel(kernel)
7) Выполнение задач в очереди CmQueue::Enqueue(task)
Поскольку для работы с шейдерами требуется выровненная память, то все вызовы malloc были заменены на CM_ALLIGNED_ALLOC. В качестве поверхностей для кадров R1, R2, R3 и R4 устанавливается CM_SURFACE_FORMAT_R8_UINT, а для AB поверхности - CM_SURFACE_FORMAT_R32_SINT.
Во время разработки было обнаружено, что параметры шейдера не меняются от кадра к кадру, поэтому для запуска алгоритма достаточно выполнить разовую инициализацию всех необходимых шейдеров и сгруппировать их в задачи (CmTask). Таким образом, в процессе работы достаточно будет копировать необходимые поверхности по соответствующим индексам и, с помощью CmQueue::Enqueue(), запускать готовые задачи.
Реализация классов для работы с CM шейдерами
· Class SeparatedNV12CmKernels
На этапе разработки были поставлены задачи, которые должен был решать новый класс:
1) Класс должен предоставлять интерфейс для создания шейдеров и набора потоков.
2) При создании шейдеров должны указываться только параметры для работы с Y поверхностью, при этом параметры для UV должны вычисляться в зависимости от типа поверхности (первая реализация должна поддерживать YU12[5]).
3) Класс должен предоставлять возможность задания аргументов только для одного шейдера (из пары шейдеров для Y и UV поверхностей).
4) Запуск группы шейдеров должен осуществляться в одной очереди посредством вызова CmQueue::Enqueue(). При этом должен быть механизм привязки группы потоков к шейдеру.
Исходя из предъявленных требований, был разработан следующий интерфейс:
Рисунок 6 - Интерфейс класса SeparatedNV12CmKernels
Получившийся класс позволил избежать дублирования кода, а так же повысить его устойчивость к ошибкам за счёт выполнения проверок параметров и возвращаемых значений.
· Class CmUniqueStore
Помимо этого был создан класс CmUniqueStore представляющий ассоциативный контейнер для хранения уникальных по именам групп объектов CM (размер групп задаётся параметром шаблона).
Рисунок 7 - Интерфейс класса CmUniqueStore
Особенностью использования является указание метода класса CmDevice, который будет вызван при удалении объекта. Это позволяет использовать класс только для работы с CM объектами. Единственное ограничение - перед уничтожением объекта должен быть вызван метод Destroy, принимающий указатель на CmDevice для корректного освобождения выделенных ресурсов.
· Class SeparatedSurfaces
Так же был разработан класс для, хранения CM поверхностей
Рисунок 8 - Интерфейс класса SeparatedSurfaces
В результате, благодаря реализованным классам создание и конфигурация всех 8 шейдеров (по два на каждую задачу) занимает менее 100 строк кода.
Оптимизация “Initialize AB”
· CM Kernels
На графике представлены измерения времени работы “Initialize AB” с помощью внутренних функций, и с помощью Benchmark класса. Можно сделать вывод, что помимо выполнения шейдера, тратится время на его подготовку и запуск. Время запуска составляет примерно 0,25ms и не зависит от количества потоков, а время подготовки наоборот напрямую связано с пулом потоков (0,35ms - 85000 threads; 0,25ms - 42500 threads; 0,1ms - 21250 threads; 0,5ms - 10000 threads).
Анализируя время работы отдельных этапов “Initialize AB”, видно, что большая часть времени алгоритма приходится на запись (47-49%) данных
Для ускорения времени работы было решено уменьшить объём считываемых данных с int (4 байта) на short (2 байта). Поскольку CM шейдеры имеют ограничения на уровне графического чипсета, то за раз можно считать не больше 256 байт.
После изменения размера данных значительно уменьшилось время записи поверхности (более чем в 4 раза). Общее время выполнения уменьшилось на 37% (с 4,28 до 2,64).
Так же было проведены запуски шейдера с различными размерами кадра для определения влияния размера матрицы на скорость выполнения алгоритма.
Общее время работы шейдера на блоках 8x16 и 8x8 оказалось одинаковым. Это связано с тем, что время запуска шейдера увеличилось на ту же величину, на которую уменьшилось время чтения и записи поверхностей. При этом, при дальнейшем уменьшении матрицы (до 8x4 и 8x2) наблюдается значительное увеличение времени работы алгоритма: сначала с 1,275ms до 1,725ms, а затем до 1,915ms. Это связанно с тем, что время запуска шейдера растёт пропорционально количеству потоков, в отличие от времени чтения и записи поверхностей.
Помимо этого можно заметить, что с уменьшением размера кадра время чтения и записи изменяется гораздо медленнее: 552ms до 202ms для кадра 736 x 2304 и с 20ms до 12ms для кадра 736 x 288. Таким образом, можно сделать вывод, что для выполнения “Initialize AB” шейдера лучше использовать матрицу 8x16 (для минимизации используемых потоков и увеличения максимально допустимого размера изображения), но при написании похожих шейдеров следует проверять, имеется ли выигрыш в скорости при увеличении параллелизма.
· Streaming SIMD Extensions
Основной цикл работы с SSE заключается в загрузке 16 значений типа uchar в 128-битный вектор, распаковка двух 64-битных частей в два 128-битных вектора (с целью увеличения точности до short) и непосредственное применение алгоритма[10].
Рисунок 9 - Основной фрагмент "Initialize AB" реализованный с использованием SSE инструкций
· Сравнение результатов работы
Как видно на графиках, первый этап алгоритма на кадре 704 x 480 выполняется на CM шейдерах в 1,5 раза медленнее, чем на SSE, но, тем не менее, в 1,5 раза быстрее, чем при наивной однопоточной реализации. При этом с увеличением размера кадра, эффективность CM шейдеров возрастает и, на кадрах 5632 x 3840 достигает значения 13,6 ms, что в 1,77 раз больше значения скорости на SSE и в 2,72 раза больше чем при использовании наивной реализации.
Оптимизация “IIR by Width”
· CM Kernels
Из-за уменьшения размера с int до short были добавлены дополнительные проверки на выход за пределы типа. Принцип работы алгоритма заключается в считывании матрицы, размером 8x16, а затем последовательное применение фильтра по столбцам. Результат выполнения записывается обратно в AB, а алгоритм продолжает работу со следующим блоком. Таким образом, 1 шейдер занимается применением фильтра сразу для нескольких строк изображения. Проверка на выход за пределы массива реализована следующим образом:
1) Значения текущего блока сравниваются с некоторой константой. В CM языке результатом операции сравнения является матрица, элементы которой равны 1 если условие выполняется, иначе - нулю.
2) Применяется IIR фильтр
3) В результирующий блок записываются только значения (полученные после применения IIR), которые удовлетворяли условию.
Результаты сильно отличаются от запуска шейдера для инициализации AB. На графике видно, что больше половины времени (77-79%) было потрачено на работу самого алгоритма. Так же, во время написания шейдера обнаружились ограничения на уровне графического чипсета, из-за которых максимальная ширина и высота области потоков (ThreadSpace) не может превышать 511 (это ограничение увеличено до 2047 для архитектуры SKL и выше).
В ходе тестов было выявлено, что CM лучше работает с типом int чем с short, поэтому были добавлены дополнительные операции приведения матриц, которые позволили уменьшить время работы алгоритма (без учёта чтения и записи поверхностей) в среднем на 25% для различных размеров кадра.
Так же, было обнаружено, что CM не выполняет разворачивание циклов, поэтому использование директивы #pragma unroll позволило ускорить работу алгоритма ещё на 30%.
На графиках выше показано время выполнения алгоритма на разных размерах изображения в зависимости от размера матрицы. Можно заметить, что на изображении 1408x960 лучший результат был достигнут с матрицей 1x16 . В результате дополнительных тестов было выяснено, что данное ускорение произошло при изменении размера пула потоков с 1x504 для кадра высотой 1008 на 2x256 для кадра высотой 1024. Таким образом, на скорость выполнения шейдера влияет не только количество потоков, но и форма пула, которая для “IIR by Width” задаётся параметром, определяющим количество блоков в одной строке.
Проанализировав различные комбинации с высотой пула потоков, были найдены оптимальные размеры, позволяющие получить наибольшую скорость (при значении параметра равном 100).
Так же были проанализированы различные способы конфигурации шейдеров для применения IIR фильтра:
1) Запуск 1 шейдера с добавлением в него логики обработки U и V
2) Запуск 2 шейдеров: один для Y, второй для U и V
3) Запуск 3 одинаковых шейдеров
В результате запуска тестов время выполнения шейдеров практически не изменялось, поэтому была выбрана вторая конфигурация, поскольку она наиболее проста в реализации и позволяет использовать параллелизм на уровне шейдеров.
· Streaming SIMD Extensions
Для использования SSE необходима возможность за 1 операцию загрузить несколько элементов в вектор, но из-за того, что IIR применяется по ширине - это невозможно, а заполнение вектора по одному элементу сводит преимущества SIMD инструкций к минимуму [11].
· Сравнение результатов работы
По сравнению с “Initialize AB” использование CM для применения IIR фильтра по ширине позволило значительно увеличить скорость работы алгоритма, причём с увеличением размера кадра, увеличивается и коэффициент ускорения.
Оптимизация “IIR by Height”
· CM Kernels
Поскольку шейдер для применения IIR фильтра по высоте аналогичен IIR фильтру по ширине, то необходимо только проанализировать и выбрать наилучшее сочетание размера пула потоков и матрицы.
Как видно на графиках, с уменьшением ширины матрицы увеличивается скорость выполнения, поэтому необходимо проанализировать влияние ширины матрицы на время выполнения.
Как видно на графиках, на больших изображениях лучше себя проявляет матрица размером 16x2, тогда как на маленьких кадрах лучше время выполнения достигается использованием больших матриц (16x8, 8x8, 16x4). При этом, при сравнении двух матриц с разной высотой: на кадре 5632 x 3840 для 16x2 время выполнения составило 20,6ms, а для 8x2 - 23ms; на кадре 1408 x 960 для 16x2 - 1,05ms, а для 8x2 - 1,25ms.
· Streaming SIMD Extensions
Рисунок 10 - Основной фрагмент "IIR by Height" реализованный с использованием SSE инструкций
Поскольку применение IIR по высоте уже работает с типом short, то дополнительных преобразований не требуется. Единственное отличие - нельзя за один проход цикла обработать весь кард, поэтому обработка происходит в 3 этапа: сначала Y компонента, затем U и V.
Так же, при использовании SSE необходимо учитывать стоимость операций. Так, замена умножения на 3 (a * 3) на побитовый сдвиг со сложением ((a << 1) + a) позволило получить прирост скорости в 3-5% [10].
· Сравнение результатов работы
Как видно по графикам, применение IIR фильтра по высоте выполняется крайне медленно. В основном это связано со слишком большим шагом (для обработки каждого следующего элемента требуется передвинуть указатель на ширину изображения). В среднем, для изображений меньше 4k (3840 x 2840) отношение скорости выполнения в среднем составляет 33-36 раз. С увеличением размера кадра отношение начинает увеличиваться.
Сравнивая использование SSE и CM видно, что с увеличением кадра увеличивается разница в скорости выполнения в пользу CM, хотя SSE также предоставляет значительное увеличение скорости выполнения, по сравнению с наивной реализацией.
Оптимизация “Correct Frame”
· CM Kernels
Заключительным этапом применения алгоритма shrink является корректировка текущего кадра на основании массива AB, получившимся после четырёхкратного применения IIR фильтра. Во время проектирования была обнаружена особенность CM, позволяющая осуществлять чтение поверхности за её пределами (например, указав -1 в качестве индекса для чтения). Причём область блока, оказывающаяся за пределами поверхности, заполняется ближайшим валидным значением. Также во время проверки, обнаружилось ещё одно ограничение CM, из-за которого при длине блока от 17 до 32 максимальная высота не должна превышать 8. Из-за этого чтение блока 10x18 было разделено на 2 этапа: чтение блока 8x18 и чтение блока 2x18.
Для реализации корректировки использовался механизм применения маски matrix::merge(mask, matrix). Результаты тестов приведены ниже:
Как видно на графиках, основное время тратится на чтение поверхностей (65-70% для кадров больше 1000 x 700), тогда как запись и непосредственное выполнение алгоритма в среднем вместе занимают 20-35%. Для “Correct Frame” наилучшие показатели по времени выполнения также были достигнуты при использовании матрицы размером 8x16 и 8x8.
По сравнению с инициализацией поверхности AB, увеличилось не только количество поверхностей, которые необходимо прочитать, но и объём считываемых данных для поверхности R2, хотя, как видно из графика, время, потраченное на чтение и запись, практически не изменилось. Так же, во время реализации алгоритма было найдено ещё одно ограничение CM, из-за которого операции над матрицами, чей размер превышает 512 байт, выполняются примерно в 4 раза дольше.
· Streaming SIMD Extensions
Алгоритм корректировки кадра, на основе поверхности AB достаточно простой, но из-за того, что SSE работает только с выравненной памятью, возникают дополнительные трудности, поскольку для корректировки одного пикселя необходимо знать значения всех соседних пикселей. Кроме того, сами значения хранятся в формате unsigned char, поэтому, для сохранения их точности сначала необходимо провести их “распаковку” в более ёмкий тип данных (short), а затем снова упаковать значения обратно.
В SSE реализации, для уменьшения количества перемещений, используется 3 указателя вместо одного, а для вычисления значений соседних пикселей сначала применяются инструкции сдвига: _mm_slli_si128 и _mm_srli_si128, а затем выполняется вставка нужного элемента с помощью _mm_insert_epi8.
Для дополнительной оптимизации использовалась инструкция _mm_test_all_zeros чтобы проверить, что все 16 значений массива AB оказались меньше sresh. В этом случае для вычисления отклонение значения пикселя от соседей рассчитывается как сумма абсолютных разностей текущего кадра с предыдущим и последующим.
Как видно на графиках, вычисление отклонения при AB < sresh выполняется, в среднем на 55-65% быстрее, чем при AB > sresh. Поскольку AB показывает значения отклонения пикселя между кадрами, то на видео с большим количеством динамических сцен (характерны частые перемещения предметов и резкие переходы между кадрами) условие AB< sresh будет выполняться реже, тогда как на статических сценах (характерны редкие изменения положения предметов) наоборот. Таким образом, скорость работы “Correct Frame” полностью зависит от количества динамических и статических точек.
· Сравнение результатов работы
Сравнение скорости выполнения будет проводиться исходя из предположения, что, после применения IIR фильтра, условия “AB > sresh” и “ AB < sresh” выполнятся одинаковое количество раз.
Как видно из графиков, CM шейдеры и SSE инструкции позволили увеличить скорость алгоритма в среднем в 12-13 раз, хотя из-за большого количества поверхностей, которые необходимо считать, используя CM шейдеры (поверхности AB, R1, R2, R3), SSE подход показал немного лучшую производительность (на 10% быстрее) на больших видео (больше 1408 x 960). При этом на более маленьких видео скорость работы SSE продолжает расти, поскольку в CM подходе тратится время на запуск шейдеров.
Сравнивая сложность реализации, можно отметить, что длина CM шейдера составила 82 строки, тогда как длина алгоритма с использованием SSE инструкций составила более 300 строк. Из этого можно сделать вывод, что при использовании SSE работа с соседними значениями (по отношению к обрабатываемому 128 битному вектору значений) повлечёт необходимость вызова дополнительных инструкций, что значительно увеличит размер кода.
Оценка времени работы алгоритма
Запуск алгоритма проводился на операционной системе Windows 10 с процессором Intel Core i7-4510U (Haswell gen7 gt2):
На верхних графиках показано время работы шумоподавляющего фильтра на различных разрешениях видео. Сравнивая скорость работы, можно отметить, что и реализация с использованием графического чипсета, и реализация с использованием SSE инструкций даёт значительный выигрыш в скорости (по сравнению с наивной реализацией алгоритма) и с увеличением размера кадра можно заметить почти линейное увеличение эффективности. Хотя, в случае SSE инструкций, в среднем, прирост составляет 20%, в то время как при использовании CM шейдеров, прирост составляет около 30%. То есть, при увеличении размера изображения эффективность CM шейдеров, возрастает быстрее, чем эффективность SSE инструкций.
Рисунок 11 - Результат работы алгоритма, реализованного на CM шейдерах на кадре 4K (3840 x 2160)
Как видно из вывода, много времени было потрачено на чтение из запись данных в файл (57,2ms; 42,6%), а так же на копирование данных из системной памяти в видео память и обратно (12,3ms; 9,3%), но поскольку эти результаты не влияют на время работы алгоритма, то в данной работе учитываться не будут. Таким образом использование CM шейдеров позволило достичь скорости выполнения алгоритма почти в 24 FPS, в то время как наивная реализация позволяет достичь скорости лишь 2,8 FPS.
Заключение
Итогом данной работы является отчёт об анализе возможностей оптимизации шумоподавляющего фильтра, который был передан комиссии принимающей решение о добавлении разработанного алгоритма в библиотеку промышленного видеокодирования MediaSDK. В ходе исследований, было рассмотрено использование векторных инструкций Intel Streaming SIMD Extensions и языка C for Media для написания шейдеров.
Все тесты выполнялись с использованием Intel Core i7-4510U поставляющимся с графическим чипсетом Intel HD Graphics 4400 на не загруженной машине (загрузка CPU и GPU составляла менее 3%).
Ссылки
1. Д. Калинкина, Д. Ватолин (2005) “Проблема подавления шума на изображениях и видео и различные подходы к её решению”, Компьютерная графика и мультимедиа: №3
2. Тихонов А. Н. (1965) “О некорректных задачах линейной алгебры и устойчивом методе их решения”, ДАН СССР, т. 163, № 3, с. 591--594
3. Intel (Сентябрь, 2016) “Официальное руководство по процессорам Intel”, Доступно по адресу: https://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-2a-manual.html
4. Intel (Февраль, 2018) “C for Media Compiler and Examples”, Доступно по адресу: https://github.com/intel/cm-compiler/
5. “PC Magazine Encyclopedia: YCbCr”, Доступно по адресу: https://www.pcmag.com/encyclopedia/term/55147/ycbcr
6. Saptarshi Das (Ноябрь 2016) “Drift Removal in Plant Electrical Signals via IIR Filtering Using Wavelet Energy”, Computers and Electronics in Agriculture, Глава 118
7. Сергеев Е.В. (Декабрь, 2012) “Разработка и анализ алгоритмов фильтрации гауссовского шума в полутоновых и первичных байеровских изображениях”, заседание диссертационного совета Д 212.025.04
8. B. Guedj, J. Rengot (Апрель, 2019) “Non-linear aggregation of filters to improve image denoising”, Доступно по адресу: https://arxiv.org/abs/1904.00865
9. Sheng-Yong Nui, Lun-Zhang Guo, Yue Li, Tzung-Dau Wang, Yu Tsao, Tzu-Ming Liu (Апрель, 2019) “Boundary-Preserved Deep Denoising of the Stochastic Resonance Enhanced Multiphoton Images”, Доступно по адресу: https://arxiv.org/abs/1904.06329
10. Stephen B. “The significance of SIMD, SSE and AVX”, Доступно по адресу: https://www.polyhedron.com/web_images/intel/productbriefs/3a_SIMD.pdf
11. Agner Fog (2014) “Optimizing software in C++ An optimization guide for Windows, Linux and Mac platforms”, OPENLIBRIA, Доступно по адресу: https://www.livelib.ru/book/1001117037-optimizing-software-in-c-agner-fog
Размещено на Allbest.ru
Подобные документы
Форматы и характеристики цифрового видео: частота кадра, экранное разрешение, глубина цвета, качество изображения. Типовый технологический процесс производства видеокомпонентов для мультимедиа продуктов с использованием программы miroVIDEO Capture.
лекция [2,7 M], добавлен 30.04.2009Порядок разработки информационной системы "Архив online-видео" для скачивания и добавления файлов, его структура и основные компоненты. Методика регистрации на сайте, просмотра, добавления и скачивания видео. Программирование администрирования сайта.
курсовая работа [1,9 M], добавлен 04.06.2009Основные понятия цифрового фото и видео. Достоинства и недостатки графических редакторов. Анализ школьных учебников по информатике по изучению работы с цифровым фото и видео. Анализ методических разработок. Планирование кружка "Компьютерная графика".
курсовая работа [52,1 K], добавлен 16.07.2013Общая характеристика видео-аудио конференции, основные сферы ее использования, режимы и способы проведения. Характеристика средств групповой обработки информации. Системы передачи данных в сети Интернет. Проведение аудио-видео конференции и криптозащита.
дипломная работа [2,7 M], добавлен 17.07.2013Представление видеоданных и способы сжатия видео. Применение двухмерного пространственного фильтра для сглаживания острых углов в предсказываемом блоке. Организация поиска по видеоданным. Непрерывное подмножество фреймов и ассоциативная карта сегментов.
презентация [116,9 K], добавлен 11.10.2013Создание титров с использованием видео-редактора Sony Vegas Pro 10.0 и графического редактора. Придание способности двигаться и видимости жизни объектам. Анимация в среде 3D Studio Max 2010. Воспроизведение визуализированной последовательности кадров.
курсовая работа [2,0 M], добавлен 17.01.2013Понятие видео-лекции, возможности ее применения в учебно-педагогическом процессе. Положительные и отрицательные стороны самообучения. Содержание, методы, формы обучения компьютерной графике в рамках самообразования, путем использования интернет сообществ.
курсовая работа [1,1 M], добавлен 13.12.2014Обзор рекламного ролика Vodafone "Bubbles". Слежение за точками и плоскостью в двухмерном трекинге. Трехмерный трекинг: захват движения и системы, основанные на принципе фотограмметрии. Методика создания ролика в условиях малобюджетной видео-студии.
дипломная работа [8,6 M], добавлен 25.01.2012Исследование технических характеристик и принципа работы графического планшета. Разработка алгоритма подключения и настройки периферийного устройства. Линейный ряд графических планшетов Wacom. Изучение основных неисправностей и способов их устранения.
курсовая работа [1,2 M], добавлен 10.11.2014Ознакомление с правилами оформления презентации PowerPoint: выбор сочетания цвета фона и текста, составление содержания работы, проверка правописания. Принципы использования графического оформления, звуков, видео и анимации для улучшения презентации.
презентация [2,2 M], добавлен 28.12.2011