Поддерживается платформой fast.ai

Когнитивный вариант использования, семантическая сегментация на основе набора данных CamVid

Andi Sama - ИТ-директор, Sinergi Wahana Gemilang, с Арфикой Нурхудатиана, доктором философии

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

Что ж, с искусственным интеллектом (ИИ) и особенно глубоким обучением это становится более возможным в последние годы. Робот может быть, например, в виде дрона или автономного транспортного средства (например, беспилотного автомобиля).

Человек и машины

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

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

В этой статье «Сегментация изображений с глубоким обучением на основе платформы fast.ai: когнитивный сценарий использования, семантическая сегментация на основе набора данных CamVid» обсуждается сегментация изображений - подмножество реализации в компьютерном зрении с глубоким обучением, которое - это расширенное улучшение обнаружения объектов на изображениях на более детальном уровне. В сопутствующей статье «Классификация изображений с глубоким обучением на основе инфраструктуры fast.ai: когнитивный сценарий использования, 4-х классная классификация изображений» обсуждается классификация изображений.

В частности, в этой статье обсуждается семантическая сегментация изображения, а не сегментация изображения экземпляра. В семантической сегментации пиксельное прогнозирование применяется к различным объектам, таким как человек, автомобиль, дерево, здание и т. Д. Более детализированный уровень сегментации изображения - это сегментация экземпляра, при которой, если на изображении присутствует несколько человек, мы сможем чтобы различать человека-1, человека-2, человека-3, например, вместе с другими объектами, такими как автомобиль-1, автомобиль-2 и дерево-1, дерево-2, дерево-3, дерево-4 и т. д.

На иллюстрациях 1.a и 1.b показан прогнозируемый результат двух изображений с использованием глубокого обучения для семантической сегментации. Каждый пиксель этих изображений распознается как один из 32 обученных классов (категорий), вместе с его вероятностью.

Сама модель ранее обучалась с использованием глубокого обучения с точностью обучения 92,15%. Глубокое обучение - это тип машинного обучения, который так активно используется в последние годы.

Машинное обучение и глубокое обучение

Заметный прорыв в области компьютерного зрения с использованием глубокого обучения произошел в 2012 году, когда прикладной алгоритм, называемый сверточной нейронной сетью (также известный как CNN) с алгоритмом обратного распространения, победил в конкурсе ImageNet «Крупномасштабная задача визуального распознавания по классификации изображений», достигнув частота ошибок составила 16,4%, что является значительным улучшением по сравнению с результатом 2011 года, который составлял 25,8% (Fei-Fei Li, Justin Johnson, Serena Yeung, 2017). С тех пор (2012 г.) этот алгоритм нейронной сети известен как Alexnet.

Последующие результаты в 2013, 2014 и 2015 годах составили 11,7%, 6,7% и 3,57% соответственно. Результат ImageNet за 2015 год превзошел результаты человеческих экспертов, которые смогли их получить, всего лишь на 5,1%.

На иллюстрации 2 показан краткий обзор эволюции и достижений ИИ с 1950-х годов. Глубокое обучение, основанное на алгоритме обратного распространения ошибки, как часть машинного обучения в рамках ИИ (с его подходами, такими как обучение с учителем, обучение без учителя и обучение с подкреплением), было ключевым фактором в современных захватывающих достижениях ИИ, поддерживаемых наличием огромного набора данных (bigdata) , а также аппаратные ускорители, такие как GPU (Graphic Processing Unit), особенно от NVidia.

В предыдущем выпуске SWG Insight (Andi Sama et al., 2017) было быстро обсуждено состояние будущих достижений, которые возможны в машинном обучении, особенно с глубоким обучением. В последующих статьях будет больше дискуссий на эту тему (2018–2019), и это будет продолжаться еще несколько лет, поскольку эта область по-прежнему интересна множеством новых разработок и прорывов.

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

Арфика Нурхудатиана, доктор философии, специалист в области искусственного интеллекта, работающая в должности специалиста по данным и базирующаяся в Джакарте, Индонезия, подчеркивает: «Глубокое обучение расширяет возможности машинного обучения, исключая ручное извлечение функций и напрямую учится на необработанных входных данных».

Комментируя далее классификацию изображений и сегментацию изображений, она продолжает: «Одна из причин растущей популярности подхода на основе R-CNN (региональная сверточная нейронная сеть) для обнаружения объектов связана с его приятным сочетанием сегментации изображения и классификации изображений. . Среди многих других областей, в которых требуется высокоточная сегментация изображений, есть медицинская визуализация, производство и сельскохозяйственные технологии ».

Машинное обучение - это разновидность искусственного интеллекта. Википедия определяет ИИ как «интеллект, проявляемый машинами, а не людьми или другими животными». Одним из подразделов машинного обучения является искусственная нейронная сеть (ИНС), которая является «математической моделью» биологического мозга человека. Простейшая ИНС (или просто нейронная сеть) имеет 1 входной слой, 1 скрытый слой и 1 выходной слой.

Каждый узел в скрытом слое в основном состоит из довольно простых операций (в основном, умножения и сложения матриц). Он принимает входные данные от предыдущих узлов - скорректированные с использованием уникальных смещений и весов (также исходящие от предыдущих узлов), а затем выполняет некоторые вычисления (и измерения) для получения выходных данных для решения проблемы путем приближения. В глубоком обучении существует множество скрытых слоев (более одного, может быть десятый или сотня скрытых слоев) в зависимости от архитектуры нейронной сети, о которой мы говорим.

Глубокое обучение - это текущее название ИНС, в которой оно включает обучение с использованием более чем одного скрытого слоя (8 уровней в AlexNet и 34, 50 и 101 уровень в Resnet-34, Restnet-50 и Resnet-101 соответственно). Изначально машинное обучение можно разделить на контролируемое обучение (помеченные данные) и неконтролируемое обучение (немаркированные данные). Недавно появилась третья категория: обучение с подкреплением (обучение, основанное на действиях, основанное на определенных определенных наградах).

Эти первые три категории машинного обучения кратко изложены в таблице 1.

Последнее усовершенствование включает в себя MAML, Model Agnostic Meta Learning (Pieter Abbeel, 2019), в котором эта модель может изучать новые вещи всего из нескольких новых образцов, учитывая, что она уже обучалась с аналогичными ранее (будь то классификация, распознавание объектов , распознавание действия или другие).

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

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

Пример использования когнитивного глубокого обучения

Семантическая сегментация изображений 32 классов на основе базы данных CamVid, контролируемое обучение

Обсуждение в этой статье разделено на три следующих раздела. В нем обсуждается вариант использования при обработке набора данных CamVid для обучения модели для семантической сегментации изображения распознавать каждый пиксель в изображении, принадлежащий одному из 32-х классов (категорий), с использованием библиотек fast.ai.

Раздел 1: Окружающая среда и подготовка набора данных.

а. Подготовка среды в Google Cloud Platform (GCP)

б. Набор данных из базы данных CamVid

Раздел 2: Моделирование

Раздел 3: Вывод

32 класса определены как 'Animal', 'Archway', 'Bicyclist', 'Bridge', 'Building', 'Car', 'CartLgagePram', 'Child', 'Column_Pole', 'Fence', LaneMkgsDriv, LaneMkgsNonDriv, Misc_Text, MotorcycleScooter, OtherMoving, ParkingBlock, Pedestrian, Road, RoadShoulder, Sidewalk, SignSymbol, Sky, SUVPickupTruck , TrafficCone, TrafficLight, Train, Tree, Truck_Bus, Tunnel, VegetationMisc, Void и Wall.

Ожидается, что, зная и обладая определенным базовым пониманием как базовой концепции, так и практической осуществимости в некоторой степени, мы сможем лучше оценить и понять связанные с ИИ продукты и решения, доступные на рынке, такие как различные предложения IBM Watson. известный как «Искусственный интеллект для бизнеса».

Начнем с пошагового руководства.

РАЗДЕЛ 1: ПОДГОТОВКА ОКРУЖАЮЩЕЙ СРЕДЫ И НАБОРЫ ДАННЫХ

1.a. Подготовка среды в Google Cloud Platform

Эта статья основана на недавнем курсе глубокого обучения (конец 2018 - начало 2019, курс fast.ai v3), который преподавал в Университете Сан-Франциско Джереми Ховард, участник №1 Kaggle в течение 2 лет подряд и основатель fast.ai, одна из ведущих библиотек глубокого обучения. Kaggle является признанным местом для соревнований за лучшие в мире в области глубокого обучения, продолжая совершенствовать и изобретать лучшие алгоритмы (с вознаграждением в миллионы долларов за избранные сложные задачи мирового уровня). Джереми читал курс вместе с Рэйчел Томас, директором Центра прикладной этики данных USF, а также соучредителем fast.ai.

Класс предлагает использовать GPU (Graphic Processing Unit) для запуска нашего моделирования глубокого обучения, и с этим подходом мы используем один (виртуальный сервер), который доступен в облачной иллюстрации-3a): вычислительная платформа Google Cloud Platform (GCP). Двигатель (с почасовой зарядкой). Конфигурация графического процессора NVIDIA показана на рисунке 4a (режим ожидания) и рисунке 4b (моделирование, обработка нейронной сети) путем выполнения команды nvidia-smi на удаленном виртуальном сервере после входа в систему.

Как мы видим, в качестве платформы для экспериментов используется дистрибутив Debian с операционной системой linux, оснащенный одним довольно мощным графическим процессором NVidia Tesla P4, работающим на GCP Compute Engine. Мы можем использовать аналогичные облачные сервисы IaaS (инфраструктура как услуга), такие как IBM Watson Studio на IBM Cloud Platform, Amazon Web Services Elastic Compute Cloud (AWS EC2) или платформу Microsoft Azure Cloud Compute.

Также доступно не облачное (локальное) решение, такое как платформа ускоренных вычислений IBM POWER (оптимизация производительности с улучшенным RISC) (AC922), оснащенная высокопроизводительным графическим процессором Tesla V100 от NVidia, а также различными графическими процессорами Intel x86. Платформа на базе ЦП. RISC (Вычисления с сокращенным набором команд) - это тип компьютерной архитектуры.

Процесс начинается с включения нашего определенного сервера в GCP Compute Engine (иллюстрация-3a), и после его запуска мы можем выполнить вход ssh (безопасная оболочка) на наш виртуальный сервер, работающий на GCP (иллюстрация-3b).

После того, как все настроено, мы можем начать использовать Jupyter Notebook, чтобы ввести наш код Python, чтобы испытать глубокое обучение, указав в браузере http: // localhost: 8080 / tree /, а затем перейдите в каталог, в котором находится наш файл .ipynb (как на иллюстрации-5). Jupyter Notebook - это интерактивная среда разработки, обычно используемая специалистами по анализу данных для машинного обучения, а язык программирования Python популярен среди специалистов по данным.

Обратите внимание, что мы можем использовать только наш существующий ЦП (центральный процессор) - ноутбук - это нормально. Однако процесс будет значительно медленным (примерно в 10–20 раз или больше, в зависимости от того, с какой парой CPU-GPU мы сравниваем). Моделирование, которое может занять несколько минут на графическом процессоре, может занять несколько часов при использовании центрального процессора. Представьте себе моделирование, которое занимает несколько часов, дней или даже недель на графическом процессоре, а при использовании центрального процессора может занять дни, недели или даже месяцы.

Это мощь параллельной обработки, встроенной в графический процессор для обработки сложных вычислений, которые в основном состоят из матричных операций (матричное умножение и сложение, как в линейной алгебре), а также частичной дифференциальной обработки 1-й степени в алгоритме обратного распространения. В конфигурации уровня предприятия, такой как сервер IBM POWER AC922, мы можем включить еще более масштабируемые несколько серверов с конфигурацией с несколькими графическими процессорами, чтобы значительно ускорить моделирование. По крайней мере, одна конфигурация была протестирована с 64 серверами с 4 графическими процессорами в каждом (в 2018 году), в результате чего было получено 256 графических процессоров, настроенных с использованием DDL (распределенного глубокого обучения) для HPC (высокопроизводительных вычислений).

Другой аппаратный подход - использовать Tensor Processing Unit (TPU), разработанный Google.

В недавнем подходе IBM к среде высокопроизводительных вычислений (HPC) глобальный архитектор решений и специалист по данным IBM: Ренита Леунг, П. Энг поделилась новостью о доступности EDT и EDI (Renita, 2019). Подход под названием Elastic Distributed Training (EDT) доступен для крупномасштабного моделирования на многих графических процессорах. Наряду с этим для вывода (времени выполнения) на многих графических процессорах подход IBM также включает эластичный распределенный вывод (EDI).

1.b. Подготовка набора данных

Теперь, когда среда готова, нам нужно подготовить набор данных. Мы используем набор обучающих данных из базы данных CamVid (Brostow, Shotton, Fauqueur, Cipolla, 2008a) и тестовый набор данных из Google Images Search (сгенерированный вручную).

Набор данных для обучения (и проверки) из базы данных CamVid

С его сайта набор данных CamVid описывается следующим образом.

Кембриджская база данных помеченных видео (CamVid) - это первая коллекция видео с семантическими метками объектного класса, дополненная метаданными.

База данных предоставляет метки истинности, которые связывают каждый пиксель с одним из 32 семантических классов.

База данных удовлетворяет потребность в экспериментальных данных для количественной оценки появляющихся алгоритмов.

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

Сценарий движения увеличивает количество и неоднородность наблюдаемых классов объектов.

На иллюстрации 6а и 6b показаны коды Python, показывающие, как изображение извлекается из базы данных CamVid, а затем визуализируется. Размер обрабатываемых данных установлен равным 50% от общего src_size.

Иллюстрация-7 визуализирует изображения в базе данных CamVid вместе с действующими этикетками.

В базе данных CamVid: каждый файл изображения имеет соответствующий файл метки, определение семантической сегментации изображения для этого изображения в каждом пикселе. Файл метки состоит из значений индекса, которые действуют как указатели, ссылаясь на каждый пиксель сегментированного изображения. Каждый пиксель имеет индексное значение одного из 32 кодов (определенных классов), как определено в файлах code.txt.

Тестовый набор данных

Изображения Google для набора тестовых данных выбираются с использованием ключевых слов для поиска (на индонезийском языке): «jakarta kondisi jalan utama mobil motor sepeda orang», что переводится как «состояние джакарты, улица, главный автомобиль, мотоцикл, велосипед, человек».

Мы делаем это, сначала генерируя наш список URL-адресов изображений Google, сначала выполняя поиск изображений Google из браузера, а затем загружая URL-адреса с помощью Javascript (используйте ctrl-shift-j в браузере, чтобы открыть новое окно в котором мы можем вводить команды javascript, как на иллюстрации 8). Мы выбираем список так, чтобы он содержал не более 500 URL-адресов.

После создания списка файлов для тестового набора данных он обрабатывается кодами Python для загрузки фактических изображений. Эти изображения можно редактировать вручную, чтобы удалить ненужные файлы. Процесс удаления нежелательных изображений (использование vnc для удаленного входа и просмотра изображений) прост, мы просто удаляем все изображения, которые, по нашему мнению, не подходят для тестирования, путем обращения к базе данных CamVid.

Подготовка данных завершена. Теперь мы готовы перейти к следующему этапу: моделированию.

РАЗДЕЛ 2: МОДЕЛИРОВАНИЕ

Прежде всего, мы определяем, как будет вычисляться точность модели, а затем определяем архитектуру нейронной сети. В Ilustration-9a показан код Python в Jupyter Notebook, в котором мы определяем функцию acc_camvid () для расчета точности нашей модели и подготавливаем базовую модель для обучения, вызывая функцию unet_learner () fast.ai, а затем назначаем ее объекту под названием learn ( с использованием архитектуры нейронной сети на основе сверточной нейронной сети (CNN) под названием Resnet-34).

Затем мы можем начать обучение набора данных (моделирование), в данном случае для сегментации семантического изображения. При моделировании будет создана модель, которая при задании изображения может предсказать ожидаемую сегментацию (результат) в пределах определенного уровня достоверности.

Модель - это приблизительное соотношение между вводом и выводом на основе набора данных.

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

Гиперпараметры

Скорость обучения для определения того, насколько быстро обучается алгоритм приличного градиента, количество слоев, количество нейронов в каждом слое, количество эпох, количество мини-пакетов и лямбда для регуляризации для минимизации данной функции стоимости - вот некоторые из переменных, известных как гипер- параметры (например, независимые переменные в статистике) в нейронной сети (или глубокой нейронной сети / глубоком обучении). Короче говоря, это внешние переменные, которые устанавливаются перед обучением для создания оптимизированных зависимых переменных в «модели» структуры нейронной сети: а именно весов и смещений.

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

Чем дольше мы используем время графического процессора, тем выше стоимость обработки. Практика первоначального эксперимента с меньшим набором данных (подмножеством полного набора данных) при одновременной настройке нескольких гиперпараметров позволит эффективно использовать время графического процессора, следовательно, снизить стоимость в час, если мы «арендуем» облачный графический процессор. -оборудованный виртуальный сервер в облаке, например.

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

2.a. Обучение (начальное, с частью набора данных)

В fast.ai есть функция lr_find () для поиска диапазона возможных значений скорости обучения, которые подходят для минимизации нашей error_rate. Обратите внимание, что скорость обучения по умолчанию в fast.ai установлена ​​на 0,003 (3x10–3), и в этом случае мы можем запустить функцию fit_one_cycle () в течение нескольких эпох, прежде чем использовать lr_find ().

Мы вызываем функцию fast.ai, чтобы определить скорость обучения для начала, как показано на рисунке 9.b. Затем мы выбираем нашу начальную скорость обучения 3x10–3 на основе результата функции lr_find ().

Скорость обучения (Википедия) - это размер шага в машинном обучении, который является гиперпараметром, определяющим, в какой степени вновь полученная информация перекрывает старую. Слишком высокая скорость обучения заставит обучение перескочить через минимумы, но слишком низкая скорость обучения либо займет слишком много времени, чтобы сойтись, либо застрянет в нежелательном локальном минимуме.

Результат lr_find () показывает, что нам предлагается установить диапазон скорости обучения от 3x10–4 до 3x10–3 (диапазон стабильных значений на графике непосредственно перед тем, как он будет расти).

Как только базовая модель для обучения определена, мы можем начать обучение (иллюстрация 9-c), вызвав функцию fit_one_cycle () fast.ai с гиперпараметрами: 10, lr и 0.9. Это означает, что он будет работать с 10 эпохами с определенной скоростью обучения на lr, и lr_rate будет постепенно увеличиваться до 90% в каждую эпоху, а затем уменьшаться.

Один цикл обучения нейронной сети с полным набором данных называется 1 эпохой - изначально это 50% от src_size. Обучение и проверку можно повторить несколько раз для повышения точности, хотя в какой-то момент точность может снизиться. Затем предлагается сохранить сгенерированный файл (модель) для каждой эпохи (сохраненная модель содержит изученные веса и сетевую архитектуру для всех связанных слоев в модели).

Мы наблюдаем, что со всеми установленными базовыми гиперпараметрами (такими как скорость обучения и показатели измерения) для первых 10 эпох: 1-я (эпоха 0), 3-я, 5-я, 7-я, 8-я, 9-я и 10-я, мы получаем 82,81%, 83,30 %, 86,97%, 86,40%, 89,04%, 85,54% и 87,04% точности (acc_camvid ()) соответственно.

На этом этапе мы сохраняем наш текущий сгенерированный результат и называем его «этап-1». Мы делаем обзор, как у нас дела до сих пор (иллюстрация-10).

2.b. Оптимизация обучения

Что ж, может быть, мы сможем улучшить еще больше, повысив нашу последнюю точность на 87,04%. Затем, когда pct_start теперь установлен на 80% с скорректированной скоростью обучения, мы продолжаем обучение нашего набора данных с еще 12 последующими эпохами (иллюстрация-11) на основе сохраненного ранее этапа-1. Мы получаем следующие значения точности для последних 5 эпох: 90,17%, 89,83%, 86,02%, 88,07% и 89,77% соответственно.

На этом этапе мы сохраняем наш текущий сгенерированный результат и называем его просто «этап-2». Мы делаем обзор того, как у нас дела до сих пор (иллюстрация-11).

Иллюстрация 12 показывает парный результат, основную истину (изображения из наших данных) и предсказанные изображения (результат предсказания с нашей текущей моделью на этом этапе). Мы довольны? Кажется, что мы еще можем улучшить нашу модель, чтобы она стала лучше.

2.c. Обучение с полным набором данных

Поскольку мы завершаем наши первоначальные выводы с помощью подмножества набора данных, мы готовы использовать весь набор данных, который у нас есть. Затем мы готовим обучение с полным набором данных (size = src_size), максимизируем размер пакета, как разрешено нашей текущей конфигурацией графического процессора, затем загружаем ранее сохраненный этап, этап-2 (как показано на иллюстрации- 13). Чтобы увидеть, как мы должны установить наш lr на этот раз, мы снова запускаем lr_find () (иллюстрация-14).

Основываясь на результате lr_find (), мы решаем установить скорость обучения 1x10–3 (иллюстрация-15). Снова запустите learn.fit_one_cycle (), сохраните результат в stage-1-big, измените скорость обучения для точной настройки, затем снова запустите learn.fit_one_cycle ().

Мы видим, что, обращаясь ко всем 10 эпохам: 1-й (эпоха 0), 2-й, 3-й, 8-й, 9-й и 10-й, мы получаем точность 91,91%, 92,47%, 91,09%, 91,72%, 92,21% и 92,21% соответственно. Довольно значительное улучшение по сравнению с прошлым запуском.

На этом этапе мы сохраняем наш текущий сгенерированный результат и просто называем сохраненное имя файла как «stage-2-big». Мы рассмотрим, как у нас дела до сих пор, на иллюстрации 16.

РАЗДЕЛ 3: ВЫВОДЫ

Хотя хорошо, наконец, получить обученную модель, на этом процесс не заканчивается. Модель необходимо запустить в реальную работу, введя новые данные, а затем сделав прогноз (ожидая, что прогнозируемый результат будет согласован с данными, на которых мы обучили модель). Это называется этапом вывода (время выполнения).

Искусственный интеллект, в том числе логический вывод, может быть частью большого бизнес-процесса, такого как управление бизнес-процессами (BPM) в рамках ИИ предприятия, или запускаться как серверный процесс, доступ к которому имеют внешние приложения, такие как мобильное приложение или веб-приложение, или даже доступ к нему подпроцесс в рамках внешнее приложение где-то внутри мультиоблака или гибридной облачной среды.

Сгенерированная модель глубокого обучения нейронной сети (мы можем просто сказать: модель) может быть развернута (логически выведена) разными способами (в облаке, на границе ИИ на границе Интернета вещей ›, на мобильных устройствах и т. Д.) В зависимости от того, какие приложения, на которые мы собираемся ориентироваться. На рисунке 22 показан типичный конвейер данных AI, где данные проходят через 3 этапа: 1. подготовка данных, 2. моделирование, а также 3. развертывание / логический вывод. Этап-1 и этап-2 в основном являются этапами разработки, а этап-3 - этапами выполнения. Запуск модели (логический вывод) - это заключительный этап, на котором мы можем выбрать тип развертывания в соответствии с требованиями.

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

Ну, как уже упоминалось ранее, каждый пиксель сегментированного изображения содержит информацию о классе в одном из 32 определенных классов 'Animal', 'Archway', 'Bicyclist', 'Bridge', 'Building', 'Car', CartLtagePram, Child, Column_Pole, Fence, LaneMkgsDriv, LaneMkgsNonDriv, Misc_Text, MotorcycleScooter, OtherMoving, ParkingBlock, Pedestrian, Road, RoadShoulder ',' Sidewalk ',' SignSymbol ',' Sky ',' SUVPickupTruck ',' TrafficCone ',' TrafficLight ',' Train ',' Tree ',' Truck_Bus ',' Tunnel ',' VegetationMisc ',' Void ', и «Стена» - вместе с ее вероятностями.

Затем мы пишем специальную функцию pyhton для извлечения этой информации (как показано на иллюстрации-19a, иллюстрации-19b). Функция позволяет установить любую точку (координату) в сегментированном изображении, затем она извлечет информацию о 10 классах до и после этой определенной точки.

Когда мы запускаем функцию с определенной точкой, мы можем визуализировать извлекаемые пиксели, а также информацию о классах из каждого извлеченного пикселя. Иллюстрация-20a и Иллюстрация-20b показывают одно сегментированное изображение, в то время как Иллюстрация-21a и Иллюстрация-21b показывают другое сегментированное изображение, которое визуализируется и извлекается.

Быстрый вывод

Есть много способов сделать логический вывод. Хотя такие инструменты, как IBM PowerAI Vision на IBM WMLA, имеют встроенный механизм развертывания «из коробки», типичным процессом будет экспорт обученной модели во внешнюю среду, а затем выполнение логического вывода. Логический вывод может быть выполнен либо локально, либо в облаке, либо в комбинации, это просто варианты развертывания, которые нам нужно выбрать с учетом надежности и масштабируемости, которые соответствуют цели развертывания (конечно, фактор стоимости также является одним из важных факторов. рассмотреть здесь).

Типичный подход к развертыванию похож на модель - внешнее приложение передает новые данные для прогнозирования. Перед тем как получить доступ к механизму вывода, внешнее приложение может быть каким-то образом аутентифицировано, например через назначенный API-ключ (интерфейс прикладного программирования), обычно генерируемый сервером, работающим в той же среде, что и механизм вывода.

Внешнее приложение для механизма вывода Прежде чем попасть в механизм вывода, входящие данные (сжатые) обычно проходят через подсистему пула / очереди сообщений (мы можем развернуть это на платформе асинхронного обмена сообщениями, используя методы публикации / подписки, например, для повышения масштабируемости).

Мы можем использовать «опубликовать в теме, например to request_message topic »при отправке данных из внешнего приложения на платформу обмена сообщениями. С другой стороны, логика приложения «подписывается на тему request_message», поэтому она будет получать данные, как только они поступят для передачи в механизм вывода (после того, как данные были распакованы). Как только предсказанный результат генерируется механизмом вывода, логика приложения затем «публикует результат обратно в тему ответа, например в тему response_message в платформе обмена сообщениями ».

Механизм вывода в Внешнее приложение Как только результат достигает платформы обмена сообщениями, он затем передается обратно во внешнее приложение, которое «подписывается на тему response_message» для дальнейшая обработка, например путем объединения результата механизма логического вывода с другими состояниями приложения для выполнения некоторых действий.

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

Набор логики приложения + механизм вывода также может быть сконфигурирован как многопоточный, в котором он может обрабатывать несколько запросов и выполнять несколько выводов за один проход внутри процесса. Логика нескольких приложений + механизмы вывода также могут быть сконфигурированы как контейнеры для обеспечения масштабируемости при обработке нескольких параллельных запросов. Ограниченный набор многопоточности в одной виртуальной машине или в одном контейнере предназначен для предотвращения исчерпания ресурсов системы (ЦП, ОЗУ, ГП) в этой виртуализированной среде.

Что дальше?

Внедрение машинного обучения (ML) быстро ускоряется, особенно с появлением облачной платформы для экспериментов (с графическим процессором). Общие шаги для выполнения глубокого обучения на самом деле довольно просты:

  1. Подготовьте правильные наборы данных, а затем разделите их на данные для обучения и проверки.

2. Моделирование: выберите архитектуру нейронной сети, обучите с использованием набора данных, затем сгенерируйте модель.

3. Выведение: разверните модель.

Подготовка правильных наборов данных всегда была проблемой при глубоком обучении, это может занять недели или даже месяцы. При обеспечении правильного набора ресурсов и навыков (специалист по данным и вычислительные мощности) моделирование должно быть простой задачей, например может быть выполнено за часы, дни или всего за несколько недель для очень сложной большой модели. После создания модели развертывание должно быть «проще» для реализации - например, для развертывания в веб-или мобильных приложениях.

При выполнении моделирования облачные серверы, поддерживающие графические процессоры, были доступны некоторое время, начиная с всего лишь примерно 1 доллар США в час для конфигурации начального уровня и до нескольких тысяч долларов США в час для конфигурации очень высокого уровня ( несколько графических процессоров для параллелизма). Обратите внимание, что, хотя вы можете использовать только CPU, время обучения будет значительно медленнее. Это может быть примерно в 10 раз медленнее. Улучшение скорости (особенно с большим набором данных) с помощью графического процессора может варьироваться, однако в целом оно может составлять от 10 до 20 раз.

Чтобы начать изучение, особенно в отношении логического вывода, у нас есть несколько способов испытать это на практике. Возьмем, к примеру, анонсы NVidia Jetson TX2 (в мае 2017 года), которые позволяют нам начать использовать графические процессоры для глубокого обучения (за 599 долларов США), или недавнюю NVidia Jetson Nano (объявленную в марте 2019 года всего за 129 долларов США) или более высокую версию, например NVidia Jetson AGX Xavier (за 999 долларов США за лучшую производительность).

Чего же вы тогда ждете? Давайте начнем с изучения некоторых вариантов использования в этой захватывающей области искусственного интеллекта.

Ссылки:

Энди Сама, 2019 г., Вывод модели ИИ, практические подходы и соображения к развертыванию, SWG Insight, Edisi Q4 2019, стр. 3–9.

Энди Сама и др., 2019a, Классификация изображений и обнаружение объектов.

Энди Сама и др., 2019b, Думай как специалист по данным.

Анди Сама и др., 2019c, Гостевая лекция по ИИ: проблемы и возможности, лекция для FEBUI - Университета Индонезии »».

Энди Сама и др., 2018, Глубокое обучение - классификация изображений, кошки и собаки - когнитивный сценарий использования: реализация контролируемого обучения для классификации изображений, SWG Insight, Edisi Q1 2018.

Энди Сама и др., 2017 г., Будущее машинного обучения: состояние достижений в области глубокого обучения, SWG Insight, Edisi Q4 2017, стр. 6–17.

Эндрю Виджая, Чахяти С. Сангаджи, 2019 г., Распознавание лиц на основе IBM Cloud, Watson & IoT on Edge, SWG Insight, Edisi Q2 2019.

Бростоу, Шоттон, Фокер, Чиполла , 2008a, « Сегментация и распознавание с использованием структуры из облаков точек движения, ECCV 2008 ».

Brostow, Shotton, Fauqueur, Cipolla , 2008b, Классы семантических объектов в видео: База данных истинной достоверности высокого разрешения.

Фей-Фей Ли, Джастин Джонсон, Серена Юнг, 2017, CS231n: сверточные нейронные сети для визуального распознавания, Стэнфордский университет, весна 2017 года.

Джереми Ховард , 2018, Практическое глубокое обучение для программистов - v3.

Питер Аббил, 2019, Full Stack Deep Learning - Lecture 10: Research Directions, Deep Learning Bootcamp, март 2019, Беркли.

Ренита Леунг, 2019 г., «Пример интегрированного решения Watson ML Accelerator + Watson Studio + Watson ML», Технический университет IBM, ноябрь 2019 г. @Bali, Индонезия.

Википедия, Скорость обучения ».