Захист людей від небезпечних зон через віртуальні кордони за допомогою комп’ютерного зору

Вихідний вузол: 807925

Оскільки компанії вітають на робочому місці більше автономних роботів та іншого важкого обладнання, ми повинні забезпечити безпечну роботу обладнання навколо товаришів по команді. У цій публікації ми покажемо вам, як побудувати віртуальний кордон за допомогою комп’ютерного зору та Глибокий об'єктив AWS, відеокамера AWS з підтримкою глибокого навчання, розроблена для розробників для навчання машинному навчанню (ML). Використовуючи методи машинного навчання в цій публікації, ви можете побудувати віртуальні межі для обмежених зон, які автоматично вимикають обладнання або звукові сигнали, коли люди наближаються.

Для цього проекту ви будете навчати користувацьку модель виявлення об’єктів за допомогою Amazon SageMaker і розгорнути модель на пристрої AWS DeepLens. Виявлення об’єктів — це алгоритм ML, який приймає зображення як вхідні дані та ідентифікує об’єкти та їхнє розташування в зображенні. На додаток до рішень віртуальних кордонів, ви можете застосувати методи, які вивчаються в цій публікації, коли вам потрібно визначити, де певні об’єкти знаходяться всередині зображення, або підрахувати кількість екземплярів потрібного об’єкта на зображенні, наприклад, підрахувати елементи в кошику для зберігання або на роздрібній полиці.

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

Покрокове керівництво включає наступні кроки:

  1. Підготуйте свій набір даних для подачі в алгоритм ML.
  2. Навчайте модель за допомогою Amazon SageMaker.
  3. Тестова модель із користувацькими зонами обмеження.
  4. Розгорніть рішення на AWS DeepLens.

Ми також обговорюємо інші реальні випадки використання, де ви можете застосувати це рішення.

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

Передумови

Щоб завершити це покрокове керівництво, ви повинні мати такі передумови:

Підготуйте свій набір даних для подачі в алгоритм ML

У цій публікації використовується алгоритм ML, який називається моделлю виявлення об’єктів, щоб створити рішення, яке визначає, чи перебуває людина в спеціальній обмеженій зоні. Ви використовуєте загальнодоступні Набір даних виявлення пішоходів доступний на Kaggle, який містить понад 2,000 зображень. Цей набір даних має мітки для людських і схожих на людину об’єктів (наприклад, манекенів), тому навчена модель може точніше розрізняти реальних людей та картонних реквізитів чи статуй.

Наприклад, наведені нижче зображення є прикладами виявлення робітника-будівельника та якщо він знаходиться в зоні користувацького обмеження (червоний контур).

Щоб почати навчання моделі, спочатку створіть відро S3 для зберігання даних про тренування та вихідних даних моделі. Для проектів AWS DeepLens назви сегментів S3 мають починатися з префікса deeplens-. Ви використовуєте ці дані для навчання моделі за допомогою SageMaker, повністю керованої служби, яка надає можливість швидко створювати, навчати та розгортати моделі машинного навчання.

Навчайте модель за допомогою Amazon SageMaker

Ви використовуєте блокноти SageMaker Jupyter як середовище розробки для навчання моделі. Jupyter Notebook — це веб-додаток з відкритим вихідним кодом, який дозволяє створювати документи, які містять живий код, рівняння, візуалізації та описовий текст, і ділитися ними. Для цієї публікації ми надаємо Train_Object_Detection_People_DeepLens.ipynb, повний зошит, щоб ви могли читати.

Щоб створити користувацьку модель виявлення об’єктів, вам потрібно використовувати екземпляр навчального завдання з підтримкою графічного процесора (GPU). Графічні процесори чудово підходять для розпаралелювання обчислень, необхідних для навчання нейронної мережі. Хоча сам блокнот є одним екземпляром ml.t2.medium, навчальна робота спеціально використовує екземпляр ml.p2.xlarge. Щоб отримати доступ до екземпляра навчального завдання з підтримкою GPU, потрібно подати заявку на збільшення ліміту послуг до Центру підтримки AWS.

Отримавши збільшення ліміту, виконайте такі дії, щоб створити екземпляр блокнота SageMaker:

  1. На консолі SageMaker виберіть Екземпляри ноутбуків.
  2. Вибирати Створіть екземпляр блокнота.
  3. для Назва екземпляра ноутбука, введіть назву екземпляра блокнота.
  4. для Тип екземпляравиберіть t2.середній.

Це найдешевший тип екземпляра, який підтримують екземпляри ноутбуків, і його достатньо для цього підручника.

  1. для Роль IAMвиберіть Створіть нову роль.

Переконайтеся в цьому Управління ідентифікацією та доступом AWS (IAM) має доступ до сегмента S3, який ви створили раніше (префікс deeplens-).

  1. Вибирати Створіть екземпляр блокнота. Запуск вашого екземпляра ноутбука може зайняти кілька хвилин.
  1. Коли статус на сторінці екземплярів блокнота зміниться на InService, виберіть Відкрийте Юпітер щоб запустити нещодавно створений екземпляр блокнота Jupyter.
  2. Вибирати Завантажувати щоб завантажити Train_Object_Detection_people_DeepLens.ipynb файл, який ви завантажили раніше.

  1. Відкрийте блокнот і дотримуйтесь його до кінця.
  2. Якщо вас запитають про налаштування ядра, виберіть conda_mxnet_p36.

Блокнот Jupyter містить поєднання тексту та клітинок коду. Щоб запустити фрагмент коду, виберіть клітинку та натисніть Shift + Enter. Під час роботи комірки біля комірки з’являється зірочка. Коли клітинка заповнена, вихідний номер і нова вихідна клітинка з’являться під вихідною коміркою.

  1. Завантажте набір даних із загальнодоступного сегмента S3 в локальний екземпляр SageMaker та розпакуйте дані. Це можна зробити, дотримуючись коду в зошиті:
     !aws s3 cp s3://deeplens-public/samples/pedestriansafety/humandetection_data.zip . !rm -rf humandetection/ !unzip humandetection_data.zip -d humandetection 

  2. Перетворіть набір даних у формат (RecordIO), які можуть бути подані в алгоритм SageMaker:
     !python $mxnet_path/tools/im2rec.py --pass-through --pack-label $DATA_PATH/train_mask.lst $DATA_PATH/ !python $mxnet_path/tools/im2rec.py --pass-through --pack-label $DATA_PATH/val_mask.lst $DATA_PATH/ 

  3. Перенесіть файли RecordIO назад на Amazon S3.

Тепер, коли ви закінчили з підготовкою всіх даних, ви готові навчити детектор об’єктів.

Існує багато різних типів алгоритмів виявлення об’єктів. Для цієї публікації ви використовуєте Алгоритм виявлення Single-Shot MultiBox (SSD). Алгоритм SSD має хороший баланс швидкості та точності, що робить його ідеальним для роботи на периферійних пристроях, таких як AWS DeepLens.

У рамках навчальної роботи у вас є багато параметрів для гіперпараметрів, які допомагають налаштувати поведінку навчання (наприклад, кількість епох, швидкість навчання, тип оптимізатора та розмір міні-пакету). Гіперпараметри дозволяють налаштувати швидкість навчання та точність моделі. Додаткову інформацію про гіперпараметри див Алгоритм виявлення об'єктів.

  1. Налаштуйте свої гіперпараметри та канали даних. Скористайтеся наведеним нижче прикладом визначення гіперпараметрів:
     od_model = sagemaker.estimator.Estimator(training_image, role, train_instance_count=1, train_instance_type='ml.p2.xlarge', train_volume_size = 50, train_max_run = 360000, input_mode= 'File', output_path=s3_output_location, sagemaker_session=sess) od_model.set_hyperparameters(base_network='resnet-50', use_pretrained_model=1, num_classes=2, mini_batch_size=32, epochs=100, learning_rate=0.003, lr_scheduler_step='3,6', lr_scheduler_factor=0.1, optimizer='sgd', momentum=0.9, weight_decay=0.0005, overlap_threshold=0.5, nms_threshold=0.45, image_shape=300, num_training_samples=n_train_samples) 

Блокнот має деякі гіперпараметри за замовчуванням, які були попередньо вибрані. Для виявлення пішоходів ви тренуєте модель протягом 100 епох. Цей етап навчання має тривати приблизно 2 години з використанням одного екземпляра ml.p2.xlarge. Ви можете поекспериментувати з різними комбінаціями гіперпараметрів або потренуватися на наступні епохи для підвищення продуктивності. Щоб отримати інформацію про останні ціни, див Ціни на Amazon SageMaker.

  1. Ви можете розпочати навчальну роботу з одного рядка коду та контролювати точність з часом на консолі SageMaker:
    od_model.fit(inputs=data_channels, logs=True) 

Додаткову інформацію про те, як працює навчання, див CreateTrainingJob. Надання та завантаження даних займають час, залежно від розміру даних. Тому може пройти кілька хвилин, перш ніж ви почнете отримувати журнали даних для ваших навчальних завдань.

Ви можете стежити за ходом своєї навчальної роботи за допомогою метричної середньої точності (mAP), яка дозволяє відстежувати якість здатності моделі класифікувати об’єкти та виявляти правильні обмежувальні рамки. Журнали даних також друкують mAP на даних перевірки, серед інших втрат, для кожного запуску набору даних, один раз за одну епоху. Цей показник є проксі-сервером якості роботи алгоритму щодо точного визначення класу та точної рамки навколо нього.

Коли завдання буде завершено, ви можете знайти навчені файли моделі у відсі та папці S3, зазначених раніше в s3_output_location:

s3_output_location = 's3://{}/{}/output'.format(BUCKET, PREFIX)

Для цього допису ми показуємо результати набору перевірки на завершення 10-ї та 100-ї епохи. Наприкінці 10-ї епохи ми бачимо валідаційний mAP приблизно 0.027, тоді як 100-та епоха становила приблизно 0.42.

Щоб досягти кращих результатів виявлення, ви можете спробувати налаштувати гіперпараметри за допомогою вбудованої в SageMaker можливості для автоматична настройка моделі і тренувати модель для більшої кількості епох. Зазвичай ви припиняєте тренування, коли бачите зменшення точності.

Тестова модель із користувацькими зонами обмеження

Перш ніж розгорнути навчену модель на AWS DeepLens, ви можете протестувати її в хмарі за допомогою кінцевої точки, розміщеної SageMaker. Кінцева точка SageMaker — це повністю керована служба, яка дозволяє робити висновки в режимі реального часу за допомогою REST API. SageMaker дозволяє швидко розгортати нові кінцеві точки для тестування ваших моделей, тому вам не потрібно розміщувати модель на локальному екземплярі, який використовувався для навчання моделі. Це дозволяє робити прогнози (або висновки) з моделі щодо зображень, які алгоритм не бачив під час навчання.

Вам не потрібно розміщувати на тому самому типі екземпляра, який ви навчали. Навчання – це тривала робота, що вимагає багато обчислень, яка вимагає іншого набору обчислень і пам’яті, яких зазвичай не вимагає хостинг. Ви можете вибрати будь-який тип екземпляра, на якому ви хочете розмістити модель. У цьому випадку ми вибрали для навчання екземпляр ml.p3.2xlarge, але ми вирішили розмістити модель на менш дорогому екземплярі процесора, ml.m4.xlarge. Наведений нижче фрагмент коду показує наше розгортання кінцевої точки.

object_detector = od_model.deploy(initial_instance_count = 1, instance_type = 'ml.m4.xlarge') 

Виявлення в спеціальній зоні обмежень (регіоні інтересів)

Формат виводу може бути представлений у вигляді [індекс_класу, confidence_score, xmin, ymin, xmax, ymax]. Передбачення з низькою впевненістю часто мають більші шанси на хибнопозитивний або хибнонегативний результат, тому, ймовірно, слід відмовитися від прогнозів з низькою впевненістю. Ви можете використовувати наступний код, щоб виявити, чи обмежувальна рамка особи перекривається з обмеженою зоною.

def inRestrictedSection(ImShape = None, R1 = None, restricted_region = None, kclass = None, score = None, threshold = None): statement = 'Person Not Detected in Restricted Zone' if (kclass == 1) and (score > threshold): Im1 = np.zeros((ImShape[0],ImShape[1],3), np.int32) cv2.fillPoly(Im1, [R1], 255) Im2 = np.zeros((ImShape[0],ImShape[1],3), np.int32) if restricted_region is None: restricted_region = np.array([[0,ImShape[0]],[ImShape[1],ImShape[0]],[ImShape[1],0], [0,0]], np.int32) cv2.fillPoly(Im2, [restricted_region], 255) Im = Im1 * Im2 if np.sum(np.greater(Im, 0))>0: statement = 'Person Detected in Restricted Zone' else: statement = statement return statement 

За замовчуванням повний кадр оцінюється на предмет присутності людини. Однак ви можете легко вказати регіон інтересів, у якому присутність особи вважається високою ризикованою. Якщо ви хочете додати спеціальну зону обмежень, додайте координати вершин області, представленої [X-вісь, Y-вісь], і створіть багатокутник. Координати потрібно ввести за годинниковою стрілкою або проти годинникової стрілки. Дивіться наступний код:

restricted_region = None #restricted_region = np.array([[0,200],[100,200],[100,0], [10,10]], np.int32) 

Наведений нижче зразок коду показує пішоходів, які ідентифіковані в зоні обмеженого доступу:

file_name = 'humandetection/test_images/t1_image.jpg' img = cv2.imread(file_name) img =cv2.cvtColor(img,cv2.COLOR_BGR2RGB) thresh = 0.2 height = img.shape[0] width = img.shape[1] colors = dict() with open(file_name, 'rb') as image: f = image.read() b = bytearray(f) ne = open('n.txt','wb') ne.write(b) results = object_detector.predict(b, initial_args={'ContentType': 'image/jpeg'}) detections = json.loads(results) object_categories = ['no-person', 'person'] for det in detections['prediction']: (klass, score, x0, y0, x1, y1) = det if score < thresh: continue cls_id = int(klass) prob = score if cls_id not in colors: colors[cls_id] = (random.random(), random.random(), random.random()) xmin = int(x0 * width) ymin = int(y0 * height) xmax = int(x1 * width) ymax = int(y1 * height) R1 = np.array([[xmin,ymin],[xmax,ymin],[xmax,ymax], [xmin,ymax]], np.int32) cv2.polylines(img,[R1],True, (255,255,0), thickness = 5) cv2.polylines(img,[restricted_region],True, (255,0,0), thickness = 5) plt.imshow(img) print(inRestrictedSection(img.shape,R1 = R1, restricted_region= restricted_region, kclass = cls_id, score = prob, threshold=0.2)) 

Наступні зображення показують наші результати.

Розгорніть рішення на AWS DeepLens

Перетворіть модель для розгортання в AWS DeepLens

Під час розгортання моделі твердотільного накопичувача, підготовленої SageMaker, на AWS DeepLens, спочатку потрібно запустити deploy.py щоб перетворити артефакт моделі в модель, що розгортається:

!rm -rf incubator-mxnet !git clone -b v1.7.x https://github.com/apache/incubator-mxnet MODEL_PATH = od_model.model_data TARGET_PATH ='s3://'+BUCKET+'/'+PREFIX+'/patched/' !rm -rf tmp && mkdir tmp rm -rf tmp && mkdir tmp !aws s3 cp $MODEL_PATH tmp !tar -xzvf tmp/model.tar.gz -C tmp !mv tmp/model_algo_1-0000.params tmp/ssd_resnet50_300-0000.params !mv tmp/model_algo_1-symbol.json tmp/ssd_resnet50_300-symbol.json !python incubator-mxnet/example/ssd/deploy.py --network resnet50 --data-shape 300 --num-class 2 --prefix tmp/ssd_ !tar -cvzf ./patched_model.tar.gz -C tmp ./deploy_ssd_resnet50_300-0000.params ./deploy_ssd_resnet50_300-symbol.json ./hyperparams.json !aws s3 cp patched_model.tar.gz $TARGET_PATH

Імпортуйте свою модель в AWS DeepLens

Щоб запустити модель на пристрої AWS DeepLens, вам потрібно створити проект AWS DeepLens. Почніть з імпортування моделі в AWS DeepLens.

  1. На консолі AWS DeepLens, під ресурсивиберіть моделі.
  2. Вибирати Імпортна модель.

  1. для Джерело імпортувиберіть Зовнішньо навчена модель.
  2. Введіть розташування Amazon S3 виправлена ​​модель яку ви зберегли від запуску deploy.py у наведеному вище кроці.
  3. для Модельний каркасвиберіть MX Net.
  4. Вибирати Імпортна модель.

Створіть функцію висновку

Функція висновку подає кожен кадр камери в модель, щоб отримати передбачення, і запускає будь-яку власну бізнес-логіку, використовуючи результати висновку. Ти використовуєш AWS Lambda щоб створити функцію, яку ви розгортаєте в AWS DeepLens. Функція виконує локальний висновок на пристрої AWS DeepLens.

Спочатку нам потрібно створити функцію Lambda для розгортання в AWS DeepLens.

  1. Завантажити лямбда-функція висновку.
  2. На консолі Lambda виберіть Функції.
  3. Вибирати Створити функцію.
  4. Select Автор з нуля.
  5. для Назва функції, введіть ім'я.
  6. для Час виконаннявиберіть Python 3.7.
  7. для Виберіть або створіть роль виконаннявиберіть Використовуйте наявну роль.
  8. Вибирати service-role/AWSDeepLensLambdaRole.
  9. Вибирати Створити функцію.

  1. На сторінці відомостей про функцію, на Дії меню, виберіть Завантажте файл .zip.

  1. Завантажте висновок лямбда файл, який ви завантажили раніше.
  2. Вибирати зберегти щоб зберегти введений код.
  3. на Дії меню, виберіть Опублікувати нову версію.

Публікація функції робить її доступною на консолі AWS DeepLens, щоб ви могли додати її до свого власного проекту.

  1. Введіть номер версії та виберіть Публікувати.

Розуміння функції висновку

Цей розділ проведе вас через деякі важливі частини функції висновку. По-перше, ви повинні звернути увагу на два конкретні файли:

  • labels.txt – Містить відображення вихідних даних нейронної мережі (цілих чисел) у читані людиною мітки (рядок)
  • lambda_function.py – Містить код функції, яка викликається, щоб генерувати передбачення для кожного кадру камери та надсилати результати назад

У lambda_function.py спочатку ви завантажуєте та оптимізуєте модель. У порівнянні з хмарними віртуальними машинами з графічним процесором, AWS DeepLens має меншу обчислювальну потужність. AWS DeepLens використовує оптимізатор моделі Intel OpenVino, щоб оптимізувати модель, навчену SageMaker, для роботи на її апаратному забезпеченні. Наступний код оптимізує вашу модель для локального запуску:

client.publish(topic=iot_topic, payload='Optimizing model...') ret, model_path = mo.optimize('deploy_ssd_resnet50_300', INPUT_W, INPUT_H) # Load the model onto the GPU. client.publish(topic=iot_topic, payload='Loading model...') model = awscam.Model(model_path, {'GPU': 1}) 

Потім ви запускаєте модель кадр за кадром над зображеннями з камери. Дивіться наступний код:

while True: # Get a frame from the video stream ret, frame = awscam.getLastFrame() if not ret: raise Exception('Failed to get frame from the stream') # Resize frame to the same size as the training set. frame_resize = cv2.resize(frame, (INPUT_H, INPUT_W)) # Run the images through the inference engine and parse the results using # the parser API, note it is possible to get the output of doInference # and do the parsing manually, but since it is a ssd model, # a simple API is provided. parsed_inference_results = model.parseResult(model_type, model.doInference(frame_resize)) 

Нарешті, ви надсилаєте результати прогнозування тексту назад у хмару. Перегляд результатів тексту в хмарі — це зручний спосіб переконатися, що модель працює правильно. Кожен пристрій AWS DeepLens має спеціальну тему iot_topic, яка автоматично створюється для отримання результатів висновку. Дивіться наступний код:

# Send results to the cloud client.publish(topic=iot_topic, payload=json.dumps(cloud_output)) 

Створіть власний проект AWS DeepLens

Щоб створити новий проект AWS DeepLens, виконайте такі дії:

  1. На консолі AWS DeepLens, на Завдання сторінку, виберіть Створити проект.
  2. для Тип проектувиберіть Створіть новий порожній проект.
  3. Вибирати МАЙБУТНІ.

  1. Назвіть свій проект yourname-pedestrian-detector-.
  2. Вибирати Додати модель.
  3. Виберіть модель, яку ви щойно створили.
  4. Вибирати Додати функцію.
  5. Знайдіть лямбда-функцію, яку ви створили раніше, за назвою.
  6. Вибирати Створити проект.
  7. на Завдання виберіть проект, який потрібно розгорнути.
  8. Вибрали Розгорнути на пристрої.
  9. для Цільовий пристрій, виберіть свій пристрій.
  10. Вибирати Розгляд.
  11. Перегляньте свої налаштування та виберіть Розгортання.

Розгортання може зайняти до 10 хвилин, залежно від швидкості мережі, до якої підключено ваш AWS DeepLens. Коли розгортання буде завершено, ви побачите зелений банер на сторінці з повідомленням «Вітаємо, ваша модель зараз працює локально на AWS DeepLens!»

Щоб побачити вихідний текст, прокрутіть сторінку з відомостями про пристрій униз до Вихід проекту розділ. Дотримуйтесь інструкцій у розділі, щоб скопіювати тему та перейти до Ядро AWS IoT консоль, щоб підписатися на тему. Ви повинні побачити результати, як на наступному знімку екрана.

Покрокові інструкції щодо перегляду відеопотоку або виведення тексту див Перегляд результатів від AWS DeepLens.

Реальні випадки використання

Тепер, коли у вас є прогнози з вашої моделі, яка працює на AWS DeepLens, давайте перетворимо ці передбачення в сповіщення та статистичні дані. Деякі найбільш поширені варіанти використання для такого проекту включають:

  • Розуміння того, скільки людей у ​​певний день увійшло до забороненої зони, щоб будівельні майданчики могли визначити місця, які потребують більше знаків безпеки. Це можна зробити, зібравши результати та використавши їх для створення інформаційної панелі Amazon QuickSight. Додаткову інформацію про створення інформаційної панелі за допомогою QuickSight див Створіть трекер для роботи з дому за допомогою AWS DeepLens і GluonCV.
  • Збір результатів від AWS DeepLens і налаштування Raspberry Pi для звукового сповіщення, коли хтось заходить у заборонену зону. Щоб дізнатися більше про підключення пристрою AWS DeepLens до пристрою Raspberry Pi, див Створення сортувальника сміття за допомогою AWS DeepLens.

Висновок

У цій публікації ви дізналися, як навчити модель виявлення об’єктів та розгорнути її в AWS DeepLens, щоб виявляти людей, які входять у заборонені зони. Ви можете використовувати цей посібник як довідник для навчання та розгортання власних проектів виявлення об’єктів на AWS DeepLens.

Щоб отримати докладнішу інформацію про цей підручник та інші навчальні посібники, зразки та ідеї проектів з AWS DeepLens, див. Рецепти AWS DeepLens.


Про авторів

Яш Шах є науковцем із даних у лабораторії рішень Amazon ML Solutions Lab, де він працює над різними прикладами використання машинного навчання від охорони здоров’я до виробництва та роздрібної торгівлі. Він має офіційну освіту в галузі людського фактора та статистики, а раніше був частиною команди Amazon SCOT, яка розробляла продукти, щоб керувати продавцями 3P з ефективним управлінням запасами.

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

Джерело: https://aws.amazon.com/blogs/machine-learning/protecting-people-through-virtual-boundaries-computer-vision/

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

Більше від Блог машинного навчання AWS