- 강의 목록
-
-
- 요약
강의
피어세션
- 학습정리
깊은 네트워크의 문제점
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은 이 과정을 둘로 분리하였다.
- Depthwise convolution : 채널별로 필터를 만들고, 이를 convolution하여 채널별로 activation map을 만든다.
- Pointwise convolution : 뽑아낸 값들을 토대로 다시 1x1 conv를 사용함으로써 하나의 값으로 출력이 되도록 만들어준다.
이미지를 보면 알 수 있겠지만, convolution의 표현력은 유지하면서 계산량은 훨씬 더 줄어들게 되었다.
- 피어세션 회의 내용
- 해야할 일
'BOOSTCAMP AI TECH > 7주차_Computer Vision' 카테고리의 다른 글
[BOOSTCAMP AI TECH] 35일차_Multi-modal (0) | 2021.03.12 |
---|---|
[BOOSTCAMP AI TECH] 34일차_Instance/Panoptic segmentation (0) | 2021.03.11 |
[BOOSTCAMP AI TECH] 33일차_Object Detection, CNN Visualization (0) | 2021.03.10 |
[BOOSTCAMP AI TECH] 31일차_Image classification (0) | 2021.03.08 |