Data Science/4. 딥러닝

[n431]Convolutional Neural Network(CNN)

착한곰돌e 2021. 8. 24. 08:49

■ Key words

  ㆍConvolution & Pooling

     - Computer vision(CV)

       · 사물인식 : Object Detection(YOLO) + RCNN(Fast, Faster, MASK RCNN)

       · 포즈 예측 : Pose Estimation(PoseNet)

       · 윤곽분류 : Instance Segmentation(Detectron)

  ㆍCNN(Convolutional Neural Network)

     - Convolution 

       · Filter(Kernel)

       · Stride

       · Padding

     - Pooling Layer 

  ㆍ전이학습(Transfer Learning)

     - Image classification

 

■ 주요내용

  ㆍConvolution & Pooling

     - Computer Vision(CV)의 활용

       · 사물인식 : Object Detection(YOLO) + RCNN(Fast, Faster, MASK RCNN)

       · 포즈 예측 : Pose Estimation(PoseNet)

       · 윤곽분류 : Instance Segmentation(Detectron)

     - Convolution : 한 함수가 다른 함수를 수정하는 방법을 보여주는 세 번째 공동함수(Weight Sharing)를

                         생성하는 두 함수에 대한 연산 프로세스 및 적용 프로세스

       ⇒ 교환성, 연관성, 분배성 등 다양한 수학적 속성이 있음. 모양(shape)이 효과적으로 변환됨.

       → filter 영역 크기(n×n)를 filter 행렬과 내적한 가중합을 적용한 하나의 벡터값 출력;

           크기가 클수록 output 크기가 작아짐

       · Filter(kernel) : 가중치(Weight Parameters)의 집합으로 이루어져 가장 작은 특징을 잡아내는 창. 학습대상.

          ⇒ vector initializer가 적용된다. 

       · Stride : 한 번 filtering을 할 때 몇 칸씩 띄어서 시행을 할 것인지 나타내는 숫자.

       · Padding : feature map의 크기 조절과 가장자리 데이터를 충분히 활용하기 위해 input값 가장자리에

                      0 등 특정한 값을 둘러준 것(zero padding 등 다양한 padding 방법이 있음)

     - Pooling Layer : Feature Map의 차원을 줄이는 층. 차원을 줄여(flatten) Fully-connected ANN(Artificial NN)에 넣음.

       · 가중치(학습대상)가 없어 빠르게 차원 축소 가능

       · 차원이 줄어들어 연산이 빨라지고, 차원의 저주를 피할 수 있음(과적합 회피)

       · 장점 : Local Feature(지역적 특징을 잘 잡아냄) / Weight Sharing(filter 공유) / Translation Invariance(해석 탁월)

  ㆍCNN(Convolutional Neural Network) : Convolution - Pooling layer가 반복된 후 Fully connected NN에 연결

     - 전체 차원(feature) 수 : 입력 벡터 크기(n, m, 3; RGB) × (각 conv.의 차원 수 + 1; bias) × 최종 conv.의 차원 수

       ⇒ 각 층에서 적용된 feature에 새로운 층의 feature가 적용되야 하므로, 연속적으로 곱하게 됨(RGB × 가로세로 등)

     - 장점 : 전처리(자르기, 센터링, 정규화 등) 불필요 / 일반적인 문제(이동, 조명 등)에 대해 견고함(robust)

  ㆍ전이학습(Transfer Learning) : 기존 데이터로 학습된 네트워크를 재사용 가능하도록 하는 library

     ⇒ 기존의 (다른)데이터로 학습한 가중치(Weights)와 편향(bias)를 전부/일부 재사용 하기에 전이학습이라고 함.

     - Training data를 적게 사용하고, 학습속도가 빠르며, 더 잘 일반화된 모델을 만들 수 있음

     - 사용방법

       · 이전에 학습한 모델에서 파라미터를 포함한 레이어 가져오기

       · (필요시)향후 학습 중 정보가 손상되지 않도록 정보 동결(Freeze; 가중치 업데이트 X)

       · 동결된 층 위에 새로운(학습 가능한)층 더하기 : 출력층 조정으로 분류/회귀 등 활용 가능

       · 새로운 data set에서 새로 추가한 층만 학습; 기존 층의 weight까지 학습하게 되면 시간이 오래 걸림.

       * ResNet50 : CNN의 일종. 기존의 Sequential model과 달리 skipped connection이 있어

                        신규 학습(weight layer × ReLu)과 기존 자료 보존(Skipped Connection) 병행 가능.

     - Image classification

 

■ Session note

ㅁ 오전 session
  ㆍ이번 주 내용 : 이미지 처리
  ㆍconvolution : 1,2차원 필터 / 신호 증폭, 
     ⇒ 원본(벡터)과 filter(가중치)의 가중합을 구해 그 가장자리(edge)를 강조하여 알아내는 방법
     - filter : 가중치의 집합. 특징을 잡아내는 창 / 색, 빛의 세기, 가로, 세로 등을 인지
       · 모델이 학습(가중치, 편향)을 하면서 업데이트 되는 것
       · 가중치 초기화를 적용하여 random값으로 시작하여 학습을 하며 조정해나가게 됨
     - Stride : filter를 몇 칸 움직일 것인가.
       · stride를 2로 하면 padding 적용 불가; 데이터가 작아지는 것을 방지하는 방법
          : stride 숫자에 따라 pad의 숫자를 동일하게 맞춰줌; input과 output의 크기를 같게 하기 위한 것은 stride에 pad숫자를 맞춰주는 것으로 해결 가능
     - Padding : input과 output의 차원을 갖게 해주는 것
       · convolution 연산을 하게 되면 차원이 줄어들기 때문에 크기를 유지해주기 위해 / 가장 가장자리의 열/행의 값은 연산에 각 1,2번만 들어가기 때문에, 연산에 동일하게 반영하여서 보다 정확하게 분석하기 위해; 테두리에 있을 수도 있는 중요한 특징을 연산에 반영하기 위함
     - Pooling Layer : 평균값을 추출하는 역할; 차원을 줄일 수 있음 / blur 처리
       · 차원축소 : 분명한 특징만을 남겨 일종의 feature selection과 같이 하여 과적합을 피할 수 있음
  ㆍcifar10 : class가 10개라 cifar10
     - summary로 output shape 확인하기
  ㆍ전이학습(Transfer Learning) : 학습된 네트워크 재사용 라이브러리 / 동결시켜서 선행학습된 layer는 update 되지 않게 조절 가능
     - skipped connection(ResNet50) : filter된 layer와 연산이 되지 않은 원본 layer를 모두 전달하는 함수
     - convolution과 pooling을 통해 이미 학습된 데이터 활용; 동물로 학습한 라이브러리로 빌딩 분류 시에는 성능이 안 나올 수 있지만, 이미 학습한 분류의 이미지를 넣으면 분류는 잘 할 수 있음
  ㆍkernel : filter의 한 종류
  ㆍfilter가 image의 edge를 찾는다 : image의 특징을 찾는다
  ㆍvector 이미지 : 캡쳐를 하거나 다른 방법으로 인식해서 처리할 것
  ㆍRGB가 아닌 이미지 : color channel을 분리해서 인식
  ㆍCNN의 장점 : 가중치(filter) 공유를 통한 파라미터가 줄어듦
  ㆍconvolution - pooling layer 이후 NN 들어가기 전 Flatten() 적용
  ㆍsparse_categorical_crossentropy : one-hot encoding이 적용되지 않아 0~9 등 숫자로 결과가 나와서 sparse_categorical_crossentrpy 적용
  ㆍlabel은 이미지 파일에서 따오거나 사람이 직접 지정해줌. one-hot, label encoding 등은 사람이 지정

  * fully connected layer
ㅁ 오후 session
  ㆍpooling layer 할 때 stride 수 : pooling layer의 가로 수로 정해줌
  ㆍCNN
     - 장점
       · 전처리 노력 감소
       · 가중치 공유로 메모리가 줄어드는 등 가중치가 감소된다
       · 가중치 감소로 사물이 이미지 내 어디에 위치하는지 알 수 있다
       · i. e.> (32, 32, 3) → (3, 3) → (30, 30, 32)의 가중치 수
          : 필터 1장에 3×3, node가 3개 → 32개로 증가하였으므로, 3×32개의 가중치 필요
            ; RGB 필터(3개) → 가로, 세로 필터 등 32개의 필터를 추가로 걸러주기
            → 전체는 (3×3; 필터 1장당 필요한 가중치 수)×(3 + 1; bias)×32개 필요
     - filter
       · 가중치의 집합
       · 특징을 잡아내는(추출하는) 창
       · filter가 커질수록 output의 크기가 작아진다(필터가 이동할 수 있는 거리가 작아짐)
     - stride
       · filter가 한 번에 몇 칸 이동하는지 나타내는 수
       · stride가 커지면 output의 크기도 줄어듦; 추출하는 회수가 줄어들기 때문
     - padding
       · input과 output의 이미지 크기를 같도록 보정해 주는 것
       · 가장자리의 값들이 학습이 덜 되는 것을 보완하고자 외곽에 추가값을 더해주는 것
     - pooling
       · 차원을 축소하는 단계
       · 과적합을 피할 수 있음
       · 채널 수가 변하지 않는다
       · max : 풀링 범위 내에서 최대값만 내놓는 것 / 이미지 테두리가 강조가 됨
       · averager : 풀링 범위 내의 값의 평균값을 사용 / 이미지 희석; blur 처럼 희미해짐
     - convolution 대비 pooling의 장점 : 학습을 할 파라미터가 없음(max/ave 등); 속도가 더 빠름
  * 개/고양이 분류 문제에서 softmax를 쓰는 이유 : parameter를 조정해서 3개 이상의 분류 문제로 붙여 쓸 수 있도록 하기 위해서 / binary는 sigmoid를 써도 됨

 

■ 주요함수

  ㆍ

 

■ Reference

  ㆍWhy convolution : https://youtu.be/ay3zYUeuyhU

  ㆍ분류용 신경망 만들기 : https://opentutorials.org/module/3653/22923

 

Tensorflow로 인공신경망을 만든다는 것 - 한 페이지 머신러닝

[CODE] https://goo.gl/1wAbJ5 인공신경망 만들기 텐서플로우로 인공신경망을 설계한다는 것은, 여러 모양의 파이프로 배수관을 설계하는 것과 같습니다. 어떤 목적으로 어떤 종류의 인공신경망을 만들

opentutorials.org

ㆍ[keras] fit vs fit_generator  : https://shelling203.tistory.com/26

 

[keras] fit vs fit_generator

keras에서 모델을 설계하고 학습(fitting)할 때 사용하는 메소드가 fit과 fit_generator가 있습니다. 두개가 다른 것은 아나 어떤 차이인지 정확히 몰라 구글에 검색을 해보니 이미 쉽게 정리해둔 글이

shelling203.tistory.com

ㆍImage data preprocessing : https://keras.io/api/preprocessing/image/

 

Keras documentation: Image data preprocessing

Image data preprocessing image_dataset_from_directory function tf.keras.preprocessing.image_dataset_from_directory( directory, labels="inferred", label_mode="int", class_names=None, color_mode="rgb", batch_size=32, image_size=(256, 256), shuffle=True, seed

keras.io

  ㆍbinary_crossentropy : https://utto.tistory.com/8

 

Keras에서 binary_crossentropy와 categorical_crossentropy 차이

바이너리 classification 문제를 풀려고하면 둘 중 어떤걸 써야하나.. 뭐가 다른가 궁금해서 찾아보았다 우선 binary_crossentropy 소스 def binary_crossentropy(target, output, from_logits=False): """Binary..

utto.tistory.com

  ㆍChannel : https://devkor.tistory.com/entry/%ED%95%A9%EC%84%B1%EA%B3%B1-%EC%8B%A0%EA%B2%BD%EB%A7%9D