| 서비스 제품명 | wildfireX |
| 프로젝트명 | AI를 활용한 산불 확산 예측 및 실시간 대응 서비스 |
| 기간 | 2025.04.14.(월) ~ 2025.05.22.(목) 6주 |
최근 의성 산불은 산불확산예측시스템의 미가동으로 인한 대응 지연으로 큰 피해를 초래하며, 기존 산불 대응체계의 한계를 보여주었다. 또한 지난해 10ha 이상 대형 산불이 발생할 때 예측시스템이 활용되지 않거나 산불 확산 정보가 지자체에 공유되지 않았다. 산불로부터 국민의 생명과 재산을 보호할 수 있도록 효율적이고 체계적인 산불 진화체계를 구축하고자 한다.
wildfireX는 AI를 활용한 산불 확산 예측 및 실시간 대응 서비스이다.
전국 CCTV 영상과 실시간 위성을 활용하여 산불 발생 가능성을 감지하고, 이상 징후 발생 시 관리자에게 알림 제공한다. 기상 데이터, 지형 데이터, 산림 정보, 실시간 영상 데이터를 종합해 산불 확산 경로 및 범위를 예측한다. 결과적으로, 화재 규모, 위치, 주변 인프라에 따라 최적화된 진압 전략 및 현장 지휘 체계 매뉴얼을 제공한다.
전국 실시간 CCTV 영상을 활용하여 연기를 감지함으로써 화재 산불 발생 가능성을 감지한다. 수오미 NPP 위성을 활용하여 CCTV 좌표 기준 발화점을 추정하고 화재를 판단한다. 토지 피복도를 활용하여 산지임을 확인함으로써 산불을 확정한다. 이 과정을 통해 관리자에게 알리고 정보를 제공한다.
토지피복도, DEM, 기상 데이터를 종합해 Spark Wild Fire 시뮬레이터를 활용하여 산불 확산 경로 및 범위를 예측한다.
openCL 기반의 Rate-of-Speed 결정 코드를 바탕으로 토지종류별 전파 속도를 결정한다. (한국형 모델 적용; 우리나라의 산지의 경우 급경사가 많아 경사도를 더 민감하게 고려해야 함, ..., etc)
화재 규모, 위치, 주변 인프라에 따라 최적화된 진압 전략 및 현장 지휘 체계 매뉴얼을 제공한다. 이때, 사용자는 산불의 현재 상황과 진압 프로토콜을 PDF로 문서화하여 활용할 수 있다.
기온, 습도, 풍속, 풍향 등 13개 항목의 기상 데이터 약 3천 400만개를 수집 및 연산한다. 지형 고도 데이터인 DEM과 토지 피복도를 수집 및 전처리한다. 이때, 정확한 분석을 위해 리샘플링 작업을 수행하였다. 시뮬레이터의 기본 환경은 호주 좌표계이므로 한국 좌표계로 변환하였다. 즉, EPSG 코드를 3577에서 5179로 변환하였다.
이 시뮬레이터는 GPU 병렬 연산 기반 모델 데이터 처리 도구로, 산불 확산 모델 시뮬레이션을 수행한다. 격자 기반 점위(Point-wise) 방식을 사용하여 셀 단위로 확산을 정밀하게 계산한다. 폰노이만 이웃 구조(상하좌우 4방향)를 활용한 확산 모델을 기반으로, 연료량·풍속·경사도 등 환경 요소를 반영하여 셀별 확산 속도를 커스텀마이징하였다. OpenCL을 기반으로 수천 개 셀의 상태를 실시간 병렬 처리하여 시뮬레이션 성능을 극대화하였다.
Deep Q-Network(DQN)을 활용한 다중 에이전트 기반 강화학습 구조로 진화 전략을 학습한다. PyTorch 기반으로 Custom DQN을 구현하며, 상태값(input)으로는 격자 환경의 전체 상태, 각 에이전트의 위치, 과거 행동 이력을 사용한다. 행동값(output)은 이동 방향을 선택하며, 진화 여부 결정 등 이산형(discrete) 행동을 선택한다. 경험 재생 메모리(Experience Replay)를 활용하여 학습하며, Target Network를 적용하여 일정 주기마다 정책 갱신이 된다. 훈련 반복을 통해 에이전트 전략을 고도화하였다.
선택한 에이전트는 헬기와 방화선이다. 헬기는 지정된 위치로 이동 후 일정 반경 내에 물을 투하하여 화재를 진압한다. 또한 셀 단위로 방화선을 설치하여 산불의 확산 경로를 차단한다. 각 에이전트는 환경을 관찰한 후 보상 함수에 기반한 행동을 수행하며, 상호 협력도 가능하다.
COCO 데이터셋 호환, instance segmentation 필요(폴리곤 마스크), PyTorch 생태계 적합(구현의 편의성)을 이유로 Detectron2의 Mask R-CNN를 선택하였다. 이때, Mask R-CNN은 무엇이냐, 어디에 있냐, 픽셀 단위로 어느 영역이냐 등 3가지를 동시에 예측할 수 있는 모델 학습이다. 최종적으로, finetune_data_v2는 실시간 감지로 인해 FPS가 높은 것이 유리하며, mAP가 조금 낮지만 단계별 검증으로 보완이 가능하여 선택하였다.
📦 프로젝트 루트 (master)
├── 📂 AI (AI 관련 폴더)
│ ├── 📂 FLASK
│ │ ├── 📂 detectron2 (모델 학습 도구)
│ │ ├── 📂 mountain (산지 판단)
│ │ │ ├── check_mountain.py
│ │ │ ├── land_classitification_5179.tif
│ │ │ ├── land_classitification_gyeongbuk.tif
│ │ │ ├── reproject_tif.py
│ │ ├── 📂 smoke_model (연기 추론)
│ │ │ ├── config.yaml
│ │ │ ├── detection_frame.py
│ │ │ ├── detection_images.py
│ │ │ ├── image_utils.py
│ │ │ ├── video_utils.py
│ ├── 📂 smoke_data_learning (연기 모델 학습)
│ │ │ ├── 1st_baseline_v1.ipynb
│ │ │ ├── 2nd_finetune_aug_v1.ipynb
│ │ │ ├── 3rd_finetune_data_v1.ipynb
│ │ │ ├── 4th_finetune_data_v2.ipynb
│ │ │ ├── 5th_finetune_data_v3.ipynb
│ │ │ ├── model_test_video.ipynb
│
├── 📂 FE (프론트엔드)
│ ├── 📂 public (정적 파일)
│ ├── 📂 src
│ │ ├── 📂 app (Next.js 앱 라우팅 구조)
│ │ │ ├── 📂 simulation (시뮬레이션 관련 페이지)
│ │ ├── 📂 components (재사용 가능한 컴포넌트 모음)
│ │ │ ├── 📂 stage (시나리오 단계별 컴포넌트)
│ │ ├── 📂 contexts (전역 상태 관리)
│ │ ├── 📂 types (카카오맵 등 외부 데이터 타입 포함)
│
├── 📂 BE (백엔드)
│ ├── 📂 src
│ │ ├── 📂 main
│ │ │ ├── 📂 java
│ │ │ │ ├── 📂 com/ssafy/wildfirex
│ │ │ │ │ ├── 📂 cctv
│ │ │ │ │ │ ├── 📂 controller (cctv 요청을 처리하는 컨트롤러)
│ │ │ │ │ │ ├── 📂 dto (데이터 전송 객체)
│ │ │ │ │ │ ├── 📂 entity (데이터베이스 엔티티)
│ │ │ │ │ │ ├── 📂 repository (DB 연동)
│ │ │ │ │ │ ├── 📂 service (비즈니스 로직을 처리)
│ │ │ │ │ ├── 📂 config (프로젝트의 전역 설정 및 외부 연동 기능)
│ │ │ │ │ ├── 📂 fire
│ │ │ │ │ │ ├── 📂 controller (화재 감지 요청을 처리하는 컨트롤러)
│ │ │ │ │ │ ├── 📂 dto (데이터 전송 객체)
│ │ │ │ │ │ ├── 📂 entity (데이터베이스 엔티티)
│ │ │ │ │ │ ├── 📂 repository (DB 연동)
│ │ │ │ │ │ ├── 📂 service (비즈니스 로직을 처리)
│ │ │ │ │ ├── 📂 handler (웹소켓 핸들러)
│ │ │ │ │ ├── 📂 scenario
│ │ │ │ │ │ ├── 📂 controller (시나리오 요청을 처리하는 컨트롤러)
│ │ │ │ │ │ ├── 📂 dto (데이터 전송 객체)
│ │ │ │ │ │ ├── 📂 entity (데이터베이스 엔티티)
│ │ │ │ │ │ ├── 📂 repository (DB 연동)
│ │ │ │ │ │ ├── 📂 service (비즈니스 로직을 처리)
│ │ │ ├── 📂 resources (환경 변수)
│ │ ├── 📂 test/java/com/ssafy/wildfirex
│
├── 📂 tools (데이터)
├── 📂 exec (개발문서)







