Каким образом можно определить тип застройки, анализируя спутниковое изображение?

Я планирую взять задание по распознаванию типа застройки на спутниковых снимках для своей университетской работы. Мне хотелось бы не ограничиваться простым делением изображения на тайлы и классификацией, а достичь более сложной цели — распознавать и обозначать типы застройки по их границам. Для наглядности я привожу <a href="https://romankuchukov.medium.com/cityclass-project-37a9ebaa1df7" rel="nofollow">пример</a> практически аналогичного проекта. 

Мой опыт работы с нейросетями довольно ограничен: я прошел курс по нейронным сетям на Степике, в котором было много теории и немного практики с TensorFlow. Поэтому мне нужна помощь в следующих вопросах: 

1. Какие инструменты я могу использовать для решения данной задачи?
2. Как лучше подойти к её решению, и каково общее представление о возможном алгоритме?

Также я хотел бы узнать ваше мнение о трудоемкости такого проекта. У меня есть несколько месяцев на выполнение работы, но я не хотел бы брать на себя слишком сложную задачу, учитывая мой текущий уровень подготовки.
  • 23 сентября 2024 г. 11:23
Ответы на вопрос 2
Проект по распознаванию типов застройки на спутниковых снимках — это интересная и достаточно сложная задача, но с правильным подходом и инструментами ее можно решить. Давайте рассмотрим ваши вопросы по порядку.

### 1. Инструменты для реализации проекта
- **Языки и библиотеки**:
  - **Python**: наиболее распространенный язык для задач машинного обучения и компьютерного зрения.
  - **TensorFlow/Keras** или **PyTorch**: популярные библиотеки для создания и обучения нейронных сетей.
  - **OpenCV**: для обработки изображений и предобработки данных.
  - **Geopandas**: для работы с пространственными данными (например, если вы будете использовать GIS).
  - **scikit-learn**: для базового анализа и предобработки данных.

- **Инструменты для аннотации данных**:
  - **Labelbox**: платформа для аннотации данных, в том числе для сегментации.
  - **VGG Image Annotator**: простой инструмент для аннотации изображений и создания масок.

- **Облачные платформы** (по мере необходимости):
  - **Google Colab**: позволяет использовать GPU для обучения моделей.
  - **AWS, Azure**: облачные сервисы, которые могут помочь с хранением данных и вычислениями.

### 2. Подход к решению задачи
- **Сбор данных**: Найдите набор данных со спутниковыми изображениями и соответствующими аннотациями типов застройки. Можно использовать открытые источники, такие как Sentinel Hub или Landsat.

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

- **Выбор модели**:
  - Для задач сегментации, например, можно использовать архитектуры U-Net или DeepLab, которые хорошо подходят для получения масок на изображениях.
  - Если вы хотите дополнительно классифицировать объекты, можно использовать такие модели, как ResNet или MobileNet для извлечения признаков.

- **Обучение модели**:
  - Разделите данные на обучающую, валидационную и тестовую выборки.
  - Обучите модель на обучающих данных с использованием техники повышения точности (data augmentation) для улучшения обобщающей способности.

- **Постобработка результатов**:
  - После того как модель предсказала маски, можно использовать методы морфологической обработки для улучшения результатов.
  - Очистите предсказания от шумов и выделите границы типов застройки.

- **Оценка результатов**:
  - Используйте метрики, такие как IoU (Intersection over Union) для оценки качества сегментации.

### 3. Трудоемкость проекта
Проект действительно требует времени и усилий, особенно на этапе сбора данных и их аннотации. Если у вас есть несколько месяцев, вы можете сосредоточиться на менее сложных аспектах, например, использовав предобученные модели и производя дообучение на ваших данных.

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

Успехов в вашем проекте! Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться.
Распознавание секторами или тайлами - думаю разные задачи.  Определись сразу. 
Для секторов:
Если нет размеченного датасета:
1. Накачай спут.снимки городов.
2. Разметь вручную (можно в фотошоп - слоями по типам застройки) или поищи приблуду для разметки сегментирования - видел в DeepFaceLab
3. Аугментируй - в твоем случае это в основном повороты, можно немного масштаб, гамма и шум - процентов на 10-20. Напиши программу для аугментации раз в 10.
4. В результате надо получить набор данных
200-500 - можно получить хоть какой-то положит результат.
2000-5000 - можно показать как результат решения уч.задачи. (аналог тому, что в статье).
20000-50000 - можно надеяться на пром.результат.
5. Обучи u-net сетку.
6. 100-500 раз обучи сетку меняя параметры сети (в т.ч. всякие дропауты и бэтч нормализации) и гиперпараметры. (наверно лучше это делать на маленьком наборе а затем дошлифовать на большом наборе.
7. контроллируй переобучение.
8.используй Chat GPT как советника.

По трудозатратам - думаю займет полных дней 10 на средний результат.
Похожие вопросы