Dog & Cat img → csv

2021. 9. 30. 00:22ai/Deep Learning

728x90

Deep Learning은 학습 데이터가 많아야 해요! → 현실적으로 이렇게 많은 data를 구할수 있나요?
→ 많은양의 data를 구하기 힘들어요 

데이터량이 작아요 = 일반적으로 (1000 ~ 10,000) 사이의 data

"Dog vs Cats예제" → 이진분류 (binary classfication)
                     실사 이미지로 멍멍이와 고양이 사진이 제공 
1. kaggle에서 down
2. train.zip down

-고양이사진 12,500장
-멍멍이사진 12,500장

"지금까지 CSV파일을 이용해서처리" → 제공된 이미지 file을 이용해서 CSV파일을 만들어 보아요
                                     단점 : 이미지가 많으면 csv file 크기 ↑
                                            메모리 로딩이 안될수 있어요

 

 

 

 

추가적인 modul이 필요 → 설치 & 코드 작성

csv만드는 작업 → local anaconda에서 수행
deep Learning 수행 → colab 에서 수행

1. anaconda prompt
2. conda install tqdm (눈으로 진행척도를 알수 있다)
3. conda install -c conda-forge(최신) ipywidgets (tqdm으로 안되서 추가용?)
4. conda install opencv


(파이썬이 가지고 있는 이미지 handing 모듈) (애는 책이 1권이고 복잡해서 fillow 같은 간단한걸 사용)

 

 


 

import numpy as np

import pandas as pd

import os

import cv2 as cv   # opencv

from sklearn import utils

from tqdm.notebook import tqdm   # progressbar를 만들기 위해서 필요

 

# 이미지 파일 경로

train_dir = 'C:/python_ML/data/cat_dog/train'

 

# 만들어진 CSV의 형식은 MNIST의 train.csv와 같은 형식으로 만들꺼예요!

# 첫번째 column => label (label 0 : cat, label 1 : dog)

# 이미지의 크기는 80 x 80 으로 설정해요!

# 우리의 CSV파일로 DataFrame을 만들면 shape => (25000, 6401)

 

# 이미지 파일의 이름을 이용해서 해당 이미지의 label을 알아내야 해요!

# cat.숫자.jpg => 고양이 -> label => 0

# dog.숫자.jpg => 멍멍이 -> label => 1

# 이 처리를 하기 위한 함수를 하나 작성

# 예) dog.20.jpg  => split처리(.을 기준으로) => ['dog','20','jpg'] 리스트로 리턴

def labeling(img):

    class_name = img.split('.')[0]

    if class_name == 'cat'

        return 0

    elif class_name == 'dog'

        return 1

    

# print(labeling('cat.20.jpg'))    # 함수 동작 확인!

 

# label data와 pixel data를 담을 리스트 변수를 선언

x_data = list()

t_data = list()

 

# train 폴더안에 있는 모든 파일의 이름(25000개)을 알아야 해요! => os.listdir()
# 특정 폴더안에 있는 파일들의 이름들을 python의 list로 만들어서 리턴 => os.listdir()

for img in tqdm(os.listdir(train_dir),             #  어떤걸 진행상황을 보여줄거냐? 반복문 돌릴거냐?
                total=len(os.listdir(train_dir)),     # 전체 반복량
                position=0,                           # 시작이 0
                leave=True):                          # 진행 잔상이 남는다

    # 파일명을 이용해서 먼저 label을 알아내요!

    label_data = labeling(img)   # 현재 파일의 label을 알아내요 ( 0 or 1 )

    

    # 파일명에 대한 full path을 만들어요! => 이걸이용해서 이미지 파일의 pixel data를 추출할꺼예요!

    # img => cat.10.jpg  ==> C:/python_ML/data/cat_dog/train/cat.10.jpg

    img_path = os.path.join(train_dir,img) 

    

    img_data = cv.resize(cv.imread(img_path, cv.IMREAD_GRAYSCALE), (80,80))  # pixel data

    

    x_data.append(img_data.ravel())

    t_data.append(label_data)

    

# 이렇게 만든 x_data, t_data를 DataFrame으로 만들어서 CSV 파일로 저장!  

 

x_df = pd.DataFrame(x_data)

t_df = pd.DataFrame({ 'label' : t_data })

 

# 두 개의 DataFrame을 merge하면 되요!

df = pd.merge(t_df, x_df, left_index=True, right_index=True)

 

display(df)

 

# DataFrame의 행들을 랜덤하게 shuffle 시킬꺼예요!

shuffled_df = utils.shuffle(df)

 

# 최종 DataFrame을 CSV 파일로 저장!

shuffled_df.to_csv('C:/python_ML/data/cat_dog/train.csv', index=False)

'ai > Deep Learning' 카테고리의 다른 글

Image Data Generator (cat & dog ver)  (1) 2021.10.01
cat & dog tf2.0 ver  (0) 2021.09.30
CNN mnist code  (0) 2021.09.29
CNN 전반적 내용 code  (0) 2021.09.29
convolutional Neral Network (CNN) 합성곱 신경망  (0) 2021.09.28