Всего 3 месяца назад наша команда участвовала в HackAsia 2020 с Gammon Construction в качестве нашего партнера по вызову. Хотя мы не победили в конкурсе, это был чрезвычайно удовлетворительный проект, поскольку команда НАКОНЕЦ воплотила идею (… которая вынашивалась более года) в жизнь!

Мы создали GamBot 2.0, A.I. помощник в Revit, который работает в фоновом режиме и дает рекомендации при создании моделей в Revit. Поскольку мы разработали только Proof-of-Concept, единственной способностью GamBot было прогнозировать требования к воздушному потоку элементов помещения.

Было много вопросов по методологии, поэтому я подумал, что мы должны поделиться этими знаниями со всеми.

Предложение

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

  1. Извлечение данных из прошлых моделей в IFC
  2. Хранение в базе данных
  3. Использование данных для обучения моделей машинного обучения
  4. Передача выходных данных ML в текущие модели в фоновом режиме

Почему IFC?

В частности, модели, совместимые с IFC. По двум основным причинам:

я. Семантическое значение

Как и любая схема XML, описывающая форматы обмена данными, IFC представляет собой открытую спецификацию для данных BIM, которыми обмениваются в строительном проекте. Он охватывает с очень высокого уровня, например информация о сайте на очень подробном уровне, например отличные характеристики дверей.

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

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

II. Формат OpenBIM

Файлы, созданные с помощью проприетарных инструментов разработки BIM, являются «закрытыми» форматами. Скорее всего, методов для прямого синтаксического анализа таких форматов файлов в пригодные для использования данные мало или их нет. Однако существует несколько известных способов проверки данных из моделей IFC напрямую с использованием проектов с открытым исходным кодом, таких как xBIM, IfcOpenShell, IfcPlusPlus и т. Д. (См. Их здесь).

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

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

После этого эти модели могут находиться на локальном или облачном сервере, а локальные приложения BIM будут активировать (т.е. запрашивать) эти модели машинного обучения за кулисами, отправляя пользователям рекомендации или прогнозы в реальном времени.

Хакатон

Теперь мы закончили романтизировать с моделями, совместимыми с IFC, вот что мы на самом деле сделали для проекта хакатона. Процесс был:

  1. Извлечение и подготовка данных
  2. Модель обучения машинного обучения
  3. Модель хоста в Azure
  4. Плагин Revit для запроса модели

1. Извлечение и подготовка данных

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

Исходные данные извлечены.

Предварительно подготовленные входные данные, X.

Предварительно подготовленные данные этикетки, г

Разделите данные на обучающие и тестовые наборы для оценки точности.

Возможно, вы заметили, что данные в заголовках modeofventilation, buildingtype, level были закодированы как целые числа. Машина понимает числа, а не текст, поэтому дискретные строковые значения были классифицированы как числа с использованием категориального кодирования (Документация LabelEncoder).

2. Обучение модели машинного обучения

Мы использовали Scikit-Learn для обучения нашей модели машинного обучения, и, благодаря удобству и доступности пакета, мы смогли протестировать несколько алгоритмов обучения и выбрали наиболее точный, то есть классификатор случайного леса.

Логистическая регрессия

Классификатор случайного леса

Поддержка векторных машин.

Пакет для развертывания!

3. Модель хоста в Azure

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

Вот что вам нужно сделать, чтобы развернуть модель в качестве конечной точки API, ознакомьтесь с ресурсами, которые помогли нам пройти хакатон:

  1. Создайте группу ресурсов
  2. Определите рабочую область в этой группе ресурсов
  3. Зарегистрируйте модель машинного обучения
  4. Разверните модель машинного обучения в службе

Модель развертывания:
docs.microsoft.com/en-us/python/api/overview/azure/ml/?view=azure-ml-py#model-deploy

SDK Python:
docs.microsoft.com/en-us/python/api/overview/azure/ml/install?view=azure-ml-py

4. Плагин Revit для модели запроса

Теперь нам осталось только интегрировать это с Revit!

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

я. Добавьте триггер через Revit API Dynamic Model Updater
(интерфейс IUpdater)
ii. Запрашивайте модель машинного обучения и отправляйте результаты при срабатывании триггера

i. Средство обновления динамической модели (интерфейс IUpdater)

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

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

Вот полезные ссылки, которые проведут вас через детали реализации IUpdater, от регистрации Updater до выполнения транзакций.

TheBuildingCoder: https://thebuildingcoder.typepad.com/blog/2012/06/documentchanged-versus-dynamic-model-updater.html

Документы по Revit API: https://www.revitapidocs.com/2020/4cdaf502-fc25-8f18-7618-8448cce33d11.htm

II. Модель Query ML

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

  • Выполните запрос REST на развернутой модели машинного обучения.
  • Десериализовать ответ от конечной точки модели машинного обучения
  • Записать параметры в элементы пространства
  • Уведомить пользователя с помощью всплывающего диалогового окна

Статический метод запроса REST показан ниже.

Закрытие

Соберите все это вместе, и у нас есть помощник по искусственному интеллекту, работающий в Revit!

Надеюсь, это приведет вас в правильное русло, если вы создаете что-то подобное. Вопросы ? Заинтересованы в работе с нами? Напишите нам по адресу [email protected].

Исходное сообщение: http://aectechy.com/steps-revit-ai-assistant/