Распознавание компонентов на плате с помощью ИИ

Ещё до начала процесса непосредственно копирования платы встаёт вопрос о сложности этого процесса, а также о его стоимости и сроках реализации. При общении с заказчиками мы всегда сразу предупреждаем, что это дорогой и долгий процесс, который имеет смысл только при планах на коммерческое производство аналогов устройства, причём копия, скорее всего, выйдет дороже покупки готовой платы. К копированию плат стоит прибегать только при крайней необходимости. Тем не менее, если такой дисклеймер не пугает, встаёт вопрос конкретной цены.
Чтобы назвать цену на копирование платы, требуется внимательно её изучить — сделать это можно только в лабораторных условиях. Необходимо установить элементный состав платы, возможность считывания прошивок из программируемых микросхем (при наличии таковых), а также сложность самой печатной платы. Для этого требуются специалисты и оборудование. Нередко приходится проводить дополнительный анализ схемы, чтобы понять, каким образом устроено взаимодействие между компонентами и какие существуют варианты замены или воспроизведения тех или иных узлов.
Есть, однако, фактор, который всегда влияет на стоимость платы: количество электронных компонентов, находящихся на ней. В этой статье речь пойдёт о том, как можно приблизительно оценить это количество при помощи распознавания объектов на фото с использованием искусственного интеллекта (ИИ).
Как работает распознавание элементов на фото
Задача распознавания объектов на фото, таких как электронные компоненты, относится к области компьютерного зрения, которая активно развивалась в последние годы. В современном мире такое распознавание осуществляется с использованием высокоточных нейронных сетей. Одно из существенных преимуществ такого подхода — возможность «научить» модель обнаруживать компоненты на новой, ранее не встречавшейся плате, если в процессе обучения она видела достаточно похожих по форме и размеру элементов.
Основой компьютерного зрения сегодня служат свёрточные нейронные сети (CNN), которые «учатся» выделять характерные признаки объектов (контуры, формы, текстуры) посредством свёрток. На ранних слоях они распознают простейшие элементы (края, углы), а на более глубоких — всё более сложные структуры (вплоть до форм микросхем). При обучении сети анализируют множество размеченных изображений, запоминая паттерны, по которым затем находят похожие компоненты на новых снимках.
При подсчёте компонентов важно не только распознать класс (резистор, конденсатор, микросхема), но и определить расположение объекта. Для этого применяют архитектуры YOLO, SSD или R-CNN, способные одновременно обнаруживать и локализовать элементы. На практике учитывают отражения, перекрытия, углы съёмки, а также предобработку изображений (нормализация, коррекция бликов), что повышает точность детектирования и упрощает расчёт общего количества компонентов. Кроме того, некоторые решения предполагают использование дополнительных алгоритмов постобработки, которые помогают «отсеять» ложные срабатывания или исправлять небольшие смещения рамок вокруг распознанных объектов.
Создание обучающей выборки
Для обучения нейросети требуются данные — примеры того, что должна выдавать нейросеть, — желательно в большом количестве. В нашем примере такими данными являются фотографии плат с размеченными на них компонентами. Для многих популярных задач, к которым относится и распознавание элементов на печатных платах, в интернете представлены открытые датасеты. К сожалению, такие датасеты весьма скромны по качеству и количеству данных. Проблема с количеством в какой-то мере решается при объединении многих доступных датасетов в один большой, но при этом количество классов компонентов сжимается до того набора, который присутствует во всех объединяемых датасетах. Вторая проблема — это качество разметки. Разные датасеты создаются с различными целями: где-то обведены контуры деталей, где-то достаточно метки, что в квадратике есть деталь, а где-то допустимо упускать мелкие элементы.
Наиболее качественными тренировочными данными являются собственноручно сделанные фотографии с собственной разметкой. У такого подхода множество достоинств, например, можно делать снимки в высоком качестве и заранее известных условиях освещённости, которые позднее можно будет повторить при подготовке изображения для инференса — распознавания с помощью нейросети. Недостатком такого подхода является высокая трудоёмкость получения размеченных данных.
Возможен комбинированный подход, который кажется нам оптимальным, когда на открытых датасетах создаются черновые версии нейросети, затем с их помощью получаются предварительные варианты разметки собственных снимков, которые впоследствии редактируются вручную и используются для обучения более совершенных версий. Помимо сокращения времени на разметку, такой метод позволяет сразу оценить, насколько хорошо модель, обученная на публичных данных, способна обрабатывать реальные изображения с ваших собственных плат. Если выясняется, что качество распознавания неудовлетворительно, можно дообучать сеть на дополнительных фотографиях или дорабатывать разметку.
Обучение нейросети
После того как собраны обучающие данные, нужно определиться с архитектурой нейросети и приступить к её обучению. На данный момент существует множество архитектур нейросетей, подходящих для задачи распознавания объектов на фото, например, уже указанные выше YOLO, SSD и R-CNN. Они отличаются по своему назначению и, следовательно, критериям оценки. YOLO обрабатывает всё изображение одним проходом и обеспечивает высокую скорость детектирования. SSD использует несколько масштабных уровней признаков, позволяя эффективно определять объекты разных размеров. R-CNN сначала выделяет потенциальные области интереса, а затем классифицирует каждую через свёрточную сеть.
Также у каждого типа архитектуры есть несколько представленных вариантов, которые не столь значительно отличаются друг от друга, и множество параметров. Например, для R-CNN необходимо указывать количество выделяемых в начале работы областей интереса: если их выбрать слишком мало, нейросеть не сможет распознать большое количество деталей на фото. В YOLO важно правильно настроить так называемые «anchor-боксы» — заранее заданные прямоугольные рамки, в которые алгоритм пытается вписать объекты, что напрямую влияет на точность при распознавании компонентов разных размеров. Для SSD существенным параметром является выбор сетки разрешений на разных уровнях, позволяющий достичь более высокой точности при обнаружении множества мелких деталей.
Следующим важным этапом является выбор параметров обучения — процесса, при котором коэффициенты в нейросети выбранной структуры подстраиваются под примеры из обучающей выборки. Например, при выборе параметров обучения нужно определиться со скоростью обучения, размером порций данных и количеством эпох, на протяжении которых сеть будет настраивать свои веса. Слишком высокая скорость обучения может привести к нестабильности и «раскачиванию» весов, а слишком низкая — сильно затянуть процесс и недообучить сеть. Важно также предусмотреть регуляризацию и схемы изменения скорости обучения, чтобы избежать переобучения и сохранить способность нейросети эффективно работать на новых данных. При этом процесс подбора оптимальных параметров осложняется тем, что для некоторых архитектур нужны значительные вычислительные мощности, ведь обучение может длиться часами и даже днями.
Важно понимать, что не существует способа заранее угадать оптимальные параметры, они подбираются опытным путём. Зачастую приходится вести настоящую «исследовательскую» работу: запустить обучение, отследить качество распознавания, скорректировать настройки и снова провести тренировку. Такой подход даёт наиболее надёжные результаты, но требует терпения и хорошей материально-технической базы — производительных видеокарт, серверов или облачных сервисов, специально предназначенных для расчётов с нейронными сетями.
Создание приложения для инференса
Для использования получившейся нейросети необходимо специальное приложение. Ввиду уникальности решаемой задачи такое приложение приходится создавать с нуля. При написании этого приложения мы ограничились простым и необходимым функционалом. Приложение должно позволять загружать фото, получать с сервера данные о разметке и затем отображать рамки с деталями поверх картинки. Также полезна возможность масштабировать фото с рамками и небольшой набор дополнительных возможностей вроде подсветки определённого вида деталей.
При разработке подобного приложения важно продумать, как именно будут выводиться результаты распознавания: необходимо ли отображать процент уверенности для каждой найденной детали, надо ли сортировать компоненты по типам, требуется ли автоматически подсчитывать общее количество элементов.
Таким образом, мы не только создали прототип приложения для распознавания компонентов на плате с помощью нейросети, но и наметили чёткий план дальнейшего развития этого инструмента. Текущий экспериментальный этап позволил убедиться в практической полезности нейросетевых технологий для оценки сложности печатных плат: автоматическое определение числа и типа элементов значительно ускоряет процесс анализа и делает его более объективным. В дальнейшем мы планируем расширить возможности приложения, включив поддержку дополнительных форматов изображений, гибкую настройку параметров распознавания и интеграцию с базами данных электронных компонентов. Кроме того, продолжится улучшение нейросети за счёт добавления новых данных и оптимизации архитектуры, чтобы ещё больше повысить точность и надёжность распознавания.