Профилирование AI Computer Vision
AI-ориентированная карта по профилированию CV и производительности скриптов с MiniProfiler.
Профилирование и поиск проблем с производительностью
Карта-справочник по измерению производительности скриптов и computer vision через API на базе MiniProfiler, встроенные CV-хелперы, ручные шаги и вывод профайлера.
Что обычно хотят сделать
- Понять, почему медленно работает CV-цикл.
- Измерить скорость image search, OCR, color search, ML search или обработки пикселей.
- Сравнить две реализации.
- Добавить тайминги вокруг своего скриптового кода.
- Вывести данные профилирования в текстовом виде или в собственном UI.
- Не допустить бесконтрольного роста памяти из-за профилирования.
Как это устроено
- В EyeAuras используется иерархия таймингов в стиле MiniProfiler.
- У
ICvAccessorесть свойствоProfiler. EnableProfiling()включает тайминги для конкретного экземпляра CV accessor.- CV-операции создают внутренние шаги профайлера только если профилирование включено.
- Для своего кода можно использовать
Profiler.Step("name")вокруг измеряемых блоков. - Данные профилирования хранятся в памяти, поэтому их жизненный цикл должен быть ограничен сценарием использования.
- Первый вызов часто включает инициализацию и обычно работает медленнее, чем вызовы в стабильном режиме.
Детали API
ICvAccessor.Profiler— экземплярMiniProfiler, связанный с этим accessor.ICvAccessor.EnableProfiling()— включает внутренние CV-тайминги для данного accessor.MiniProfiler.Step(...)— создаёт дочерний шаг с измерением времени.MiniProfiler.RenderPlainText()— текстовый отчёт для логов.IProfilerProvider— общий провайдер профайлера для app/global-сценариев.ProfilerProvider.Default/ProfilerProvider.Startup— стандартные точки входа для профилирования на уровне приложения.- Имена внутренних CV-шагов обычно включают операцию, ключ и фазу:
Renting,Preparations,Refresh,Resolution,OSD.
Типовые сценарии
Профилирование CV-цикла
- Создайте CV accessor для нужного окна или источника.
- Вызовите
EnableProfiling()у этого accessor. - Оберните каждую итерацию цикла в
Profiler.Step("Loop #..."). - Дайте CV-вызовам добавить свои внутренние дочерние шаги.
- После ограниченного прогона выведите или проверьте результат
Profiler.
Профилирование своего кода
- Возьмите существующий профайлер или создайте/получите общий экземпляр.
- Оборачивайте дорогие блоки в
using (profiler.Step("Meaningful step name")). - Используйте достаточно стабильные названия шагов, чтобы их можно было агрегировать.
- Сравнивайте отдельно тайминги прогрева и тайминги стабильной работы.
Сравнение реализаций
- Сделайте один прогревочный проход, если API, модель или image pipeline инициализируются лениво.
- Запускайте сравниваемые реализации внутри именованных шагов профайлера.
- Смотрите не только на один замер, а на average/min/max/percentile.
- Если CPU-тайминги выглядят странно, дополнительно проверьте выделения памяти и перемещение данных.
Важные замечания по производительности
- Первые вызовы CV/ML могут включать создание модели, инициализацию захвата, выделение изображений или настройку OCR-движка.
- Прямой доступ через memory/span может быть заметно быстрее, чем API с по-пиксельным доступом.
- OSD/debug-отрисовка полезна, но её лучше измерять отдельно от самого детекта.
- Профилирование каждой итерации бесконечно долго само по себе может стать дорогим.
- Профайлеры хранят дерево таймингов в памяти, поэтому в long-running mini-app стоит ограничивать хранение данных или периодически делать reset/report.
Что лучше делать
- Лучше вызывать
EnableProfiling(), прежде чем писать свои таймеры для CV API. - Лучше использовать стабильные названия шагов, если вы агрегируете повторяющиеся тайминги цикла.
- Лучше отдельно измерять прогрев и отдельно — стабильный цикл.
- Лучше использовать
RenderPlainText()для быстрых логов, а для дашбордов — свои рендеры. - Лучше профилировать точечно вокруг подозрительно медленных мест.
Чего лучше избегать
- Не профилируйте бесконечные циклы без ограничений по времени.
- Не сравнивайте инициализацию первого вызова со стабильной рабочей фазой.
- Не включайте время input/mouse/OSD в чистое время CV detection, если это не сделано специально.
- Не делайте выводы по одному случайному замеру одной итерации.
- Не добавляйте дорогой логгинг внутрь tight loop во время измерения производительности.
Опорные термины для поиска
ICvAccessorEnableProfilingMiniProfilerMiniProfiler.StepRenderPlainTextIProfilerProviderProfilerProviderImageSearchRawColorCheckRawPixelSearchRawTextSearchRawCountPixelsProcessPixelsMLSearchRaw
Синонимы для поиска
- profiling
- performance
- MiniProfiler
- profiler step
- CV profiler
- render plain text
- image search timing
- pixel processing performance
- first call warmup
- steady state
- percentile
- profiling memory
Связанные карты
computer-vision/images.mdml/ai.mdosd/screen-overlay.mdscripting/runtime.md