[Boostcamp AI Tech] 2주차 Day 3 학습 기록

bluegun·2021년 8월 11일
0

AI Tech 2기 활동

목록 보기
8/87

학습 내용

CNN

  • Convolution의 의미

    • 2D convolution : convolution의 모양을 해당 image에다 찍는다(ex. Blur, Emboss, outline)
  • Convolution의 파라미터 수

    • filter의 크기와 개수만큼 파라미터가 있다.

    • ex. 5 5 3 의 filter가 4개 -> 553*4 개

    • 참고로, filter의 수만큼 convolution 후의 image의 수가 결정된다.

      • ex. 32323 image에 4개의 553 filter convolution -> 28284
      • ex. 32323 image에 1개의 553 filter convolution -> 28281
  • CNN의 구성

    • convolution layer, pooling layer, fully connected layer
      • convolution layer, pooling layer에서 feature extraction을 하고, 이를 FCN에 넣는다.
    • FCN은 없어지는 추세
      • 파라미터 숫자가 많은 부분이기 떄문에 없애려한다.
      • 파라미터가 많으면, 학습 속도가 오래 걸리기도 하고, generalized performance가 떨어진다.(overfitting)
    • 파라미터의 수를 계산하는 방법과 감을 익히는게 중요하다.
  • Stride

    • convolution연산을 할 때 한 번에 kernel이 움직이는 거리
  • Padding

    • boundary 정보를 잃지 않기 위해 image의 끝에 일정 값을 덧붙임.
    • input, output의 dimension 차이를 조절할 수 있음.
  • Convolution은 Dense layer보다 파라미터 수가 훨씬 적다

    • filter는 shared weight로서, input의 각 위치에 대해 모두 filter라는 똑같은 연산을 거치기 때문이다.
    • 따라서, CNN model은 최근에 올수록 convolution layer는 깊이, dense layer는 줄이며 파라미터 수를 줄이며 성능을 올린다.
  • 1*1 convolution

    • Dimension reduction(차원 축소) : 채널을 줄여, 파라미터 수를 줄임.

대표적인 CNN 모델

  • 모델의 파라미터 수, 뎁스 위주로 이해하는 걸 권장.

AlexNet

  • 네트워크가 2개로 나뉘어져 있다.

    • 당시 GPU가 부족해, 네트워크에 최대한 많은 파라미터를 넣고 싶어 따로따로 트레이닝 시켰다.
  • input이 11113로, 크기가 크다

  • 5 convolution layer, 3 dense layer로 당시 기준으로는 Deep 하다.

  • Key ideas

    • ReLU 사용
      • 0이하는 0으로 만들기 떄문에 비선형함수로 만들어줌
      • Gradient 소실이 잘 안일어난다.(vanishing gradient problem 해결)
    • 2 GPU 사용
    • Data augmentation 사용
    • Dropout 사용
  • 지금엔 당연한 것들이지만 당시엔 획기적인 것들이었다.

VGGNet

  • 3x3 convolution filter만 사용
    • 왜 3x3?
      • 3x3 convolution을 2번 하는 것은 5x5 convolution을 1번 하는 것과 동일한 형태로 나온다.
      • 그래서 Receptive field 차원에서는 똑같은데, 3x3을 2번 하는 게 오히려 파라미터가 적다.

GoogLeNet

  • Network in Network 구조

    • Inception block 활용
  • block 중간중간에 1x1 convolution 활용

    • 결론적으로, 1x1 convolution은 channel 방향으로 dimension reduction 효과가 있다.

ResNet

  • 네트워크가 커짐에 따라 학습이 잘 안되는 문제가 있었다.

    • Overfitting은 아니다. training error랑 test error가 같이 줄어드니까(Overfitting인 경우는 training error는 줄어드는데 test error는 늘어나는 경우다).
    • 근데 training error가 작아도 test error가 여전히 크다.
  • skip connection

  • Batch normalization 사용

  • Bottleneck architecture 사용(1x1 convolution)

  • 네트워크를 더 깊이 쌓아도 되는 가능성을 열어준 모델.

DenseNet

  • residual block에서, ResNet에선 skip connection한 값과 해당 위치의 output을 더했다면, DenseNet에선 concatenation했다.

  • concatenation하면 채널이 점점 커짐 -> 파라미터 숫자가 많아짐

  • Dense block, Transition block

    • Dense block : 평범하게 concatenate 연산
    • Transition block : 중간에 1x1 convolution을 통해 차원을 낮춰줌.

Sementic segmentatin and Detection

Semantic segmentation

  • 이미지 내에서 물체를 분류해내는 것(이미지 내 모든 pixel이 어떤 label에 속하는 지 판별)

    • classification이나 detection이랑은 다르다. 이미지 내 물체들을 boundary로 세밀하게 구분한다.
    • 주로 자율주행에 많이 활용됨.
  • Fully Convolutional network

    • Dense Layer를 없애고 convolution만 사용
    • Dense Layer에 들어가기 위해 Flatten 하는 과정 대신, 크기가 동일한 Filter를 만들어 11channel 의 형태가 되도록 함.(결국 Dense랑 파라미터 수는 차이없음)
    • Convolutionalization 이라 함.
  • Fully Convolutional network의 특징

    • input dimension에 independent : Input shape를 맞춰줄 필요 없이 잘 동작한다.
    • heatmap과 같은 효과가 있다.
    • subsampling 된다(input에 비해 output의 크기가 줄어든다.)
  • Deconvolution

    • convolution의 반대 같은 과정 : output이 input보다 커진다.
    • 하지만 엄밀히 말하면 역은 아니다(convolution으로 축약된 값에서 원래 값을 그대로 복원할 순 없다)
    • padding을 많이 줘서 크기가 늘어나게 할 수 있다.

Detection

  • R-CNN

    • input image에서 2000개의 region을 뽑고, 각각을 같은 크기로 맞춰 분류한다...
  • SPPNet

    • R-CNN에서 CNN을 한번만하고, 그 안에서 region을 뜯어온다.
  • Fast R-CNN

  • Faster R-CNN

    • Region을 뽑는 것도 학습하자 : Region Proposal Network + Fast R-CNN
  • YOLO

    • 겁나빠름
    • bounding box를 따로 뽑는 RPN 과정이 없이, 한 번에 bounding box와 class를 뽑는다.

피어 세션

  • Mixture Density network에 대해 조사한 내용을 팀원들에게 발표하였다.

  • 다른 팀원들이 조사한 Vision Transformer, Adversarial Auto-encoder에 관한 발표를 들었다.

  • 다른 팀원이 조사한 부분을 내일까지 각자 공부하여, 이해가 안가는 부분을 질문하며 이해하기로 했다.

특강

깃 활용 강의 1일차(이고잉님)

  • 항상 깃에 대한 두려움과 거부감이 있었고, 어느정도는 알아도 세부적으로 어떻게 다뤄야할지 몰랐는데, 깃의 사용 방법과 결과를 step by step으로 천천히 보여주셔서 아리송했던 용어들도 이해하고 거부감을 덜 수 있던 시간이었다.
  • 목소리가 되게 좋으신 분이었다.

느낀 점

  • MDN에 대해 정리를 못할 것 같아 걱정이 많았는데, 다행히 어느정도 이해를 하고 코드도 만들 수 있어서 다행이었고 약간 자신감을 얻을 수 있었다.
  • 구현 능력이 부족하다고 매일 말하는 것 같다. 생각한 모델과 학습에 대한 코드들을 많이 구현해보면서 자연스럽게 짤 수 있도록 해야겠다.

0개의 댓글