mlmodel не работает должным образом после преобразования из Caffe с помощью coremltools - PullRequest
0 голосов
/ 28 мая 2020

Я хочу преобразовать эту модель NSFW в модель CoreML. Что я сделал:

  1. Скачать Anaconda 2.7
  2. Установить coremltools
  3. Конвертировать эту модель yahoo nsfw отсюда - https://github.com/yahoo/open_nsfw/tree/master/nsfw_model но я не уверен, что это Caffe v1, потому что в документации Apple указано, что поддерживается только эта версия. В любом случае…
  4. Я использую эти команды для конвертации, и они конвертировались без каких-либо предупреждений.

    coreml_model = coremltools.converters.caffe.convert (('resnet_50_1by2_nsfw.caffemodel', 'deploy.prototxt'), image_input_names = 'data') coreml_model.save ('nsfw2.mlmodel')

  5. Я импортировал эту модель в свой проект, и снова все в порядке.
  6. Я подготовил изображения размером 224x224 и использовал фреймворк Vision, такой как VNImageRequestHandler с cgImage и et c.

Но!

Все изображения возвращают один и тот же результат

[<VNCoreMLFeatureValueObservation: 0x281b1daa0> 2E00F417-95C0-4AA1-A621-A0945BB5E095 requestRevision=1 confidence=1.000000 "prob" - "MultiArray : Double 1 x 1 x 2 x 1 x 1 array" (1.000000)]

Как я могу отладить эту проблему и выяснить, что не так?

enter image description here

1 Ответ

0 голосов
/ 28 мая 2020

Может вы смотрите только на непослушные картинки? ; -)

Вероятно, это препроцессинг изображения. Вы не указали никаких параметров предварительной обработки, в то время как модели Caffe обычно нормализуются с использованием Imag eNet mean / std. Обратитесь к моему сообщению в блоге для получения дополнительной информации: https://machinethink.net/blog/help-core-ml-gives-wrong-output/

Однако я не вижу никаких параметров нормализации в вашем deploy.prototxt, поэтому, возможно, это не так.

Как бы это отладить: удалить все, кроме первого слоя, из модели Caffe и преобразовать в Core ML. Запустите эту однослойную модель как в Caffe, так и в Core ML и сравните результаты. Если они разные, что-то не так с тем, как вы загружаете или обрабатываете входные данные.

...