создавать и обучать модели компьютерного зрения для определения положения автомобилей на изображениях с помощью Amazon SageMaker и Amazon Rekognition | Веб-сервисы Амазонки

создавать и обучать модели компьютерного зрения для определения положения автомобилей на изображениях с помощью Amazon SageMaker и Amazon Rekognition | Веб-сервисы Амазонки

Компьютерное зрение (CV) — одно из наиболее распространенных приложений машинного обучения (ML) и глубокого обучения. Варианты использования варьируются от беспилотных автомобилей, модерации контента на платформах социальных сетей, обнаружения рака и автоматического обнаружения дефектов. Апостол — это полностью управляемая служба, которая может выполнять задачи CV, такие как обнаружение объектов, обнаружение сегментов видео, модерация контента и многое другое, чтобы извлекать ценную информацию из данных без необходимости какого-либо предварительного опыта машинного обучения. В некоторых случаях может потребоваться более индивидуальное решение вместе с услугой для решения очень конкретной проблемы.

В этом посте мы рассмотрим области, в которых CV можно применять в случаях, когда важна поза объектов, их положение и ориентация. Одним из таких вариантов использования могут быть мобильные приложения для клиентов, где требуется загрузка изображения. Это может быть сделано из соображений соответствия или для обеспечения согласованного взаимодействия с пользователем и повышения вовлеченности. Например, на платформах онлайн-покупок угол, под которым товары показаны на изображениях, влияет на скорость покупки этого товара. Одним из таких случаев является определение положения автомобиля. Мы демонстрируем, как можно объединить известные решения машинного обучения с постобработкой для решения этой проблемы в облаке AWS.

Мы используем модели глубокого обучения для решения этой проблемы. Обучение алгоритмов машинного обучения для оценки позы требует большого опыта и пользовательских обучающих данных. Оба требования трудно и дорого получить. Поэтому мы представляем два варианта: один, не требующий каких-либо знаний в области машинного обучения и использующий Amazon Rekognition, и другой, использующий Создатель мудреца Амазонки для обучения и развертывания пользовательской модели машинного обучения. В первом варианте мы используем Amazon Rekognition для обнаружения колес автомобиля. Затем мы определяем ориентацию автомобиля по положению колес, используя систему, основанную на правилах. Во втором варианте мы обнаруживаем колеса и другие детали автомобиля с помощью Детектрон модель. Они снова используются для определения положения автомобиля с помощью кода на основе правил. Второй вариант требует опыта машинного обучения, но он также более настраиваемый. Его можно использовать для дальнейшей постобработки изображения, например, чтобы обрезать всю машину. Оба варианта можно обучить на общедоступных наборах данных. Наконец, мы покажем, как вы можете интегрировать это решение для определения позы автомобиля в существующее веб-приложение, используя такие сервисы, как Шлюз API Amazon и АМС Усиление.

Обзор решения

Следующая диаграмма иллюстрирует архитектуру решения.

Создавайте и обучайте модели компьютерного зрения для определения положения автомобилей на изображениях с помощью Amazon SageMaker и Amazon Rekognition | Веб-сервисы Amazon PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Решение состоит из имитации веб-приложения в Amplify, куда пользователь может загрузить изображение и вызвать либо модель Amazon Rekognition, либо пользовательскую модель Detectron для определения положения автомобиля. Для каждого варианта мы размещаем AWS Lambda функция за шлюзом API, который открыт для нашего фиктивного приложения. Мы настроили нашу функцию Lambda для работы либо с моделью Detectron, обученной в SageMaker, либо в Amazon Rekognition.

Предпосылки

Для этого прохождения у вас должны быть следующие предпосылки:

Создайте бессерверное приложение с помощью Amazon Rekognition

Наш первый вариант демонстрирует, как вы можете определять ориентацию автомобиля на изображениях с помощью Amazon Rekognition. Идея состоит в том, чтобы использовать Amazon Rekognition для определения местоположения автомобиля и его колес, а затем выполнить постобработку, чтобы определить ориентацию автомобиля на основе этой информации. Все решение развертывается с использованием Lambda, как показано на Репозиторий Github. Эта папка содержит два основных файла: файл Dockerfile, определяющий образ Docker, который будет запускаться в нашей функции Lambda, и файл app.py файл, который будет основной точкой входа функции Lambda:

def lambda_handler(event, context): body_bytes = json.loads(event["body"])["image"].split(",")[-1] body_bytes = base64.b64decode(body_bytes) rek = boto3.client('rekognition') response = rek.detect_labels(Image={'Bytes': body_bytes}, MinConfidence=80) angle, img = label_image(img_string=body_bytes, response=response) buffered = BytesIO() img.save(buffered, format="JPEG") img_str = "data:image/jpeg;base64," + base64.b64encode(buffered.getvalue()).decode('utf-8')

Функция Lambda ожидает событие, содержащее заголовок и тело, где тело должно быть изображением, которое необходимо пометить как декодированный объект base64. Учитывая изображение, Amazon Rekognition detect_labels функция вызывается из лямбда-функции с помощью Бото3. Функция возвращает одну или несколько меток для каждого объекта на изображении и сведения о ограничивающей рамке для всех обнаруженных меток объектов как часть ответа, а также другую информацию, такую ​​как достоверность назначенной метки, метки-предки обнаруженной метки, возможные псевдонимы для метки и категории, к которым принадлежит обнаруженная метка. На основе меток, возвращенных Amazon Rekognition, мы запускаем функцию label_image, который вычисляет угол автомобиля по обнаруженным колесам следующим образом:

n_wheels = len(wheel_instances) wheel_centers = [np.array(_extract_bb_coords(wheel, img)).mean(axis=0)
for wheel in wheel_instances] wheel_center_comb = list(combinations(wheel_centers, 2))
vecs = [(k, pair[0] - pair[1]) for k,pair in enumerate(wheel_center_comb)]
vecs = sorted(vecs, key = lambda vec: np.linalg.norm(vec[1])) vec_rel = vecs[1] if n_wheels == 3 else vecs[0]
angle = math.degrees(math.atan(vec_rel[1][1]/vec_rel[1][0])) wheel_centers_rel = [tuple(wheel.tolist()) for wheel in
wheel_center_comb[vec_rel[0]]]

Обратите внимание, что приложение требует, чтобы на изображении присутствовал только один автомобиль, и возвращает ошибку, если это не так. Однако постобработку можно адаптировать для предоставления более детальных описаний ориентации, охвата нескольких автомобилей или вычисления ориентации более сложных объектов.

Улучшить обнаружение колес

Чтобы еще больше повысить точность обнаружения колеса, вы можете использовать Пользовательские ярлыки Amazon Rekognition. Подобно тонкой настройке с помощью SageMaker для обучения и развертывания пользовательской модели машинного обучения, вы можете принести свои собственные размеченные данные, чтобы Amazon Rekognition мог создать для вас пользовательскую модель анализа изображений всего за несколько часов. С помощью пользовательских меток Rekognition вам нужен только небольшой набор обучающих изображений, которые относятся к вашему варианту использования, в данном случае изображения автомобилей с определенными углами, потому что он использует существующие возможности Amazon Rekognition для обучения на десятках миллионов изображений по всему миру. много категорий. Пользовательские метки Rekognition можно интегрировать всего несколькими щелчками мыши и небольшой адаптацией к функции Lambda, которую мы используем для стандартного решения Amazon Rekognition.

Обучите модель с помощью учебного задания SageMaker

Во втором варианте мы обучаем пользовательскую модель глубокого обучения на SageMaker. Мы используем Фреймворк Detectron2 для сегментации автомобильных запчастей. Затем эти сегменты используются для определения положения автомобиля.

Платформа Detectron2 — это библиотека, предоставляющая современные алгоритмы обнаружения и сегментации. Detectron предоставляет множество моделей Mask R-CNN, которые были обучены на известном наборе данных COCO (Общие объекты в контексте). Чтобы построить нашу модель обнаружения автомобильных объектов, мы используем трансферное обучение для точной настройки предварительно обученной модели Mask R-CNN на сегментация автомобильных запчастей набор данных. Этот набор данных позволяет нам обучить модель, которая может обнаруживать колеса, а также другие детали автомобиля. Эта дополнительная информация может быть дополнительно использована в расчетах угла автомобиля относительно изображения.

Набор данных содержит аннотированные данные об автомобильных деталях, которые будут использоваться для обнаружения объектов и задач семантической сегментации: около 500 изображений седанов, пикапов и внедорожников (внедорожников), сделанных в нескольких видах (спереди, сзади и сбоку). Каждое изображение аннотировано 18 масками экземпляров и ограничивающими рамками, представляющими различные части автомобиля, такие как колеса, зеркала, фары, переднее и заднее стекло. Мы изменили базовые аннотации колес таким образом, чтобы каждое колесо считалось отдельным объектом, а не рассматривало все доступные колеса на изображении как один объект.

МЫ ИСПОЛЬЗУЕМ Простой сервис хранения Amazon (Amazon S3) для хранения набора данных, используемого для обучения модели Detectron, вместе с артефактами обученной модели. Более того, контейнер Docker, который запускается в функции Lambda, хранится в Реестр Amazon Elastic Container (Амазон ЭКР). Контейнер Docker в функции Lambda нужен для включения необходимых библиотек и зависимостей для запуска кода. В качестве альтернативы мы могли бы использовать Лямбда-слои, но она ограничена квотой размера пакета развертывания в разархивированном виде, равной 250 МБ, и к функции Lambda можно добавить не более пяти уровней.

Наше решение построено на SageMaker: мы расширяем готовые Контейнеры SageMaker Docker для PyTorch для запуска нашего пользовательского PyTorch тренировочный код. Затем мы используем SageMaker Python SDK для включения обучающего изображения в средство оценки SageMaker PyTorch, как показано в следующих фрагментах кода:

d2_estimator = Estimator( image_uri=training_image_uri, role=role, sagemaker_session=sm_session, instance_count=1, instance_type=training_instance, output_path=f"s3://{session_bucket}/{prefix_model}", base_job_name=f"detectron2") d2_estimator.fit({ "training": training_channel, "validation": validation_channel, }, wait=True)

Наконец, мы начинаем обучающую работу, вызывая fit() на созданном оценщике PyTorch. По завершении обучения артефакт обученной модели сохраняется в корзине сеансов в Amazon S3 для использования в конвейере логических выводов.

Разверните модель с помощью SageMaker и конвейеров логического вывода.

Мы также используем SageMaker для размещения конечной точки логического вывода, которая запускает нашу пользовательскую модель Detectron. Полная инфраструктура, используемая для развертывания нашего решения, предоставляется с помощью AWS CDK. Мы можем разместить нашу пользовательскую модель через Конечная точка SageMaker в реальном времени позвонив по телефону deploy на оценщике PyTorch. Это второй раз, когда мы расширяем готовый контейнер SageMaker PyTorch, чтобы включить PyTorch Detectron. Мы используем его для запуска сценария вывода и размещения нашей обученной модели PyTorch следующим образом:

model = PyTorchModel( name="d2-sku110k-model", model_data=d2_estimator.model_data, role=role, sagemaker_session=sm_session, entry_point="predict.py", source_dir="src", image_uri=serve_image_uri, framework_version="1.6.0") predictor = model.deploy( initial_instance_count=1, instance_type="ml.g4dn.xlarge", endpoint_name="detectron-endpoint", serializer=sagemaker.serializers.JSONSerializer(), deserializer=sagemaker.deserializers.JSONDeserializer(), wait=True)

Обратите внимание, что для развертывания мы использовали графический процессор ml.g4dn.xlarge, потому что это самый маленький из доступных графических процессоров, которого достаточно для этой демонстрации. Два компонента должны быть настроены в нашем сценарий вывода: загрузка и обслуживание модели. Функция model_fn() используется для загрузки обученной модели, которая является частью размещенного контейнера Docker, а также может быть найдена в Amazon S3 и возвращает объект модели, который можно использовать для обслуживания модели следующим образом:

def model_fn(model_dir: str) -> DefaultPredictor: for p_file in Path(model_dir).iterdir(): if p_file.suffix == ".pth": path_model = p_file cfg = get_cfg() cfg.MODEL.WEIGHTS = str(path_model) return DefaultPredictor(cfg)

Функция predict_fn() выполняет прогноз и возвращает результат. Помимо использования нашей обученной модели, мы используем предварительно обученную версию модели Mask R-CNN, обученную на наборе данных COCO, для извлечения основного автомобиля на изображении. Это дополнительный шаг постобработки для работы с изображениями, на которых присутствует более одного автомобиля. См. следующий код:

def predict_fn(input_img: np.ndarray, predictor: DefaultPredictor) -> Mapping: pretrained_predictor = _get_pretraind_model() car_mask = get_main_car_mask(pretrained_predictor, input_img) outputs = predictor(input_img) fmt_out = { "image_height": input_object.shape[0], "image_width": input_object.shape[1], "pred_boxes": outputs["instances"].pred_boxes.tensor.tolist(), "scores": outputs["instances"].scores.tolist(), "pred_classes": outputs["instances"].pred_classes.tolist(), "car_mask": car_mask.tolist() } return fmt_out

Подобно решению Amazon Rekognition, ограничивающие рамки, предсказанные для wheel класса фильтруются из выходных данных обнаружения и передаются в модуль постобработки для оценки положения автомобиля относительно выходных данных.

Наконец, мы также улучшили постобработку для решения Detectron. Он также использует сегменты различных частей автомобиля, чтобы вывести решение. Например, всякий раз, когда обнаруживается передний бампер, но не задний бампер, предполагается, что у нас есть вид автомобиля спереди, и вычисляется соответствующий угол.

Подключите свое решение к веб-приложению

Шаги для подключения конечных точек модели к Amplify следующие:

  • Клонируйте репозиторий приложений, созданный стеком AWS CDK, с именем car-angle-detection-website-repo. Убедитесь, что вы ищете его в регионе, который вы использовали для развертывания.
  • Скопируйте конечные точки шлюза API для каждой из развернутых функций Lambda в index.html файл в предыдущем репозитории (есть заполнители, где необходимо разместить конечную точку). Следующий код является примером того, как выглядит этот раздел файла .html:
<td align="center" colspan="2">
<select id="endpoint">
<option value="https://ey82aaj8ch.execute-api.eu-central-1.amazonaws.com/prod/"> Amazon Rekognition</option>
<option value="https://nhq6q88xjg.execute-api.eu-central-1.amazonaws.com/prod/"> Amazon SageMaker Detectron</option>
</select>
<input class="btn" type="file" id="ImageBrowse" />
<input class="btn btn-primary" type="submit" value="Upload">
</td>

  • Сохраните файл HTML и отправьте изменение кода в удаленную основную ветку.

Это обновит файл HTML в развертывании. Теперь приложение готово к использованию.

  • Перейдите к консоли Amplify и найдите созданный проект.

URL-адрес приложения будет виден после завершения развертывания.

  • Перейдите по URL-адресу и получайте удовольствие от пользовательского интерфейса.

Создавайте и обучайте модели компьютерного зрения для определения положения автомобилей на изображениях с помощью Amazon SageMaker и Amazon Rekognition | Веб-сервисы Amazon PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Заключение

Поздравляем! Мы развернули полную бессерверную архитектуру, в которой использовали Amazon Rekognition, но также предоставили возможность для вашей собственной пользовательской модели, причем этот пример доступен на GitHub. Если в вашей команде нет опыта машинного обучения или недостаточно пользовательских данных для обучения модели, вы можете выбрать вариант, использующий Amazon Rekognition. Если вам нужен больший контроль над вашей моделью, дополнительная ее настройка и достаточно данных, вы можете выбрать решение SageMaker. Если у вас есть команда специалистов по данным, они также могут захотеть дополнительно улучшить модели и выбрать более индивидуальный и гибкий вариант. Вы можете поместить функцию Lambda и шлюз API позади своего веб-приложения, используя любой из двух вариантов. Вы также можете использовать этот подход для другого варианта использования, для которого вы, возможно, захотите адаптировать код.

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

Как всегда, AWS приветствует обратную связь. Пожалуйста, отправьте любые комментарии или вопросы.


Об авторах

Создавайте и обучайте модели компьютерного зрения для определения положения автомобилей на изображениях с помощью Amazon SageMaker и Amazon Rekognition | Веб-сервисы Amazon PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Майкл Валлнер является старшим консультантом по данным и искусственному интеллекту в AWS Professional Services и увлечен тем, чтобы помочь клиентам в их путешествии стать управляемыми данными и AWSome в облаке AWS. Кроме того, ему нравится мыслить масштабно с клиентами, чтобы внедрять инновации и изобретать для них новые идеи.

Создавайте и обучайте модели компьютерного зрения для определения положения автомобилей на изображениях с помощью Amazon SageMaker и Amazon Rekognition | Веб-сервисы Amazon PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Амна Наджми является специалистом по данным в AWS Professional Services. Она увлечена тем, что помогает клиентам внедрять инновации с помощью технологий больших данных и искусственного интеллекта, чтобы использовать бизнес-ценность и идеи из данных. У нее есть опыт работы с платформой данных и проектами AI/ML в сфере здравоохранения и медико-биологических наук. В свободное время она занимается садоводством и путешествует по новым местам.

Создавайте и обучайте модели компьютерного зрения для определения положения автомобилей на изображениях с помощью Amazon SageMaker и Amazon Rekognition | Веб-сервисы Amazon PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Дэвид Зауэрвейн является старшим специалистом по данным в AWS Professional Services, где помогает клиентам в их путешествии в области искусственного интеллекта и машинного обучения в облаке AWS. Дэвид занимается цифровыми двойниками, прогнозированием и квантовыми вычислениями. Он имеет докторскую степень по теоретической физике Университета Инсбрука, Австрия. Он также был докторантом и постдокторантом в Институте Макса Планка по квантовой оптике в Германии. В свободное время любит читать, кататься на лыжах и проводить время с семьей.

Создавайте и обучайте модели компьютерного зрения для определения положения автомобилей на изображениях с помощью Amazon SageMaker и Amazon Rekognition | Веб-сервисы Amazon PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Шрикришна Чайтанья Кондуру является старшим специалистом по данным в службе AWS Professional. Он поддерживает клиентов в создании прототипов и вводе в эксплуатацию их приложений машинного обучения на AWS. Шрикришна занимается компьютерным зрением и НЛП. Он также возглавляет инициативы по проектированию платформы машинного обучения и идентификации вариантов использования для клиентов из различных отраслевых вертикалей. Шрикришна имеет степень магистра биомедицинской инженерии в Рейнско-Вестфальском техническом университете Ахена, Германия, со специализацией в области медицинской визуализации.

Создавайте и обучайте модели компьютерного зрения для определения положения автомобилей на изображениях с помощью Amazon SageMaker и Amazon Rekognition | Веб-сервисы Amazon PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Ахмед Мансур является специалистом по данным в AWS Professional Services. Он оказывает техническую поддержку клиентам на протяжении всего их пути в области искусственного интеллекта и машинного обучения в облаке AWS. Ахмед фокусируется на применении НЛП в белковой области наряду с RL. Он имеет степень доктора технических наук Мюнхенского технического университета, Германия. В свободное время он любит ходить в спортзал и играть со своими детьми.

Отметка времени:

Больше от Машинное обучение AWS