Требуется ли нормализация значения каждого пикселя в UIImage перед передачей его в модель CoreML? - PullRequest
0 голосов
/ 25 марта 2019

Мы преобразовали модель pytorch в CoreML, используя https://pytorch.org/tutorials/advanced/ONNXLive.html. Мы изменили размеры нашего изображения до необходимых спецификаций перед тем, как ввести это изображение в модель CoreML.Несмотря на это, выходные данные модели CoreML дают разные (и неверные) результаты модели pytorch.

Наша модель машинного обучения используется для идентификации конкретного объекта на изображении.Перед отправкой изображения в нашу модель мы нарезаем его на массив UIImage.Используя цикл for, мы изменяем размер каждого изображения в массиве перед отправкой каждого из них в модель.Модель принимает UIImage в качестве входных данных и возвращает целое число 0 (объект не обнаружен) или 1 (объект обнаружен) результат.Если возвращаемый результат равен 1, мы выделяем это конкретное изображение в массиве.После окончания цикла for мы объединяем элементы массива, чтобы сформировать новый UIImage с выделением части его области (указывая, какие позиции содержат объект).

Модель отлично работает в pytorch, но после того, как мы конвертировали ее в CoreML и использовали ее со Swift, мы столкнулись с проблемой, заключающейся в том, что модель идентифицирует большинство изображений из массива с выводом «1» (дляНапример, если мы нарежем изображение на 400 меньших кусков и передадим каждый кусочек в модель, 356 из 400 результатов будут равны «1».)

Мы подозреваем, что причиной этой ошибки является то, что мы не нормализовализначение каждого пикселя входного изображения, прежде чем мы отправим его в модель.Нужно ли нормализовать UIImage при использовании CoreML, и если да, то как мы должны это сделать?

...