Использование CoreML для вывода субрегионов Metal Texture - PullRequest
0 голосов
/ 26 июня 2018

Я создаю приложение для iOS, которое отображает кадры с камеры на металлические текстуры в режиме реального времени.Я хочу использовать CoreML для выполнения переноса стиля в субрегионах металлической текстуры (представьте, что выход камеры представлен в виде сетки 2x2, где каждый из 4 квадратов используется в качестве входных данных для сети передачи стилей, а выходные данные вставляются обратно в отображаемую текстуру).Я пытаюсь выяснить, как наилучшим образом использовать CoreML внутри конвейера Metal, чтобы заполнить неперекрывающиеся субрегионы текстуры выходными данными mlmodel (надеюсь, без разложения mlmodel в MPSNNGraph).Можно ли напрямую передать MTLTexture или MTLBuffer в модель coreML?Я хотел бы по возможности избегать преобразований форматов (для скорости).

Мой mlmodel принимает CVPixelBuffers на своих входах и выходах.Можно ли сделать так, чтобы вместо этого использовались MTLTextures?

Первое, что я попробовал, было: разрезать данный буфер сэмплов на субрегионы (путем копирования пиксельных данных тьфу), выводить на каждый субрегион, а затем вставлять их вместе вновый буфер сэмплов, который затем был преобразован в MTLTexture и отображен.Этот подход вообще не использовал преимущества металла, так как текстуры не создавались до вывода.В нем также было много циклических операций преобразования / копирования / вставки, которые замедляют все.

Второе, что я попробовал, было: отправить данные камеры напрямую в MTLTexture, вывести субрегионы буфера семплов, вставить втекущая отображаемая текстура с MTLTexture.replace (region: ... withBytes :) для каждого субрегиона.Однако MTLTexture.replace () использует процессор и недостаточно быстр для живого видео.

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

...