В этом примере показано, как нормировать значения пикселя изображения с помощью внешней памяти. Пример включает две модели, которые показывают два способа смоделировать внешнюю память: моделирование внешней памяти 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 также регистрирует и отображает данные о производительности. Эти данные позволяют вам отладить и наблюдать эффективность системы во времени симуляции.
Этот рисунок показывает верхний уровень 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
модель выполняет алгоритм нормализации, описанный этим уравнением.
l является нижней границей, u является верхней границей, сигма, и 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')
Если вы очищаете минимум входа Compute и максимальный параметр, то необходимо обеспечить Входной минимум и Входные значения параметров максимума. Алгоритм нормирует входной кадр при помощи обеспеченного входа минимальные и максимальные значения и значения нижней и верхней границы.
open_system('ImageNormalizationHDLExample/ImageNormalizationHDL/Variant Subsystem/InputMinMaxVariant')
Если вы выбираете минимум входа 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)