나는 오늘 무엇을 했는가?
1. AIS 7기 수업 수강
- 전이학습과
- numpy로 이미지 배열 직접 만들기
12월 7일 수업 목표
1003
전이학습(transfer learning)
기존 유명한 논문의 CNN 모델이 이미 TF, keras, PyTorch 등에 구현이 되어있습니다.
그래서 해당 모델을 직접 구현하지 않고 가져다 쓸 수 있는게 전이학습입니다.
여기에서 미세조정 등을 해주게 되면 직접 모델을 구현했을 때에 비해 거인의 어깨 위에 올라가서 사용하기 때문에 조금 더 나은 성능을 내기도 합니다.
1004
날씨이미지 분류
TF, keras 의 이미지 전처리 기능을 사용하지 않고 넘파이로 직접 이미지 array를 만들어 보기
데이터셋(train, valid, test)도 직접 나누어 보기 CNN 네트워크 구성 응용, 학습과 예측해 보기
다차원 배열을 만들어 CNN에 적용하는 실습이 1004파일의 목적
========================================================
🤔 스트라이드를 통해 여러 칸을 이동하면 어떻게 될까? (기본값은 1칸씩 이동)
🙋♀️ 자세히 학습하지 못하기 때문에 언더피팅이 될 수 있다. 다만 용량이 줄어들고 학습속도는 빠르다.
🤔 이미지 증강을 하면 안되는 현실 상황?
1️⃣ 크롭 및 확대: 노이즈(튤립+풍차+하늘에서 풍차나 하늘 등)를 확대하거나 크롭하면 더 문제가 될 수 있다.
2️⃣ 회전 및 반전: 증강해도 레이블이 바뀌지 않는 값만 증강해야 한다. ex) 6, 9 → 6을 180도 돌리면 완전 다른 의미인 9가 된다.
3️⃣ 색상변경: 색상이 중요한 역할을 하는 이미지의 경우에는 색상 반전 혹은 변경을 하면 안된다.ex) 신호등(안전과 직결되는 문제)
4️⃣ 데이터 셋: 증강할 때 train에만 해주고 test에는 해주지 않는다. 왜냐하면 현실세계 문제를 푼다고 가정했을 때 현실세계 이미지가 드렁옸을 때 증강해주지는 않고 들어온 이미지로 판단하기 때문에 train에만 사용함
→ 무조건 이미지 증강이 성능향상을 보장하는 것은 아니다.
→ 증강할 때는 현실세계 문제와 연관해서 고민해봐야 한다.
🤔 CNN 모델 시 메모리 오류가 날 경우 해결방안(단, 성능과 관계없이 일단 돌리고 싶을 때)
1️⃣ 이미지 사이즈를 줄어본다.
2️⃣ 레이어 및 필터수를 줄여본다.
3️⃣ 배치사이즈를 줄여본다.
========================================================
✨ 전이학습
Module: tf.keras.applications Keras Applications are premade architectures with pre-trained weights.
- 미리 유명한 모델 아키텍처로 학습을 해서 찾아놓은 가중치를 사용합니다.
- 간단하게 보면 유명한 모델 아키텍처를 가져다 사용하는 것입니다.
- 논문을 보면 코드가 많고 복잡한데 간단하게 API를 만들어서 코드 1~2줄로 사용하게 만들어 놓은 것입니다.
VGG16
[논문] https://arxiv.org/abs/1409.1556
[API 소개문서] https://www.tensorflow.org/api_docs/python/tf/keras/applications/vgg16
[케라스 문서의 전이학습 가이드] https://keras.io/guides/transfer_learning/
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[코드] from tensorflow.keras.applications.vgg16 import VGG16
vgg = tf.keras.applications.vgg16.VGG16( include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=None, classes=1000, classifier_activation='softmax') model = Sequential() model.add(vgg) model.add(Flatten()) model.add(Dense(1,activation="sigmoid"))
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
🤔 (width, height, 3) 이랑 (height, width, 3)의 순서
- 각 image의 shape 를 출력했을 때의 값과 동일하게 만들어 주어야 함
- 첫 train_image 를 shape 값으로 출력했을 때의 형태로 지정해 주면 된다.
🤔 include_top
- whether to include the 3 fully-connected layers at the top of the network.
- 본 실습에서는 상단에 완전연결 레이어를 추가할 것인지 여부로 False 로 설정해 주었고
- 구성한 네트워크를 기준으로 true false 설정하면 된다.
========================================================
1004 실습
1) 1004 파일을 열고 사본을 생성
2) 런타임 > 런타임 유형 변경 > GPU 나 TPU 로 하드웨어 가속기 설정
3) 캐글에서 파일 다운로드 받기
4) 다운로드 파일 압축을 풀어서 구글 드라이브에 업로드 하기
5) 구글 드라이브에 업로드한 파일 마운트 하기
6) 파일 경로 읽어오기, 해당 경로의 폴더 별 파일 시각화 하기
7) 파일 사이즈를 변경하는 함수를 만들고 적용하기
8) train. vaild, test 변수에 이미지 여러장을 array 만들어서 넣어주는 방법 알아보기
- 이미지 파일을 array로 만드는 과정은 어렵기 보다는 복잡할 수 있다.
- 복잡한 문제는 대체적으로 어렵게 느껴진다.
- 현업에서의 업무도 복잡하다. 과정을 이해하는 것이 중요!
- 과정을 작은 단위로 나눠 보는 것을 추천.
0️⃣ 목표: train, valid, test에 대한 X, y 값 만들기
1️⃣ label 별로 각 폴더의 파일 목록을 읽어온다.
2️⃣ 이미지와 label 리스트를 만들어서 넣어주기
3️⃣ test는 폴더가 따로 존재. 이미지를 불러올 때 test 여부를 체크해서 train, test를 먼저 만들기
4️⃣ np.array 형태로 변환하기
5️⃣ train으로 train, valid를 나눠주기
6️⃣ train, valid, test를 만들어주기
🤔 append와 extend의 차이점
append는 통째로 넣어주고 extend는 풀어서 넣어준다.
예시) 봉지째로 담는다: append 낱개로 풀어서 담는다: extend
🤔 valid dataset 만들기
1️⃣ train_test_split
2️⃣ fit - validation_split
단, 2번 방법은 class가 균일하게 나눠지지 않아서 학습이 불균형하게 되는 문제 발생하기 때문에 valid데이터를 직접 나눠 넣어주면 좀 더 잘 학습된다.
🤔정규화에서 255로 나눠주는 이유
RGB 형태의 컬러 디스플레이 방법은 가산혼합방식(다 합치면 흰색)
CMYK 형태의 인쇄 방법은 감산혼합(다 합치면 검은색)
RGB는 0 ~ 255로 3개의 RGB (빨초파)로 표현한다.
또한, 현재 대부분 모니터의 최대 지원 색 심도는 24비트이다. 즉 각 픽셀은 2^24(~16.7M)의 색상을 표시할 수 있게 되어있고 24비트 값을 각각 R G B 세개의 색상으로 나누자면 24비트/3 = 8비트이다.
따라서 각 채널의 폭은 8비트를 가지게 되게 되어있고 채널당 8비트라는것을 고려할때 0 ~ 255 (256개)의 숫자 값만 인코딩 할 수 있게 되는 것이 이치에 맞다.
(1️⃣1️⃣조) 1️⃣0️⃣조 다음 조 ✨ 정수윤 - 사실(Fact): 전이학습과 넘파이로 직접 이미지 array를 만드는 방법에 대해 학습하였다. - 느낌(Feeling): 어제보다는 할 만 했던 것 같지만 주말에 시간내서 다시 정리를 해봐야겠다. - 교훈(Finding): 복습 꼭 꼭 하자!
2. 포켓몬 이미지 분류 프로젝트
나는 오늘 무엇을 느꼈는가?
수업을 들엇을 때는 할만했던 것 같은데
막상 혼자 해보려고 하니까 너무 어려운 것 같다 ㅠㅠ..
꼭 시간 내서 정리 및 복습해야할 것 같다.
총 공부시간
11시간 40분 45초
'복습 및 회고 > TIL' 카테고리의 다른 글
[TIL] 20221209 (0) | 2022.12.09 |
---|---|
[TIL] 20221208 (목) (0) | 2022.12.08 |
[TIL] 20221206 (화) (0) | 2022.12.06 |
[TIL] 20221205 (월) (0) | 2022.12.05 |
[TIL] 20221204 (일) (0) | 2022.12.04 |
댓글