[번역] 이 그림 누가 그린 거지? AutoML로 그래피티 아티스트 식별 프로그램 제작하기

sumong·2023년 1월 8일
0

번역

목록 보기
1/1
post-thumbnail

이 글은 2018년 구글 클라우드 블로그에 올라온 글을 번역한 것입니다. 빅데이터 전문가인 Alex Osterloh님께서 쓰신 글로, AutoML을 활용해서 그래피티 그림을 누가 그렸는지 식별하는 프로그램을 제작한 과정을 담고 있습니다. 또한 그 과정에서 AutoML을 어떻게 활용했는지, AutoML의 강점이 무엇인지도 설명하고 있죠. 최대한 원문에 가깝게 번역했으나, 기술적인 부분과 크게 관련이 없는 부분이고 그대로 번역하기 까다로운 경우 약간 의역을 했습니다. 또한 기술적인 설명을 하기 이전의 초반부는 번역에 어려움을 겪어서 자연스럽지 않을 수 있습니다. 원문은 아래 링크를 클릭하면 보실 수 있습니다.
원문 보기

Who is this street artist? Building a graffiti artist classifier using AutoML

written by Alex Osterloh
Big Data Product Specialist

August 22, 2018

  나는 그래피티와 길거리 예술에 대해서 얼마나 알고 있을까? 솔직히, 별로 알고 있는 건 없다. 하지만 나는 Banksy의 모든 작품을 감상했고, 몇 년 전에 그가 뉴욕에서 작업한 벽화들을 따라가면서 큰 재미를 느끼기도 했었다.
(*역주: Banksy는 영국의 유명한 길거리 예술가입니다. 더 자세한 사항은 위키백과Banksy의 홈페이지에서 보실 수 있습니다.)

  구글 클라우드에서 일하는 데이터 전문가로써, 나는 주로 데이터 엔지니어링과 머신러닝에 대한, 사용자들의 유스케이스에 관한 일을 하고 있다. 하지만 몇 주 전, 내 직장 동료가 내게 머신 러닝에 관한 흥미로운 질문을 물어봤고, 그 문제를 풀기 위해 나는 나만의 머신 러닝 유스케이스를 만들어냈다.
(* 역주: 유스케이스는 IT 분야 용어로, '유스 케이스(Usecase) 는 UML(통합 모델링 언어)의 행위자(액터)와 액터가 요구하여 시스템이 수행하는 일의 목표이다.'를 가리킨다고 합니다. 간단히 말해서, 사용자가 인식 가능한 기능 하나하나를 유스케이스라 볼 수 있죠.)

  내 직장 동료의 친구인 Mirko Reisser는 DAIM으로 활동하는 유명한 그래피티 예술가다. 우리 둘은 머신러닝을 가지고, 사람들이 매일 걷는 길에 그려진 예술작품들을 더 잘 알 수 있게 도와줄 수 있을지가 궁금해했다.

  우리는 AutoML Vision이 구글 클라우드에서 알파 버전으로 출시되었을 때 이 아이디어를 접하게 되었다. (* 역주: AutoML Vision은 현재 서비스 중입니다.) 두 아티스트(DAIM과 Banksy)들은 그들 각자의 보관소에 몇몇 알려진 다른 아티스트의 것을 포함한 여러 이미지들을 가지고 있었다. 몇 시간 뒤, 나는 작업할 모델을 가지고 그들에게 갔다.

  도시의 아티스트들을 구분하는 이 재밌는 머신러닝 프로젝트를 작업하는 동안, AutoML Vision은 이미 고객들에게 서비스되고 있었다. 예를 들어, 디즈니에서는 현실 세계의 문제들을 풀기 위해 AutoML Vision을 사용했다.(관련 내용은 여기로!)

  그렇다면, 구글 클라우드에서 제공하는 전반적인 머신러닝 중에서 AutoML이 어디에 적합한지를 살펴보도록 하자.

AutoML Vision은 무엇인가?

  당신이 머신러닝 모델을 구축하고 싶어한다고 가정해 보자.(예를 들어, 이미지에 핫도그가 있는지 피자가 있는지 구분하는 앱을 만들다던가, 우리처럼 사진의 미술품이 DAIM이 만든 건지, Banksy가 만든 건지, 아니면 다른 사람이 만든 건지 구분한다던가 등등) 예전이라면, 당신은 두 가지 중 하나를 선택했을 거다 :

  • 스크래치를 이용해서 모델을 훈련시키기
    텐서플로와 같은 유명한 머신러닝 프레임워크를 사용해서, 당신만의 모델을 만드는 방법이다. 이 방법은 보통 수많은 데이터를 모으고, 몇 주나 몇 달 동안 모델을 학습시키고, 튜닝하는 과정을 거쳐야 한다. 또한, 스크래치를 통해서 모델을 학습시키는 건 데이터 과학에서 사용하는 여러 스킬들을 필요로 한다. 여기에 더해, 학습을 위한 서버와 같은 기반 시설들을 다루는 것도 고려해야 하고, 모델 예측도 해야 한다. 하지만, 이 방법은 가장 유연한 방법이기도 하다. 텐서플로 측에서 Keras 같은 더 높은 수준의 API들을 도입해서 텐서플로를 사용하기 쉽게 만들고 있기 때문이다.

  • 구글 클라우드에서 미리 훈련된 머신러닝 API를 사용하기
    다른 방법으로, 이미지에 피자가 있는지 핫도그가 있는지, 혹은 누가 그린 그림인지를 알려줄, 클라우드 API를 사용하는 방법이 있다. 바로 이 링크에서 Cloud Vision API를 테스트해볼 수 있다.

위 사진은 Google Cloud Vision API로 DAIM의 작품을 넣었을 때 나온 결과이다.

  다시, 우리의 그래피티 예술가에 관한 작업으로 돌아오자. Vision API는 이미지가 미술 작품의 일부인지 아닌지를 확실하게 구분해줄 수 있다. 데이터 입력은 따로 필요하지 않다. 만약 당신이 앱 개발자라면, 데이터 과학이나 머신러닝에 관한 특별한 기술이 없어도, 이 API를 손쉽게 앱에 넣어서 서비스할 수 있다. 만약 위의 간단한 문제가 당신에게 닥친 과제라면, 이 Vision API를 사용하면 된다. 하지만, 만약 당신에게 필요한 것이 좀 더 특별한 데이터들을 가지고 무언가를 해야 하는 작업이라면(주어진 그래피티나 미술 작품들을 가지고 누가 그린 것인지를 구별하는 것과 같은), 당신은 당신만의 모델을 학습시켜야 한다.

  여기서, AutoML Vision은 세 번째 옵션을 제공해준다. AutoML은 개발자들이 자신만의 데이터를 가지고 자신만의 모델을 학습시킬 수 있게 해 준다. 심지어, 그렇게 많은 데이터가 필요하지도 않다. Neural Architecture Search 기술과 구글의 예술 분야 전이 학습 덕분이다. 우리가 예술가 구별 프로그램을 만들 때, 아티스트 한 명 당 100개도 안 되는 적은 양의 이미지만으로 작업을 끝낼 수 있었다. 또한, AutoML은 모델을 학습시키는 과정을 포함해서, 모든 과정에서 특별한 코딩을 요구하지 않는다. 여러분은 그저 여러분들이 만드는 프로그램에서 AutoML API를 호출하기 위한 코딩만 조금 하면 될 뿐이다.

위 사진처럼, AutoML은 기존의 머신러닝 기법과 미리 정의된 머신러닝 API의 중간에 위치한다.

AutoML Vision으로 모델을 만드는 방법

  매우 간단하다. AutoML Vision을 통해, 당신은 2시간도 안 되는 짧은 시간에 당신의 모델을 학습시킬 수 있다. AutoML에서 제공하는 약간의 과정만 잘 따라오면 된다. 이 글의 마지막에서, 나는 AutoML을 시작하는 데에 도움이 되는 몇 가지 리소스를 공유할 것이다.

  1. 데이터 준비하기
    전반적인 과정을 놓고 봤을 때, 당신이 가장 많은 시간을 소비하게 될 단계이다. 이미지들을 모아서 각 폴더에 넣어주어야 한다.(사실 AutoML에서는 폴더를 지원하진 않지만, 큰 데이터를 다룰 때 폴더별로 잘 정리해놓는 건 삶을 더 편하게 만들어준다.) 각 항목 당 최소 10개 이상의 이미지를 사용하도록 해라. 이미지는 많으면 많을수록 좋으나, 항목당 100개 정도의 이미지만 있어도 좋은 결과물을 볼 수 있다. (모델의 품질에 관한 내용은 다음 섹션에서 이야기하겠다.)

만약 이미지가 500개 이하라면, 이미지를 폴더별로 구분해서 zip 파일로 압축한 뒤 AutoML 웹페이지에서 업로드할 수 있다. 이미지가 500개보다 많다면, Cloud Storage console을 이용하거나 gsutil의 복사 명령어를 이용하면 된다. 만약 이미지들을 Cloud Storage에 복사해놨다면, 당신은 라벨별로 분류된, 각 이미지들의 주소(URL) 리스트를 담은 CSV 파일을 만들어야 한다. 보통, AutoML은 데이터의 80%를 모델 학습에 사용하고, 10%를 검증에, 나머지 10%를 테스트에 사용한다. 이 비율은 여러분들이 만드는 CSV 파일에서 수정할 수 있다.

AutoML은 라벨 하나짜리 데이터셋과 여러 라벨의 데이터셋을 모두 지원한다. 우리는 라벨 하나짜리 데이터셋을 사용했다. 각 라벨은 아티스트 이름을 나타낸다. 우리가 만든 CSV 파일의 한 줄을 살펴보면 다음과 같다:

gs://streadsart-vcm/DAIM1.jpeg, DAIM

하지만 AutoML에서는 여러 라벨의 데이터셋도 쉽게 훈련시킬 수 있다. 우리의 경우, 새로운 라벨로 그래피티 스타일을 추가했다. CSV 파일의 각 줄에 추가 라벨(여기서는 그래피티 스타일)을 더해주면 된다:

gs://streadsart-vcm/DAIM1.jpeg, DAIM, Wildstyle

만약 더 자세히 알고 싶다면, 이미지를 준비하는 방법에 대한 이 영상을 참고하기 바란다.

  1. 모델 훈련시키기
    이 과정동안, 당신은 커피 한 잔 먹으면서 기다려야 할 지도 모른다. 모델을 훈련시키는 건 클릭 한 번이면 된다. 당신은 모델을 얼마나 정확하게 훈련시킬 것인지, 그리고 시간이 얼마나 있는지를 고려해야한다. 내 경험상, basic model로 10만여개의 이미지를 학습시키는 데엔 거의 20분 정도가 소요된다. advanced model에선 4시간 정도 걸린다. 일반적으로 basic model은 길어도 1시간 이내의 시간이 소요되고, 공짜로도 사용 가능하다. advanced traning은 복잡한 모델을 구축할 수 있고, 길어도 24시간 이내의 시간이 소요된다. 또한 advanced traning은 모델 빌드 시에 자동 최적화(예. hyperparameter tuning) 및 더 발전된 모델링 기술 등의 방법을 사용한다.

모델을 얼마나 오래 훈련시킬지를 선택할 수 있다.

  1. 모델 평가하기
    모델 훈련이 끝나면, 이메일로 알람이 갈 것이다. 모델 훈련 이후 해야 할 첫 번째 작업은 모델의 품질을 확인하는 것이다. 당신은 평가 탭(Evaluation tab)에서 정확도와 재현율을 확인할 수 있다.(* 역주: 원문은 precision and recall scores라 되어 있습니다. recall scores가 뭔지 정확히 모르겠는데, 이진 검색에서는 precision and recall scores를 정확도 및 재현율이라고 번역해서 recall scores = 재현율로 번역했습니다.) 또한 특정 라벨에 대해선 이미지를 추가해달라는 제안을 받을 수도 있다. 만약 모델의 품질이 당신의 기대에 미치치 않는다면, 다음 섹션에서 모델 개선 옵션(model improvement)을 확인하면 된다. 라벨 하나짜리 모델인 경우, AutoML은 confusion matrix를 같이 보여준다. 이것은 분류 과정에서 발생한 오류의 발생률을 보기 좋게 정리해서 보여준다. 내 프로젝트의 경우, 내 모델의 confusion matrix는 몇몇 흥미로운 사실들을 보여준다.

confusion matrix는 어떤 예술가 쌍이 가장 식별하기 까다로운지를 잘 보여준다.

초록색으로 된 대각선은 각 아티스트별 예측 정확도를 의미한다. Vitche 작품은 전부 정확하게 찾아낸 걸 볼 수 있다. 반면, Banksy가 작업한 작품 중 일부(11%)는 Blek le Rat이 작업한 것으로 잘못 분류했다.(검정색 원 부분) 사실 이는 이해 가능한 범주의 오류이다. 왜냐하면, Banksy의 언급에 따르면 Blek le Rat이 20년 전에 자신의 작품과 비슷한 작품들을 그렸던 적이 있기 때문이다. 두 아티스트를 구글 이미지로 검색해보면, 두 사람 작품의 유사점을 발견할 수 있을 것이다.

  1. 모델 테스트하기
    만약 당신이 모델의 품질에 만족했다면, 그 모델을 실제 환경에서 테스트해야 한다. 기존 데이터셋엔 없는 새로운 이미지를 몇 장 구한 뒤, 예측 페이지(prediction page)에 업로드하면, 모델이 얼마나 잘 작동하는지를 확인할 수 있다.
    또한 이 페이지에선 당신의 프로그램에다가 AutoML로 제작된 모델을 추가하기 위한 파이썬 코드를 제공해 준다. 이 코드를 프로그램의 적절한 곳에 넣기만 하면 바로 우리가 만든 모델을 사용할 수 있다. 특별한 과정 없이 코드만 붙여 넣으면 되기에 쉽고 간편하다.

모델 발전시키기

  보통 첫 번째 모델은 개선 가능성이 상당히 높은 편이다. 모델의 전체 정확도 지표와 각 라벨에 대한 정확도는 모델의 개선 방향성을 알려주는 좋은 지표가 된다. 또한 AutoML에서도 '특정 라벨에 대한 이미지를 더 추가해주세요'와 같은 개선 방향성을 알려준다.

  • 당신의 모델을 개선하기 위한 가장 쉬운 길은 각 라벨별로 더 많은 이미지를 추가하는 것이다. 라벨별 이미지를 추가한 뒤, 데이터를 순서대로 정렬하면 된다. 이렇게 하면 이미지를 추가할 수 있는 모든 라벨을 볼 수 있다.

  • 라벨을 정의할 때 항상 '기타' 또는 '분류 없음'과 같은 라벨을 만드는 것도 좋은 방법이다. 다른 모든 라벨과 매칭되지 않는 이미지들은 이 라벨로 분류될 것이다. 이 간단한 방법은 모델의 품질을 의미있게 향상시켜 준다. 예를 들어, 의자 종류를 구분하는 모델을 훈련시키고 싶다면, 의자가 아닌 것들(책상과 같은)을 나타내는 라벨도 추가해야 한다.

  • 고해상도 이미지에서 작은 물체를 구분하는 모델을 만들고 싶은가? 이러한 모델을 구축하는 좋은 방법은 동일한 라벨에 대한 원래의 고해상도 이미지에서 중요한 부분만 자른 이미지를 사용하는 것이다.

  • 직접 찍은 사진(그래피티 작품 등)의 경우 카메라 위치, 각도를 변경해서 사진을 찍는 게 좋다. 심지어, 카메라 플래시를 켜고 찍은 사진과 끄고 찍은 사진도 좋다.

  • 특정 라벨에 대한 이미지를 더 이상 찾지 못할 경우, 해당 라벨을 완전히 지우는 것을 고려해봐야 한다.

  • 이미지의 라벨이 올바른지 확인하고, 재할당된 라벨과 삭제된 이미지 등도 확인해야 한다.

  • 잘 분류된 이미지가 없는가? 만약 그렇다면, AutoML의 human labeling service를 이용하는 게 방법일 수 있다. 각 라벨당 100개의 이미지만 준비하면 된다.

노트: 하이픈(-)을 포함한 라벨은 밑줄로 변환된다. 따라서, 당신의 프로그램이 라벨의 응답에 기초한 작업을 하는 경우 이 부분을 신경써야 할 것이다.

남은 이야기들

  만약 당신이 AutoML을 써 보고 싶다면, 구글 클라우드에 프로젝트를 만들면 된다. AutoML을 시작하는 데 있어 도움이 되는 몇몇 가치 있는 리소스들을 소개하니, 체크하면 좋을 것이다:

또한, 이미지를 구하기 좋은 몇몇 사이트들도 있다. 예를 들어, 여기서는 강아지와 고양이의 데이터셋을 구할 수 있다.

최근엔 AutoML Natural Language와 AutoML Translate도 오픈했다. 향후에 더 많은 AutoML 솔루션을 발표할 예정이니, 계속 주목해 주었으면 한다. AutoML Vision을 사용하여 당신만의 첫 번째 모델을 재미있게 만들어 보자!

게시된 항목 :
AI & 머신러닝 - AutoML - 구글 클라우드 플랫폼

profile
Flutter 메인의 풀스택 개발자 / 한양대 컴퓨터소프트웨어학과, HUHS의 화석

0개의 댓글