Я работаю в лаборатории "Интеллектуальные технологии городского планирования" Университета ИТМО, и мой основной профиль — различные аспекты процедурной генерации в урбанистике. Мы делаем алгоритмы, способные проектировать самостоятельно или помогать проектировать живым людям разные штуки — парки, пешеходные дорожки, районы жилой застройки. Там, где у мясных мешков уходят месяцы на рисование генеральных планов в автокаде, наш алгоритм может сгенерировать результат за минуты [окей, это наш рекламный слоган, в реальности все сложнее, но так тоже иногда получается].
И боже, как я устал отбиваться от вопросов: «а какую нейросеть вы используете?».
Никакую, блин!
Нет у нас нейросетей. Шок! Сенсация!
На самом деле это очень больной вопрос. ИИ технологии сейчас захайпаны так, что бизнес готов к себе тащить что угодно, лишь бы поставить значок «содержит ИИ» на свой товар. Серьезно, нынче уже даже розетки и лампочки с ИИ делают. Но вот представление о сфере у людей со стороны зачастую очень примитивное. "Искусственный интеллект" = "нейросеть", и все тут.
Масла в огонь еще подливают студенты и разные исследователи‑дилетанты. Обычно это люди с программистским бэкграундом, но без опыта в урбанистике и городском планировании. Они привыкли любую проблему решать в духе: «ща быстренько данных в ML модельку накидаем и она нам все сделает». И каждый раз объяснять им, почему в урбанистике у них вряд ли из этого выйдет что‑то практически применимое, поднадоело. Так что я решил описать ключевые проблемы тут, на Хабре.
Итак, почему же не удается (и не удастся в обозримом будущем) засунуть в какую‑нибудь ИИ‑ML‑DeepLerning‑%еще N хайповых слов%‑модель карты и проекты существующей застройки и заставить ее сгенерировать вам хоть новый квартал, хоть новый город?
Сразу оговорюсь, что речь именно про применимое на практике городское планирование в масштабе квартала и выше. Отдельные задачи в архитектуре вполне успешно решаются разными алгоритмами, например генерация фасадов зданий. Но в этой статье речь не про них, а про генерацию документов территориального планирования, генеральных планов и тому подобного.
База любого ML — это набор данных для обучения модели. Самый идеальный алгоритм, самая многослойная сеть, обученная на мусоре, будет выдавать мусор. Обученная на слишком маленьком датасете — будет тоже выдавать мусор.
Если вы учите нейросеть генерировать картинки — к вашим услугам миллиарды изображений из интернета. Если вам нужны тексты — гигабайты текстов, от книг про Гарри Поттера до Википедии. Если нужен код — вот вам GitHub и Stack Overflow.
Если вы хотите научить нейросеть генерировать городскую застройку... то у вас проблема. Вам просто негде взять нужное количество примеров для обучения модели.
Если речь идет о проектах жилья, то даже у крупнейшего застройщика РФ — ГК «Самолет» — счет проектов идет на десятки. На их сайте, если включить фильтр по годам, то получается около 20–30 строящихся ЖК в год в Москве, еще примерно столько же по России.
Ближайший конкурент ПИК, которого они обогнали в этом году, имеет такой же примерный порядок. У всех остальных — сильно меньше.
И это вы еще попробуйте найти для этих проектов машиночитаемые планы, а не рекламные рендеры. Если вы будете работать с какой‑то одной компанией то они вам может их и дадут. А если вы независимый исследователь — готовьтесь вручную обрисовывать множество PDFок. И все равно счет пойдет на десятки. Максимум сотню проектов. Никаких тысяч и десятков тысяч, желательных для обучения всяких моделей, вы не найдете. Их просто нет — никто не строит в таких объемах.
Похожая ситуация, например, с парками. Для статьи где мы пытались генерировать зонирование парков с помощью ML классификатора, мы искали проекты парков. Сколько в год вообще благоустраивают парков по всей России? Тоже не такое уж большое число, опять же счет идет на десятки. Какой ML алгоритм можно обучить на такой маленькой выборке? Ну какой-то можно. Но с оговорками и отсутствием гарантии результата.
Вторая проблема с проектами — что они... плохие. В России только недавно начали пытаться строить что‑то приличное. Большая же часть массовой застройки во многих городах — это вот такое вот:
Причем ладно то, что это многоэтажное гетто. Варламов не одобряет, но застройщикам на него плевать, им бы деньги делать. Но даже если стать адвокатом дьявола и принять правила игры, то все равно окажется, что эти проекты плохие. Там много неудачных решений, где‑то обусловленных кривизной рук проектировщиков, где‑то кривизной поставленного ТЗ, а где‑то просто сложностью задачи.
Хороший пример: самое идеальное, самое дорогое видовое место на набережной у залива заняли... многоэтажным паркингом:
Видимо, чтобы машинки не скучали без хозяев и могли посмотреть на закат над заливом. Строить такое — это лютая дичь и неэффективное использование ценной земли. В данном случае это скорее всего получилось потому, что не осилили впихнуть паркинг в другое место чтобы выполнялись нормативы. Потребовалась бы слишком глубокая переработка проекта, что вручную слишком долго и дорого, в итоге плюнули на оптимальность, лишь бы скорее построить.
Нейросеть, научившаяся повторять такие «гениальные» решения, вряд ли будет кому‑то нужна. Лепить такое люди вполне могут сами, без участия ИИ.
В итоге если вы хотите научить вашу нейросеть генерировать хорошие проекты, вы и для обучения должны отобрать хорошие проекты.
А что такое хороший проект‑то? Если вы программист и ИИ специалист, вы его не отличите от плохого. И будет много вопросиков к тому, как вы проекты отбирали и почему взяли именно такие, а не другие.
Для эксперимента с парками мы, например, взяли проекты‑победители ежегодного конкурса, проводимого по федеральной программе «Комфортная городская среда». Это хоть какое‑то обоснование того, почему эти проекты, а не другие какие‑нибудь. Но обоснование довольно шаткое: к этой программе тоже много вопросов, качество проектирования и строительства там бывает очень разное. И нельзя однозначно сказать, что побеждают там хорошие проекты, на которых стоит учиться.
Окей, нам поможет Big Data! Проектов мало — зато у нас есть существующая застройка. Тысячи квадратных километров различных городов! Уж этого‑то точно хватит на обучение моделей!
К сожалению, тут есть одна фундаментальная проблема. ML алгоритмы пытаются извлечь некие закономерности и внутреннюю логику из обучающего набора, чтобы затем применять полученные знания для решения новых задач. Но все это работает только в тех случаях, когда эта логика вообще есть.
К сожалению, в случае с городами часто эту логику невозможно понять, глядя только лишь на карту города. Так как на принятие градостроительных решений влияло множество других факторов, которые на современной карте вы не найдете.
Вот вам пример. Мост Бетанкура в Санкт‑Петербурге. Он имеет странную изогнутую форму, вместо того, чтобы соединять берега напрямую:
Глядя на карту, невозможно понять зачем так сделали. Только изучив исторический контекст можно узнать, что мост строился по устаревшему советскому проекту. А в советские времена тут был важный военный судостроительный завод, который нельзя было снести, поэтому мост решили пустить в обход него. Но к моменту начала стройки, отстоявшей на десятки лет от момента составления проекта, завод уже давно закрыли, а проект остался без изменений из экономии и желания построить поскорее. А сейчас завод и вовсе снесли. Вот и получилось, что мост теперь делает крюк чтобы обойти пустое место.
И чему научится нейросеть, в выборке которой будут такие места? Изгибать мосты в произвольных местах?
В структуре улично-дорожной сети большую роль играли каналы и железные дороги. Шли годы и века, каналы засыпались, железные дороги демонтировались, и уже ничего вокруг может не напоминать, что когда-то это была промышленная зона. Теперь там парки и человейники вокруг... а улица почему-то изгибается под странным углом.
Зачем так сделано? Почему квартал такой странной формы? А потому что он повторяет трассировку закрытой Варшавской железной дороги, рельсы которой проходили там где пунктир нарисован.
И такого очень, очень много. Смотришь, думаешь какой идиот это проектировал, начинаешь копать — оказывается, что когда‑то давно в этом логика была, а теперь это все осталось лишь как градостроительная загадка и интересная точка на карте для краеведческих экскурсий.
Дороги, ведущие вникуда, потому что проект отменился или изменился, изгибы улиц повторяющие исчезнувшие жд и реки, странные пустыри на месте когда‑то существовавших зданий, странные формы домов обусловленные земельными спорами столетней давности.
На более крупном уровне всё то же самое. Типологии городской застройки формировались хаотично под воздействием исторических факторов, обучать на них алгоритмы и воспроизводить их в XXI веке бессмысленно или невозможно:
Радиальная планировочная структура Москвы и многих европейских городов порождена крепостными стенами тысячелетней давности, которых давно уже нет, и нет смысла воспроизводить такую планировку сейчас.
Широченные проспекты и огромные кварталы советских окраин порождены устаревшими и порицаемыми нынче подходами к проектированию — слепо их копировать тоже как бы не надо.
Тесная застройка исторических центров и дворы‑колодцы 19 и начала 20 века порождены отсутствием норм инсоляции и вентиляции и жадностью, сейчас так строить не получится (хотя жадность никуда не делась, да).
Какую логику из этого сможет выделить нейросеть? Чему она научится, если вы просто попробуете скормить ей большой массив данных о существующих городах? Какие неактуальные и нелогичные паттерны проектирования она запомнит и начнет использовать в новых проектах?
На эту тему у меня уже есть отдельная статья.
Вкратце — для любых урбанистическо‑ИИшных задач нужна куча дополнительных данных. А их нет. Есть великий и ужасный OpenStreetMap, но в нем данные неполны, неточны, некоторых важных категорий данных там нет вообще. Это все‑таки карта для навигации, а не для строительства. Там есть геометрии природных объектов, дома, дороги, иногда маршруты ОТ и расположение магазинов.
Все остальные данные либо недоступны вовсе, либо лежат в виде PDFок на сайтах местных администраций.
Где ближайшая школа и есть ли в ней места? Какой тут рельеф? Где ходит общественный транспорт? Где защитные зоны, какие тут ограничения по высотности?
Ответы на эти и подобные вопросы читайте в новой книге: «А хрен его знает!».
Когда планируют реальную стройку, все это добывают вручную, согласовывают, объединяют в одном месте и изучают проектировщики. Что‑то берут у чиновников, что‑то сами анализируют на местности. Получить все данные автоматизировано для произвольных территорий невозможно. В итоге все проекты, пытающиеся с помощью ML массово анализировать большие территории, обламываются, им негде брать значения для признаков.
Проблемы с исходными данными ставят крест на большинстве идей применения ML в урбанистике. Модели просто не на чем обучать.
Но что если в какой‑то конкретной прикладной задаче все‑таки удастся найти подходящий датасет?
Вот некоторое время назад на хайпе была идея генерации чего‑нибудь с помощью GAN. В статье https://developer.nvidia.com/blog/archigan‑generative‑stack‑apartment‑building‑design/ описывают, как сумели раздобыть датасет планировок частных домов из Бостона (выложенный тамошней администрацией, около тысячи зданий) и натренировали нейросеть их повторять.
На вход нейросеть получала контур дома, ее задачей было разделить дом на помещения и сгенерировать внутреннюю планировку:
Подобные результаты очень круто выглядят в научных статьях, которые пишут программисты для программистов. Но покажите их любому архитектору, и получите:
Таак, ну тут вот инсоляция не выполнена, тут коридор уже норматива на полметра, здесь дверь между кухней и прихожей отсутствует, тут короб вентиляции не сделан, а тут санузел на втором этаже находится над кухней на первом, так нельзя по нормативам.
Архитектура и градостроительство очень сильно зарегулированы. Тут на каждый чих найдется какой‑нибудь норматив. Все объекты, будь то планировка этажа в здании, или планировка жилого района, связаны друг с другом множеством сложных соотношений, нарушать которые нельзя. Ну вот совсем‑совсем нельзя.
В архитектуре и градостроительстве нельзя решить задачу на 90%. Даже на 99% нельзя. Только на все 100%, иначе проект не согласуют, и строить по нему вам не разрешат.
В этом принципиальное отличие этих сфер от тех, где сейчас нейросети выстреливают. Алгоритм, не дающий гарантированного решения всех ограничений, не имеет никакой ценности.
Живопись: нейросеть нарисовала лишний палец? Ну картина все равно хороша, и так пойдет, а палец можно закрасить вручную.
Текст: нейросеть чуть накосячила с формой слова? Ну ладно, в целом текст годится, пару слов и человек руками подправит.
Генпланирование: нейросеть забыла нарисовать школу? Ой нормативы поехали. Ой а дорисовать‑то ее некуда. Подвинем дом, чтобы она влезла — упс, на новом месте этот дом выпал из радиуса доступности соседней поликлиники. Добавим новую поликлинику? А некуда. Удалим ради нее другой жилой дом? Ой‑ей, просели по квадратным метрам жилья, превысили бюджет по инфраструктуре, проект стал нерентабельным. А пожарный проезд теперь залезает на трансформатор, надо инженерные сети перепланировать. Короче, надо переделывать все с нуля.
Множество сложных взаимосвязей, ни одну из которых нельзя нарушить. Потому что они все прописаны в законах, СП, ГОСТах, СНиПах и прочих бумажках.
Нейросети хорошо улавливают общие закономерности, но часто тупят в деталях и мелочах. А в строительстве весь дьявол как раз в мелочах и есть. На то, чтобы запилить простую демку расстановки дорог и домиков у меня ушел месяц. А вот сделать то же самое и со всеми видами инфраструктуры и нормативов для них ушло несколько лет плотной работы команды. И все равно архитекторы находят к чему придраться, просто после всех этих лет работы их придирки уже перешли в ту плоскость, где можно руками дотянуть результат до приемлемого.
Да, можно сказать что в том же программировании мелочи тоже важны, а нейросети научились это делать неплохо. Ага, научились. Только смотри предыдущую главу — для архитектуры у вас нет Гитхаба с тысячами репозиториев и миллионами строк кода, на котором можно бы этому научиться.
В итоге пока всё, что мне попадалось по теме «нейросети в урбанистике» хорошо выглядело, только если смотреть прищуренными глазами и не ближе чем с пяти метров. Подходишь ближе — магия пропадает, сразу видишь кучу косяков, которые делают сгенерированный проект абсолютно нереализуемым.
Даже тот же референсный пример с ArchiGAN выше, на который очень любят ссылаться. Когда я попробовал его запустить у себя, он генерировал мусор в 9 случаях из 10.
При этом ты даже не знаешь, что там подправить, чтобы его исправить. Если в детерминированном алгоритме можно подкрутить числовые параметры, чтобы сделать‑таки нужный отступ от газовой магистрали, то что можно подкрутить в нейросети, если она рисует его неправильно? Это черный ящик, не дающий никаких внятных ручек управления собой. А завтра у вас норматив изменится, и потребуется отступ не 10, а 15 метров, что вы будете делать?
Задачи архитектуры и градостроительства хорошо укладываются в формулировки задач оптимизации. Есть целевая функция, например количество квадратных метров жилья в районе, количество квартир в доме или площадей цехов в промышленной зоне. Есть ограничения. Задача - найти максимум целевой функции при выполнении всех ограничений.
И решаться они могут стандартными алгоритмами, которыми решаются задачи оптимизации. Мы в ИТМО для этих целей успешно используем генетические алгоритмы. Мы легко можем оценить качество каждой конкретной планировки - сколько нормативов выполнено, сколько нарушено, какие экономические параметры типа метров жилья или населения у нас получились. А дальше перебираем эти планировки, скрещивая их и мутируя, пока не найдем подходящую.
Работает, результат выдает. Вот только под ИИ-хайп попадает ну совсем со скрипом. На вопрос "какая у вас там нейросеть" ответить нам нечего.
Зато есть заказчики и есть работающий продукт, да.
Главная претензия у архитекторов к нашим алгоритмическим планировкам (да, этих странных людей всё время что‑то не устраивает) теперь — это то, что они «без души». Ровная сетка кварталов, где все выверено по нормативу. Идеальная машинная планировка, но такие города скучны и однообразны.
Кто хочет ощутить это в жизни — рекомендую съездить в Набережные Челны. Город, спроектированный по линейке и по науке в чистом поле, чтобы обеспечивать жильем работников КамАЗа. Вот там это ощущается.
Везде есть вся необходимая инфраструктура, но нет каких‑то центров притяжения и достопримечательностей, везде одна и та же сетка кварталов и школ‑поликлиник‑развязок.
Чтобы такого избежать, можно добавить в проектирование немного творчества. И вот тут нейросети могут быть полезны. С их помощью можно сгенерировать примерное зонирование района, в духе «тут вот жилье, тут парк, а тут зафигачим центральный проспект с доминантой». А уже поверх этого зонирования скучные традиционные алгоритмы накинут сетку улиц и радиусов доступности школ‑поликлиник.
В целом это похоже на то, как проектируют люди. Сперва широкими мазками назначаются основные точки притяжения, зоны и транспортные оси, и вот тут в чистом виде «я художник, я так вижу». А дальше уже начинается кропотливая работа по втискиванию в это всё нужного количества жилых домов и подгонка под нормативы.
В будущем мы планируем над этим поэкспериментировать. Хотя проблемы со сбором датасета тут ровно те же, что описаны в начале статьи, но так как требования к точности модели сильно ниже, то и шанс что удастся ее обучить на небольших наборах данных выше. Ведь для грубого зонирования точность «плюс‑минус 50 метров» сойдет, а вот для детального проектирования — нет.
Вкратце повторю основные идеи:
Нейросети требуют больших объемов данных для обучения, а в архитектуре и градостроительстве их нет:
Новых проектов слишком мало.
Исторические планировки городов слишком хаотичные и нелогичные, нет смысла пытаться их понять и воспроизвести.
Нейросети улавливают крупные закономерности и игнорируют мелочи, а в архитектуре мелочей нет, всё зарегулировано. В итоге ты либо удовлетворяешь всем‑всем‑всем нормативам, либо ты бесполезен. Половинчатые решения никому не нужны и не имеют ценности.
Существует огромная пропасть между исследованиями, которые делаются ИТшниками и специалистами Computer Science, и потребностями индустрии в лице застройщиков и проектировщиков. Существующие хайповые алгоритмы ML не способны пока предложить в этой сфере что‑то, что можно было бы построить. Приходится ориентироваться на более классические подходы и более детерминированные алгоритмы.
Нейросети можно использовать, чтобы добавить немного души в планировки, сделанные традиционными алгоритмами.
Если у вас есть опыт применения ML и ИИ в градостроительстве — пишите в комментариях. Я сам время от времени проглядываю статьи и исследования по этой теме, и пока не встречал ничего реально полезного и применимого, но мог что‑то упустить.
А может я уже просто старый дед, которому все это новое и хайповое кажется лишним и вредным, ведь «в наши‑то времена и без ваших нейросеток проектировали», да.
Кстати, мы ищем сотрудников. Нужны нам миддлы, опыт в Java/Kotlin от 3 лет. Работа над такими вот проектами процедурной генерации городов, есть алгоритмическая часть, есть «энтерпрайзнутая» в виде бэкенда на Spring. Частичная удаленка, офис у нас в Санкт‑Петебрурге на Биржевой линии, 1–2 дня в неделю в офисе, остальное время можно удаленно. 200–250к миддлу готовы платить. Кому интересно — обращайтесь в личку.