С чего начать анализ SSD

Обновлено: 21.11.2024

Примеры приложений OpenVINO — это простые консольные приложения, которые показывают, как использовать определенные возможности API OpenVINO в приложении, помогают разработчикам выполнять определенные задачи, такие как загрузка модели, выполнение логических выводов, запрос определенных возможностей устройства и т. д.

После установки набора инструментов Intel® Distribution of OpenVINO™ примеры приложений на С, C++ и Python* доступны в следующих каталогах соответственно:

Примеры приложений OpenVINO включают следующее:

Образец речи – вывод акустической модели на основе нейронных сетей Kaldi и векторов признаков речи.

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

Пример Hello Classification — вывод сетей классификации изображений, таких как AlexNet и GoogLeNet, с использованием API запроса синхронного вывода. Входные данные любого размера и макета могут быть настроены на запрос вывода, который будет автоматически предварительно обрабатываться во время вывода (образец поддерживает только изображения в качестве входных данных и поддерживает пути Unicode).

Пример классификации входных данных Hello NV12. В запросе на вывод могут быть предоставлены входные данные любого размера и макета. Образец преобразует входные данные в цветовой формат NV12 и автоматически выполняет предварительную обработку во время логического вывода. Образец поддерживает только изображения в качестве входных данных.

Пример Hello Query Device — запрос доступных устройств OpenVINO и их показателей, значений конфигурации.

Hello Reshape SSD Sample — вывод сетей SSD, размер которых изменяется с помощью API ShapeInfer в соответствии с размером входных данных.

Образец асинхронной классификации изображений — вывод сетей классификации изображений, таких как AlexNet и GoogLeNet, с использованием API асинхронного запроса вывода (пример поддерживает только изображения в качестве входных данных).

Пример создания модели OpenVINO — построение модели LeNet с использованием примера создания модели OpenVINO.

Все примеры C++ поддерживают входные пути, содержащие только символы ASCII, за исключением примера Hello Classification, который поддерживает Unicode.

Медиафайлы, доступные для образцов¶

Примеры, поддерживающие предварительно обученные модели¶

Для запуска примера вы можете использовать общедоступные или предварительно обученные модели Intel из Open Model Zoo. Модели можно загрузить с помощью загрузчика моделей .

Сборка примеров приложений¶

Сборка примеров приложений в Linux*¶

Официально поддерживается следующая среда сборки Linux*:

Ubuntu* 18.04 LTS, 64-разрядная версия или Ubuntu* 20.04 LTS, 64-разрядная версия

GCC* 7.5.0 (для Ubuntu* 18.04) или GCC* 9.3.0 (для Ubuntu* 20.04)

CMake* версии 3.10 или выше

Для создания примеров из версии набора инструментов OpenVINO™ с открытым исходным кодом см. инструкции по сборке на GitHub.

Чтобы собрать образцы приложений C или C++ для Linux, перейдите в каталог /samples/c или /samples/cpp соответственно и запустите сценарий build_samples.sh:

После завершения сборки вы можете найти образцы двоичных файлов в следующих папках:

Примеры C: ~/inference_engine_c_samples_build/intel64/Release

Примеры C++: ~/inference_engine_cpp_samples_build/intel64/Release

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

Если вы установили продукт как пользователь root, перед продолжением переключитесь в режим root: sudo -i

Перейдите в каталог, к которому у вас есть доступ для записи, и создайте каталог сборки примеров. В этом примере используется каталог с именем build :

Если вы запустили скрипт проверки классификации изображений во время установки, каталог сборки примеров C++ уже был создан в вашем домашнем каталоге: ~/inference_engine_cpp_samples_build/

Перейти в созданный каталог:

Запустите CMake, чтобы создать файлы Make для выпуска или конфигурации отладки. Например, для примеров C++:

Для конфигурации выпуска:

Для конфигурации отладки:

Запустите make, чтобы собрать образцы:

Для конфигурации выпуска двоичные файлы примера приложения находятся в

/intel64/Выпуск/ ; для отладочной конфигурации — в

Создание примеров приложений в ОС Microsoft Windows*¶

Рекомендуемая среда сборки Windows* следующая:

Майкрософт Windows* 10

Майкрософт Visual Studio* 2019

CMake* версии 3.10 или выше

Если вы хотите использовать Microsoft Visual Studio 2019, вам необходимо установить CMake 3.14 или более позднюю версию.

Чтобы собрать примеры приложений C или C++ в Windows, перейдите в каталог \samples\c или \samples\cpp соответственно и запустите пакетный файл build_samples_msvc.bat:

По умолчанию скрипт автоматически определяет последнюю версию Microsoft Visual Studio, установленную на компьютере, и использует ее для создания решения для примера кода

После завершения сборки вы можете найти образцы двоичных файлов в следующих папках:

Образцы C: C:\Users\\Documents\Intel\OpenVINO\inference_engine_c_samples_build\intel64\Release

Примеры C++: C:\Users\\Documents\Intel\OpenVINO\inference_engine_cpp_samples_build\intel64\Release

Вы также можете создать сгенерированное решение вручную. Например, если вы хотите собрать образцы двоичных файлов C++ в конфигурации отладки, запустите соответствующую версию Microsoft Visual Studio и откройте сгенерированный файл решения из каталога C:\Users\\Documents\Intel\OpenVINO\inference_engine_cpp_samples_build\Samples.sln. .

Сборка примеров приложений на macOS*¶

Официально поддерживаемая среда сборки macOS* выглядит следующим образом:

macOS* 10.15 64-разрядная или более поздняя версия

Компилятор Clang* из Xcode* 10.1 или выше

CMake* версии 3.13 или выше

Для создания примеров из версии набора инструментов OpenVINO™ с открытым исходным кодом см. инструкции по сборке на GitHub.

Чтобы собрать примеры приложений C или C++ для macOS, перейдите в каталог /samples/c или /samples/cpp соответственно и запустите сценарий build_samples.sh:

После завершения сборки вы можете найти образцы двоичных файлов в следующих папках:

Примеры C: ~/inference_engine_c_samples_build/intel64/Release

Примеры C++: ~/inference_engine_cpp_samples_build/intel64/Release

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

Если вы установили продукт как пользователь root, перед продолжением переключитесь в режим root: sudo -i

Прежде чем продолжить, убедитесь, что у вас правильно настроена среда OpenVINO™. Это можно сделать вручную с помощью

Перейдите в каталог, к которому у вас есть доступ для записи, и создайте каталог сборки примеров. В этом примере используется каталог с именем build :

Если вы запустили скрипт проверки классификации изображений во время установки, каталог сборки примеров C++ уже был создан в вашем домашнем каталоге: ~/inference_engine_cpp_samples_build/

Перейти в созданный каталог:

Запустите CMake, чтобы создать файлы Make для выпуска или конфигурации отладки. Например, для примеров C++:

Для конфигурации выпуска:

Для конфигурации отладки:

Запустите make, чтобы собрать образцы:

Для конфигурации выпуска двоичные файлы примера приложения находятся в

/intel64/Выпуск/ ; для отладочной конфигурации — в

Подготовьтесь к запуску примеров приложений¶

Подготовьтесь к запуску примеров приложений в Linux*¶

Перед запуском скомпилированных двоичных файлов убедитесь, что ваше приложение может найти библиотеки OpenVINO Runtime. Запустите сценарий setupvars, чтобы установить все необходимые переменные среды:

**(Необязательно)**: переменные среды OpenVINO удаляются при закрытии оболочки. Как вариант, вы можете установить постоянные переменные среды следующим образом:

Откройте файл .bashrc в:

Добавьте эту строку в конец файла:

Сохраните и закройте файл: нажмите клавишу Esc, введите :wq и нажмите клавишу Enter.

Чтобы проверить изменения, откройте новый терминал. Вы увидите инициализированную среду OpenVINO [setupvars.sh].

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

Подготовьтесь к запуску примеров приложений в Windows*¶

Перед запуском скомпилированных двоичных файлов убедитесь, что ваше приложение может найти библиотеки OpenVINO Runtime. Используйте скрипт setupvars, который устанавливает все необходимые переменные среды:

Для отладки или запуска примеров в Windows в Microsoft Visual Studio убедитесь, что вы правильно настроили параметры среды отладки для конфигураций отладки и выпуска. Установите правильные пути к библиотекам OpenCV, а также отладочные и выпускные версии библиотек OpenVINO Runtime. Например, для конфигурации «Отладка» перейдите в свойствах конфигурации проекта в категорию «Отладка» и задайте для переменной PATH в поле «Среда» следующее:

где находится каталог, в котором установлен набор инструментов OpenVINO.

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

У меня есть FFXIV и анализатор журналов FFXIVAPP, установленный на моем SSD, на котором в последнее время не хватает места. Я заметил, что папка журнала FFXIVAPP занимает более 6 ГБ после ее использования в течение месяца. Большая часть этого была в папке журналов ошибок, в которой было множество трассировок стека, занимающих огромное количество места. Просто дружеское напоминание людям, чтобы они обратили внимание, если их жесткий диск начинает таинственным образом заполняться.

Где именно это?

О, какого черта, серьезно?

Мне было интересно, куда девается все пространство на моем SSD. вздох, и да, это было так.

Почему он не удаляет старые журналы после определенной даты, которая мне недоступна.

Я добавлю это при загрузке; удалить все журналы ошибок старше 24 часов.

Эти журналы находятся в папке установки? Или это папка Documents/AppData?

В самой папке APP /Logs/Errors

Есть и другие папки для каждого общего кода чата (say/tell/ls и т. д.)

Если вы хотите сохранить слово/сообщение, но не хотите ошибок; отключите "NLog", который остановит это.

"Сохранить журналы" позволяет сохранять сообщения/сообщения/чаты и т. д.

Возник вопрос о журналах синтаксического анализа. Вы, ребята, сохраняете его вручную? Думаю, я не делал свой, поэтому, когда я пытаюсь найти старые журналы, которые, как я полагаю, автоматически сохраняются, они иногда показывают такие огромные числа DPS в диапазоне 30 000+.

Это потому, что когда вы повторно анализируете этот файл, он запускает весь чат менее чем за несколько секунд и наносит 700 000 тысяч урона за 20 секунд == большой DPS: P

В настоящее время я не использую поле метки времени в XML для моделирования фактического времени, но я могу посмотреть на это позже :)

Я недавно обновил ffxivapp, и теперь все мои плагины, кроме parse, отсутствуют. Кто-нибудь знает, как их вернуть? Кроме того, как вы используете парсер? Я никогда не мог понять, как его использовать.

И для парсера; просто атакуйте :) он автоматически запускается и сбрасывается, если вы не наносите урон в течение x секунд.

Отличная информация. спасибо за уведомление. Теперь я переместил свою папку с SSD-накопителя на свой обычный диск.

Просто любопытно, FXIVAPP теперь точно анализирует точки?

Просто это лучшее программное обеспечение.

Ничего не имею против FFXIV - Parser, но мне просто не нравились ежедневные обновления, то, как обрабатывались кадры, и то, как анализировались детализированные повреждения.

С другой стороны, ACT с его триггерами и пользовательскими подключаемыми модулями и световыми годами дальше того, что может предложить FFXIV Parser.

Единственное, чем хорош ваш продукт, — это его удобство использования и «симпатичный» интерфейс.

Для более активных игроков сделайте себе одолжение: приобретите ACT и загрузите подключаемые модули, которые создают триггеры, вызывающие Twisters и Death Sentence в Twintania.

Эта фиксация не принадлежит ни к одной из веток в этом репозитории и может принадлежать ответвлению за пределами репозитория.

  • Открыть с рабочего стола
  • Просмотреть в необработанном виде
  • Копировать исходное содержимое Копировать необработанное содержимое

Копировать необработанное содержимое

Копировать необработанное содержимое

SPDX-FileCopyrightText: Copyright (c) NVIDIA CORPORATION & AFFILIATES, 2020-2021. Все права защищены.

Под лицензией Apache License, версия 2.0 ("Лицензия");

Вы не можете использовать этот файл, кроме как в соответствии с Лицензией.

Вы можете получить копию Лицензии по адресу

Если это не требуется применимым законодательством или не согласовано в письменной форме, программное обеспечение

распространяется по Лицензии, распространяется на ОСНОВЕ «КАК ЕСТЬ»,

БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых.

См. Лицензию для определенного языка, управляющего разрешениями и

ограничения по Лицензии.

В этом руководстве показано, как использовать пользовательские модели глубокого обучения и анализировать их вывод в приложении Python. Поддержка пользовательских моделей обеспечивается подключаемым модулем Triton Inference Server, входящим в состав DeepStream SDK. Необработанные выходные данные можно проанализировать в приложении Python через доступ к структуре NvDsInferTensorMeta. Пример кода представлен в приложении Python deepstream-ssd-parser.

1 — Вывод с помощью Triton

Включите подключаемый модуль Triton в конвейер. Приложение deepstream-ssd-parser показывает, как построить конвейер с Triton в качестве основного детектора.

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

Добавьте функцию probe для перехвата выходных тензоров для анализа. См., например, приложение deepstream-ssd-parser.

Настройка Triton для пользовательского синтаксического анализа:

Выберите пользовательскую постобработку:

В ds_test_ssd_no_postprocess.txt отредактируйте раздел infer_config -> postprocess, чтобы указать «другое» в качестве функции анализа и указать файл пользовательских меток, используемый для анализа:

Включить привязку тензоров вывода к метаданным:

Добавьте следующий текст в файл конфигурации:

2 – Как перехватить тензорные метаданные в приложении Python

Это делается в pgie_src_pad_buffer_probe .

Это делается в несколько шагов:

Получить буфер информационного аргумента.

Получить gst-буфер из пакетных метаданных

Получить первый кадр

Получить метаданные для первого кадра

Получить мета-список пользователей фрейма и убедиться, что это не None

Получить метаданные пользователя

Получить метаданные тензора

Функция pgie_src_pad_buffer_probe задается как зонд в конвейере, созданном в основной функции.

Доступен пример кода для нейронной сети синтаксического анализатора SSD.

3 — Метаструктура тензора и API привязок

  • pyds.NvDsInferTensorMeta.cast(data): эта функция преобразует данные в объект pyds.NvDsInferTensorMeta, эти метаданные добавляются как NvDsUserMeta в список frame_user_meta_list соответствующего frame_meta или object_user_meta_list соответствующего объекта с параметром meta_type, установленным на NVDSINFER_TENSOR_OUTPUT_META.

Этот объект имеет следующие методы и члены:

gpu_id: идентификатор устройства GPU, на котором были выделены буферы устройства.

num_output_layers: количество выходных слоев.

out_buf_ptrs_dev: Массив объектов в буферы устройства вывода для кадра/объекта.

out_buf_ptrs_host: Массив объектов для выходных буферов хоста для кадра/объекта.

priv_data: личные данные, используемые для управления внутренней памятью производителя метаданных.

unique_id: уникальный идентификатор экземпляра gst-nvinfer, который прикрепил этот метаданный.

pyds.NvDsInferObjectDetectionInfo: содержит информацию об одном проанализированном объекте из выходных данных детектора.

Этот объект имеет следующие методы и члены:

classId: идентификатор класса, к которому принадлежит объект.

detectionConfidence: достоверность обнаружения объекта. Должно быть значением с плавающей запятой в диапазоне [0,1].

height: высота ограничивающей рамки объекта.

влево: горизонтальное смещение формы ограничивающей рамки для объекта.

top: Вертикальное смещение формы ограничивающей рамки для объекта.

width: ширина ограничивающей рамки объекта.

4 — Пример синтаксического анализатора SSD

Ниже приводится общее объяснение примера приложения deepstream-ssd-parser. Дополнительные сведения см. в комментариях к коду.

4.1 — deepstream_ssd_parser.py

4.1.1 — основной

Эта функция принимает путь к файлу media или uri.

Выполняется инициализация Gstreamer.

Несколько элементов созданы для создания конвейера.

Эти элементы добавляются в конвейер и связываются вместе.

Функции зонда связаны с конвейером для взаимодействия с данными:

pgie_src_pad_buffer_probe

osd_sink_pad_buffer_probe

Конвейер находится в режиме PLAYING.

Выполняется основной цикл.

Конвейер установлен в режим NULL.

4.1.2 — pgie_src_pad_buffer_probe

Инициализировать пустой словарь с идентификатором класса в качестве ключа и количеством вхождений в качестве значения.

Для каждого элемента изображения увеличивается количество вхождений класса элемента.

Форматируется строка, содержащая количество автомобилей и людей.

Перед отображением к этой строке добавляется некоторый стиль отображения.

Строка добавляется во фрейм.

4.1.3 – osd_sink_pad_buffer_probe

Буфер gst извлекается из информационного аргумента.

Метаданные пакета извлекаются из буфера gst.

Параметр обнаружения создан. Он содержит номер класса и их порог точности.

Создается параметр размера рамки, содержащий размер изображения и минимальный размер ограничивающей рамки. Это будет использоваться для удаления слишком маленьких ограничивающих рамок. Эта нейронная сеть работает только с координатами с плавающей запятой от 0 до 1. Поскольку минимальный размер задается в пикселях, размер изображения необходим для масштабирования координат с плавающей запятой. А затем сравните их с минимальным размером.

Создается параметр nms (немаксимальное подавление). Этот параметр содержит:

top_k: максимальное количество сохраняемых ящиков.

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

Ярлыки извлекаются из файла labels.txt в том же каталоге, этот путь можно указать в файле конфигурации. Метки должны быть по одной на строку, а порядок соответствует порядку идентификаторов классов.

frame_meta, l_user, user_meta и tensor_meta извлекаются.

Тензорные метаданные затем используются для извлечения информации о слое и сохранения ее в списке (layers_info).

Затем можно получить список объектов frame_object_list, вызвав nvds_infer_parse_custom_tf_ssd с помощью:

Каждый obj_meta из этого frame_object_list затем добавляется к текущему кадру с помощью функции add_obj_meta_to_frame.

4.1.4 — add_obj_meta_to_frame

Объект obj_meta создается и заполняется:

информация о размерах и положении.

текст, который будет отображаться в рамке вокруг объекта.

Эта obj_meta добавляется во фрейм.

4.2 — ssd_parser.py

4.2.1 — nvds_infer_parse_custom_tf_ssd

Извлекается информация о 4 слоях output_layer_info.

Список объектов создается путем многократного вызова make_nodi.

Этот список объектов очищается с помощью nms путем вызова cluster_and_fill_detection_output_nms.

Возвращается список объектов.

4.2.2 — make_nodi

Res объекта создается с помощью pyds.NvDsInferObjectDetectionInfo() .

В нем хранятся достоверность обнаружения, идентификатор класса и размеры.

Размеры блока обрезаются между 0 и 1.

Выполняется тест, чтобы увидеть, что размер коробки превосходит то, что было указано в box_size_param. В этом случае возвращается res, в противном случае возвращается None.

4.3 – nms.py

4.3.1 — cluster_and_fill_detection_output_nms

Создается пустой список clustered_b_boxes.

Создается словарь per_class_object_list с идентификатором класса в качестве ключа и списком в качестве значения. Затем все элементы object_list сохраняются в этом словаре, отсортированные по классам.

Каждый список в per_class_object_list отсортирован по достоверности.

Затем применяется non_maximum_suppression, чтобы сохранить только выбранные индексы.

Объекты, связанные с этими индексами, хранятся в clustered_b_boxes.

Если количество объектов, хранящихся в clustered_b_boxes, превышает число top_k, то clustered_b_boxes сортируется в соответствии с достоверностью, и возвращаются первые объекты top_k.

4.3.2 – не_максимальное_подавление

Создается пустой список индексов.

Для всех блоков, если 2 из них перекрывают nms_threshold, блок с наименьшей достоверностью удаляется. Это перекрытие вычисляется с помощью calculate_iou.

Читайте также: