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

Автор: Партха Дека и Рохит Миттал

Автоматизация промышленного производства:

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

Глубокое обучение для проверки качества:

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

Что такое глубокое обучение?

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

Сверточная нейронная сеть:

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

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

Сверточная нейронная сеть (также известная как ConvNet) - это не что иное, как последовательность слоев. Для построения архитектур ConvNet используются три основных типа слоев: сверточный уровень, уровень пула и полностью связанный уровень. Эти слои сложены друг с другом, чтобы сформировать полную архитектуру ConvNet:

Источник изображения: http://cs231n.github.io/convolutional-networks/

Изображение ниже поясняет концепцию сверточного слоя:

На приведенном ниже изображении поясняется концепция уровня объединения (средний или максимальный пул):

Ниже приводится одна из оригинальных архитектур CNN:

Визуализация CNN:

Ниже приведено изображение трещины на ровной поверхности:

К изображению трещины, приведенному выше, применяются по два уровня Conv (один фильтр 3x3), ReLU и Max Pooling (2X2), аналогичные архитектуре LENET-5. Ниже можно увидеть, что архитектура CNN сосредоточена на блоках области трещин и их распространении по поверхности:

Пример использования:

Чтобы сохранить конфиденциальность нашей работы, мы представляем ниже абстрактный пример использования:

Постановка проблемы:

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

Резюме:

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

Подробная информация о нашей архитектуре глубокого обучения:

Чтобы лучше описать ситуацию, мы используем пример изображения печатной платы со встроенным чипом ниже:

Наш первый подход:

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

Почему извлечение рентабельности инвестиций раньше DL?

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

  • Первый отрывок «Область интересов (ROI)» с компьютерным зрением (немашинные методы обучения). Здесь мы проходим несколько процессов с изображением, таких как масштабирование серого, преобразования, такие как размывание, расширение, закрытие изображения и т. Д., И в конечном итоге исключаем рентабельность инвестиций из изображения на основе типа варианта использования / типа продукта и т. Д. Основная идея эрозии как эрозия почвы - размывает границы объекта переднего плана. Расширение прямо противоположно эрозии - оно увеличивает размер объекта переднего плана. Обычно в таких случаях, как удаление шума, за эрозией следует расширение. Открытие - это просто еще одно название эрозии, за которой следует расширение. Это полезно для удаления шума. Закрытие происходит в обратном порядке по отношению к открытию, расширение сопровождается эрозией. Это полезно для закрытия небольших отверстий внутри объектов переднего плана или маленьких черных точек на объекте. Преобразование градиента - это разница между расширением и эрозией изображения. В целом эти шаги помогают открыть едва заметные трещины / царапины на исходном изображении. См. Рисунок ниже:

  • Во-вторых, обнаруживайте дефекты с помощью глубоких нейронных сетей (моделей на основе глубоких нейронных сетей (CNN)) с использованием проверенных топологий CNN, таких как Inception Net (также известная как Google Net), Res Net, Dense Net:

Некоторые другие области, где необходимо было поэкспериментировать, чтобы найти оптимальную архитектуру.

  • Расширение данных. У нас есть несколько тысяч уникальных изображений, помеченных как дефектные, и несколько тысяч - как исправных. Увеличение критически важно, чтобы избежать переобучения тренировочного набора. Мы сделали X случайных обрезок и поворотов по Y (1 исходное изображение получилось в увеличенных изображениях X * Y). После увеличения у нас есть X * Y тысяч дефектных изображений и X * Y тысяч хороших изображений. Ссылаясь на одну из оригинальных статей CNN в этом контексте https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
  • Стратегия инициализации для топологий CNN:

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

Вместо случайной инициализации весов на каждом уровне мы рассматривали инициализацию ImageNet для каждой топологии CNN, наша точность DL существенно увеличилась, когда мы использовали инициализацию ImageNet, чем случайную.

  • Функция потерь и Оптимизатор:

· Потери перекрестной энтропии: потеря перекрестной энтропии, или потеря журнала, измеряет эффективность модели классификации, выходом которой является значение вероятности от 0 до 1. Потери перекрестной энтропии возрастают по мере того, как прогнозируемая вероятность отклоняется от фактическая этикетка. Таким образом, прогнозирование вероятности 0,01, когда фактическая метка наблюдения равна 1, было бы плохим и привело бы к высокому значению потерь. У идеальной модели потери журнала равны 0.

· SGD и импульс Нестерова: SGD или стохастический градиентный спуск - это итерационный метод для оптимизации дифференцируемой целевой функции (функции потерь), это стохастический потому что для обновления градиентного спуска из данных берутся случайные выборки. Импульс - это скользящее среднее градиентов, оно используется для обновления веса сети и помогает ускорить градиенты в правильном направлении. Нестеров - это версия импульса, которая в последнее время становится популярной.

Наш второй подход:

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

Решение. Мы построили двухэтапную сквозную архитектуру DL. На первом этапе вместо подхода CV мы использовали подход DL для прогнозирования самого ROI. Мы вручную создали помеченный набор данных с помощью инструмента ограничивающей рамки, и мы даем возможность обучить архитектуру DL для прогнозирования рентабельности инвестиций. Одним из недостатков этого метода является то, что помеченный набор данных должен быть явным и достаточно обширным, чтобы включать все типы продуктов и т. Д. (Тип печатной платы / тип микросхемы в случае нашего абстрактного примера), чтобы глубокая нейронная сеть могла хорошо обобщаться на невидимых изображениях. См. Рисунки ниже:

  • Функция потерь генератора рентабельности инвестиций CNN:

Первоначально мы использовали функцию потерь на основе квадрата расстояния, как показано ниже:

После обучения модели Resnet50 в течение 20 эпох на наборе для проверки мы достигли следующей метрики проверки для средней пропущенной площади и долговых обязательств:

Просп. пропущенная область = 8,52 * 10–3

Просп. IOU (пересечение над объединением) = 0,7817

Мы хотим улучшить хотя бы долговую расписку

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

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

  • Увеличение рентабельности инвестиций CNN: мы просто добавили маржу в 5% (как левую, так и правую) во время обучения и во время тестирования в наши прогнозируемые рентабельности инвестиций.
  • Результаты генератора рентабельности инвестиций CNN: Мы использовали топологию Resnet50 (инициализация ImageNet) и оптимизатор импульса SGD + Нестеров с = 2, = 1 в потерях на основе площади, как описано выше. Обучая модель Resnet50 для нескольких эпох, мы хотим минимизировать наши средн. пропущенная область и максимизировать нашу сред. Долговая расписка (Лучшая долговая расписка - «1»). После обучения в течение 20 эпох мы достигли следующего на наборе проверки, с потерями на основе площади и увеличением мы улучшили (как описано выше) нашу метрику проверки на пропущенную область и долговую расписку:

Средн. Пропущенная площадь = 3,65 * 10–3

Просп. Долговая расписка (пересечение над союзом) = 0,8577

Эксперименты и тесты:

Общее количество изображений: несколько тысяч изображений.

Разделение данных: разделение с 80 на 10, с использованием только уникальных изображений

Используемый фреймворк: PyTorch и Tensorflow / Keras

Инициализация весов: предварительное обучение в ImageNet

Оптимизатор: SGD со скоростью обучения = 0,001, с использованием Нестерова с моментом = 0,9

Потеря: перекрестная энтропия

Размер партии: 12

Общее количество эпох: 24

Форма изображения: 224x224x3 (за исключением Inception V3, для которого требуется 299x299x3)

Критерий: наименьшая потеря проверки

Наши тесты с обоими подходами довольно сопоставимы, результаты с CV + DL (первый) подход немного лучше, чем DL + DL (второй) подход. Мы считаем, что наш DL + DL мог бы быть лучше, если бы мы могли создать обширный и четко обозначенный набор данных ограничивающей рамки.

После успешного завершения обучения необходимо найти решение логического вывода, чтобы завершить полное решение. Мы использовали программное обеспечение Intel OpenVino для оптимизации логического вывода на различных типах оборудования, помимо ЦП, таких как FPGA, Intel Movidius и т. Д.

Вывод:

Intel Open Vino: на основе сверточных нейронных сетей (CNN) набор инструментов Intel Open Vino расширяет рабочие нагрузки на оборудование Intel и максимизирует производительность:

- Обеспечивает вывод глубокого обучения на основе CNN на периферии

- Поддерживает разнородное выполнение на ускорителях компьютерного зрения - ЦП, ГП, Intel® Movidius ™ Neural Compute Stick и FPGA - с использованием общего API

- Ускоряет выход на рынок с помощью библиотеки функций и предварительно оптимизированных ядер.

- Включает оптимизированные вызовы для OpenCV и OpenVX *

См. Следующие рисунки по архитектуре Open Vino:

Двухэтапное развертывание:

- Шаг первый - преобразовать предварительно обученную модель в IR с помощью Оптимизатора модели:

§ Создание действительного промежуточного представления: если этот основной артефакт преобразования недействителен, механизм вывода не может работать. Основная ответственность оптимизатора модели - создать два файла для формирования промежуточного представления.

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

IR - это пара файлов, которые описывают всю модель:

.xml: описывает топологию сети.

.bin: содержит двоичные данные о весах и смещениях.

- Шаг второй - использовать механизм вывода для чтения, загрузки и вывода файлов IR, используя общий API для ЦП, графического процессора или оборудования VPU.

Документация Open Vino: https://software.intel.com/en-us/inference-trained-models-with-intel-dl-deployment-toolkit-beta-2017r3

Контрольные выводы для образца изображения:

Понятно, что оптимизация с помощью программного стека имеет решающее значение для сокращения времени вывода. Благодаря оптимизации программного обеспечения OpenVino время задержки увеличивается в 30–100 раз. Кроме того, другие аппаратные ускорители Intel, такие как Intel Movidius и FPGA, прошли такое же тестирование логического вывода. Намерение состояло в том, чтобы увидеть, насколько ускорители могут улучшить традиционные процессоры. Ниже приведены некоторые тесты вывода на образце изображения:

Использовал Intel Movidius Myriad1, преобразовал нашу модель Resnet-50 Tensorflow / Keras в графики NCS с помощью NCS SDK, Raspberry Pi размещает изображения, а логический вывод выполняется с помощью блока обработки изображений на карте movidius. Мовидиус-джойстик имеет меньшую вычислительную мощность, поэтому этот ускоритель не обеспечивает большого прироста производительности. Кроме того, используемая программная среда представляет собой граф NCS, который может не содержать всего повышения производительности (разреженность, квантование и т. Д.) От такой структуры, как OpenVino.

* Сконфигурировал и запрограммировал плату FPGA с Open Vino на Linux-машине с предоставленным битовым потоком для нашей модели Resnet-50. FPGA действует как настоящий ускоритель и обеспечивает дальнейшее ~ 10-кратное улучшение по сравнению с процессором с той же программной структурой (OpenVino).

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

Визуализация наших CNN с помощью тепловых карт:

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

На основе этого исследования, проведенного в Массачусетском технологическом институте https://arxiv.org/pdf/1512.04150.pdf, была предложена карта активации классов в сочетании с глобальным слоем максимального объединения для локализации областей изображений, специфичных для классов.

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

Ниже приводится интерпретация тепловой карты с использованием этой техники на изображении «трещина на плоской поверхности» с использованием архитектуры Resnet-50, обученной на ImageNet. Как мы видим, тепловая карта фокусируется на области трещины ниже, хотя архитектура не обучается на таких изображениях -

Резюме и заключение:

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

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

Использованная литература:

Https://www.coursera.org/learn/convolutional-neural-networks

Https://arxiv.org/abs/1512.03385

Http://cs231n.github.io/convolutional-networks/

Https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

Www.quora.com

Https://arxiv.org/pdf/1512.04150.pdf

Https://keras.io/

Https://pytorch.org/

Https://opencv.org/

Https://software.intel.com/en-us/openvino-toolkit/

Https://movidius.github.io/ncsdk/