모델이 적은 이미지에서 최대한 많은 정보를 뽑아내서 학습할 수 있도록 우선 이미지를 augment함.
이미지를 사용할 때마다 임의로 변형을 가함으로써 마치 훨씬 더 많은 이미지를 보고 공부하는 것과 같은 학습 효과를 낸다.
이를 통해 과적합(overfitting), 즉 모델이 학습 데이터에만 맞춰지는 것을 방지하고, 새로운 이미지도 잘 분류할 수 있게 됨.
이런 전처리 과정을 돕기 위해 케라스는 ImageDataGenerator 클래스를 제공
- 학습 도중에 이미지에 임의 변형 및 정규화 적용
- 변형된 이미지를 배치 단위로 불러올 수 있는 generator 생성
- generator를 생성할 때 flow(data, labels), flow_from_directory(directory) 두 가지 함수를 사용
- fir_generator, evaluate_generator 함수를 이용하여 generator로 이미지를 불러와서 모델을 학습할 수 있음
4. Image와 카테고리를 X, Y값으로 나누기
caltech_dir = "train 이미지 경로"
categories = ["road", "water", "noroad" .....]
nb_classes = len(categories)
image_w = 28
image_h = 28
pixels = image_h * image_w + 3
X = []
Y = []
for idx, cat in enumerate(categories): #카테고리별로 돌면서 0으로 초기화
label = [0 for i in range(nb_classes)]
label[idx] = 1
image_dir = caltech_dir + "/" + cat #cat 아님 category의 cat임
file = glob.glob(image_dir + "*.jpg")
for i, f in enumerate(files):
img = Image.open(f)
img = img.convert("RGB")
img = img.resize((image_w, image_h))
data = np.asarray(img)
X.append(data)
Y.append(label)
결과물 ---> image_data.npy
결과물을
X_train, X_test, y_train, y_test = np.load("./image_data.npy")
이렇게 load해서 사용하면 된다.
그리고 모델링을 한다음 학습하고 테스트하면 됨.
'뽀로룡 log > KERAS' 카테고리의 다른 글
생성된 데이터셋으로 훈련하기 (0) | 2019.08.26 |
---|---|
로컬 이미지로 데이터셋 만들기 (0) | 2019.08.26 |
CNN + OpenCV 이미지 분류 모델 성능 테스트 (0) | 2019.08.22 |
.h5 -> .pb 변환 프로그램 (1) | 2019.08.21 |
Keras + CNN 모델 (0) | 2019.08.19 |