[TIL] 22.12.07

문종현·2022년 12월 7일
0

TIL

목록 보기
54/119
post-custom-banner

👉 오늘 한 일

  • CNN 이어서(1003~1004 파일)

CNN

🤔스트라이드를 통해 여러 칸을 이동하면 결과가 어떻게 될까?

  • 용량이 줄어들고 학습 속도가 빨라짐. 하지만 자세히 학습하지 못 하기 때문에 언더피팅이 될 수 있음.

💡이미지 증강을 할 때 주의해야 할 사항

1) 크롭이나 확대 => 노이즈를 확대하거나 크롭하면 더 문제가 될 수 있음

2) 회전, 반전 => 회전해도 레이블이 바뀌지 않는 데이터만 회전해야 함

  • e.g.) 6을 180도 돌리면 완전히 다른 의미인 9가 되기 때문에 이런 숫자 이미지는 돌리지 않음

3) 색상 변경 => 색상이 중요한 역할을 하는 이미지일 경우에 색상 반전 혹은 변경을 하면 안됨

  • e.g.) 만약 장미꽃이라면 다양한 색상이 있기 때문에 색상을 변경해도 상관이 없지만, 신호등이라면 안전과 직결되기 때문에 변경하면 안됨

4) 데이터셋 => 증강할 때 train 에만 해줌. test에는 하지 않음. 현실세계 문제를 푼다고 가정했을 때 현실세계 이미지가 들어왔을 때 증강해 주지는 않고 들어온 이미지로 판단하기 때문에 train에만 사용함

5) 증강을 할 때는 현실세계 문제와 연관해서 고민해서 할 것

🤔CNN 모델을 학습시킬 때 메모리 오류가 난다면? (일단 성능과 상관없이 모델을 돌리고 싶을 때)

  • 이미지 사이즈를 줄임.
  • 레이어를 줄임. 필터수를 줄임.
  • 배치(한번에 다 불러오지 않고 나눠서 불러오게) 사이즈를 줄임.
  • 이런 경우 성능(정확도 등)은 낮아질 수 있음

💡전이학습

출처
https://dacon.io/forum/405988

원래 정의 : 한 분야의 문제를 해결하기 위해서 얻은 지식과 정보를 다른 문제를 푸는데 사용하는 방식

딥러닝에서의 정의 : '이미지 분류' 문제를 해결하는데 사용했던 네트워크를 다른 데이터셋 혹은 다른 문제(task)에 적용시켜 푸는 것을 의미

  • 전이학습을 수행한 네트워크가 다양한 이미지의 보편적인 특징 혹은 피처(Feature)들을 학습했기 때문에 전이학습을 수행하지 않은 모델들보다 비교적 빠르고 정확한 정확도를 달성할 수 있음

💡사용 방법

  • 전이학습을 위해서는 ImageNet과 같은 대량의 데이터셋으로 이미 학습이 되어있는 모델을 사용함.

    • 이를 '사전에 학습된 모델' 혹은 'pretrained model'이라고 부름
  • 몇가지 경우에 대해서 pretrained 모델 외에 학습시키는 레이어의 양이 달라질 수 있음

  • 만약 ImageNet과 비슷하지만 소량의 데이터셋을 가지고 있다면 ImageNet으로 학습시킨 CNN을 구조를 그대로 두고 뒷단에 분류를 위해 새로운 완전연결레이어(FC;Fully Connected Layer)를 붙여서 학습시키면 됨

  • 또는, ImageNet과 비슷하지만 더 많은 데이터셋을 가지고 있다면 뒷단에 여러 FC레이어를 묶어서 학습시켜도 좋음

  • 가진 데이터셋이 ImageNet과 다른 경우 => 데이터가 많은 경우에 뒷단의 여러 FC 레이어를 묶어서 학습시켜도 됨

    • 가진 데이터셋이 ImageNet과 다르고 데이터가 적은 경우는 pre-training이 효과적이지 않을 수 있음
    • 이런 경우는 데이터 증식으로 데이터의 양을 늘려서 전체 네트워크를 학습시키는 등 다른 방법을 고려할 수 있음

💡Tensorflow api
tf.keras.applications 에 있는 모듈들

pre-trained model
https://www.tensorflow.org/api_docs/python/tf/keras/applications

💡VGG16

예제 코드

tf.keras.applications.vgg16.VGG16(
    include_top=True,
    weights='imagenet',
    input_tensor=None,
    input_shape=None,
    pooling=None,
    classes=1000,
    classifier_activation='softmax'
)
  • include_top : 네트워크 상단에 FC를 포함할지 여부

    • default = True
    • 여기서 top은 pretrained model network의 가장 마지막 층(FC)를 말함
    • pretrained model에서 층을 더 추가하기 위해서는 False로 지정
  • input_shape는 각 image 의 shape 를 출력했을 때의 값과 동일하게 만들어 주어야 함

💡weather classification

🤔append , expend 의 차이?

  • append()는 리스트 전체를 또 다른 요소로 처리해서 넣고
  • extend()는 대상의 리스트를 풀어서 각각의 요소로 삽입

🤔정규화할 때 왜 255로 나눌까?

  • RGB는 0~255 의 값으로 3개의 R, G, B 값을 표현함

  • RGB 형태의 컬러 디스플레이 방법은 가산혼합 => 다 합치면 흰색이 됨

  • CMYK 방법은 감산혼합 => 다 합치면 검은색이 됨

  • 현대의 대부분 모니터의 최대 지원 색 심도는 24비트임. (물론 더 많이 지원하는 모니터 들도 많이 나왔음)

  • 즉 각 픽셀은 2^24(~16.7M)의 색상을 표시할 수 있게 되어있고, 24비트 값을 각각 R G B 세개의 색상으로 나누자면 24비트 / 3이므로 각 채널의 폭은 8비트를 가지게 됨.

  • 채널당 8비트라는것을 고려할때 2^8 => 0 ~ 255 (256개)의 숫자 값만 인코딩 할 수 있게 되는 것이 이치에 맞음.

💡Quiz
CNN의 풀링층을 합성곱층과 비교한 특징은?

  • 풀링층은 학습대상 파라미터(필터)가 없다.
  • 풀링층를 통과하면 행렬의 크기가 감소한다.
  • 풀링층를 통한 채널 수 변경은 없다.

📌오늘의 회고

  • 사실(Fact) : 전이학습 모델과 넘파이로 이미지를 변환하는 실습을 진행했다.
  • 느낌(Feeling) : 데이터의 양이 충분하다면 사전에 학습된 모델을 사용해서 몇 개의 층만 추가해주면 성능이 꽤나 좋은 것 같아 편리해 보인다.
  • 교훈(Finding) : 이번 미니 프로젝트를 통해 실습해봐야겠다.
profile
자라나라 새싹새싹🌱
post-custom-banner

0개의 댓글