나만의 데이터셋 만들기

Heath_Jeong·2021년 3월 4일
4
post-thumbnail

개요

일전에 이미지 분류 모델을 학습하기 위해 파이토치에서 제공하는 MNIST dataset torchvision.datasets.MNISTCNN 모델 + CrossEntorpyLoss 로스 함수 + Adam optimizer 를 사용하여 이미지 분류기를 만들어 본 적이 있다.

이제부터는 주어진 데이터셋을 사용하지 않고 직접 데이터셋을 구축하고 전이 학습을 통해 원하는 분류를 하는 이미지 분류 모델을 만들어볼 것이다.

크게 데이터셋 구축전이 학습 (Transfer Learning)으로 나눠서 포스팅하고자 한다.
이번 편은 데이터셋 구축절차를 담았다.

절차
1) 주제 선정
2) 데이터 수집
3) 데이터 가공 (데이터 완성)
4) 데이터로 dataset 만들기


주제 선정

마동석, 수지, 유재석

특징이 뚜렷한 인물을 구분해보기 위해 마동석, 수지, 유재석 을 레이블로 선정하였다.

부스트캠퍼들과 협업을 통해 데이터를 수집하였고 나는 수지를 담당하였다.


데이터 수집

How?

이미지 데이터를 모으기 위해서는 인터넷에 존재하는 여러 플랫폼에서 이미지를 가져와야 한다. 이미지를 일일이 다운하는 것은 비효율적이므로 크롤링 & 자동 다운로드 툴을 사용하였다.

구글 이미지 다운로드 - googleimagesdownload

가장 정보가 많은 구글에서 이미지를 가져오기 위해 googleimagesdownload 라는 프로그램을 통해 이미지를 자동으로 다운하였다.

주소

google_images_download

Tip

100장 이상 사진을 받기 위해서는 크롤링 도구가 필요하다. 따라서 chromedriver 를 설치하고 googleimagesdownload--chromedriver 옵션에 설치한 크롬 드라이버 위치를 명시해야 한다.

결과

'수지', '미쓰에이 수지', '배수지', '수지비주얼' 키워드로 각 키워드 당 350 여장의 사진을 다운로드하였다.

인스타그램 이미지 다운로드 with hashtag

이미지하면 떠오르는 인스타그램에도 많은 사진이 있기 때문에 hashtag 로 검색한 첫 태그에서 사진을 가져오는 프로그램을 만들어 사용했다.

주소

instagram_image_download

결과

'배수지' 키워드로 350 여장의 사진을 다운로드하였다.

전체 수집 데이터

구글과 인스타그램을 통해 총 1700 여장의 사진을 수집하였다.


데이터 가공

인터넷에서 수집한 사진들 중 학습에 적합한 사진을 골라내는 단계이다.
매뉴얼하게 아래의 룰을 기반으로 사진을 삭제하였다.

  • 연예인 수지와 관계 없는 사진 (용인시 수지구..)
  • 정면 얼굴이 뚜렷하지 않은 사진
  • 누군가와 함께 있는 사진

과정을 수행하여 1700 장의 사진에서 300 장의 사진만 추려내었다.


데이터로 dataset 만들기

협업을 통해 '동석', '수지', '재석' 레이블 각각 300 장의 사진을 선정하였다.

이 데이터들을 학습에 사용할 수 있도록 Dataset 으로 만들 것이다.
구체적으로는 데이터를 통일되게 만들고, 전체 데이터를 일정 비율로 train 과 test 로 분리한다.

이미지 확장자 통일

먼저 jpg, png 이미지 파일들이 섞여있기 때문에 파일들을 읽어 모두 png 파일로 바꿨다.

train, test 로 분리

sklearn 의 train_test_split 함수를 통해 레이블마다 train 과 test 데이터 비율 (3 : 1) 을 일정하게 만들어준다.

분리된 데이터들은 dataset/traindataset/test 에 위치한다.

from sklearn.model_selection import train_test_split

train_image, test_image, train_target, test_target = train_test_split(dataset[:,0], dataset[:,1], stratify=dataset[:,1],)

결과

나만의 데이터셋을 수집하고 가공하여 모델 학습에 필요한 dataset 완성

profile
데이터로 문제를 해결하는 엔지니어를 꿈꿉니다.

0개의 댓글