Просмотрите сетевое предсказание и данные о производительности для слоев, модуля свертки и полностью соединенных модулей в вашей предварительно обученной серийной сети. Пример показывает, как получить предсказание и результаты профилировщика для сети ResNet-18.
Создайте объект класса Workflow
при помощи dlhdl.Workflow
класс.
Установите предварительно обученную нейронную сеть для глубокого обучения и поток битов для объекта рабочего процесса.
Создайте объект класса dlhdl.Target
и задайте целевого поставщика и интерфейс.
Чтобы развернуть сеть на заданной целевой плате FPGA, вызовите deploy
метод для объекта рабочего процесса.
Вызовите predict
функция для объекта рабочего процесса. Обеспечьте массив изображений как InputImage
параметр. Обеспечьте аргументы, чтобы включить профилировщик.
Метки, классифицирующие изображения, хранятся в структуре struct
и отображенный на экране. Эксплуатационные параметры скорости и задержки возвращены в структуре struct
.
Используйте это изображение, чтобы запустить код:
snet = resnet18; hT = dlhdl.Target('Xilinx','Interface','Ethernet'); hW = dlhdl.Workflow('Net', snet, 'Bitstream', 'zcu102_single','Target',hT); hW.deploy; image = imread('zebra.jpeg'); inputImg = imresize(image, [224, 224]); imshow(inputImg); [prediction, speed] = hW.predict(single(inputImg),'Profile','on'); [val, idx] = max(prediction); snet.Layers(end).ClassNames{idx}
### Finished writing input activations. ### Running single input activations. Deep Learning Processor Profiler Performance Results LastFrameLatency(cycles) LastFrameLatency(seconds) FramesNum Total Latency Frames/s ------------- ------------- --------- --------- --------- Network 23659630 0.10754 1 23659630 9.3 conv1 2224115 0.01011 pool1 572867 0.00260 res2a_branch2a 972699 0.00442 res2a_branch2b 972568 0.00442 res2a 209312 0.00095 res2b_branch2a 972733 0.00442 res2b_branch2b 973022 0.00442 res2b 209736 0.00095 res3a_branch2a 747507 0.00340 res3a_branch2b 904291 0.00411 res3a_branch1 538763 0.00245 res3a 104750 0.00048 res3b_branch2a 904389 0.00411 res3b_branch2b 904367 0.00411 res3b 104886 0.00048 res4a_branch2a 485682 0.00221 res4a_branch2b 880001 0.00400 res4a_branch1 486429 0.00221 res4a 52628 0.00024 res4b_branch2a 880053 0.00400 res4b_branch2b 880035 0.00400 res4b 52478 0.00024 res5a_branch2a 1056299 0.00480 res5a_branch2b 2056857 0.00935 res5a_branch1 1056510 0.00480 res5a 26170 0.00012 res5b_branch2a 2057203 0.00935 res5b_branch2b 2057659 0.00935 res5b 26381 0.00012 pool5 71405 0.00032 fc1000 216155 0.00098 * The clock frequency of the DL processor is: 220MHz
Данные профилировщика возвращают эти параметры и их значения:
LastFrameLatency(cycles)
- Общее количество тактов для предыдущего выполнения системы координат.
Тактовая частота - информация о Тактовой частоте получена из потока битов, который использовался, чтобы развернуть сеть в требуемую плату. Например, профилировщик возвращает * The clock frequency of the DL processor is: 220MHz
. Тактовая частота 220 МГц получена из zcu102_single
поток битов.
LastFrameLatency(seconds)
- Общее количество секунд для предыдущего выполнения системы координат. Общее время вычисляется как LastFrameLatency(cycles)/Clock Frequency
. Например, conv_module
LastFrameLatency(seconds)
вычисляется как 2224115/(220*10^6)
.
FramesNum
- Общее количество входных кадров к сети. Это значение будет использоваться в вычислении Frames/s
.
Total Latency
- Общее количество тактов, чтобы выполнить все слоя сети и модули для FramesNum
.
Frames/s
- Количество систем координат обрабатывается за одну секунду сетью. Общий Frames/s
вычисляется как (FramesNum*Clock Frequency)/Total Latency
. Например, Frames/s
в примере вычисляется как (1*220*10^6)/23659630
.
dlhdl.Target
| dlhdl.Workflow
| predict