Отобразите нормализацию Используя внешнюю память

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

Поддерживаемая аппаратная платформа

  • Оценочный комплект Xilinx® Zynq® ZC706 для ImageNormalizationHDLExample модель

  • Оценочный комплект Xilinx® Zynq® ZC706 и дополнительная плата FMC-HDMI-CAM для soc_imageNormalization_top модель

Введение

Алгоритм нормализации изображений является шагом предварительной обработки в развертывании нейронных сетей для глубокого обучения на FPGA. Этот пример обеспечивает среду, чтобы моделировать, настроить, и интегрировать сквозное приложение в Simulink®, включая среду для основанной на памяти системной интеграции. Алгоритм нормализации, который реализован в этом примере, берет ссылку из rescale функция.

И в моделях, алгоритм нормализации изображений имеет эти входные параметры и в параметры.

  • Входное изображение: изображение должно быть в формате RGB с пикселями uint8 тип данных.

  • Нижняя граница и верхняя граница: Эти значения являются областью значений нормированных выходных значений. Эти значения должны быть скалярами в области значений от 0 до 255.

  • Введите минимум и максимум: Эти значения являются минимумом и максимумом значений входного пикселя. Можно обеспечить эти параметры на маске подсистемы, или можно выбрать минимум входа Compute и максимальный параметр, чтобы автоматически вычислить эти значения.

Этот рисунок показывает параметры маски подсистемы, когда вы очищаете минимум входа Compute и максимальный параметр и используете фиксированные значения для Входного минимума и Входных параметров максимума.

Этот рисунок показывает параметры маски подсистемы, когда вы выбираете минимум входа Compute и максимальный параметр. Подсистема вычисляет вход минимальные и максимальные значения из потока входного пикселя.

Чтобы динамически вычислить входной минимум и максимум входного кадра, проект должен сохранить полную систему координат в памяти. Этот пример показывает два способа смоделировать память системы координат. ImageNormalizationHDLExample модель хранит входной кадр при помощи HDL Coder™ блоки FIFO как поведенческая модель памяти. soc_imageNormalization_top модель хранит входной кадр при помощи блоков внешней памяти SoC Blockset™. Используя внешнюю память уменьшает использование BRAM и позволяет обработать более высоких входных видеопотоков разрешения. Использование внешней памяти требует использования протоколы AXI4 и верификация против нехватки памяти. Модель показывает полностью совместимый интерфейс AXI4, который включает запись AXI4, и считайте контроллеры.

Интерфейс произвольного доступа AXI4 обеспечивает простой, прямой интерфейс к межсоединению памяти. Этот протокол позволяет алгоритму действовать как контроллер памяти путем обеспечения адресам и управлению пакетной передачи непосредственно. AXI4-основной Диспетчер Диспетчера и AXI4-ведущего-устройства Записи Рида блоки в этом примере моделирует упрощенный интерфейс AXI4 в Simulink™. Когда вы генерируете HDL-код с помощью продукта HDL Coder, сгенерированный код включает полностью совместимый IP интерфейса AXI4.

Модель внешней памяти

Продукт SoC Blockset обеспечивает блоки Simulink и инструменты визуализации для моделирования, симуляции и анализа аппаратных и программных архитектур для ASICs, FPGAs и SoCs. Продукт позволяет вам создать архитектуру системы с помощью моделей памяти, моделей шины и моделей I/O, и симулировать архитектуру вместе с алгоритмами. Этот пример демонстрирует интерфейс внешней памяти при помощи блоков Контроллера канала и Контроллера памяти Памяти SoC Blockset.

  • Потоковые данные о блоке Memory Channel через внешнюю память. Это моделирует передачу данных между чтением и алгоритмами регулятора записи через общую память. Этот пример конфигурирует канал, чтобы использовать протокол произвольного доступа AXI4.

  • Блок Memory Controller выносит решение между каналами и предоставляет им уникальный доступ к общей памяти. Это поддерживает несколько каналов с различными арбитражными протоколами. Блок Memory Controller также регистрирует и отображает данные о производительности. Эти данные позволяют вам отладить и наблюдать эффективность системы во времени симуляции.

Реализация HDL

Этот рисунок показывает верхний уровень soc_imageNormalization_top модель, включая блоки Контроллера канала и Контроллера памяти Памяти. Блок HDMI Rx обрабатывает ввод видео и передает его soc_imageNormalization_FPGA образец модели.

open_system('soc_imageNormalization_top')

В soc_imageNormalization_FPGA модель, поток входного пикселя соединяется с блоком Video Stream Connector. Этот блок обеспечивает интерфейс потоковой передачи видео, чтобы соединить любых двух дюйм/с в реализации FPGA. Блоки Коннектора Видеопотока соединяют блоки ввода и вывода HDMI с остальной частью алгоритма FPGA.

open_system('soc_imageNormalization_FPGA')

Следующий рисунок показывает ImageNormalizationFPGA подсистема, которая реализует запись AXI и чтение от внешней памяти и алгоритма нормализации.

hdmiDataIn сигнал находится в пиксельном потоковом формате YCbCr 4:2:2. Поскольку алгоритм нормализации ожидает изображения RGB, YCbCr422ToRGB подсистема преобразует данные YCbCr 4:2:2 в RGB.

Подсистема содержит ImageNormalization подсистема и эти разделы.

  • Запись AXI к Памяти: Этот раздел пишет входные данные в память. Это состоит из блока AXI4-Master Write Controller, который получает входную информацию об управлении видео от блока HDMI Rx и моделирует интерфейс с отображенной памятью AXI4 для того, чтобы записать данные в DDR. Это имеет пять выходных сигналов: wr_addr, wr_len, wr_valid, rd_start, и frame. wr_valid сигнал является входом с блоком AXI Write FIFO, который хранит входящие интенсивности пикселей. Блок SoC Bus Creator генерирует wrCtrlOut соедините шиной для записи данных в DDR. Модель пишет одну линию данных на пакет. После записи всех линий системы координат модель утверждает rd_start сигнал начать запрос чтения.

  • Чтение AXI из памяти: Этот раздел считывает данные из памяти. Это состоит из блока AXI4-Master Read Controller, который получает rd_start сигнал от блока AXI4-Master Write Controller. Блок AXI4-Master Read Controller генерирует rd_addr, rd_len, rd_avalid, и rd_dready сигналы. Блок SoC Bus Creator комбинирует эти сигналы в шину. Блок AXI4-Master Read Controller также генерирует pixelcontrol шина, соответствующая rd_data сигнал. Срезы модели rd_data на 32 бита сигнал получить 24 бита (LSB) данные о RGB. Затем модель формируется 1 3 uint8 Вектор RGB и передачи вектор к алгоритму нормализации.

Пиксельные значения RGB, считанные из памяти системы координат DDR, соединяются с buffPixIn и buffCtrlIn входными портами Image Normalization подсистема.

open_system('soc_imageNormalization_FPGA/ImageNormalizationFPGA')

Алгоритм нормализации

Следующий рисунок показывает ImageNormalization подсистема, которая реализует алгоритм нормализации.

Пиксельные данные входа RGB (от YCbCr422ToRGB подсистема), имеет ufix24 тип данных. Эта подсистема преобразует данные о RGB в uint8 1 3 векторы RGB. InputMinMaxCalc подсистема вычисляет вход минимальные и максимальные значения.

Rescale подсистема ссылается на NormalizationAlgorithm модель.

open_system('soc_imageNormalization_FPGA/ImageNormalizationFPGA/ImageNormalization')

NormalizationAlgorithm модель выполняет алгоритм нормализации, описанный этим уравнением.

$$\mathrm{output}=\frac{\left(l-u\right)*\left(\mathrm{input}-\mathrm{sigma}\right)+\left(l*\mathrm{inputMax}-u*\mathrm{inputMin}+l*\mathrm{constReg}\right)}{\mathrm{inputMax}-\mathrm{inputMin}+\mathrm{constReg}}$$

l является нижней границей, u является верхней границей, сигма$\max \left(\min \left(0,\mathrm{inputMax}\right),\mathrm{inputMin}\right)$, и constReg высок, когда входной минимум равен входному максимуму.

Этот рисунок показывает NormalizationAlgorithm модель.

open_system('NormalizationAlgorithm')

Аппаратная реализация

Чтобы создать, загрузите, и выполните модель на платах FPGA, используйте инструмент SoC Builder. Этот пример использует оценочный комплект Xilinx Zynq ZC706. Для большего количества детали о шагах создания смотрите Разработчика SoC (SoC Blockset).

Графики эффективности

Этот пример использует входное видео размера 480 640 пиксели. Модель конфигурирует блок HDMI Rx, чтобы использовать этот размер. Для оценочного комплекта Xilinx Zynq ZC706 контроллер PL DDR сконфигурирован с интерфейсом подчиненного AXI4 на 64 бита, достигающим 200 МГц. Получившаяся полоса пропускания составляет 1 600 Мбайт/с. Этот пример имеет двух менеджеров AXI, соединенных с контроллером DDR. Эти менеджеры AXI являются чтением AXI4 и интерфейсами записи алгоритма нормализации. Формат видео YCbCr 4:2:2 требует 2 байт на пиксель. Для чтения AXI4 и интерфейсов записи, каждый пиксель дополнен нулем к 4 байтам. В этом случае чтение и интерфейсы записи имеют требование пропускной способности 2x4x480x640x60 = 147,456 Мбайт/с.

Этот рисунок показывает график эффективности блока Memory Controller. Чтобы просмотреть график эффективности, откройте сначала блок Memory Controller. Затем на вкладке Performance нажмите графики эффективности View. Выберите все ведущие устройства под Полосой пропускания, и затем нажмите Update. После того, как алгоритм начинает писать и считывать данные во внешнюю память, пропускная способность остается приблизительно 180 Мбайт/с, который является в необходимой пропускной способности 147,456 Мбайт/с.

Поведенческая модель памяти

Эта модель реализует алгоритм с помощью формата пикселя потоковой передачи, блоков Vision HDL Toolbox™ и блоков Simulink та генерация HDL-кода поддержки. Последовательный интерфейс подражает системе реального времени и эффективен для аппаратных проектов, потому что меньше памяти требуется, чтобы хранить пиксельные данные для расчета. Последовательный интерфейс также позволяет проекту действовать независимо от размера изображения и формата и делает проект более эластичным к синхронизации ошибок. Типы данных с фиксированной точкой используют меньше ресурсов и могут дать лучшую эффективность на FPGA. InitFcn функция обратного вызова инициализирует необходимые переменные для этого примера.

open_system('ImageNormalizationHDLExample');

Блок HDMI_Rx импортирует входное видео к модели. Блок Pixels To Frame преобразует пиксельный поток назад во фреймы изображения. BehavioralMemory подсистема хранит входное изображение так, чтобы NormalizationAlgorithm подсистема может считать его по мере необходимости.

ImageNormalizationHDL подсистема является различной подсистемой, которая обеспечивает любую из этих двух реализаций, показанных в этом рисунке.

open_system('ImageNormalizationHDLExample/ImageNormalizationHDL/Variant Subsystem')

InputMinMaxVariant

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

open_system('ImageNormalizationHDLExample/ImageNormalizationHDL/Variant Subsystem/InputMinMaxVariant')

ComputeMinMaxVariant

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

Можно проверить результаты любой из различных реализаций против золотого ссылочного алгоритма нормализации при помощи блока CompareOut.

open_system('ImageNormalizationHDLExample/CompareOut')

Проверьте результаты между внешней памятью и поведенческая модель памяти модели

Сравните выход от ImageNormalizationHDLExample модель (поведенческая модель памяти) с выходом soc_imageNormalization_top модель (модель внешней памяти) при помощи errorCheck.m скрипт. Чтобы смочь сравнить результаты этих двух моделей, необходимо выбрать минимум входа Compute и максимальный параметр в ImageNormalizationHDLExample модель. Запустите обе модели, чтобы сохранить выход в рабочую область MATLAB®. Выходные параметры ImageNormalizationHDLExample моделью является simPixOut и simValidOut переменные. Выходные параметры soc_imageNormalization_top моделью является socPixOut и socValidOut переменные. errorCheck функционируйте берет эти переменные в качестве входных параметров и возвращает общее количество ошибочных пикселей в R, G, и B-каналы.

  [errR,errG,errB] = errorCheck(simPixOut,simValidOut,socPixOut,socValidOut)