본문 바로가기
Kaggle 실습/Deep Learning

01. Dog-Breed-Identification (강아지 품종 분류) - InceptionNet (1)

by 망고 ෆ 2024. 6. 21.
 

Dog Breed Identification | Kaggle

 

www.kaggle.com

 

1. 데이터 다운로드

Colab에서 진행했으므로 !gdown을 통해 train.zip, test.zip, sample_submission.csv, labels.csv 파일을 다운로드하였다.

 

!gdowm 방법

file ID를 통해 구글 드라이브에 올려둔 파일을 colab에 바로 내려받을 수 있다.

방법은 아래의 코드에서 id 자리에 file ID를 적으면 되는데, 이는 구글 드라이브에 올린 파일 공유 시 뜨는 링크의 d/ 와 /view 사이에 있는 file ID를 적으면 된다!

!gdown https://drive.google.com/uc?id=

 

다운로드 후, train과 test 파일은 zip형태로 묶여 있으므로 unzip하여 파일을 풀어준다.

 

!unzip 방법

!unzip -qq [풀려는 대상] -d [압축 풀 경로]

!unzip -qq '/content/train.zip' -d '/content/train/'
!unzip -qq '/content/test.zip/ -d '/content/test/'

 

glob을 통해 파일 수 확인

len(list(glob.glob('/content/train/*.jpg'))     # 10222
len(list(glob.glob('/content/test/*.jpg'))      # 10357

 

 

 

2. 폴더 세팅

새로운 폴더를 생성해서 그 폴더의 하위에 견종별로 이미지를 저장하기 위해 폴더를 세팅하도록 하겠다.

폴더 이름은 trian_sub라고 해두겠다.

trian_data_folder = '/content/train/'
test_data_folder = '/content/test/'

train_data_sub_folder = '/content/train_sub/'

 

 

 

 

3. 견종의 종류 및 수 확인

labels.csv 파일을 통해 강아지별 idbreed에 대한 정보 확인

label_path = '/content/labels.csv'
label_text = pd.read_csv(label_text)
label_text

 

 

Check 1) 학습할 데이터의 견종의 수

               120종임을 확인!

len(label_text.loc[:,'breed'].unique())   # 120

 

 

Check 2) 견종별 이미지 수 확인

               견종별로 균형이 맞게 데이터가 수집되었는지 확인

label_text.loc[:,'breed'].value_counts()

 

확인해 본 결과 견종마다 데이터가 엇비슷하게 들어가있지는 않으므로, 견종별 데이터의 양을 수정해주어야할 것 같다.

최소 개수인 66개로 통일할 수도 있고, 하지만 이런 경우엔 데이터의 양이 적을 수 있으므로, 데이터를 증강해서 셋을 좀 더 추가하는 것도 괜찮을 것 같다.

 

 

Check 3) 총 이미지 파일의 수 확인

               10222장임을 확인!

len(list(glob.glob('/content/train/*.jpg')))   # 10222

 

 

Check 4) 이미지 시각화

import matplotlib.pyplot as plt

plt.figure(figsize=(12,12))

for c in range(9):
	image_id = label_text.at[c,'id']
    image_breed = label_text.at[c,'breed']
    
    # 9개에 대해서 이미지 그려보기
    plt.subplot(3,3,c+1)
    
    # trian 폴더에서 해당 image_id의 파일명 가져오기
    image_file = train_data_folder + image_id + 'jpg'
    plt.imshow(plt.imread(image_file))
    plt.title(str(c) + ":" + image_breed)
    plt.axis('off')
plt.show()

 

 

 

 

4. 폴더 정리 (폴더 생성하여 하위에 견종별로 이미지 저장)

폴더 생성

import os
import time
import shutil

train_data_sub_folder_name = os.path.dirname(train_data_sub_folder)

if os.path.isdir(train_data_sub_folder_name) == False:
	os.mkdir(train_data_sub_folder_name)

 

 

폴더 내 견종별로 이미지 정리

현재 /content/train/111.jpg 형식으로 들어있는 파일을 새로운 폴더를 생성하여 

/content/train_sub/말티즈/111.jpg 경로로 저장해 주었다.

for i in range(len(label_text)):
	image_id = label_text.at[i, 'id']
	image_breed = label_text.at[i, "breed"]
    
	if os.path.exists( train_data_sub_folder+image_breed)==False:
		os.mkdir(train_data_sub_folder+image_breed
    
	shutil.copy( train_data_folder + image_id+".jpg",
			train_data_sub_folder+image_breed )

 

 

여기까지는 폴더 정리를 한 것이고, 다음 페이지에서 이 파일 구조를 기반으로 이어서 실습해 보겠다.

댓글