Нейросеть распознаёт узор вязания по фото
Автоматизированным производством сегодня уже никого не удивишь. Но мы попробуем. Один из наиболее необычных примеров автоматических устройств — вязальные машины, использующиеся для массового изготовления одежды. В этой статье мы расскажем, как упростить процесс создания инструкций для них с помощью искусственного интеллекта.
Наверняка многие видели книги или журналы по вязанию — в них есть сотни рисунков и описаний, придуманных задолго до появления автоматических машин и проверенных с течением времени. Вы можете прийти с таким журналом к своей бабушке, и она легко свяжет вам красивый свитер, просто взглянув на нужный узор. С вязальными машинами так, к сожалению, не получится. Во время своей работы они выполняют заданную низкоуровневую программу для каждого текстильного предмета. Код таких программ обычно сложный и требует экспертных знаний. Но можно ли как-то упростить процесс его создания, не прибегая к помощи специалистов по петлям и пряжам?
Группа учёных из Массачусетского технологического института разработала нейросеть, которая распознаёт узор вязания по изображению с участком ткани и создаёт программу для вязальной машины. Вот список её возможностей:
— автоматический перевод изображения с узором в набор производственных инструкций;
— использование большого набора данных с разнообразными узорами, который обеспечивает отображение между фотографиями и программами для вязальных машин;
— решение обратной задачи проектирования с помощью глубокого обучения;
— использование синтезированных данных в дополнение к реальным.
Несколько слов о вязании
Для тех, кто ни разу не брал в руки спицы, мы немного расскажем о самом процессе вязания. Это одна из самых распространённых форм текстильного производства. Тип вязальной машины, рассматриваемой далее, известен как «плосковязальный». Машина может автоматически создавать целые предметы одежды. В ней используются две фонтуры (игольницы) с индивидуальным управлением, ориентированные в форме перевёрнутой буквы V. Это позволяет им перемещать петли между рядами. Основные действия, выполняемые машиной, показаны на рисунках:
— вывязывание (knit): протягивание новой петли
— набрасывание (tuck): захват новой петли на спицу
— пропуск (miss) петли
— перенос (transfer) петли: перемещение петли на другую фонтуру
— смещение (racking): смена расположения спиц относительно друг друга.
Из этих операций можно создавать сложные последовательности, моделировать различные узоры и вязать носки, свитера, шапки и другую одежду.
Цель работы — автоматически генерировать машинные инструкции для воспроизведения любого геометрического рисунка из одной фотографии (например, снимка вашей кофты). Для упрощения примем тот факт, что наши узоры будут двумерными и мы не учитываем изменения, связанные с объёмной формой одежды.
Набор инструкций
Программы для вязания — это последовательность операций, которые не обязательно постоянно повторяются. Чтобы сделать процесс обратного проектирования более гибким, авторы разработали набор из 17 инструкций. Они включают в себя все основные действия, упомянутые выше. Остановимся на них подробнее.
Первая группа инструкций основана на трёх операциях: вывязывание, набрасывание и пропуск. Операции переноса позволяют перемещать петли пряжи через ряды. Это важный момент, поскольку на обратной стороне изделия обычно присутствуют ряды из изнаночных петель. Операция для их создания называется накид (purl).
Комбинация переноса и смещения позволяет перемещать петли между фонтурами. Эти операции были разделены на более низкоуровневые: шаг (move) — набор инструкций для одной фонтуры, пересечение (cross) — парные инструкции для обеих фонтур; и складывание (stack) — перенос нескольких объединённых друг с другом петель. Соответствующие символы и цветовая кодировка инструкций изображены ниже:
Планирование вязальных операций
Для каждой строки инструкции выполняется следующая последовательность шагов:
- Текущие петли переносятся на новый набор операций без смещения;
- Базовая операция (вывязывание, набрасывание или пропуск) выполнена;
- Все инструкции по переносу переходят на противоположную фонтуру без смещения;
- Инструкции по переносу в пределах одной фонтуры переходят к исходной стороне, используя соответствующий порядок;
- Инструкции складывания переносятся на исходную сторону без смещения.
Набор данных с шаблонами для вязания
Рассмотрим, какими должны быть изображения с вязальными узорами, чтобы из них можно было получить разумные команды для машины.
Авторы извлекали инструкции к шаблонам из закрытого программного обеспечения KnitPain. Узоры имеют разные размеры и охватывают большое дизайнерское разнообразие: от обычных обратных петель до кружевной вязки. В наборе около тысячи шаблонов, которые были разделены на небольшие участки 20х20. По этим участкам можно сгенерировать двумерный набор команд. Всего получилось 12392 фотографии с узорами. После этого авторы создали новые изображения двумя разными способами:
- связали 1044 реальных шаблона (реальные данные)
- сгенерировали те же шаблоны с помощью функции предпросмотра в KnitPaint (cинтезированные данные).
Пример:
Архитектура нейросети
Архитектура сети показана на рисунке ниже (реализована с помощью TensorFlow).
Сеть прогнозирования Img2Prog использует чёрно-белые изображения 160х160 в качестве входных данных и генерирует наборы команд 20х20. Её структура состоит из трёх начальных свёрточных слоёв, которые уменьшают разрешение фотографий до 20х20, и двух выходных слоёв, генерирующих инструкции. Размер ядра равен 3х3 за исключением последнего слоя с ядром 1х1. Для начальных слоёв используется номрализация экземпляра (instance normalization) и для всех слоёв — ReLU.
Уточняющая сеть Refiner преобразует реальные фотографии, делая их похожими на сгенерированные. Её реализация аналогична Img2prog, за исключением того, что разрешение выходного изображения не меняется.
Создание синтезированных узоров происходит с помощью генеративно-состязательной сети (GAN). Чтобы улучшить процесс её обучения, вводятся функции потерь восприятия и стиля между реальными и сгенерированными изображениями, а также между сгенерированными и смоделированными в KnitPaint.
Обучение
Нейросеть обучается на сочетании реальных узоров и синтезированных изображений. Всего использовалось 80% реальных данных для обучения, 5% для проверки и 15% для тестирования. Синтезированные данные использовались только для обучения.
Модель обучалась в течение 150 тыс. итераций с размером пакета 2 для каждой области данных, используя оптимизатор Adam с начальной скоростью обучения 0.0005 и экспоненциальной скоростью затухания 0.3 каждые 50 тыс. итераций. Процесс занимает от трёх до четырёх часов (в зависимости от модели) на GPU Titan Xp.
Эксперименты
Для количественной оценки сети использовались две метрики: метрика точности и метрика восприятия.
Метрика точности (accuracy) оценивает потери в двух вариантах: FULL — усреднённые по всем инструкциям, и FG — усреднённые по всем инструкциям, кроме наиболее преобладающей.
Метрика восприятия (perceptual) измеряет показатели, оценивающие внешний вид узоров. Для этого используется сравнение сгенерированных инструкций с реальными с помощью стандартных метрик пикового отношения сигнала к шуму (peak signal-to-noise ratio, PSNR) и индекса структурного сходства (structure similarity, SSIM). Здесь, как и в метрике точности, тоже учитывается распределение инструкций.
Количественные результаты представлены в таблице (для всех метрик чем больше значение, тем лучше):
Качественные результаты:
Первые 5 строк таблицы — это результаты работы предыдущих нейросетей для сравнения. Можно заметить, что наиболее близким к точности Img2prog оказался метод S + U Leaning.
Вторая группа в таблице — работа базовой нейросети Img2prog без уточняющей сети Refiner. В этой ситуации использовались только реальные изображения, которые сразу же поступали на обработку для создания инструкций.
В третьей группе показана точность модели с использованием Refiner. Также в ней отражено влияние коэффициента смешивания α.
И в последней строке таблицы показан результат, полученный с сетью Img2prog++. Она использует дополнительные пропуски соединений из каждой нисходящей свёртки, что позволяет улучшить представление. Этот вариант достиг наилучшей точности.
Наконец, авторы исследовали поведение лучшей модели для отдельных инструкций. Результаты приведены ниже:
Хотя все команды встречаются в инструкциях с разной частотой, метод неплохо справляется с отдельными из них. Но изменчивость в точности довольно высокая, что наводит на мысль о необходимости решения проблемы классового дисбаланса.
Заключение
Автоматическое создание инструкций для вязальных машин поможет избежать потребности в ручном моделировании шаблонов и позволит генерировать программный код прямо из изображений, создавать которые гораздо проще и быстрее, чем инструкции. Надеемся, что эта работа продвинет исследования в области разработки методов машинного обучения для проектирования и автоматизации производства.
С оригинальной статьёй можно ознакомиться на сайте arxiv.org. Репозиторий с исходным кодом доступен на GitHub.