Всем привет.
В прошлой статье я поделился своими наработками в области работы ИИ с CAD-программами (в моём и нашем случае, SolidWorks). В этот раз поделюсь практическими результатами на примере тестового ядра своей программы, которую уже затрагивал.
Краткая теория (совсем кратко)
Для тестирования я подготовил 3 папки с 10 файлами деталей в каждой, переименованными в соответствии с их истинным (по моим человеческим меркам) классом: “Без гибки“, “Гибка“, “Вальцовка“. В папке №1 находятся детали, “родственники” которых уже приняли участие в обучении (см. “Тест №1“). В папках №2 и №3 расположены новые для модели детали.
Работа подразумевает обязательную конвертацию в STEP, поскольку оригинальный формат деталей и сборок SolidWorks (.sldprt и .sldasm соответственно) является проприетарным и его нельзя просто взять, “разобрать” и изучить, а уж тем более дать нейронке изучить без какой-либо обработки. Так что этот момент важно уточнить в самом начале.
Оценка точности модели будет производиться с помощью автоматически созданной таблицы (программой). Под понятием “точность” подразумевается соотношение количества верно классифицированных деталей к общему числу деталей в наборе. Для оценки точности проведём 3 теста на разных наборах, о каждом из которых напишу подробнее в отдельных блоках.
Тест №1 (или “Где-то я это уже видел”)
Первый тест проводится на деталях, которые в той или иной мере уже поучаствовали в обучении модели. То есть, у этих файлов (в сравнении с теми, на которых обучалась модель) разные носители и названия, но похожая геометрия. Из-за этого ИИ может их вспомнить и правильно классифицировать. Несмотря на то, что само обучение предполагает наличие тестовой выборки, которую модель машинного обучения не знает, вариант с “воспоминаниями” нельзя сбрасывать со счетов.
Итак, папка с файлами готова:
Выбираем все файлы в папке, автоматически конвертируем их в STEP и классифицируем. Итоговый результат классификации представлен в таблице в столбце “Класс (ML)“:

Для оценки точности (да, всего лишь на 10 файлах) сопоставим название файла с определённым классом: выделим зелёным верные результаты, красным – неверные, а жёлтым/оранжевым – спорные. Далее нормализуем результаты от 0 до 1, задав верным результатам значение 1, неверным – 0, спорным – 0,5, автоматически подсчитываем и находим % от общего числа обрабатываемых деталей, строим по результатам гистограмму для наглядности:
По результатам Теста №1, точность модели достигает 80%+10% спорного результата.
Спорный результат вышел потому, что деталь имеет как сгибы, что относит её к классу “Гибка“, так и свальцованный участок, что относит её к классу “Вальцовка” (см. рисунок).
Мной и коллегами было принято решение относить такие детали к классу “Гибка”, поэтому в данном случае итоговая точность составляет 90%.
Тест №2 (или “Я новенький, но чуть-чуть смешарик”)
Второй тест проводится на деталях, которые модель вообще не знает (за исключением деталей “Гибка лопатка” и “Гибка 3“). По аналогии с первым тестом (и, что удивительно, с последующими) проводим классификацию с предварительной конвертацией в STEP.
По той же аналогии с первым тестом открываем созданную таблицу результатов и приступаем к оценке по уже описанному алгоритму:
По данным с рисунков выше, итоговая точность составляет 60%.
Заметил пару занимательных фактов и спорных моментов, основанных на результатах этого теста:
1. Абсолютно плоскую деталь со всеми признаками из “Без гибки” модель классифицировала как “Вальцовка“, что очень необычно, странно и интересно.
Вывод: нужно дообучать на большем количестве “плоских” деталей.
2. Эта деталь представляет собой двутавровую балку, загнутую под большим радиусом в дугу. С такими деталями модель вообще не сталкивалась, работая исключительно с листовыми деталями, поэтому очень предсказуемо, что класс определён неверно.
Вывод: нужно добавлять новый класс деталей (например, “прокат” или “ГОСТ“) с дообучением модели.
3. Данная деталь имеет ступенчатый гиб, который ошибочно можно классифицировать как “Вальцовка“. Результат классификации является спорным, поскольку геометрия гибов напоминает вальцовку, о чём говорит даже путаница у некоторых конструкторов (в первый раз и я насторожился, не будем ругать их за это)
Вывод: дообучать модель на таких сложных примерах, чтобы происходило явное разделение между классами “Гибка“, “Вальцовка” и “Без гибки“.
4. Интересный момент: деталь, содержащая множество различных гибов, полок, а также неправильных вырезов (из-за чего невозможно сделать развёртку без ошибок и переделок) была правильно классифицирована, что не может не радовать.
Тест №3 (или “Более перспективный новичок”)
Третий тест проводится на деталях, абсолютно незнакомых для модели:
Конвертация в STEP, классификация и создание табличного отчёта также не вызвали у программы трудностей (думаю, другие мои комментарии излишни, смотрим таблицы и гистограммы).
По данным с рисунков выше, итоговая точность составляет 80%.
И снова поделюсь интересными наблюдениями:
1. Обе детали, в действительности имеющие класс “Без гибки“, были глассифицированы как “Гибка“.
В случае с первой деталью, предполагаю, всё дело в шипах, которые присутствуют в её геометрии (хотя это всё равно странно).
В случае со второй деталью причиной неточного определения класса могли послужить как уже замеченный выше шип, так и скругление в геометрии детали.
Выводы: дообучить модель на большем количестве деталей, сделать обучающие файлы с более уникальной геометрией.
Небольшие промежуточные результаты
Результаты неоднозначны. С одной стороны, пока что не очень высокая точность, если вычислять среднее арифметическое – приблизительно 76,7%. С другой стороны, на 30 деталей неправильно склассифицировано всего 5 деталей (если не учитывать спорные моменты), что хоть и является 1/6 частью выбранного набора, но всё равно довольно мало. Спорные моменты необходимо прорабатывать немного обособленно, чтобы сделать модель ещё точнее.
Тем не менее, программа всё равно экономит много конструкторского времени, даже если учесть проверку результатов работы программы.
Тем не менее, разработка идёт и продолжится. Добавятся новые модули (например, модуль пакетного сохранения чертежей SolidWorks в PDF, о котором уже есть что написать), увеличится точность предсказания классов, увеличится число классов.
Дополнение: Интерфейс программы и рекомендации
В этом пункте кратко затрону интерфейс программы, её технические возможности на момент написания статьи, а также дам небольшие рекомендации по работе с программой.
Главно окно, представленное ниже, можно разделить на 3 блока:
-
Краткие описание и инструкция по работе с программой;
-
Окно выбора и конвертации деталей. За эти действия отвечают соответствующие кнопки.
В этот же блок отнесу опцию выбора папки для сохранения STEP во время конвертации. -
Кнопка “Классифицировать”, которая и отвечает за начало классификации деталей.
Стандартный алгоритм работы с программой:
-
Выбрать необходимые для конвертации и классификации детали кнопкой “Выбрать файлы“;
-
Выбрать папку для сохранения STEP-файлов (опционально и необязательно), после чего конвертировать выбранные детали в STEP кнопкой “Конвертировать в STEP“. Если не выбирать папку для сохранения STEP, то программа оставит созданные файлы в папке с деталями.
На пункте с конвертацией, при необходимости, можно остановиться. Если необходимо дальше классифицировать, то:
-
Нажимаем кнопку “Классифицировать“. Результат в виде таблицы появится в папке с сохранёнными STEP-файлами деталей.
Отдельно стоит пояснить назначение и других кнопок:
-
“Логи” – при нажатии появляется меню с возможностями сохранить и очистить логи программы;
-
“О программе” – открывает окно с более подробным описанием назначения и функционала;
-
“Связаться с разрабочиком” – открывает окно с контактами разработчика (мной) в виде адреса эл.почты и ссылок на профильные сайты, где этот самый разработчик пишет статьи, выкладывает программы и проекты и доступен для контакта;
-
“Выход” – закрывает программу;
-
“Стоп” – прерывает работу программы;
-
“Очистить / Сбросить” – очищает интерфейс программы до состояния “только запустил”;
-
“Показать логи” – открывает окно, в котором можно посмотреть логи программы. Когда окно открыто, текст кнопки меняется на “Скрыть логи“.
Немного рекомендаций:
-
Для корректной работы программы обязательно наличие установленного SolidWorks;
-
Первый запуск приложения может быть долгим – рекомендуется подождать. В последующие разы приложение будет запускаться гораздо быстрее.
-
Запуск SolidWorks для корректной работы программы не обязателен – во время тестирования программа работала исправно.
Заключение (или “Что дальше?”)
Работа над программой, несомненно, будет продолжаться. Необходимо дообучать модель, добавлять новые классы, модули и так далее.
Для удобства прикладываю ссылку, по которой любой может перейти, ознакомиться, бесплатно скачать и протестировать.Буду рад любой обратной связи, конструктивной критике, предложениям по улучшению и идеями для доработок.
Благодарю всех и каждого за внимание.
Всем удачи и хорошего проектирования!
Автор: OptimusPrimus


