Joonas' Note

Joonas' Note

[딥러닝 일지] 시작하기 - 개 vs 고양이 분류 본문

AI/딥러닝

[딥러닝 일지] 시작하기 - 개 vs 고양이 분류

2022. 3. 7. 00:27 joonas

    딥러닝을 공부하면서, 헷갈리는 내용이나 앞으로 알아봐야 할 내용들을 블로그에 정리하기로 했다.
    까먹는 일이 부지기수고, 오래되면서 머릿 속에 있던 지식들이 섞이면서 점점 헷갈리고 있어서이다.

    특히, 이론으로만 공부하기에는 부족해서 kaggle을 통해 실제 데이터로 모델도 작성해보고, 실행하면서 성능도 측정할 것이다.

    몇몇 튜토리얼들을 보았는데, 타이타닉 예시가 보기에 좋았다.

     

    수비니움의 캐글 따라하기

    Machine Learning for Everyone!!

    subinium.github.io

    데이터를 중심으로 학습하기 때문에, 전처리에 있어서 어떤 것이 가능하고 어떤 가공을 거치는 지 알 수 있기 때문에 좋았다.

     

    개, 그리고 고양이

    아주 오래된 Competition이지만, 개와 고양이 분류는 아주 유명하기도 하면서, 오래되었기에 관련 자료가 많을 것 같아서 골랐다.

     

    Dogs vs. Cats | Kaggle

     

    www.kaggle.com

    그런데 지금 생각해보니, 처음부터 이미지 분류를 골라서 스스로 장벽을 높혔구나라는 생각이 든다.

    우선 데이터셋을 좀 확인해봤는데, zip 파일로 되어있어서 압축을 풀고 image와 그에 맞는 label을 분류하는 작업이 필요했다. 그리고 데이터셋이 궁금해서 아래와 같이 확인해봤다.

    이미지와 라벨

    그리고 그 첫 버전이다.

    https://www.kaggle.com/joonasyoon/dogs-vs-cats-classification?scriptVersionId=88740616 

     

    Dogs vs. Cats Classification

    Explore and run machine learning code with Kaggle Notebooks | Using data from [Private Datasource]

    www.kaggle.com

    예상하지 못했는데, 캐글이 버저닝을 지원해서 부담없이 이전의 스크립트를 저장하고 다시 볼 수 있다.
    이거면 블로그에서 스크립트를 보고 전체 맥락과 그 때 무엇을 하려 했는 지 볼 때 도움이 될 것 같다.

     

    데이터 전처리

    쉽게 데이터셋은 마련했으니, 학습을 위해 데이터를 전처리해야한다.

     

    Dogs vs. Cats Classification

    Explore and run machine learning code with Kaggle Notebooks | Using data from multiple data sources

    www.kaggle.com

    우선 모델 학습에는 실패한 스크립트고, 데이터셋에 먼저 집중했다.

    데이터셋에 몇 가지 작업을 했는데, 먼저 이미지의 크기가 서로 달라서 (256, 256) 크기로 맞추었다.

    이미지 크기 변환

    그리고 train set만 500MB 이미지인데, 이것을 전부 메모리에 올리기에는 무척 부담스럽다.

    그래서 알아본 것이 DataLoader 이다. 그 하위 클래스로 이미지를 쉽게 읽는 ImageFolder가 있었다.

    ImageFolder는 'dir/a/00.jpg' 구성으로 저장해줘야한다.
    dir는 데이터가 담긴 디렉토리 이름이고, a는 00.jpg 이미지의 라벨이다. 즉, 개와 고양이 데이터 셋을 로드하기 위해서는 아래와 같은 구조가 되어야한다.

    train/
    |- dog/
    |-|- dog.1.jpg
    |-|- dog.2.jpg
    |- cat/
    |-|- cat.1.jpg
    |-|- cat.2.jpg

    의문점은, "dog", "cat" 처럼 텍스트로 된 라벨이 어떻게 Tensor로 넘어갔는 지 모르겠다.
    이후에 직접 로드해서 확인해보니 정수형 0, 1 로 구분해서 들어가졌는데, 이것은 알아봐야할 숙제로 남김...

    아무튼 주어진 두 압축 파일(train.zip, test1.zip)의 데이터셋은 아래와 같은 비율로 나누었다.

    train.zip은 Train Dataset으로 사용하고 test1.zip은 Test Dataset으로 사용했다. 용량을 보니까 비율은 2:1 정도였다.
    train.zip은 다시 7:3 비율로 train set과 valid set으로 나누었다.

    test1.zip의 파일들은 competition 제출을 위한 용도라, label이 없다!! 그래서 성능을 측정하기는 어렵고, train.zip을 적당히 쪼개서 train과 test data set으로 사용해야겠다.

    Comments