위성 이미지 딥러닝 모델 학습 및 배포 방법론
요약
본 문서는 위성 이미지 데이터를 활용한 딥러닝 모델의 학습 및 배포 방법론을 다룹니다. RGB 데이터에 익숙한 환경에서 멀티밴드 위성 이미지를 처리하는 적응 기법과, 대용량 이미지 처리를 위한 타일링(tiling) 전략을 제시합니다. 또한, 지도학습의 한계를 극복하기 위해 자기 지도 학습(self-supervised learning) 접근 방식 도입이 강조됩니다.
핵심 포인트
- 멀티밴드 위성 이미지는 채널 수 업데이트 및 데이터 정규화 처리가 필요함.
- 대용량 이미지 처리를 위해 타일링하거나 완전 컨볼루션 구조를 활용해야 함.
- 지도학습의 병목 현상을 극복하기 위해 자기 지도 학습(self-supervised) 접근이 중요해지고 있음.
- 모델 성능 개선 전, 데이터셋 크기 증대가 우선적으로 고려되어야 함.
- 인터넷상의 거의 모든 영상 데이터는 3밴드 RGB 형식이며, 모델 학습 코드는 종종 멀티밴드 데이터(예: 13밴드 Sentinel 2)를 처리하도록 적응이 필요합니다. 일반적으로 이는 모델의 첫 번째 레이어가 수용하는 채널 수를 업데이트하는 것을 포함하지만, 데이터 정규화와 관련된 어려움도 존재합니다.
- 일반적으로 분류 및 객체 탐지 모델은 전이 학습(transfer learning)을 사용하여 다루어집니다. 이 경우 대부분의 가중치는 학습 중에 업데이트되지 않고 ImageNet과 같은 표준 비전 데이터셋을 사용하여 사전에 계산됩니다.
- 위성 이미지는 일반적으로 매우 크기 때문에, 처리 전에 조각내거나 타일링하는 것이 일반적입니다. 또는 임의 크기의 이미지에 대한 완전 컨볼루션 이미지 분류(Fully Convolutional Image Classification on Arbitrary Sized Image)를 확인해 보세요 -> 요약하자면 완전 연결 레이어(fully-connected layer)를 컨볼루션 레이어로 대체합니다.
- 학습 및 검증(val)에는 이미지 증강(image augmentation)을 사용하되, 테스트(test)에서는 사용하지 않습니다.
- 일반적으로 더 큰 모델이 더 작은 모델보다 성능이 우수하지만, 더 큰 학습 데이터셋을 필요로 합니다. 먼저 작은 모델로 기준선(baseline)을 설정한 다음 크기를 늘리는 것부터 시작하세요.
- 모델 성능이 만족스럽지 않다면, 이국적인 모델 아키텍처로 전환하기 전에 데이터셋 크기를 늘리도록 시도해 보세요.
- 학습 시에는 가능한 한 배치 크기(batch size)를 늘려야 합니다. 작은 배치 크기는 낮은 정규화 통계량을 생성하기 때문입니다.
- 문헌의 대다수는 주석이 달린 대용량 데이터를 요구하는 지도 학습(supervised learning)을 사용하며, 이는 개발 및 배포의 병목 현상입니다.
원격 감지 데이터에 자기 지도 학습(self-supervised) 접근 방식이 적용되기 시작했습니다.
-
데이터셋 크기에 대한 일반적인 지침은 이 이슈를 참고하세요
-
Andrej Karpathy의 신경망 훈련 레시피 읽기
-
위성 이미지 데이터셋을 위한 일곱 단계
-
Fastai-v2 및 Albumentations를 사용한 다중 스펙트럼 위성 이미지 분할(Segmentation) 증강 구현 방법
-
지리 위치 데이터 활용: 머신러닝을 위한 필수 기술 -> 일반적인 언어로 설명하는 지리 공간 데이터의 특징 공학(Feature Engineering) 및 시각화 가이드
-
이미지 분류 레이블링: 단일 클래스 대 다중 클래스 프로젝트
-
항공 데이터셋용 이미지 증강
-
Tensorboard로 임베딩 시각화 -> TensorFlow Embedding Projector도 확인해 보세요
-
생성적 적대 신경망(Generative Adversarial Networks, GAN)을 사용한 위성 이미지 증강 소개 - 비디오
-
Gradio와 W&B를 함께 사용하여 훈련 모니터링 및 예측 결과 보기
-
모든 중요한 위성 이미지 분석 프로젝트는 까다롭지만, 시작하는 데 도움이 되는 열 가지 간단한 단계가 있습니다
-
SpaceNet 4 오프나디르(off-nadir) 위성 이미지의 어려움: 시선 각도와 목표 방위각 -> 거의 동일한 시선 각도(예: 29도 및 30도)에서 촬영된 이미지로 건물 예측을 수행할 경우, 급격히 다른 성능 점수가 나왔습니다.
-
딥러닝 알고리즘을 테스트하지 않는 방법?
-
피해야 할 나쁜 아이디어들
-
AI 제품 및 원격 감지(remote sensing): 네, 어렵고 좋은 인프라가 필요합니다 -> 자체 데이터 주석 서비스 구축에 대한 조언
-
위성 이미지에서 앙상블링을 통한 객체 탐지 성능 향상
-
위성 이미지를 위한 딥러닝 사용 방법 — 손실 함수(loss function) 가지고 놀기
-
적절한 데이터 처리의 중요성에 대하여
-
k-평균 군집화(k-means clustering)를 사용하여 SSD 앵커 박스 종횡비 생성 -> 텐서플로우 객체 탐지에 적용된, 데이터셋에 맞게 조정할 수 있는 종횡비 세트를 발견하는 방법을 보여주는 튜토리얼
-
그레이스케일 이미지에서의 전이 학습(Transfer Learning): 흑백 데이터셋에서 사전 학습 모델 미세 조정하기
-
Fastai를 사용하여 다중 스펙트럼 위성 이미지 분할을 위한 DataBlock 생성 방법
-
ML 및 AI 약어 및 축약어 종합 목록
-
원격 감지 데이터의 비지도 분류를 위한 최적의 'K' 클래스 찾기 -> 즉, '엘보(elbow)' 방법
-
관심 객체가 포함되지 않은 이미지 영역을 무작위로 선택하여 생성된 '음성(negative)' 예제로 훈련 데이터를 보강하기, [Setting a Foundation for Machine Learning] 읽어보기
-
데이터셋 크기에 대해서는 종종 수확 체감의 법칙이 적용되므로, [Quantifying the Effects of Resolution on Image Classification Accuracy] 읽어보기
-
RGB에서 다중 채널 이미지로 전이 학습 구현하기 -> 3채널에 대해 훈련된 모델을 더 많은 채널로 변환하는 방법(원래 3채널 RGB 이미지에 추가적인 12개 채널 추가)을 논의하는 Medium 기사, Keras 사용
-
satellite-segmentation-pytorch -> 훈련 데이터셋 크기를 늘리기 위해 광범위한 이미지 증강(image augmentation) 탐색
-
Kaggle의 다중 대역 위성 이미지 데이터셋을 위한 PyTorch에서 처음부터 사용자 지정 Dataset/Loader 생성 방법
-
딥러닝을 위해 위성 이미지를 정규화하는 방법
-
developmentseed가 만든 ML Tooling 2022
-
객체 기반 또는 픽셀 기반 접근 방식으로 탐지 성능 평가하기는 어떻게 할까요?
모델은 일반적으로 비교적 작은 이미지에서 학습 및 추론됩니다. 큰 이미지에 대해 추론하려면 이미지를 따라 슬라이딩 윈도우(sliding window)를 사용하고, 각 윈도우에서 추론한 다음 결과를 결합해야 합니다. 하지만 객체가 부분적으로 잘릴 수 있는 윈도우의 가장자리에서는 신뢰도가 낮은 예측이 이루어질 수 있습니다. 분할(segmentation)의 경우 예측된 경계 영역을 자르고 모자이크 형태로 예측들을 이어 붙이는 것이 일반적입니다. 객체 탐지(object detection)의 경우, 바운딩 박스 예측을 지능적으로 병합하는 sahi라는 프레임워크가 개발되었습니다.
- pytorch-cloud-geotiff-optimization -> PyTorch에서 클라우드 GeoTIFF 스트리밍 최적화를 위한 툴킷. 최적화된 데이터 로딩과 압축을 통해 처리량(throughput) 20배 향상 및 GPU 활용률 90% 달성.
- litdata -> Lightning 제공
모든 모델 유형에 공통적으로 사용되는 여러 지표가 있지만 (객체 탐지 같은 상황에서는 의미가 약간 다를 수 있음), 다른 지표들은 특정 모델 클래스에 매우 특화되어 있습니다. 적절한 지표 선택은 특히 불균형 데이터셋 문제(예: 객체 탐지)에서 매우 중요합니다.
- TP = 참 양성 (true positive), FP = 거짓 양성 (false positive), TN = 참 음성 (true negative), FN = 거짓 음성 (false negative)
정밀도 (Precision)는 정확한 양성 예측의 비율로,precision = TP/(TP+FP)로 계산됩니다.
재현율 (Recall) 또는 참 양성률 (true positive rate)(TPR)은 모델에 의해 포착된 참 양성의 비율로, recall = TP/(TP+FN)으로 계산됩니다. 참고로 객체 탐지에서는 FN이 불가능하므로 재현율은 적절하지 않습니다.
F1 점수(F-score 또는 F-measure라고도 함)는 정밀도와 재현율의 조화 평균이며,F1 = 2*(precision * recall)/(precision + recall)로 계산됩니다. 이는 정밀도와 재현율 사이의 균형을 나타냅니다. 참고 - 거짓 양성률 (false positive rate)(FPR)은FPR = FP/(FP+TN)으로 계산됩니다.
이는 분류 임계값에 따라 TPR/FPR 트레이드오프가 어떻게 변하는지를 보여주는 ROC 곡선(Receiver Operating Characteristic curve)에서 재현율(recall)/TPR과 함께 자주 그려집니다. 분류 임계값을 낮추면 참 양성(true positives)은 더 많이 얻지만, 거짓 양성(false positives)도 더 많이 발생합니다. 객체 탐지에서는 FN(False Negative)이 불가능하므로 ROC 곡선은 적절하지 않다는 점에 유의하십시오. - 정밀도-재현율 곡선(Precision-vs-recall curves)은 거짓 양성(false positives)과 거짓 음성(false negatives)을 발생시키는 것 사이의 트레이드오프를 시각화합니다.
IoU는 주어진 신뢰도 임계값에 대해 예측된 바운딩 박스와 실제 바운딩 박스 간의 평균 교집합 대비 합집합 비율(average intersect over union)인 객체 탐지 특화 메트릭입니다. [email protected]는 각 클래스별 평균 정밀도의 평균 값인 또 다른 객체 탐지 특화 메트릭입니다. @0.5는 예측된 바운딩 박스가 실제 바운딩 박스와 얼마나 많이 겹쳐야 하는지에 대한 임계값을 설정합니다. 즉, '최소 50% 중첩'을 의미합니다. 더 포괄적인 정의를 보려면 Object-Detection-Metrics를 확인하십시오.
딥러닝 모델 학습에는 GPU가 필요하지만(추론 시 반드시 필요한 것은 아님), 이 섹션에서는 GPU를 사용할 수 있는 몇 가지 무료 Jupyter 환경 목록을 제공합니다. fastai 사이트에서 온라인 Jupyter 개발 환경에 대한 좋은 개요를 얻을 수 있습니다. 개인 프로젝트의 경우 저는 역사적으로 Google Drive에 데이터를 호스팅하는 Google Colab을 사용해 왔습니다. GPU 제공업체 환경은 끊임없이 변화하고 있습니다. 현재는 lightning.ai 또는 AWS를 추천합니다.
-
GPU 백엔드를 사용하여 12시간 동안 무료로 이용할 수 있는 Collaboratory 노트북입니다. GPU는 다른 사용자와 공유될 수 있으므로 성능이 좋지 않다면 다시 로드해 보세요.
-
월 $10의 Pro 등급도 있습니다 -> https://colab.research.google.com/signup
-
Tensorflow, pytorch 및 fastai를 사용할 수 있지만 업데이트가 필요할 수 있습니다.
-
Colab Alive는 Colab 노트북을 활성화 상태로 유지하는 Chrome 확장 프로그램입니다.
-
colab-ssh는 마치 EC2 인스턴스처럼 Colab 인스턴스에 SSH로 접속하여 완전한 Linux 기능이 필요한 패키지를 설치할 수 있게 해줍니다.
-
무료 사용 가능
-
GPU 커널 - 최대 1시간 동안 실행될 수 있습니다.
-
Tensorflow, pytorch 및 fastai를 사용할 수 있지만 업데이트가 필요할 수 있습니다.
-
많은 데이터셋이 이미 준비되어 있다는 장점이 있습니다.
이 섹션에서는 학습된 머신러닝 모델, 특히 딥러닝 모델을 프로덕션 환경으로 가져가는 방법을 논의합니다. 딥러닝 모델 서비스에 대한 개요는 Practical-Deep-Learning-on-the-Cloud를 확인하세요. 서버 전용 할당을 하는 데 만족한다면 많은 옵션이 있지만, 배치 처리를 위해 GPU가 필요할 수 있습니다. 서버리스(serverless) 사용에는 AWS lambda를 이용하세요.
딥러닝 모델 추론 코드를 서비스하는 일반적인 접근 방식은 이를 REST API로 래핑하는 것입니다. 이 API는 Python(flask 또는 FastAPI)으로 구현하여 EC2 인스턴스와 같은 전용 서버에 호스팅할 수 있습니다. 참고로, 이것을 확장 가능한 솔루션으로 만드는 것은 상당한 경험을 요구합니다.
Basic API: https://blog.keras.io/building-a-simple-keras-deep-learning-rest-api.html (코드 포함)
- Advanced API with request queuing: https://www.pyimagesearch.com/2018/01/29/scalable-keras-deep-learning-rest-api/
- How to make a geospatial Rest Api web service with Python, Flask and Shapely - 튜토리얼
- BMW-YOLOv4-Training-Automation -> REST API를 통해 ML 모델 학습을 시연하는 프로젝트
- FastAPI를 사용한 Keras 모델용 기본 REST API
- NI4OS-RSSC -> TensorFlow Serving과 Flask를 사용한 원격 감지 장면 분류(RS2C) 웹 서비스
- Sat2Graph Inference Server -> 도로 분할 모델 추론을 위한 Go 언어 기반 API
- 테라바이트 크기의 위성 이미지에 객체 탐지 모델을 적용하기 위한 API 알고리즘 (성능 800% 향상 및 리소스 사용량 8배 감소)
- clearcut_detection -> Django 백엔드
- airbus-ship-detection -> REST API를 갖춘 CNN
- ftw-inference-api -> OpenAPI 사양을 기반으로 한 Fields of the World Inference API의 FastAPI 구현
GPRC는 HTTP/2를 통해 원격 프로시저 호출(Remote Procedure Call, RPC)을 구현하기 위한 프레임워크입니다. 주로 Google에 의해 개발 및 유지 관리되며, 업계에서 널리 사용됩니다. 이는 두 머신이 통신할 수 있게 해주며, HTTP와 유사하지만 더 나은 구문과 성능을 제공합니다.
참고: 더 이상 활발하게 유지 관리되지 않음
만약 특정 기술에 종속되는 것에 만족한다면, 다음 옵션들이 좋습니다:
- TensorFlow Serving은 TensorFlow 모델로 제한됨
- TensorRT_Inference -> TensorRT 기반의 객체 탐지 지향 프레임워크
- LitServe -> 배치 처리(batching), 스트리밍(streaming), GPU 자동 스케일링과 같은 기능을 FastAPI에 추가함
- sagemaker-inference-toolkit -> AWS SageMaker를 사용하여 Docker 컨테이너 내에서 머신러닝 모델을 서비스함
Triton Inference Server는 최적화된 클라우드 및 엣지 추론(inferencing) 솔루션을 제공합니다. CAPE Analytics가 컴퓨터 비전(Computer Vision)을 사용하여 지리 공간 데이터와 위험 정보를 재산 보험 회사에 전달하는 방법이 소개되었습니다.
RedisAI는 Deep Learning/Machine Learning 모델을 실행하고 해당 데이터를 관리하기 위한 Redis 모듈입니다.
gdal-unet은 Python이 필요하지 않은 배포 시점에 GDAL CLI를 통해 사전 훈련된 U-Net 추론을 실행합니다.
람다 함수(lambda functions)를 사용하면 기반 인프라를 구성하거나 관리할 필요 없이 추론이 가능합니다.
AWS에서는 AWS의 일반 람다 또는 SageMaker Serverless Inference를 사용할 수 있습니다.
PyTorch를 AWS Lambda에 배포하는 방법입니다.
API Gateway Proxy 뒤에 예시로 배포하는 내용입니다.
해당 모델은 라이브 이미지 자체에서 브라우저 내에서 실행되어, 항상 최신 사용 가능한 모델로 처리가 이루어지도록 보장하며 전용 서버 측 추론(server side inferencing)의 필요성을 제거합니다.
일반적인 접근 방식은 NVIDIA가 작성한 이 기사에 개괄되어 있으며, 여기서는 합성 데이터(Rareplanes)로 사전 훈련된 모델을 실제 데이터 10%와 함께 미세 조정(fine tuning)하고, 크기를 줄이기 위해 모델을 가지치기(pruning)한 다음, 추론 속도를 개선하기 위해 모델을 양자화(quantizing)하는 과정을 논의합니다. 또한 최적화를 위한 도구 키트도 있으며, 특히 프레임워크에 구애받지 않는 ONNX가 있습니다.
MLOps는 머신러닝 모델을 프로덕션 환경에 안정적이고 효율적으로 배포하고 유지 관리하는 것을 목표로 하는 일련의 관행(practices)입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Research의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기