날씨 예측은 인간의 생활에 아주 중요한 역할을 한다. 이제 까지 사람들은 많은 이유로 날씨를 예측해보려고 하였다. 날씨를 예측하는 방법은 상당히 많은 부분을 수치학적인 모델에 의존한다.
나는 번개가 너무 자주 치던 군생활에서 이 주제를 찾아내었다. 현재에 이르러선 많은 전자장비들이 만들어졌고 그 전자장비를 방어하기 위해서 피뢰침 등 여러가지 장비를 만들었다. 하지만 여전히 방어 장비가 갖춰지지 않는 환경에서 작동하는 전자장비들이 많다. 나는 이러한 전자장비를 다루는 일을 했었다. 이러한 장비들을 지키기 위해서는 결국에는 장비를 낙뢰가 치는 환경에서 장비를 끄는 것이 낙뢰조치가 될수 밖에 없었다.
경험적인 방법으로 예측하여 장비를 낙뢰조치를 시행하는 것은 효율이 떨어질수 밖에 없다. 만약 조금 더 정확한 시간과 공간을 예측할 수 있다면 장비의 손상의 가능성과 효율성을 동시에 챙길 수 있을 것이라는 생각이 들어서 주제를 선정하게 되었다.
낙뢰는 기상현상 중 가장 예측하기 어려운 현상이다.낙뢰에 대비를 하기 위해서 필요한 시간은 최초 10분 정도 뒤의 낙뢰를 예측할 수 있어야 방비가 가능하다. 많은 연구들이 낙뢰를 예측하거나 낙뢰가 떨어질만한 지역을 예측하는 연구들이 이루어지고 있었다.
이 연구에서 나의 목표는 Deep neural Network(DNN)을 이용하여 2분뒤의 미래 낙뢰 발생 가능성 및 발생 위치를 예측하는 것을 목표로 하였다. 이 프로젝트는 팀원 없이 오롯하게 스스로 진행한 프로젝트이다.
기상예측의 방식에 대해서 먼저 이해하고 넘어갈 필요가 있다. 예전부터 기상예측은 기상이 균형을 이루려는 속성을 가진다는 전제하에 수학적인 기법을 사용하여 예측하는 방식을 사용해왔다. 최근에는 데이터의 축적과 머신 러닝의 발달로 조금 데이터에 기반한 예측이 이루어지기 시작했다.
(1) NWP(Numerical Weather Prediction)
과거의 기상 예측은 기후적인 지표들을 활용하여 예측을 하는 것에 의존해왔다. 온도, 습도, 기압, 풍향, 풍속... 등등 여러지표들을 측정한다. 이후에 발견된 여러가지 기후적 방정식에 대입하여 결과로 나오는 기상현상을 예측하는 것이 NWP 방식이다. 낙뢰를 예측하는데 영향을미치는 요인들로는 얼음이 얼마나 구름에 섞여있는가, 눈이 얼마나 섞여 있는가 등을 측정하여 낙뢰를 예측한다. 낙뢰를 하나의 파라미터로 만들어서 예측하려는 lightening parameterization도 NWP 예측 방식의 한가지라고 생각할 수 있다.
(2) Machine Learning
머신러닝의 발전으로 우리는 상당히 많은 일들을 할 수 있게되었다. 뿐만 아니라 딥러닝의 발전으로 많은 데이터를 보유하고 있는 기상 분야의 입장으로써 엄청나게 쌓여있는 데이터로 많은 모델들을 만들고 시뮬레이션 할 수 있다는 장점이 있어 많은 연구자들이 딥러닝을 활용하여 기상현상을 예측하려고 노력하였다. 결과적으로 시간적으로 조금 뒤의 미래는 아주 정확하게 예측할 수 있었지만 여전히 예측하려는 시간이 미래로 가면 갈수록 정확도가 떨어지는 현상은 여전히 존재한다.
이 연구에서는 NWP 방식은 사용하지 않았다. 전통적인 방법을 제외하고 CV라는 관점에서 기존의 예측을 뛰어넘을수 있을까라는 의문이었다. 또한 나의 기상학적인 도메인 지식이 부족했기 때문에 어떻게 사용해야할지 전혀 감이 잡히지 않았다.
이 연구에 대해서 진행하기 전에 이전 논문들을 꽤나 많이 찾아보았다. 낙뢰에 대한 연구가 워낙 예측하기가 어려운면이 있어서 논문을 찾는것도 생각보다 힘들었다. 아래는 내가 주로 참조한 논문들이다.
(1) Analysis Methods for NWP
(LORENC, Andrew C. Analysis methods for numerical weather prediction)
NWP(Numerical Wheather Prediction) 방식은 기본적으로 기상이 균형을 잡는다는 전제하에 수학적인 분석을 한다. 가장 기본적인 기상예측 방식에 대해서 이해할 수 있었던 논문이다. 이 연구에 직접적인 영향을 미치진 않았지만 기존의 예측방식이 어떤식으로 이루어지는지에 대해서 이해할수 있는 논문이었다.
(2) LightNet
(Yangli-ao Geng, Qingyong Li, Tianyang Lin, Lei Jiang,Liangtao Xu, Dong Zheng, Wen Yao, Weitao Lyu, and Yi-jun Zhang. Lightnet: A dual spatiotemporal encoder networkmodel for lightning prediction)
전에 사용하던 NWP 방식을 그대로 사용하고 거기에다가 더해서 이전에 낙뢰가 쳤던 위치정보를 같이 사용하여 같이 예상한다. 고전적인 방식만 사용한 결과보다 이전의 낙뢰 정보를 사용한 것이 조금 더 정확도가 높았다.
(3) Nowcasting by Multisource data
(Kanghui Zhou, Yongguang Zheng, Wansheng Dong, andTingbo Wang. A deep learning network for cloud-to-groundlightning nowcasting with multisource data)
레이더 영상, 위성 영상, 낙뢰가 떨어진 지점을 표시하는 지도까지 많은 영상자료를 입력으로 하여 낙뢰가 예상되는 지도를 그리는 연구이다. 후에 내가 사용한 U-net 구조를 차용한 딥러닝 구조를 사용하였다.
(4) Lightening Detection from weather radar
(Da Fan Drew Polasky Sree Sai Teja Lanka Sumedha Prathipati Lightning Detection from Wheather Radar Pennsylvania State University State College, PA, 2020)
가장 많이 연구되고 있는 낙뢰를 예측하기 위해서 가장 많이 쓰이는 것은 낙뢰 관측 레이더 데이터이다. 레이더 데이터로 낙뢰가 떨어진 위치가 그려진 영상을 입력 데이터로 사용하여 단위 시간 뒤의 영상을 재구성하는 방식으로 예측한다. 이 연구에서 Res-net, U-net, 기타 등등 여러 가지 구조의 딥러닝을 사용하여 실험을 진행하였다. 그 중 가장 성능이 좋게 나온 구조가 U-net 구조라고 밝혔다. 이 논문에서 u-net 구조가 가장 적절하다고 결론을 내리게 되었다.
기상청에서 제공하는 위성사진
기간 : 2020-8월(낙뢰를 가장 자추 관측할수 있는 기간)
채널 : 수증기 (6.3mf) -> 참고 논문과 가장 유사한 채널 선정
낙뢰 좌표 데이터
위도/경도로 이루어진 좌표 정보
위의 두가지 데이터셋을 일치시키기 위해서 이미지의 시간으로 통일해서 만약에 낙뢰가 발생했다면 이미지에 낙뢰가 발생했다는 표시(0, 1)를 하고 그 좌표를 적어주었다.
이미지 데이터셋 배열 맨 아래쪽에 입력을 사용하였다.
(예측 및 결과 데이터이기 때문에 training 할때는 포함하지 않았다.)
이 프로젝트를 진행할때는 pandas를 잘 사용하지 못하는 때여서 정말 주먹구구식으로 데이터를 처리한것 같다. 만약에 지금 다시 이 프로젝트를 진행한다면 새로운 dataframe을 제작하여 결과데이터를 정리했을것이다. 어차피 이미지 데이터는 2분 간격이었기 때문에 결과 데이터를 만들기도 쉬웠을것이다.
이전 연구에서 진행된 가장 효율적인 딥러닝 구조는 U-net이라고 결과가 나왔었다. U-net의 효율적인 이유는 convolution을 진행하는 과정에서 upsampling을 하는 과정에서 이전에 downsampling을 진행한 동일한 resolution의 데이터를 붙여서 convolution해 sampling에서 손실되는 정보를 줄일수 있는 구조이기 때문이다.
연구에서 구성한 구조의 입력으로는 464x464x4 크기의 데이터를 입력으로 한다. 입력데이터의 마지막 차원은 시간의 차원으로써 n분, n+2분, n+4분, n+6분의 위성영상으로 구성되어 있다. 출력으로는 464x464, 크기의 영상데이터 한 장, 낙뢰의 유무의 예측값(0, 1), 그리고 낙뢰의 위치데이터(위도, 경도) 가 출력된다. 464x464의 이미지는 결과적으로 n+8분의 영상과 비교되어 training 된다.
낙뢰의 좌표와 유무에 대한 데이터를 위해서 추가적인 설계를 진행해주었다. Autoencoder 구조의 최중심부에는 예측을 하기위한 데이터의 feature들이 모인다고 생각해서 가장 feature가 압축되는 부분에서 새로운 convolution 및 fully-connected layer을 만들어주었다.
사실 이 모델의 설계도 사실 좀 잘못되었었다고 생각한다. 압축돠는 feature을 가져오는것은 나름 괜찮은 아이디어였다고 생각되나 쌓아올린 layer가 너무 얕아 충분하게 좌표데이터로 변환하기에는 부족했던것 같다. 결과적으로 내가 예측하고 싶은 데이터가 출력되는 부분이었기 때문에 충분한 실험을 더 거쳤으면 더 좋은 결과가 나왔을거 같다.
트레이닝을 위한 하이퍼 파라미터는 아래의 표와 동일하게 진행되었다. 약 18000개의 데이터를 사용하였고 진행하는 과정은 약 8시간 정도 소요되었다.
Parameter | Value |
---|---|
Epoch | 20 |
Learning-rate | 0.001 |
Train,val split | 0.1 |
batch_size | 2 |
optimizer | Adam |
트레이닝의 결과는 아래의 표와 같다. 데이터의 수를 늘려가며 실험을 진행하였다. 대체적으로 데이터의 수 늘어날수록 더 좋은 성능을 보여주었다. 트레이닝 상의 loss 분배를 image = 0.2, location = 0.4, Confidential = 0.4로 하였을 때 가장 좋은 결과물을 보여주었다.
Loss | Value |
---|---|
총 loss | 343.5596 |
Image loss | 4.3732e-04 |
Location loss(log-cosh) | 859.613 |
confidential loss | 0.292 |
결과적으로는 썩 좋은 편은 아니었다. 나름 confidential 같은 경우에는 예측이 잘되었다고 말을 할수 있지만 사실 낙뢰가 집중되는 데이터셋을 사용했기 때문에 그냥 모델이 대부분의 데이터를 낙뢰가 쳤다고 판명해도 비슷한 결과가 나올수도 있는 것이다. 낙뢰가 치지 않는 기상데이터도 더 사용해야 했다. 결과적으로는 신뢰 할수 없는 결과인것이다.
결과적으로 실제에 적용할만큼 좋은 성능을 보여주지 않아 추후 보완이 필요한 연구이다. 가장 좋은 성능을 보여주는 낙뢰의 유무를 예측하는 confidential 값이 가장 좋은 부분이지만 예측되는 좌표값이 많은 오차를 보여 보완이 필요하다. 차후의 연구로는 데이터셋을 현재는 위상영상 특히 수증기만 사용하였는데 다른 형태의 영상, 예를 들어 레이더 영상 등을 활용할 수 있다. 기상학적으로 낙뢰와 조금 더 연관된 영상을 사용하면 의미있는 성능향상을 기대해 볼수 있을 것이다.