Snoopy [TIL] 20221206 (화)
복습 및 회고/TIL

[TIL] 20221206 (화)

Sooyoon Jeong 2022. 12. 6.

나는 오늘 무엇을 했는가?

1. AIS 7기 수업 수강

  - 이미지 분류(TF 공식 튜토리얼 - 꽃 이미지 분류, 말라리아 혈액도말 이미지 분류)

✨ TF 공식 예제: 분류 튜토리얼 실습
1️⃣ 5가지의 꽃 이미지를 학습하고 분류하는 예제 ※ ['daisy', 'dandelion', 'roses', 'sunflowers', 'tulips']
2️⃣ 이미지 데이터를 불러오고 train, valid set을 나누기
3️⃣ 리소스 활용의 효율성을 위한 캐시 사용
4️⃣ 0~1 값으로 정규화 (Rescaling 레이어에 추가해줄 수도 있음)
5️⃣ 레이어 층 구성 <레이어 구성층 코드> model = Sequential([ layers.Rescaling(1./255, input_shape=(img_height, img_width, 3)), layers.Conv2D(filters = 16, kernel_size = 3, strides = (1,1),padding='same', activation='relu'), layers.MaxPooling2D(), layers.Flatten(), layers.Dense(units = 128, activation='relu'), layers.Dense(num_classes) <파라미터 설명> filters: 컨볼루션 필터의 수 == 특징맵 수 kernel_size: 컨볼루션 커널의 (행, 열) => 필터 사이즈 padding: 경계 처리 방법 - ‘valid’: 유효한 영역만 출력이 됩니다. 따라서 출력 이미지 사이즈는 입력 사이즈보다 작습니다. - ‘same’: 출력 이미지 사이즈가 입력 이미지 사이즈와 동일합니다.
6️⃣ 기본 레이어로 학습했더니 성능이 좋지 않았음 (이미지에 노이즈가 많았기 때문)
7️⃣ 과대적합을 막기 위해 데이터 증강과 드랍아웃 실행
8️⃣ tf.keras.layers.RandomFlip, tf.keras.layers.RandomRotation, tf.keras.layers.RandomZoom 이런 전처리 기능을 사용하면 데이터 증강기법을 통해 이미지를 다양하게 생성해서 학습을 진행할 수 있음 <전처리 코드> data_augmentation = keras.Sequential( [ layers.RandomFlip("horizontal", input_shape=(img_height, img_width, 3)), layers.RandomRotation(0.1), layers.RandomZoom(0.1), ] )
9️⃣ 데이터 증강기법을 통해 오버피팅이 줄어든 것을 확인할 수 있음

=======================================================
좋은 데이터를 넣어주어야 학습 결과가 좋게 나온다! 이미지 데이터를 분류할 때 역시 전처리가 중요하다. ✨ 과대적합 - 과적합 시 여러 원인이 있을 수 있겠지만, 주요 원인 중 하나는 이미지 전처리가 제대로 되어 있지 않음이다. - 훈련 예제가 적을 때 모델은 새로운 예제에서 모델의 성능에 부정적인 영향을 미치는 정도까지 훈련 예제의 노이즈나 원치 않는 세부까지 학습함(이런 형상이 과적합이다.) - 이는 모델이 새 데이터 set을 일반화하는데 어려움이 있음을 의미한다. 과적합 방지 방법 - 데이터 증강(data agumentation)사용 - 모델에 드롭아웃 추가 등 🤔 데이터 증강 기법 tf.keras.layers.RandomFlip: 이미지 접기 tf.keras.layers.RandomRotation: 이미지 돌리기 tf.keras.layers.RandomZoom: 이미지 확대

=======================================================

✨ 이미지 사이즈 🤔 사이즈가 다르면 계산을 할 수 없기 때문에 사이즈도 맞춰줄 필요가 있다. 그럼 어떤 사이즈로 만들어주는 것이 좋을까? - PIL, OpenCV 등을 내부에서 사용하고 있는데, 우리가 포토샵에서 이미지 사이즈를 줄이는 것처럼 이미지 사이즈를 조정해준다. - 계산 편의를 위해 보통 정사각형 형태로 만든다. - 이미지 사이즈도 하이퍼파라미터처럼 조정을 하면 성능이 달라지고, conv와 pooling도 성능에 영향을 준다. - 어떤식으로 레이어를 구성하느냐에 따라 보완이 가능하기도 하다. 1️⃣ 이미지 사이즈가 작은 경우 - 원래 이미지가 왜곡되거나 특징을 잃어버릴 수 있다. - 계산량이 줄어들어 학습속도가 빠르다. 2️⃣ 이미지 사이즈가 큰 경우 - 원래 이미지가 왜곡될 수 있다.(작은 사이즈를 늘리면 픽셀이 깨져보일 수 있다.) - 보다 자세하게 학습하기 때문에 성능이 좋을 수 있다. - 계산량이 많아 학습속도가 오래걸린다. 적당한 이미지 크기는 상황에 따라 다르다. 장비가 연산을 많이 지원할 수 있다면 원본 사이즈를 사용하고 장비 계산이 너무 오래 걸린다면 줄여주는 것이 적절하다.

=======================================================

✨ 이미지 로드하는 방법 1️⃣ matplotlib.pyplot imread()를 사용 2️⃣ PIL(Pillow)로 불러오는 방법 → PIL로 접고 돌리고 땡기기 가능 ※ TF 내부에서도 PIL이나 OpenCV를 사용해서 접고 돌리고 땡기기를 함 → 이미지 편집기를 만들 수도 있음 3️⃣ OpenCV로 불러오는 방법(Computer Vision)에 주로 사용하는 도구 → 동영상 처리 등에 주로 사용

=======================================================

✨ 1002번 실습 파일 → 말라리아 혈액도말 이미지 분류 실습, TF공식 문서의 이미지 분류를 다른 이미지를 사용해서 응용해보는 실습 1️⃣ 이미지 데이터 불러오기: wget을 사용하면 온라인 URL에 있는 파일을 불러올 수 있음 논문(혈액도말 이미지로 말라리아 감염여부를 판단하는 논문)에 사용한 데이터셋을 불러왔습니다. 2️⃣ plt.imread 와 cv2(OpenCV) 의 imread 를 통해 array 형태로 데이터를 불러와서 시각화를 해서 감염된 이미지와 아닌 이미지를 비교 3️⃣ TF.keras의 전처리 도구를 사용해서 train, valid set을 나눠주기 => 레이블값을 폴더명으로 생성해 주게된다. 4️⃣ 앞으로 할 내용은 CNN 레이어를 구성, 컴파일 하고 학습하고 정확도(Accuray) 성능을 비교해볼 예정

2. 천리길 스터디

  - CNN

3. SQL 프로그래머스 3문제

4. DL 복습

 

나는 오늘 무엇을 느꼈는가?

 

총 공부시간

9시간 47분 04초

 

'복습 및 회고 > TIL' 카테고리의 다른 글

[TIL] 20221208 (목)  (0) 2022.12.08
[TIL] 20221207 (수)  (0) 2022.12.07
[TIL] 20221205 (월)  (0) 2022.12.05
[TIL] 20221204 (일)  (0) 2022.12.04
[TIL] 20221130 (수)  (0) 2022.11.30

댓글