Использование CoreML для вывода субрегионов Metal Texture

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

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

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

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

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

0 ответов

Другие вопросы по тегам