본문 바로가기
BOOSTCAMP AI TECH/7주차_Computer Vision

[BOOSTCAMP AI TECH] 32일차

by 이민우 2021. 3. 9.
728x90
반응형
  • 강의 목록

-

-


  • 요약

강의

 

피어세션

 


  • 학습정리

깊은 네트워크의 문제점

1) 경사도 손실 및 폭주

2) 계산 복잡도 증가

3) Degradation 문제

*의외로 오버피팅은 잘 일어나지 않는다.

 

 

GoogleNet

-인셉션 모듈이라는 구조를 통해 하나의 레이어에서 다양한 크기의 컨볼루션 필터를 사용,

 여러 측면에서 특징을 파악한다.

-즉 네트워크를 깊이를 확장하는 것이 아니라 수평으로 확장한다.

 

-그런데 한 층에서 여러 필터를 사용하면 계산복잡도가 증가한다.

-이를 방지하기 위해 1*1 컨볼루션을 통해 차원을 줄여준다. (보틀넥)

 

-경사도 손실 문제의 방지를 위해 중간중간 auxiliary classifier을 도입한다.

-Auxiliary classifier는 중간 중간 loss를 측정하고 역전파 과정 중 기울기 소실을 방지하기 위해

 초기 레이어들에 추가적인 기울기를 주입하는 역할이다.

-실제 분류에는 관여하지 않고 훈련시에만 사용한다.

 

 

ResNet

-최초로 100개 이상의 레이어를 쌓아 성능을 향상시킨 모델

-Classification 뿐 아니라 여러 문제에도 사용이 가능하다.

-Identity는 남기고 Residual 부분만 학습을 함으로써 Identity를 보존한다.

-이 구현을 위해 Shortcut connection을 제안했다. 입력과 출력을 연결하는 방법.

-Shortcut connection은 기울기 소실 문제를 해결했고, 학습 자체의 성능도 향상시켰다.

 

 

DenseNet

-ResNet은 + 연산을 수행했지만, DenseNet은 concat으로 입력과 출력을 연결한다.

-경사도 손실 문제를 해결했고, 특징 전파를 강화했으며, 특징을 재사용 가능하게 한다.

 

 

SeNet

-깊이를 증가시키거나 connection을 추가하는 것이 아닌 채널 간 관계를 명확하게 함으로써 중요도를 파악하여

 어텐션을 시켜주는 모델

-어텐션을 생성하는 방법은 Squeeze 에서는 global 평균 풀링을, Excitation에서는 FC레이어를 통해 채널 간의

 연관성을 고려한다.

 

 

EfficientNet

-기존의 설계는 깊이나 폭을 넓히거나, Input 이미지를 크게 resize한다.

-이러한 방법들은 서로 다른 성능 증가의 이점을 가진다.

-EfficientNet은 이러한 방법들을 적절한 비율로 섞어 사용하여 효과적으로 성능 향상을 노린 모델.

 

 

Deformable convolution

-정해진 형태의 물체가 아닌, 유동적으로 움직일 수 있는 물체의 식별을 위한 합성곱

-즉, 사람도 팔이나 다리의 위치가 얼마든지 달라질 수 있는데, 이러한 위치가 달라도 사람임을 식별하기 위한 모델

-표준 합성곱을 위한 Weight 외에도 2D offset이 별도로 있어 offset에 따라 각각의 weight을 벌려준다.

-즉 일반적인 합성곱 레이어의 가중치에 offset field에 의해 offset이 더해진다. 그러면 컨볼루션 레이어가

 단순한 직사각형이 아닌 일그러지게 변환이 되는데, 이렇게 되면 샘플링 패턴이 좀 더 유연해지는 receptive field가

 개별 이미지에 걸맞도록 짜여진다.

 

 

CNN Backbones

-구글넷은 가장 효율적인 CNN이다. 하지만 사용이 너무 복잡하다.

-VGGNet과 ResNet은 가장 평균적으로 CNN의 Backbone으로 사용한다. 3*3 컨볼루션 레이어를 사용하는 것이 특징.

 


 

Semantic segmentation

-이미지 분류를 전체 단위가 아닌 픽셀 단위로 분류하는 문제

-즉 이미지의 각 픽셀이 어느 분류에 속하는지 구분하는 문제이다.

-학습을 위해 이미지 속의 물체에 대해 Mask를 생성하는데, 같은 classfication이면 물체들을 구분하여 Mask

 를 생성하지는 않는다.

-즉 어깨동무를 하는 사람들의 경우 두 사람을 각자 구분하지 않는다.

-각자 구분하는 것은 Instance Segmentation

 

 

Fully Convolution Networks (FCN)

-최초의 end-to-end semantic segmantation

-즉, 입력과 출력 페어만 있으면 신경망이 알아서 자동으로 학습되는 (사람의 손을 타지 않는) 구조

-이전까지는 내부 알고리즘을 직접 사람이 생성해서 마스크를 생성해야 했으나, 이 모델 덕분에

 더 이상 직접 마스크를 생성하지 않아도 되게 되었다.

 

-학습시 사용했던 이미지와 입력 이미지의 resolution이 달라도 문제 없이 작동한다.

 즉, 호환성이 높다.

-기존의 CNN과 달리 FC 대신 Fully Convolution Layer을 도입하였다.

-Fully Convolution 레이어는 입력과 출력 모두 1*1 컨볼루션을 통한 Activation map이기 때문에

 위치 정보가 보존된다.

-Fully Convolution은 최종 출력에 대해 각 채널의 동일한 위치로 Flattening을 진행한다. 그렇기에 마지막에는

 작고 저해상도인 이미지가 나온다. 이를 방지하기 위해 upsampling을 수행한다.

-하지만 Upsampling을 하더라도 잃어버린 정보를 그대로 되찾는 것은 쉽지 않다.

 

 

Upsampling

-고해상도 입력 이미지는 여러 번의 컨볼루션과 풀링을 거치며 저해상도의 작은 이미지로 DownSampling

 된다.

-물론 풀링 레이어를 없애면 되기는 하지만 그러면 작은 Activation 맵을 얻지 못해 전반적인 Context를 파악할

 수 없다.

-그래서 일단 작게 만들어 전반적인 문맥을 파악하고, Unsampling을 통해 원래의 이미지로 돌려준다.

 

-Unsampling의 방법으로는 Transposed convolution과 Upsampling and convolution이 있다.

 

1) Transposed Convolution

-이미지의 픽셀 각각에 필터를 곱해주어 늘리는 방법

-늘리고자 하는 필터 사이즈로 원본 데이터를 변환한 후 값을 픽셀별로 더하는 방식

-그러나 이러한 방법은 checkerboard artifact 현상이 일어나 특정 field에 값이 여러 번 더해지는 문제가 발생한다.

-즉, 중첩되는 공간은 연속해서 중첩이 된다. 어설프게 일부만 오버랩되는 오버랩 문제라고도 한다.

-커널 사이즈가 스트라이드로 나누어지도록 설정하면 어느정도 해결이 가능하다.

-하지만 왖넞한 해결은 아니기에 Upsampling과 convolution을 분리하는 방법인 아래의 방법이 등장했다.

 

2) Upsamplimg and Convolution

-최근에 많이 쓰이는데, Nearest-neighbor이나 Bilinear interpolation 방법 등으로 해상도를 늘린 후 컨볼루션을

 하는 방법.

-학습 가능한 Upsampling을 하나의 레이어로 한 번에 처리하는 방식

-간단한 interpolation을 먼저 사용하고 Convolution을 수행한다.

-중첩 문제가 없이 골고루 영향을 받게 함으로써 전체적으로 평준화가 가능하다.

 

 

Hypercolumns for object segmentation

-FCN과 달리 낮은 레이어와 높은 레이어의 특징을 융합해서 사용하고자 함. 또한 end-to-end가 아니라

 서브 파트 알고리즘을 사용해 입력 이미지에 바운딩 박스를 먼저 추출한 다음에 진행한다.

-나머지는 FCN과 유사함.

 

 

U-Net

-입력 이미지의 특징을 보다 자세하게 파악하는 알고리즘

-낮은 특징과 높은 특징을 보다 잘 결합한다

 

-구조는 좌측에서는 일반 CNN처럼 특징맵을 줄이고 채널수를 늘린다. 3*3 합성곱과 2*2 최대풀링을 사용했으며,

 채널 수와 특징 크기는 레벨별로 각각 2배씩 증가하고 감소한다.

-우측에서는 2*2 UP-합성곱을 통해 특징맵을 다시 2배씩 늘리고, 채널 수도 2배씩 감소시킨다. 아래 레벨에서는 다음

 레벨의 입력으로 넣어주는 특징맵이 이전 contracting path의 같은 레벨 출력과 concat되는데, 이후 concatenation된 

 특징을 3*3 합성곱을 통해 다음 레벨의 채널 수에 맞춰준다.

 

-이렇게 하면 앞선 레이어에서 전달된 특징이 localized information 정보를 주기에 공간적으로 중요한 정보를

 뒤쪽 레이어에 바로 전달할 수 있다.

 

 

Deep Lab

-Conditional Random Fields (CRFs) : 후처리 작업인데 CNN 연산의 결과인 특징 맵에서 바운더리를 확실하게

 그어줄 수 있게 된다.

-Dilated convolution : 컨벌루션 사이에 Dilation factor만큼의 일정 공간을 포함한다.

 이러한 방법은 receptive field의 사이즈를 증가시키는 효과가 있다.

-Depthwise separable convolution : 기존의 컨볼루션은 전체 채널에 대해 하나의 채널을 만드는데, 이 방법은

 채널의 수를 유지시킨다.

-Atrous convolution : 연산을 절감하기 위해 Dilated convolution과 Depthwise separable convolution

 을 결합한 방법.

 

*Conditional Random Fields (CRFs)

픽셀과 픽셀 사이의 관계를 다 이어주고, regular한 pixel map을 그리드로 본다.

기존의 sementic segmentation에서는 feedforward 구조이므로 피드백이 없어 굉장히 blurry한 output이 나오기 마련인데, CRFs는 기존의 이미지에서 edge같은 경계선들을 활용하여 score map이 경계에 잘 들어맞도록 확산시켜주는 역할을 한다. 이 때 물체의 background와 내부에서 동시에 확산하므로, 결과적으로 경계선이 물체 형태에 맞게 명확히 잡히게 된다.

 

*Astrous convolution

기존 convolution 필터와 달리, 필터의 수용영역 사이사이에 space를 넣어 spatial context를 캐치하는 방법이다. Dilation factor를 몇번 반복하는 것 만으로 파라미터 수는 늘리지 않으면서 receptive field는 exponential하게 키울 수 있다.

 

*Depthwise separable convolution

기존의 convolution 연산은 하나의 필터를 모든 input 채널에 대입시켰다.

그러나 Depthwise separable convolution은 이 과정을 둘로 분리하였다.

  1. Depthwise convolution : 채널별로 필터를 만들고, 이를 convolution하여 채널별로 activation map을 만든다.
  2. Pointwise convolution : 뽑아낸 값들을 토대로 다시 1x1 conv를 사용함으로써 하나의 값으로 출력이 되도록 만들어준다.

이미지를 보면 알 수 있겠지만, convolution의 표현력은 유지하면서 계산량은 훨씬 더 줄어들게 되었다.


  • 피어세션 회의 내용

 


  • 해야할 일

 


 

728x90
반응형