[Boostcamp AI Tech] [U-stage] 6주차 Day 4 학습 기록

bluegun·2021년 9월 10일
0

AI Tech 2기 활동

목록 보기
27/87

학습 내용


Semantic Segmentation

  • Semantic segmentation : classification을 영상 단위가 아닌 pixel 단위로 하는 것.
    • 한 pixel이 사람에 속하는지, 자동차에 속하는지, ...
    • 객 class 별로 개체가 여럿 있어도 같은 class로 구분한다(사람이 여럿 있으면 전부 같은 색으로 분류)

Semantic segmentation architectures

  • Fully Convolutional Networks (FCN)

    • network가 CNN으로만 구성 된 network
    • Input size를 자유롭게 할 수 있다.
    • network의 모든 부분이 미분 가능 -> 모든 부분이 학습 가능하다.
    • Fully-connected layer로 가기 위해 Flatten할 때, channel 방향으로 single feature vector를 뽑아내는데, 이 과정과 완전 유사하게 1x1 convolution m개를 사용해 feature map을 얻는다.
    • FCN의 결과로 저해상도의 score map을 얻게 된다 -> 저해상도를 해결하기 위해 Upsampling 사용
    • Pooling이나 Stride를 사용하지 않으면 어느정도 고해상도의 map을 얻을 수 있겠지만, 이 경우 receptive field가 작아져 영상의 context를 파악하기 힘들다.
  • Upsampling

    • FCN을 통해 작아진 Activation map size를 원래 Input size에 맞춰주기 위해 Upsampling을 사용한다.
      • 역으로 FCN으로 Activation map을 만드는 과정은 Downsampling이라 할 수 있다.
    • Receptive field는 키워서 영상의 context를 파악하게 하는 게 성능에 좋고, 그 후에 Upsampling을 통해 강제로 resolution을 맞춰준다.
    • 보통 unpooling보다는 Transposed convolution, Upsample and convolution을 사용한다.
  • Transposed convolution

    • Filter가 Input보다 크다.
    • 특정 위치만 Overlap Issue가 있다.
  • Upsampling and convolution

    • Transposed convolution의 일부만 Overlap되는 issue를 피하기 위해, 골고루 overlap 되게 만든다.
    • 영상처리에 쓰이는 Nearest-neighbor, Bilinear 등을 통해 해상도부터 키우고, 이후 Convolution을 적용한다.
  • Upsampling을 해도 이미 줄어든 image에서 원래 정보를 찾는 것은 쉽지 않다 -> 여러 층의 conv 결과를 활용하자.

    • 저층의 Image : 해상도 높음, Receptive field 작아 국지적, Detail에 민감
    • 고층의 Image : 해상도 낮음, Receptive field 높아 의미 파악 쉬움
  • FCN - Adding skip connections

    • 고층의 activation map은 upsampling해 해상도를 키운다.
    • 그에 맞춰 중간 층도 upsampling해 가져온다.
    • 이들을 concatenation해서 최종 출력을 만든다.
    • 최종 출력에 사용한 pool layer의 종류와 개수에 따라 최종 출력도 그에 맞게 달라진다.
    • 이를 통해, 사람의 개입 없이 모든 부분을 학습할 수 있고, 여러 과정을 통합했으므로 end-to-end architecture이며, 성능도 괜찮다.
  • Hypercolumns for object segmentation

    • 낮은 layer와 높은 layer를 융합
    • FCN과 많은 부분이 유사, but end-to-end가 아님.
  • U-Net

    • 영상의 일부분을 집중해야 하는 기술에서 많이 사용된다.
    • FCN 기반
    • FCN with skip-connection보다 좀 더 정교
  • U-Net의 과정

    • Contracting path : convolution과 pooling을 통해 channel 증가, 넓은 receptive field, 저해상도의 activation map 확보(FCN과 동일)
    • Expanding path : 단계별로 activation map의 해상도를 올리고 channel은 낮춘다.
      • Contracting path와 대칭으로 대응되는 layer와 size를 맞춘다.
      • 대응되는 layer들은 concatenate 가능하도록 channel 수와 size가 호환 가능하게 되어있다.
      • concatenate를 통해, Input에 조금의 변화에도 예민하게 변화를 관찰할 수 있다(경계선 같은 부분)
    • Input number와 feature size는 반드시 짝수가 되어야 한다.
  • DeepLab

    • 여러 Segmentation model 중 성능이 상위권에 많이 포진되어 있다.

    • DeepLab V3+ 까지 있음

    • Atrous Convolution

      • kernel element간에 stride를 줘서, 적은 kernel size로 더 큰 receptive field를 갖게 한다.
      • 파라미터 r(rate)로 stride를 표현
    • Atrous Spatial Pyramid Pooling(ASPP)

      • rate가 다른 Atrous Convolution을 병렬로 적용한 뒤, 이들을 합친다.
      • 다양한 scale에서의 context를 종합하여 판단함으로서 Semantic segmentation 성능을 올릴 수 있다.
    • Depthwise separable convolution

      • 일반적인 convolution : filter 크기 input의 channel 수 filter의 channel 수
      • 여기서, input의 channel을 모두 분리시켜, channel 수가 1인 filter들로만 이를 계산하는 것이 Depthwise separable convolution
      • 각 Input channel에 convolution을 적용한 후, 11channel 크기의 convolution을 적용한다.
      • 성능은 비슷하면서도 파라미터 수를 확 줄일 수 있다.
    • Encoder-Decoder형태로 구성

팀 구인

  • level 3부터 함께할 팀원을 찾게 되었다.

  • 여러 좋은 분을 만나 고민해봤지만, 앞으로 오랫동안 같이 해야하고 부캠이 끝난 이후에도 같이 뭔갈 해봤으면 좋을 분을 만나고 싶어서 아직 팀을 정하지 못하고 고민하고 있다.

느낀 점

  • 팀원을 찾으면서, 내가 팀을 통해 얻어가고 싶은 게 무엇인지 정리하게 되었다.
    • 내가 하는 행동을 설명할 수 있는 사람이 되도록 공부한다.(어떤 문제가 주어지면 이 문제를 풀기 위해 어떤 기법을 쓰고 어떤 기법은 쓰지 말아야 하며, 왜 그래야 하는지, 만약 썼을 때 잘 되면 잘 된 이유는 어떤지, 안 됐으면 왜 안 됐는지 설명할 수 있어야 한다.)
    • 공부한 내용을 문서화 하여 내 지식 정리 및 포트폴리오로 활용할 수 있어야 한다.
    • 코딩테스트 준비나 다른 활동은 AI 관련 공부에 지장 안 가는 선에서 조금씩 해야 한다.

0개의 댓글