딥러닝 모델은 일반적으로 규모가 크며 상당한 계산 능력이 필요합니다. 모델 학습을 ArcGIS API for Python과 통합하여 컴팩트하고 모바일 배포에 적합한 딥러닝 모델을 생성할 수 있습니다.
이 Notebook 워크플로 예시에서는 다중 작업 도로 추출기 모델을 사용하여 위성 영상에서 도로 네트워크를 추출합니다.
요구사항
이 워크플로를 수행하려면 다음 요구사항을 충족해야 합니다.
- 파리 지역의 도로 중앙선에 대한 SpaceNet 데이터로 이루어진 학습 데이터셋.
비고:
이 학습 데이터셋에 접근할 수 없는 경우 필요한 형식으로 적합한 학습 데이터를 생성하려면 래스터 서버가 필요합니다.
- 딥러닝은 계산이 복잡하기 때문에 GPU 지원이 포함된 Advanced Notebook 런타임을 사용하는 것을 권장합니다.
Python 라이브러리 가져오기
다음 Python 라이브러리를 가져옵니다.from arcgis.gis import GIS
gis = GIS("home")
import os, zipfile
from pathlib import Path
from arcgis.learn import prepare_data, MultiTaskRoadExtractor
작업 영역에 데이터 업로드
images 폴더에 레이블이 지정된 이미지 칩이 포함된 .zip 파일로 Files의 Notebook 작업 영역에 데이터셋을 업로드합니다.#Adding zipped file from workspace
filepath = training_data = gis1.content.get('itemID')
filepath = training_data.download(save_path='/arcgis/home/input', file_name=training_data.name)
filepath
assert os.path.exists(filepath) == 1
#Extract zip
with zipfile.ZipFile(filepath, 'r') as zip_ref:
zip_ref.extractall(Path(filepath).parent)
#Get the data path
output_path = Path(os.path.join(os.path.splitext(filepath)[0]))
데이터 준비
ArcGIS API for Python의 prepare_data() 함수는 딥러닝 워크플로를 위한 데이터를 준비합니다. 이 함수는 학습 샘플을 읽고 학습 데이터에 다양한 변환 및 증강을 적용하여 데이터 준비 프로세스를 자동화합니다. 이러한 증강을 통해 제한된 데이터로 모델을 학습시키고 모델의 과적합을 방지할 수 있습니다.data = prepare_data(
path=output_path,
batch_size=4,
chip_size=512
)
data.classes
prepare_data() 함수 매개변수에 대한 자세한 내용은 arcgis.learn API 참조를 참고하세요.
데이터 시각화
데이터가 준비되면 show_batch() 함수를 사용하여 데이터의 샘플을 시각화할 수 있습니다.data.show_batch(alpha=1)
모델 아키텍처 불러오기
arcgis.learn의 다중 작업 도로 추출기 프레임워크는 mt1_model 매개변수를 사용하여 설정할 수 있는 두 개의 아키텍처를 지원합니다. 이 매개변수는 linknet 또는 hourglass 아키텍처로 설정할 수 있습니다.
필요한 경우, 이 단계에서 모델별 고급 매개변수를 설정할 수 있습니다.
- gaussian_thresh — 필요한 도로 너비를 지정하는 데 필요한 가우시안 임계값을 설정합니다.
- orient_bin_size — 방향 각도를 위한 bin 크기를 설정합니다.
- orient_theta — 방향 마스크의 너비를 설정합니다.
model = MultiTaskRoadExtractor(data, mtl_model="hourglass")학습률 계산
ArcGIS API for Python은 fast.ai의 학습률 찾기를 사용하여 모델 학습에 최적의 학습률을 찾습니다. lr_find() 메소드를 사용하여 강력한 모델을 학습시키기 위한 최적의 학습률을 찾습니다. 모델의 첫 번째 실행에서 학습률을 결정한 후에는 모델을 재학습시키는 동안 추가 실행을 위해 고정된 값으로 전달할 수 있습니다.lr = model.lr_find()
#lr = 0.0005754 #from the first run
모델 맞춤
fit() 메소드는 모델을 학습시키는 데 사용됩니다. 이 메소드를 사용하려면 에포크 매개변수에 대한 입력이 필요합니다. 에포크는 모델이 전체 학습 데이터셋에 노출되는 횟수를 정의합니다. 모델은 각 에포크를 통해 데이터를 기반으로 학습하며 가중치를 조정할 수 있습니다. 다음 예시에서 모델은 테스트 목적으로 3번의 에포크에 대해 실행합니다.
배포를 위한 더 정확한 모델을 얻으려면 25번의 에포크로 시작하는 것을 권장합니다.
model.fit(3, lr=lr, early_stopping=True)결과 시각화
Notebook에서 모델의 결과를 검증하기 위해 show_results() 메소드를 사용하여 모델의 예측을 임의의 지상 실측 정보 이미지와 비교할 수 있습니다.
model.show_results(rows=4, thresh=0.2)모델 저장
학습된 모델의 정확도를 확인한 후에는 이후 배포를 위해 저장합니다. 기본 설정에 따라 모델은 학습 데이터 폴더 내의 모델 하위 폴더에 .dlpk 파일로 저장됩니다.
model.save('/arcgis/home/road_model_for_spacenet_data')모델 배포
이제 저장된 .dlpk 파일을 다른 데이터셋과 함께 배포하고 기관 내에서 공유할 수 있습니다. .dlpk 파일을 사용하는 방법에 대한 자세한 내용은 예시: 사전 학습된 모델을 사용한 추론을 참고하세요.