멋쟁이 사자처럼 AI 스쿨 TIL-45

김영민·2022년 12월 6일
0

QnA

  1. pooling은 stride가 고정인가요?
    => stride 값을 조정할 수 있습니다.

  2. 마지막에 softmax 는 어떻게 결과를 처리할까요?
    => 출력값이 n개의 확률로 나오고, n개의 확률값의 합이 1입니다
    => 멀티클래스 분류에 주로 사용합니다. 가장 큰 확률값을 클래스의 답으로 사용합니다.

  3. 가장 큰 확률값을 찾는 방법은 무엇일까요?
    => np.argmax() 를 사용하면 가장 큰 확률값에 대한 인덱스를 반환합니다. 가장 큰 값의 인덱스를 답으로 사용합니다.

  4. binary 분류에는 출력 activation으로 무엇을 사용할까요?
    => 시그모이드 sigmoid
    => 0~1 사이의 확률값을 반환하며 임계값(보통은 0.5)을 기준으로 분류합니다

  5. 이미지 사이즈를 작게 만들면 어떤 결과가 나올까요?
    => 원래 이미지가 왜곡이 될 수 있겠죠. 이건 크게 만들어도 마찬가지 문제가 발생하기도 합니다. 작은 사이즈를 늘리면 픽셀이 깨져보일 수도 있겠죠.
    => 사이즈를 작게 하면 계산이 빠릅니다.

  6. 반대로 사이즈를 크게 하면 어떻게 될까요?
    => 계산시간은 오래 걸리지만 분류모델이라면 정확도가 더 높아집니다.

  7. 이미지 사이즈를 어떻게 지정하면 좋을까요?
    => 계산편의를 위해 보통 정사각형 형태로 만들어줍니다.
    이미지사이즈가 클때, 작을때 장단점이 있습니다.
    => 사이즈가 작을 때는 이미지가 왜곡되거나 손실될 수도 있지만 계산량이 줄어들기 때문에 빠르게 학습합니다.
    => 사이즈가 클 때는 마찬가지로 작은 이미지를 늘리면 왜곡될 수도 있지만 더 자세히 학습하기 때문에 성능이 좋을 수 있습니다. 다만, 계산이 오래 걸립니다.

  1. 과대적합 이유?

한 가지 이유로 단정하기는 어렵지만 가장 성능이 안 좋게 나온 중점적인 이유를 찾는다면 이미지 전처리가 제대로 되어있지 않습니다. 노이즈 데이터가 많습니다.
훈련 예제가 적을 때 모델은 새로운 예제에서 모델의 성능에 부정적인 영향을 미치는 정도까지 훈련 예제의 노이즈나 원치 않는 세부까지 학습합니다. 이 현상을 과대적합이라고 합니다. 이는 모델이 새 데이터세트에서 일반화하는 데 어려움이 있음을 의미합니다.

훈련 과정에서 과대적합을 막는 여러 가지 방법들이 있습니다. 이 튜토리얼에서는 데이터 증강을 사용하고 모델에 드롭아웃을 추가합니다.

  1. tf.keras.layers.RandomFlip, tf.keras.layers.RandomRotation, tf.keras.layers.RandomZoom 이런 전처리 기능을 사용하면 이미지를 어떻게 변환할까요?
    => 접고 돌리고 땡기고

딥러닝

이미지

  • 이미지데이터를 분류할때도 전처리가 중요합니다. 좋은 데이터를 넣어주어야 학습결과가 좋게 나옵니다.
  • 이미지 사이즈가 다 다르면 계산을 할 수 없기 때문에 사이즈도 맞춰줄 필요가 있습니다
  • PIL , OpenCV 등을 내부에서 사용하고 있는데 우리가 포토샵에서 이미지 사이즈 줄이는 것 처럼 이미지 사이즈를 조정해 줍니다.

용어 정리

filters : 컨볼루션 필터의 수 == 특징맵 수
kernel_size : 컨볼루션 커널의 (행, 열) => 필터 사이즈
padding : 경계 처리 방법

  • ‘valid’ : 유효한 영역만 출력이 됩니다. 따라서 출력 이미지 사이즈는 입력 사이즈보다 작습니다.
  • ‘same’ : 출력 이미지 사이즈가 입력 이미지 사이즈와 동일합니다.

TF공식 이미지 분류 예제 흐름

1) 지금 실습은 TF공식예제의 이미지 분류 튜토리얼을 진행하고 있습니다.
2) 해당 튜토리얼은 꽃 5가지 이미지를 학습하고 분류하는 예제입니다.
['daisy', 'dandelion', 'roses', 'sunflowers', 'tulips'] 5가지 꽃을 분류해 보는 예제입니다.
3) 이미지 데이터를 불러와서 train, valid set 를 나누어 주었습니다.
4) 리소스를 효율적으로 사용하기 위해 캐시 사용하는 예제를 봤고
5) 0~1 사이로 정규화 해주는 예제를 봤습니다. => Rescaling 레이어에 추가해 줄 수도 있습니다.
6) 기본 레이어로 학습을 했더니 성능이 안 좋게 나왔습니다. => 이미지에 노이즈가 너무 많았어요.
7) 훈련 과정에서 과대적합을 막는 여러 가지 방법들이 있습니다. 이 튜토리얼에서는 데이터 증강을 사용하고 모델에 드롭아웃을 추가합니다.
8) tf.keras.layers.RandomFlip, tf.keras.layers.RandomRotation, tf.keras.layers.RandomZoom 이런 전처리 기능을 사용하면 데이터 증강기법을 통해 이미지를 다양하게 생성해서 학습을 진행할 수 있습니다.
9) 데이터 증강기법을 통해 오버피팅이 줄어든것을 확인해 볼 수 있습니다.

  • 오버피팅이 줄어든 이유
    => 접돌땡을 통한 이미지 학습과 드랍아웃
    => MNIST(손글씨 이미지로 0~9 숫자), FMNIST(의류 10가지 이미지) 는 전처리가 잘 되어있기 때문에 기본 모델로 만들어도 99% 까지의 Accuracy가 나왔었습니다.
    꽃 이미지에는 노이즈가 많기 때문에 Accuracy 가 데이터 증강, Dropout을 했을 때 0.6대에서 0.7정도로 정확도가 높아졌습니다.
    => 지금까지 한 실습은 TF공식예제에 있는 CNN 기본 레이어 구성과 데이터증강 기법을 알아보았습니다.

말라리아 실습

데이터 설명

방글라데시의 Chittagong Medical College Hospital에서 150명의 P. vivax 감염 환자와 50명의 감염되지 않은 환자로부터 Giemsa로 염색된 두꺼운 혈액 도말 슬라이드를 수집하여 촬영했습니다. 350명의 말라리아 환자 데이터 세트를 기반으로 환자를 감염되지 않은 환자, P. vivax 감염 또는 P. falciparum 감염으로 진단하기 위해 PlasmodiumVF-Net을 제안했습니다. 이 데이터는 간행물과 함께 게시되었습니다.

이미지를 로드하는 방법

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

profile
배운걸 다 흡수하는 제로민

0개의 댓글