Core ML использует слишком много памяти при сохранении обновленной модели

В своей диссертации я использую обучение на устройстве для обновления модели, которая использует изображения (CVPixelBuffers) в качестве входных данных для прогнозирования.

Для обучения я использую 200 изображений размером 224x224. Есть два слоя, которые обновляются. Оба из них innerProducts (1000x12167 и 1x1000). Так как это много параметров, я попытался уменьшить их до одного слоя (1x12167), но это мало на что повлияло.

Как только запускается MLUpdateTask, использование памяти подскакивает до ⁓1,3 гигабайта (также с уменьшенными параметрами). Обучение завершено, но при сохранении и загрузке обновленной модели с помощью

finalContext.model.write(to: fileURL)
model = model_updatable(contentsOf: fileURL)

он прекращен из-за проблем с памятью. Что вызывает эту проблему и есть ли способ ее обойти? Будет ли иметь значение изменение ввода с изображений на мультимассивы?

Редактировать. Использование 20 изображений в качестве входных данных приводит к использованию только ⁓1,1 гигабайта во время обучения и позволяет приложению сохранять/загружать обновленную модель с общим максимальным использованием памяти 1,39 гигабайт. К сожалению, мне нужно ввести 200 изображений.

С уважением Нильс


person Nils    schedule 13.10.2020    source источник


Ответы (1)


Кто знает, что происходит... Core ML — это черный ящик, и мы не можем заглянуть внутрь, чтобы увидеть, что происходит.

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

Однако иногда использование памяти Core ML резко увеличивается из-за ошибки. Я предлагаю отправить отчет об ошибке в Apple.

person Matthijs Hollemans    schedule 13.10.2020
comment
Да, это самое грустное в этом.. все равно, спасибо! Я сделаю это как можно скорее. - person Nils; 13.10.2020