Deep Learning은 학습 data가 많아야 해요!
→ 현실적으로 이렇게 많은 data를 구하기 힘들어요!!
데이터량이 작아요 → 일반적으로 1.000~100.000
Dogs vs Cats 예제를 가지고 학습해 보아요→ (실제 이미지)'이진 분류'
→ kaggle에서 data를 내려받아요!
고양이 사진 12.500개 → cat. 숫자. jpg
멍멍이 사진 12.500개 → dog. 숫자. jpg
총 25.000장의 image data
지금까지 CSV 파일을 이용해서 처리했어요. → 제공된 이미지 file을 이용해 CSV 파일을 만들어 보아요!
이 방식의 단점 → 이미지가 너무 많으면 CSV 파일의 크기가 커지고 메모리에 로딩이 안될 수 있어요!
CSV 만드는 작업 → local acaconda에서 수행
Deep Learning 수행 → Colab 수행
tqdm → 진행바(ProgressBar) 설치
acaconda prompt → conda install tqdm → conda install -c conda-forge ipywidgets
안되면 pip install ipywidgets
다양한 이미지 처리
conda install opencv
import numpy as np
import pandas as pd
import os #파일이 몇 개 있는지(파일명) 등을 os 기능을 사용해요
import cv2 as cv #open cv 이미지 파일 읽기
from sklearn import utils # sklearn의 shuffle과 같은 기능 사용
from tqdm.notebook import tqdm
# 이미지 파일 경로
train_dir = 'C:/python_ML/data/cat_dog/train'
# 만들어진 CSV의 형식은 MNIST의 train.csv와 같은 형식으로 만들 거예요.
# 첫 번째 column → label( label 0 : cat, label1 : dog) 이렇게 만들 거예요!
# 이미지의 크기는 80 x 80
# 우리의 CSV 파일로 DataFeame을 만들면 shape → (25000, 6401)
# 이미지 파일의 이름을 이용해서 해당 이미지의 label을 알아내야 해요!
# cat. 숫자. jpg → 고양이 → label → 0
# dog. 숫자. jpg → 멍멍이 → label → 1로 세팅해보아요!
# 이 처리를 하기 위한 함수를 하나 작성해 보아요!
# 예) dog.20.jpg → split 처리 → ['dog', '20', 'jpg'] 리스트로 리턴
# 앞에 dog만 필요 index 0번
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() # 모든 file의 pixel data
t_data = list() # 모든 file의 list data
# tqdm 함수를 이용해서 ProgressBar를 찍으면서 list 이용
# 첫 번째 인자 : train 폴더 안에 있는 모든 파일의 이름(25000개)를 알아야 해요!
# → os.listdir() 해당 폴더 안에 있는 파일들의 이름들을 python list 변환
# 두 번째 인자 : train 폴더 안에 모든 파일의 이름
# position= 시작 위치 처음부터 시작 0
# leave=True 지속적으로 한 칸씩 움직여~갱신 여부
# print(os.listdir(train_dir))
for img in tqdm(os.listdir(train_dir),
total=len(os.listdir(train_dir)), # total 전체 파일의 개수 25000개
position=0,
leave=True):
# 파일명을 이용해서 먼저 label을 알아내요!
label_data = labeling(img) # 현재 파일의 label을 알아내요( 0 or 1 )
# 파일명에 대한 full path를 만들어요! → 이걸 이용해서 이미지 파일의 pixel data를 추출할 거예요!
# full path : 만약 img가 cat.10.jpg 면 → C:/python_ML/data/cat_dog/train/cat.10.jpg
img_path = os.path.join(train_dir,img) # 파일 경로와 우리의 이미지 data를 이용해 경로 지정
# 이미지를 읽어들이면서 흑백으로 변환
# 제각각인 size를 80x80 크기로 변환
img_data = cv.resize(cv.imread(img_path, cv.IMREAD_GRAYSCALE), (80,80)) # 2차원 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 }) # dictionary의 key 값이 column 명 # label
display(x_df)
# 두 개의 DataFeame을 merge 하면 돼요!
df = pd.merge(t_df, x_df, left_index=True, right_index=True) # index 이용 merge
display(df)
# file이 순차적으로 cat부터 읽혀요 c가 d 보다 앞 → DataFrame의 행들을 랜덤하게 shuffle
shuffled_df = utils.shuffle(df) # sklearn의 shuffle 기능
#최종 DataFrame을 CSV 파일로 저장!
shuffled_df.to_csv('C:/python_ML/data/cat_dog/train', index=False)
C:\python_ML\data\cat_dog
shuffled_df.to_csv('C:/python_ML/data/cat_dog/train.csv', index=False)
'머신러닝 딥러닝' 카테고리의 다른 글
0930 Image generator (0) | 2021.09.30 |
---|---|
0930 cat&dog CNN CSV파일 (0) | 2021.09.30 |
0928 CNN 구현(tf 1.15, tf 2.x) (0) | 2021.09.28 |
0927 CNN(Convolution Neural Network) (0) | 2021.09.27 |
0917 CNN 합성곱 신경망 (0) | 2021.09.17 |
댓글