오늘의 회고
- 사실(Fact): 꽃 이미지 분류 예제 학습, 이미지전처리(PIL, OpenCV), 말라리아 감염 이미지 데이터셋 실습
- 느낌(Feeling): 어제보다 복잡하게 느껴졌다. 미니프로젝트로 잘할 수 있을지 걱정되지만 파이팅!
- 교훈(Finding): 겁먹지 말고 계속 반복해보기
멋사 AI스쿨 7기 박조은 강사님
CNN 두번째 시간
TF 공식예제의 이미지 분류 튜토리얼
꽃 5가지 이미지를 학습하고 분류하는 예제
['daisy', 'dandelion', 'roses', 'sunflowers', 'tulips'] -> 이미지 전처리 필요
이미지 전처리 도구
- PIL
- OpenCV
참고하기 좋은 사이트
이미지 사이즈 지정하는법
- 계산편의를 위해 보통 정사각형 형태로 만들어준다.
- 사이즈가 작을 때는 이미지가 왜곡되거나 손실될 수도 있지만 계산량이 줄어들기 때문에 빠르게 학습한다는 장점이 있다.
- 사이즈가 클 때는 마찬가지로 작은 이미지를 늘리면 왜곡될 수도 있지만 더 자세히 학습하기 때문에 성능이 좋을 수 있다. 다만, 계산이 오래 걸릴 수 있다.
- 이미지 사이즈도 하이퍼파라미터처럼 조정을 하면 성능이 달라지고 Conv, Pooling 도 성능에 영향을 준다.
레이어 구성, 컴파일
num_classes = len(class_names)
model = Sequential([
layers.Rescaling(1./255, input_shape=(img_height, img_width, 3)),
layers.Conv2D(filters=16, kernel_size=3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(filters=32, kernel_size=3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(filters=64, kernel_size=3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Flatten(),
layers.Dense(units = 128, activation='relu'),
layers.Dense(num_classes)
])
#컴파일
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
filters : 컨볼루션 필터의 수 == 특징맵 수 kernel_size : 컨볼루션 커널의 (행, 열) => 필터 사이즈 padding : 경계 처리 방법
- ‘valid’ : 유효한 영역만 출력이 됩니다. 따라서 출력 이미지 사이즈는 입력 사이즈보다 작습니다.
- ‘same’ : 출력 이미지 사이즈가 입력 이미지 사이즈와 동일합니다.
과대적합 방지
- 드롭아웃 추가
- 꽃 이미지에는 노이즈가 많기 때문에 Accuracy 가 데이터증강, Dropout을 했을 때 0.6대에서 0.7정도로 정확도가 높아졌다.
tf.keras.layers.RandomFlip, tf.keras.layers.RandomRotation, tf.keras.layers.RandomZoom
이런 전처리 기능을 사용하면 이미지를 어떻게 변환할까요? 접고 돌리고 땡긴다. (접돌떙)
1002실습
이미지 불러오기
(wget) plt.imread 와 cv2(OpenCV) 의 imread 를 통해 array 형태로 데이터를 불러와서 시각화
감염된 이미지와 아닌 이미지를 비교
TF.keras의 전처리 도구를 사용해서 train, valid set을 나누기 레이어 구성, 컴파일, 학습
CNN 학습이 너무 오래걸릴땐?
너무 오래걸리면 layer개수 줄이기
하드웨어 가속기 GPU 설정
이미지 사이즈 줄이기
- 메모리 오류가 나면 이미지 사이즈를 16x16 으로 줄이기, 레이어수, filters 수도 줄이기
텐서플로우에서는 conv1d 층으로 시퀀스를 처리하고,
conv2d층으로 이미지를 처리하고, conv3d 층으로 볼륨 데이터를 처리할 수 있습니다.
합성곱 신경망은 공간적인 특성 맵을 벡터로 바꾸기 위해 종종 flatten 층과 전역 풀링 층으로 끝납니다.
그리고 일련의 밀집층(MLP)로 처리하여 분류나 회귀 출력을 만들게 됩니다.