Классификация изображений Sagemaker: Лучший способ сделать вывод на многих изображениях в S3? - PullRequest
0 голосов
/ 26 апреля 2018

Я обучил модель с помощью встроенного образа док-станции RESnet18, и теперь я хочу развернуть модель в конечной точке и классифицировать ~ 1 миллион изображений. Все мои обучающие, проверочные и тестовые изображения хранятся на S3 в формате RecordIO (конвертируется с im2rec.py ). Согласно документам :

Алгоритм классификации изображений Amazon SageMaker поддерживает типы контента RecordIO (application / x-recordio) и изображений (application / x-image) для обучения. Алгоритм поддерживает только application / x-image для вывода.

Так что я не могу сделать вывод о моих тренировочных данных в формате RecordIO. Чтобы преодолеть это, я скопировал все необработанные изображения .jpg (~ 2 ГБ) на мой экземпляр Sagemaker Jupyter Notebook и выполнил вывод по одному следующим образом:

img_list = os.listdir('temp_data') # list of all ~1,000,000 images

for im in img_list:
    with open('temp_data/'+im, 'rb') as f:
        payload = f.read()
        payload = bytearray(payload)
    response = runtime.invoke_endpoint(EndpointName=endpoint_name, 
                                       ContentType='application/x-image', 
                                       Body=payload)

    etc...

Само собой разумеется, что передача всех данных на мой экземпляр Notebook заняла много времени, и я предпочел бы не делать этого перед запуском логического вывода. Почему классификация изображений SageMaker не поддерживает RecordIO для вывода? И что еще более важно, каков наилучший способ сделать вывод на многих изображениях, не перемещая их из S3?

Ответы [ 2 ]

0 голосов
/ 17 июля 2018

Amazon SageMaker теперь поддерживает пакетное прогнозирование, которое больше подходит для вашего варианта использования:

0 голосов
/ 12 июля 2018

Формат RecordIO предназначен для упаковки большого количества изображений в один файл, поэтому я не думаю, что он будет полезен для прогнозирования отдельных изображений.

Когда дело доходит до прогноза, вам определенно не нужно копировать изображения в экземпляр ноутбука или в S3. Вам просто нужно загрузить их из любого места и включить их в свои запросы на прогнозирование.

Если вы хотите прогнозирование на основе HTTP, вот ваши варианты:

1) Используйте API SageMaker SDK Predictor.predict () на любом компьютере (если он имеет надлежащие учетные данные AWS) https://github.com/aws/sagemaker-python-sdk

2) Используйте API-интерфейс invoke_endpoint () AWS Python SDK (он же boto3) на любом компьютере (при условии, что он имеет надлежащие учетные данные AWS)

Вы можете даже создать простой сервис для выполнения предварительной или последующей обработки с помощью Lambda. Вот пример: https://medium.com/@julsimon/using-chalice-to-serve-sagemaker-predictions-a2015c02b033

Если вы хотите прогнозировать партии: Самый простой способ - извлечь обученную модель из SageMaker, написать несколько строк специального кода MXNet, чтобы загрузить его и выполнить все ваши прогнозы. Вот пример: https://mxnet.incubator.apache.org/tutorials/python/predict_image.html

Надеюсь, это поможет.

...