Статьи по программированию

5 шагов к разработке приложения для глубокого обучения

Разработка приложения для глубокого обучения состоит из 5 шагов. Ниже приводится общее описание каждого шага:

Вот тут, если что, уже собраны 60 лучших курсов по созданию приложений

Шаг 1: Определите подходящую функцию глубокого обучения.

В мире глубокого обучения задачи разбиты на несколько функций. Наиболее популярными в машинном зрении мы считаем:

Классификация

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

Обнаружение и местоположение

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

Сегментация

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

Обнаружение аномалий

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

Шаг 2: Выберите инструменты

Теперь, когда вы определились с функцией глубокого обучения, которую собираетесь использовать, вам понадобится набор инструментов (разработчики называют это «платформой»), который лучше всего подходит для ваших нужд. Эти структуры предоставят набор исходных нейронных сетей, а также инструментов для обучения и тестирования сетей.
Некоторые из крупнейших мировых технологических компаний изо всех сил пытаются доминировать на рынке глубокого обучения, такие платформы, как TensorFlow от Google, Caffe2 от Facebook и OpenVino от Intel (все бесплатно), показывают объем инвестиций и ресурсов, влияющих на рынок глубокого обучения. На другом конце спектра у вас также есть Pytorch, решение с открытым исходным кодом, которое теперь является частью Facebook. Эти инструменты просты в использовании и предоставляют отличную документацию (включая примеры), поэтому даже начинающий пользователь может обучить и внедрить нейронную сеть с минимальными усилиями.
Чтобы охватить все доступные фреймворки, потребовалась бы отдельная статья, но в приведенных ниже советах перечислены основные преимущества и недостатки трех самых популярных фреймворков:

Pytorch

Легко и просто использовать.
Используется во многих исследовательских проектах.
Он не используется широко для больших развертываний.
Полностью поддерживается только в Python.

TensorFlow

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

Caffe2
Свет, что означает эффективную реализацию.
Один из старейших фреймворков (широко поддерживаемые библиотеки для CNN и компьютерного зрения).
Лучше всего подходит для мобильных устройств, использующих OpenCV.
Выбор нейронной сети в конечном итоге будет зависеть от сложности выполняемой задачи и скорости, с которой должен происходить вывод. Например. вы можете выбрать нейронную сеть с большим количеством слоев и нейронов, но вывод будет медленнее. Как правило, обученная нейронная сеть требует очень мало вычислительной мощности и может выдавать результаты в течение миллисекунд. Это позволяет делать сложные выводы для глубокого обучения с маломощными платами ARM или делать выводы с помощью специально изготовленных камер для логических выводов, таких как FLIR Firefly DL.
Кроме того, даже компании, которым не хватает ресурсов и персонала для обучения и внедрения решений глубокого обучения, могут рассчитывать на внешних консультантов; которые могут помочь различным заинтересованным сторонам на протяжении всего жизненного цикла разработки — от концептуализации до реализации. Одним из таких примеров является Enigma Pattern.

Шаг 3: Подготовьте обучающие данные для нейронной сети.

В зависимости от типа данных, которые вы хотите оценить, вам понадобится репозиторий изображений с таким количеством характеристик, которые вы планируете использовать в своей оценке, и они должны быть помечены соответствующим образом. Например, если вашей нейронной сети необходимо отличить хороший припой от плохого, ей потребуются сотни вариантов внешнего вида хорошего припоя и аналогичный набор плохих припоев с метками, которые идентифицируют их как таковые.
Есть несколько способов получить набор данных изображения:
Для распространенных случаев использования вы можете найти предварительно помеченный набор данных, соответствующий вашим конкретным требованиям, который можно приобрести в Интернете (во многих случаях это даже бесплатно).
Генерация синтетических данных может быть эффективным вариантом для нескольких приложений; тем более, что маркировка не требуется. Такие компании, как Cvedia; на базе FLIR ( https://www.cvedia.com ) используют технологию моделирования и передовую теорию компьютерного зрения для создания высококачественных синтетических наборов для обучения. Эти наборы данных аннотированы и оптимизированы для алгоритмов обучения.
Если первые два варианта недоступны, вам нужно будет создать свои собственные изображения и пометить их по отдельности. Этот процесс облегчается несколькими инструментами, представленными на рынке (ниже кратко обсуждаются несколько инструментов и методов, позволяющих сократить время разработки).

Полезные советы:
В процессе создания собственного кода глубокого обучения несколько разработчиков открывают свое решение и охотно делают его доступным бесплатно. Одним из таких инструментов, который особенно полезен, если ваш набор данных не помечен заранее, является LabelImg; инструмент графического аннотирования изображений, помогающий отмечать объекты внутри ограничивающих рамок на изображениях ( https://github.com/tzutalin/labelImg ). В качестве альтернативы весь процесс может быть передан на аутсорсинг третьей стороне.
Еще один способ сократить этап подготовки данных — дублировать одно изображение на множество разных изображений, выполняя над ними обработку изображений (поворот, изменение размера, растяжение, осветление/затемнение... и т.д.). Это также потребует больше времени на разработку, поскольку процесс сбора обучающих данных и маркировки изображений может быть передан начинающему пользователю.
Кроме того, если у вас есть определенные аппаратные ограничения или предпочтения, это становится еще более важным, поскольку инструменты глубокого обучения, обсуждаемые в следующем разделе, поддерживают ограниченный набор оборудования и часто не являются взаимозаменяемыми.

Шаг 4: Обучите и проверьте нейронную сеть, чтобы обеспечить точность

После подготовки данных вам нужно будет обучить, протестировать и проверить точность вашей нейронной сети. Этот шаг охватывает настройку и запуск сценариев на вашем компьютере до тех пор, пока процесс обучения не обеспечит приемлемый уровень жесткости для вашего конкретного случая использования. Рекомендуется разделить обучающие и тестовые данные, чтобы убедиться, что тестовые данные, которые вы оцениваете, не используются в обучении.
Это можно ускорить, воспользовавшись переносом обучения: этот процесс включает использование предварительно обученной сети и переназначение ее для другой задачи. Поскольку несколько слоев глубокой нейронной сети выполняют извлечение признаков, эти слои не нужно переобучать для классификации новых объектов. Следовательно, вы можете применить методы трансферного обучения к предварительно обученным сетям в качестве отправной точки и переобучить только несколько слоев вместо обучения всей сети. Популярные фреймворки, такие как Caffe2 и TensorFlow, предоставляют их бесплатно.
Более того, добавление новых функций для обнаружения уже обученной нейронной сети так же просто, как добавление дополнительных изображений к набору поврежденных изображений и применение обучения переносу для повторного обучения сети. Это намного проще и быстрее, чем логическое программирование; где вам нужно добавить новую логику в код, перекомпилировать и выполнить его, убедившись, что вновь добавленный код не вносит необоснованных ошибок.
Если вы новичок в программировании для обучения собственной нейронной сети, существует несколько программ на основе графического пользовательского интерфейса (GUI), которые работают с различными структурами. Эти инструменты делают процесс обучения и развертывания интуитивно понятным даже для менее опытных пользователей. Matrox MIL — один из таких примеров из мира машинного зрения.

Шаг 5: Разверните нейронную сеть и сделайте вывод о новых данных

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

Облачное развертывание

Значительная экономия на стоимости оборудования
Возможность быстрого масштабирования
Возможность внедрять и распространять изменения в нескольких местах
Необходимость подключения к Интернету является ключевым недостатком
Большая задержка по сравнению с периферийным развертыванием (из-за объема данных, передаваемых между локальным оборудованием и облаком).
Низкая надежность (проблемы с подключением могут привести к критическим сбоям)
Edge (стандартный компьютер)
Идеально подходит для высокопроизводительных приложений
Широкие возможности настройки (сборка с частями, подходящими для приложения)
Гибкая ценовая политика (поскольку компоненты можно выбирать в зависимости от области применения)
Более высокая стоимость
Обычно гораздо больший след
Edge (ARM, FPGA и камеры для логических выводов, такие как FLIR Firefly DL)
Низкое энергопотребление
Значительная экономия на периферийном оборудовании
Высокая надежность
Идеально подходит для приложений, которым требуется несколько камер в одной системе (помогает разгрузить обработку для нескольких камер).
Безопасность (поскольку оборудование может быть изолировано от других помех)
Идеально подходит для приложений, требующих небольшой площади
Не подходит для ресурсоемких задач
Решение на основе VPU имеет более высокое отношение производительности к мощности по сравнению с решениями на основе FPGA.
Решение FPGA имеет лучшую производительность по сравнению с решением на основе VPU

Made on
Tilda