Skip To Content

예시: 엔드 투 엔드 딥러닝 워크플로

딥러닝 모델은 일반적으로 규모가 크며 상당한 계산 능력이 필요합니다. TensorFlow Lite 모델 학습을 ArcGIS API for Python과 통합하여 컴팩트하고 모바일 배포에 적합한 딥러닝 모델을 생성할 수 있습니다.

이 Notebook 워크플로 예시에서는 TensorFlow Lite 프레임워크를 사용하여 모바일 응용프로그램을 위한 딥러닝 모델을 학습시킵니다. 이 워크플로는 식물종을 분류하고 직접 추론을 위해 배포할 해당 파일을 생성하도록 학습됩니다.

요구사항

이 워크플로를 수행하려면 다음 요구사항을 충족해야 합니다.

  • 레이블이 지정된 다양한 식물종 영상으로 이루어진 학습 데이터셋.
    비고:

    데이터셋은 약 440MB이지만, 다음 예시에서는 200MB만 사용됩니다. 학습 데이터셋에 접근할 수 없는 경우 필요한 형식으로 적합한 학습 데이터를 생성하려면 래스터 서버가 필요합니다.

  • 이 워크플로를 실행하려면 Notebook 환경의 최대 메모리 제한을 15GB로 설정해야 합니다. Standard 및 Advanced Notebook 환경의 메모리 제한은 기본 설정에 따라 각각 4GB 및 6GB로 설정되어 있습니다. 이 제한을 변경하려면 관리자 접근 권한으로 ArcGIS Notebook Server Manager에 로그인하고 설정 > 런타임을 클릭합니다.
    비고:

    이 워크플로에 필요한 메모리 제한은 학습 데이터의 크기에 따라 달라집니다.

  • 딥러닝은 계산이 복잡하기 때문에 강력한 GPU를 사용하여 대용량 데이터셋을 처리하는 것을 권장합니다.

Python 라이브러리 가져오기

다음 Python 라이브러리를 가져옵니다.

#To enable TensorFlow as backend
%env ARCGIS_ENABLE_TF_BACKEND=1
 
import os
from pathlib import Path
 
from arcgis.gis import GIS
from arcgis.learn import prepare_data, FeatureClassifier
 
gis = GIS("home")

작업 영역에 데이터 업로드

images 폴더에 레이블이 지정된 이미지 칩이 포함된 .zip 파일로 Files의 Notebook 작업 영역에 데이터셋을 업로드합니다.

#Adding zipped file from workspace
#Use export_training_data() to get the training data
filepath = "/arcgis/home/train_200MB_a_tensorflow-lite_model_for_identifying_plant_species.zip"
 
#Extract zip
import zipfile
with zipfile.ZipFile(filepath, "r") as zip_ref:
   zip_ref.extractall(Path(filepath).parent)
 
#Get the data path
data_path = Path(os.path.join(os.path.splitext(filepath)[0]))
 
#Filter non-RGB images
from glob import glob
from PIL import Image
 
for image_filepath in glob(os.path.join(data_path, "images", "**","*.jpg")):
   if Image.open(image_filepath).mode != "RGB":
       os.remove(image_filepath)

데이터 준비

ArcGIS API for Pythonprepare_data() 함수는 딥러닝 워크플로를 위한 데이터를 준비합니다. 이 함수는 학습 샘플을 읽고 학습 데이터에 다양한 변환 및 증강을 적용하여 데이터 준비 프로세스를 자동화합니다. 이러한 증강을 통해 제한된 데이터로 모델을 학습시키고 모델의 과적합을 방지할 수 있습니다.

data = prepare_data(
    path=data_path,
    dataset_type="Imagenet",
    batch_size=64,
    chip_size=224
)

prepare_data() 함수 매개변수에 대한 자세한 내용은 arcgis.learn API 참조를 참고하세요.

데이터 시각화

데이터가 준비되면 show_batch() 함수를 사용하여 데이터의 샘플을 시각화할 수 있습니다.

data.show_batch(rows=2)

모델 아키텍처 불러오기

arcgis.learn의 피처 분류자 모델은 각 피처의 클래스를 결정합니다. 피처 분류자에는 다음 매개변수가 필요합니다.

  • 백본 — 선택적 문자열. 피처 추출에 사용되는 백본 컨볼루션 뉴럴 네트워크 모델로, 기본 설정에 따라 resnet34입니다. 지원되는 백본에는 ResNet 제품군 및 backbones()에서 지정된 Timm 모델(시범적으로 지원)이 포함됩니다.
  • 백엔드 — 선택적 문자열.

    이 모델에 사용될 백엔드 프레임워크를 제어하며, 기본 설정에 따라 ‘pytorch’입니다.

model = FeatureClassifier(data, backbone="MobileNetV2", backend="tensorflow")

학습률 계산

ArcGIS API for Python은 fast.ai의 학습률 찾기를 사용하여 모델 학습에 최적의 학습률을 찾습니다. lr_find() 메소드를 사용하여 강력한 모델을 학습시키기 위한 최적의 학습률을 찾습니다. 모델의 첫 번째 실행에서 학습률을 결정한 후에는 모델을 재학습시키는 동안 추가 실행을 위해 고정된 값으로 전달할 수 있습니다.

lr = model.lr_find()
#lr =  0.000691831 #from the first run

모델 맞춤

fit() 메소드는 모델을 학습시키는 데 사용됩니다. 이 메소드를 사용하려면 에포크 매개변수에 대한 입력이 필요합니다. 에포크는 모델이 전체 학습 데이터셋에 노출되는 횟수를 정의합니다. 모델은 각 에포크를 통해 데이터를 기반으로 학습하며 가중치를 조정할 수 있습니다. 다음 예시에서 모델은 테스트 목적으로 3번의 에포크에 대해 실행합니다.

배포를 위한 더 정확한 모델을 얻으려면 25번의 에포크로 시작하는 것을 권장합니다.

model.fit(3, lr=lr)

결과 시각화

Notebook에서 모델의 결과를 검증하기 위해 show_results() 메소드를 사용하여 모델의 예측을 임의의 지상 실측 정보 이미지와 비교할 수 있습니다.

model.show_results(rows=4, thresh=0.2)

모델 저장

학습된 모델의 정확도를 확인한 후에는 이후 배포를 위해 저장합니다. 기본 설정에 따라 모델은 학습 데이터 폴더 내의 모델 하위 폴더에 .dlpk 파일로 저장됩니다.

model.save("Plant-identification-25-tflite", framework="tflite")

모델 배포

이제 저장된 .dlpk 파일을 다른 데이터셋과 함께 배포하고 기관 내에서 공유할 수 있습니다. .dlpk 파일을 사용하는 방법에 대한 자세한 내용은 딥러닝을 사용하여 항공영상에서 자동차 수 계산을 참고하세요.