Data Forest > AI Forest에서CIFAR-10 데이터셋을 이용한 이미지 분류기 만들기

yeonsu lee
NAVER CLOUD PLATFORM
10 min readDec 29, 2021

사람의 사고 방식을 컴퓨터에게 가르치는 기계 학습의 한 분야 ‘딥러닝’. 오늘날 우리 생활과 산업 전반에 이미 깊숙이 자리잡고 있지만, 구체적으로 어떻게 활용되고 있는지 접하긴 쉽지 않죠.

본 포스팅에서는 네이버 클라우드 플랫폼에서 제공하는 Data Forest 상품 중에 AI Forest를 활용하여 이미지 분류기를 직접 만들어보는 예제를 공유하고자 합니다. CIFAR-10 데이터셋에 CNN 모델을 적용하여 학습시킨 후 정확도를 알아볼 예정입니다.

C:\Users\USER\Desktop\Drive\WORKS Drive\13. 개발자 마케팅\01. 기술글\이연수 님

Data Forest와 AI Forest는 무엇인가요?

간단히 설명하면 Data Forest(링크)는 대규모 데이터와 많은 사용자들을 처리할 수 있도록 설계된 멀티 테넌트 기반의 빅데이터 통합 분석 플랫폼입니다.

그 중 AI Forest는 머신러닝을 위한 Tensorflow, PyTorch 등 오픈소스 라이브러리와 GPU 리소스를 활용해 딥러닝 분석이 가능한 통합 분석 환경을 제공합니다.

👉 [Ncloud 사용 가이드] 상품 개요 : Data Forest란?

Dataset 및 CNN 모델 소개

본격적인 진행에 앞서 예제에서 사용될 데이터셋과 모델에 대해 간략하게 소개해 드리겠습니다. CIFAR-10 데이터셋은 비행기, 자동차, 새, 고양이, 사슴, 개, 개구리, 말, 배, 트럭 등 10개의 카테고리로 분리된 60,000개의 컬러 이미지들로 구성되어 있습니다. 각각의 이미지는 32 * 32 픽셀이며, 즉 32 * 32 * 3 형상을 가지는 아주 작은 컬러 데이터들입니다.

총 60,000개의 컬러 이미지 중 50,000 개는 학습 데이터, 10,000 개는 테스트 데이터입니다.

한편, 예제에 활용할 CNN(Convolutional Neural Network) 모델은 인간의 시신경을 모방해서 만든 딥러닝 구조의 하나입니다. CNN 모델은 convolution연산을 이용해 이미지 공간 정보를 유지한 상태에서 학습이 가능하여, 기존 Fully Connected Neural Network에 비해 정확도가 높고 이미지 분류에서 좋은 성능을 보인다고 알려져 있습니다.

[CNN의 구조] 출처 - https://towardsdatascience.com/convolution-neural-network-e9b864ac1e6c

사전 작업 (계정 생성하기)

AI Forest를 시작하기 위해선 Data Forest 서비스 계정을 먼저 생성해야 합니다. 네이버 클라우드 플랫폼 (ncloud.com) 콘솔에서 [ Data Forest > Account ] 메뉴를 통해 계정 생성을 진행합니다.

[Ncloud 콘솔] Data Forest > Account 메뉴 (링크)

👉 [Ncloud 사용 가이드] Data Forest 계정 생성하기

Workspace 생성하기

계정 생성을 완료했다면 실제 작업을 진행할 Workspace 생성이 필요합니다.

콘솔 화면에서 [ Data Forest > AI Forest > Workspace ] 메뉴 접속 후 [워크스페이스 생성] > [Advanced 워크스페이스 생성] 버튼을 클릭해서 Workspace를 생성합니다.

👉 [Ncloud 사용 가이드] AI Forest Workspace 생성하기

본 포스트의 예제를 수행하기 위해서는 Tensorflow-r2.1버전의 도커 이미지를 선택해 주세요.

[Ncloud 콘솔] AI Forest 워크스페이스 생성 화면 (링크)

데이터 설정 영역의 입력 항목과 출력 항목에 아래와 같이 설정해 주세요. Input Path에는 ‘/user/{본인의 data forest 계정}/data_in’ 형식으로, Output Path에는 ‘/user/{본인의 data forest 계정}/data_out’ 형태로 입력해 주시면 됩니다.

해당 계정의 경로에 필요한 폴더는 미리 생성되어 있어야 합니다.

[Ncloud 콘솔] AI Forest 워크플레이스 리소스, 데이터 설정 화면 (링크)

DL app 예제 코드 작성 및 업로드

아래 예제 코드는 https://www.tensorflow.org/tutorials/images/cnn 을 참고하여 작성되었습니다.

Workspace가 생성된 후 [ Data Forest > AI Forest > Workspace Browser ]로 이동합니다. [새폴더/파일 추가] 메뉴를 통해 아래 소스 코드 내용을 cifar_test.py 로 저장합니다.

[Ncloud 콘솔] AI Forest Workspace Browser 화면 (링크)

예제 코드 저장하기 : cifar_test.py

# 필요한 라이브러리 임포트하기
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import datasets, layers, models
import sys
import os
# 결과물을 파일로 출력하기
path = './data_out'
os.mkdir(path)
sys.stdout = open('./data_out/result.txt', 'w')
# cifar10데이터셋 다운로드 및 준비하기
cifar10 = datasets.cifar10
(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()

class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']

print("Train samples:", train_images.shape, train_labels.shape)
print("Test samples:", test_images.shape, test_labels.shape)

train_images = train_images.reshape((50000, 32, 32, 3))
test_images = test_images.reshape((10000, 32, 32, 3))
# 데이터 전처리하기
train_images = train_images/255.0
test_images = test_images/255.0
# Conv2D와 MaxPooling2D 층을 쌓아 모델 구성하기
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))

# CNN 모델 컴파일 및 학습하기
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=3)
# 테스트셋을 이용해서 훈련된 모델의 성능을 평가하기
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc, file)

# 테스트 이미지들을 가지고 예측하기
predictions = model.predict(test_images)
sys.stdout.close()

추가로 파이썬 파일을 수행하기 위한 run.sh 파일도 같이 생성해 주세요.

#!/bin/bash
python cifar_test.py

DL app 제출 및 결과 확인

DL app 제출하기

Workspace Browser 화면에서 실행 파일인 run.sh을 선택 후 실행 버튼을 눌러 나오는 설정들을 토대로 DL app 제출할 수 있습니다.

👉 [Ncloud 사용 가이드] AI Forest DL App 관리하기

[Ncloud 콘솔] AI Forest Workspace Browser에서 DL App 제출하기 (링크)

DL App 로그 확인하기

먼저 Data Forest > App > [App 생성] 메뉴를 통해 DEV-1.0.0 타입의 app을 생성합니다. 그 다음 아래 순서로 AppMaster web ui에 접속해서 수행 로그를 확인할 수 있습니다.

  1. Data Forest > App에서 생성한 앱의 상세 화면에서 [Quick links] > [AppMaster UI] 로 접속해 주세요.
  2. 로그인 창이 나타나면 Data Forest 계정 생성시 입력한 계정이름과 계정 패스워드를 입력해 주세요.
  3. Applications 메뉴에서 DL APP 실행시 입력한 앱 이름으로 수행된 ID를 찾아 클릭해 주세요.
  4. 해당 Application ID의 Logs를 클릭하면 수행한 앱의 로그를 확인할 수 있습니다.

DL App 결과 파일 확인하기

Workspace 생성 시 데이터 설정 영역의 출력 항목에서 입력한 HDFS 경로(예제:/user/test-account/data_out)에서 학습 결과물을 확인할 수 있습니다. 본 예제에서는 Data Forest > App > [App 생성] 메뉴를 통해 HUE-4.7.0 타입의 App을 생성해서 File Browser에서 결과 파일을 확인하였습니다. 좀 더 자세한 방법은 HUE App 가이드에서 확인해 주세요.

HUE file browser에 접속해서 결과 파일 확인하기

마치며

이상으로 AI Forest에서 CIFAR-10 데이터셋을 이용해 이미지 분류기를 만들어 보았습니다. AI Forest 상품을 사용하실 때 조금이나마 도움이 되었으면 좋겠습니다.

* 본 기술 포스팅은 NAVER Cloud의 Data Platform 이연수 님의 글입니다.

--

--