VNCoreMLModel время медленного запуска - PullRequest
0 голосов
/ 01 ноября 2018

У кого-нибудь были проблемы с первым звонком на VNImageRequestHandler?

Я тестирую VNCoreMLModel с яблоками MobileNet.mlmodel, и первый запрос, который я делаю через VNImageRequestHandler(ciImage: sourceImage, orientation: imageOrientation), занимает около 1,9 секунды, но каждый последующий запрос занимает 0,213 секунды. Я генерирую запрос, просто выполнив: VNCoreMLRequest(model: model, completionHandler: { ... }. Я не устанавливаю CIContext при создании запрошенного обработчика (VNImageRequestHandler(ciImage: sourceImage, orientation: imageOrientation)), вместо этого, позволяю системе обрабатывать это, что, как я думал, приведет к дополнительным затратам, но при указании одного в VNImageRequestHandler я вижу, что запрос игнорируется что CIContext.

Так что на самом деле мой вопрос в том, что может быть причиной разницы во времени между первым и вторым запросами.

Ура!

1 Ответ

0 голосов
/ 01 ноября 2018

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

  • Веса модели должны быть загружены в память и преобразованы в формат, используемый ядрами графического процессора.
  • Необходимо загрузить ядра графического процессора.
  • Графический процессор должен «попасть в канавку». Для скоростных тестов необходимо сначала выполнить несколько проходов по модели, чтобы прогреть графический процессор, а затем выполнить измерения.
  • В самый первый раз, когда вы используете ядро ​​MPS после установки приложения, байт-код Metal должен быть скомпилирован с определенным машинным кодом для GPU на вашем устройстве.

Если модель работает на ЦП или Neural Engine, вероятно, необходимы аналогичные шаги инициализации. Трудно сказать, что именно происходит, потому что Core ML скрывает все это.

...