iOS с использованием Vision в реальном времени с ухудшением производительности логического вывода ARKit - PullRequest
0 голосов
/ 06 декабря 2018

Эта проблема может быть легко проиллюстрирована на примере кода Apple здесь .Я заметил, что промежуток времени, в течение которого начальная сеть v3 делала вывод / прогноз, дрейфовал с течением времени все выше и выше.Начиная примерно с 400 мс до 800-900 мс.У меня есть сравнительно глубокая сеть, которую я наблюдал в течение 1 секунды, чтобы сделать прогноз.Приложение становится довольно непригодным (в режиме реального времени и с AR).

Для быстрого и грязного профилирования я только что сделал тик / ток:

let requestHandler = VNImageRequestHandler(cvPixelBuffer: currentBuffer!, orientation: orientation)
    visionQueue.async {
        do {
            // Release the pixel buffer when done, allowing the next buffer to be processed.
            defer { self.currentBuffer = nil }
            self.tik = Date()
            try requestHandler.perform([self.classificationRequest])
            let tok = Date()
            let executionTime = tok.timeIntervalSince(self.tik)
            print("Total Execution time: \(executionTime*1000) ms")
        } catch {
            print("Error: Vision request failed with error \"\(error)\"")
        }

Это делает хорошую демонстрацию в течение 1 или 2 минут, но, похоже, наблюдается некоторое видимое падение кадра.Кто-нибудь видел это и какие-либо указатели о том, как отлаживать?Я новичок в этом, мне может понадобиться немного покопаться в одном из инструментов.Но было бы здорово, если бы кто-то там с глубоким опытом в такого рода отладке.Также будет хорошая дискуссия, если это действительно какая-то ошибка со стороны Apple.

Дополнительная информация : Я также выяснил причину, по которой пример кода решил запустить начальную функцию только на ЦП, не прибегая к использованию графического процессора для графики AR и SceneKit.В одном из моих прогонов я отключил это так, чтобы сеть могла использовать графический процессор.Похоже, что это создает сильную конкуренцию между AR и Vision, когда оба хотят мощности графического процессора.Впоследствии я также заметил, что перемещение телефона может сильно повлиять на FPS и время вывода из-за того, что AR пытается отследить телефон (плюс я также добавил обнаружение самолета, которое подчеркивало весь телефон, нагревая его).

1 Ответ

0 голосов
/ 20 декабря 2018

@ MatthijsHollemans.Я просмотрел видео сеанса WWDC 2018 "Видение с CoreML".Это кажется довольно простым, поскольку у них хороший API и пример кода, хотя это может быть не оптимально, но хорошая простая эвристика.Я постараюсь реализовать это.

Кроме того, это может иметь смысл:

1) определить, не стало ли изображение полностью темным (пользователь положил телефон лицевой стороной вверх)

2) Если обнаружение cnn обнаружитнет объекта, тогда он также должен перестать делать новый вывод.Поскольку, если новый объект перемещается в сцену, он запускает дельту изображения, чтобы повторно пробудить его.Это может сработать, если в вашей сети больше ложных срабатываний, чем ложных отрицательных.то есть очень стремиться делать прогнозы, чем нет.

...