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

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

Комп’ютерне бачення (CV) є одним із найпоширеніших застосувань машинного навчання (ML) і глибокого навчання. Варіанти використання варіюються від безпілотних автомобілів, модерації вмісту на платформах соціальних мереж, виявлення раку та автоматичного виявлення дефектів. Amazon Rekognition – це повністю керована служба, яка може виконувати такі завдання CV, як виявлення об’єктів, визначення сегментів відео, модерація вмісту тощо, щоб витягувати інформацію з даних без попереднього досвіду ML. У деяких випадках разом із послугою може знадобитися більш спеціальне рішення для вирішення дуже конкретної проблеми.

У цій публікації ми розглядаємо області, де CV можна застосувати для випадків, коли поза об’єктів, їх положення та орієнтація важливі. Одним із таких випадків використання можуть бути орієнтовані на клієнта мобільні програми, де потрібне завантаження зображення. Це може бути з міркувань відповідності або для забезпечення узгодженого взаємодії з користувачем і покращення взаємодії. Наприклад, на платформах онлайн-магазинів кут, під яким товари показано на зображеннях, впливає на швидкість купівлі цього товару. Одним із таких випадків є визначення положення автомобіля. Ми демонструємо, як можна поєднати добре відомі рішення ML із постобробкою, щоб вирішити цю проблему в хмарі AWS.

Для вирішення цієї проблеми ми використовуємо моделі глибокого навчання. Навчання алгоритмів ML для оцінки пози потребує великого досвіду та спеціальних навчальних даних. Обидві вимоги важко та дорого виконати. Тому ми представляємо два варіанти: один, який не потребує досвіду ML і використовує Amazon Rekognition, і інший, який використовує Amazon SageMaker для навчання та розгортання спеціальної моделі ML. У першому варіанті ми використовуємо Amazon Rekognition для визначення коліс автомобіля. Потім ми визначаємо орієнтацію автомобіля з положення коліс за допомогою системи на основі правил. У другому варіанті ми виявляємо колеса та інші деталі автомобіля за допомогою Детектрон модель. Вони знову використовуються для визначення положення автомобіля за допомогою коду на основі правил. Другий варіант потребує досвіду ML, але його також можна налаштувати. Його можна використовувати для подальшої постобробки зображення, наприклад, щоб вирізати весь автомобіль. Обидва варіанти можна навчити на загальнодоступних наборах даних. Нарешті, ми покажемо, як можна інтегрувати це рішення для виявлення пози автомобіля в наявну веб-програму за допомогою таких служб, як API -шлюз Amazon та AWS Amplify.

Огляд рішення

Наступна діаграма ілюструє архітектуру рішення.

Створюйте та навчайте моделі комп’ютерного зору для визначення положень автомобіля на зображеннях за допомогою Amazon SageMaker і Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

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

Передумови

Для цього покрокового керівництва ви повинні мати такі передумови:

Створіть безсерверну програму за допомогою Amazon Rekognition

Наш перший варіант демонструє, як ви можете визначити орієнтацію автомобіля на зображеннях за допомогою Amazon Rekognition. Ідея полягає в тому, щоб використовувати Amazon Rekognition для визначення розташування автомобіля та його коліс, а потім виконати постобробку, щоб отримати орієнтацію автомобіля з цієї інформації. Усе рішення розгортається за допомогою Lambda, як показано на Сховище Github. Ця папка містить два основні файли: файл Docker, який визначає образ 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 функція викликається з функції Lambda за допомогою Бото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 Rekogmination. Подібно до тонкого налаштування за допомогою SageMaker для навчання та розгортання спеціальної моделі ML, ви можете принести власні дані з мітками, щоб Amazon Rekognition міг створити для вас спеціальну модель аналізу зображення всього за кілька годин. З користувацькими мітками Rekognition вам потрібен лише невеликий набір навчальних зображень, які відповідають вашому випадку використання, у цьому випадку зображення автомобілів із певними ракурсами, оскільки він використовує наявні можливості в Amazon Rekognition щодо навчання на десятках мільйонів зображень по всьому світу. багато категорій. Спеціальні мітки Rekognition можна інтегрувати лише кількома клацаннями миші та невеликими адаптаціями до функції Lambda, яку ми використовуємо для стандартного рішення Amazon Rekognition.

Навчіть модель за допомогою навчального завдання SageMaker

У нашому другому варіанті ми навчаємо спеціальну модель глибокого навчання на SageMaker. Ми використовуємо Framework Detectron2 для сегментації автомобільних запчастин. Потім ці сегменти використовуються для визначення положення автомобіля.

Платформа Detectron2 — це бібліотека, яка надає найсучасніші алгоритми виявлення та сегментації. Detectron надає різноманітні моделі Mask R-CNN, які були навчені на відомому наборі даних COCO (Common objects in Context). Щоб побудувати нашу модель виявлення автомобільних об’єктів, ми використовуємо навчання передачі для точного налаштування попередньо підготовленої моделі Mask R-CNN на сегментація автозапчастин набір даних. Цей набір даних дозволяє нам навчити модель, яка може виявляти колеса, а також інші частини автомобіля. Цю додаткову інформацію можна додатково використовувати в обчисленнях кута автомобіля відносно зображення.

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

Ми використовуємо Служба простого зберігання Amazon (Amazon S3), щоб зберігати набір даних, який використовується для навчання моделі Detectron разом із навченими артефактами моделі. Крім того, контейнер Docker, який працює у функції Lambda, зберігається в Реєстр контейнерів Amazon Elastic (Amazon ECR). Контейнер Docker у функції Lambda потрібен для включення необхідних бібліотек і залежностей для виконання коду. Ми могли б альтернативно використати Лямбда шари, але він обмежений розархівованою квотою розміру пакету для розгортання 250 МБ, а до функції Lambda можна додати максимум п’ять рівнів.

Наше рішення побудовано на SageMaker: ми розширюємо попередньо зібраний Контейнери SageMaker Docker щоб PyTorch запускав наш власний PyTorch код навчання. Далі ми використовуємо SDK SageMaker Python, щоб обернути навчальне зображення в засіб оцінки 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. Ми можемо розмістити нашу спеціальну модель через a Кінцева точка реального часу 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 Gateway для кожної з розгорнутих функцій 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 Web Services PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Висновок

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

Перевагою цієї безсерверної архітектури є можливість повної заміни будівельних блоків. Можливості майже безмежні. Отже, починайте вже сьогодні!

Як завжди, AWS раді відгукам. Надішліть будь-які коментарі чи запитання.


Про авторів

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

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

Створюйте та навчайте моделі комп’ютерного зору для визначення положень автомобіля на зображеннях за допомогою Amazon SageMaker і Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Девід Зауервейн є старшим спеціалістом із обробки даних у відділі професійних послуг AWS, де він допомагає клієнтам у їхній подорожі AI/ML у хмарі AWS. Девід зосереджується на цифрових близнюках, прогнозуванні та квантових обчисленнях. Він має ступінь доктора філософії з теоретичної фізики в Університеті Інсбрука, Австрія. Він також був доктором і постдокторантом в Інституті квантової оптики Макса Планка в Німеччині. У вільний час він любить читати, кататися на лижах і проводити час з сім'єю.

Створюйте та навчайте моделі комп’ютерного зору для визначення положень автомобіля на зображеннях за допомогою Amazon SageMaker і Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Шрікрішна Чайтанья Кондуру є старшим спеціалістом із обробки даних у відділі послуг AWS Professional. Він підтримує клієнтів у створенні прототипів і введенні в дію їхніх додатків ML на AWS. Шрікрішна зосереджується на комп'ютерному зорі та НЛП. Він також очолює ініціативи з розробки платформи машинного навчання та ідентифікації варіантів використання для клієнтів у різних галузевих галузях. Шрікрішна має ступінь магістра біомедичної інженерії в Аахенському університеті RWTH, Німеччина, з фокусом на медичній візуалізації.

Створюйте та навчайте моделі комп’ютерного зору для визначення положень автомобіля на зображеннях за допомогою Amazon SageMaker і Amazon Rekognition | Amazon Web Services PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Ахмед Мансур є спеціалістом з обробки даних в AWS Professional Services. Він надає технічну підтримку клієнтам під час їх подорожі AI/ML у хмарі AWS. Ахмед зосереджується на застосуванні НЛП до білкового домену разом із RL. Він має ступінь доктора інженерних наук Мюнхенського технічного університету, Німеччина. У вільний час він любить ходити в спортзал і грати зі своїми дітьми.

Часова мітка:

Більше від AWS Машинне навчання