티스토리 뷰

728x90

[Day 31] Computer Vision (CV) - 2

 

 

1. 강의 복습 내용

1.1) Image Classification Model

더보기

Image Classification Model

 

Model의 등장 시기
모델 별 성능 비교

 

1. AlexNet

AlexNet 구조

 

- 이미지넷 스케일에서 작동하는 가장 간단한 구조

- 하지만 모델의 사이즈는 결코 작지 않다. (용량이 방대하지만 성능은 다소 떨어짐)

- 간단한 구조이기 때문에 계산 속도는 가장 빠르다

 

2. VGGNet

VGGNet 구조

 

- 심플한 3x3 Convolutions으로 구성

- 가장 느린 계산 속도 -> 모델 사이즈도 크다. (메모리도 압도적으로 많이 차지)

- 최근에 나온 모델들과도 비교해도 사이즈가 크고 계산 속도도 느림 (= 무겁다)

 

3. GoogLeNet (= Inception)

GoogLeNet 구조

 

- Inception module and auxiliary classifier

- ResNet-152보단 성능이 좋지만 최근의 EfficientNet보다는 성능이 떨어짐

- 적절한 계산량과 메모리 사이즈

- 그럼에도 불구하고 다른 모델(AlexNet, VGG, ResNet)과 비교하여 가장 효율적인 모델

- 하지만, 다양한 Task에 유연하진 못하다. (구현이 난해하다)

 

4. ResNet

ResNet

- 심플한 구조로 SkipConnection을 사용하여 모델을 깊게 만들 수 있는 방향을 제시

- 계산 속도, 성능 모두 준수하다.

 

 

- VGGNet, ResNet : 간단한 네트워크 구조로 심플하게 층을 쌓은 모델로, 가장 쉽게 Feature map을 추출할 수 있으며 때문에, 다양한 Task에도 적용시킬 수 있는 대중적으로 사용되는 모델

 

 

 

이외 에도 DenseNet (= ResNet의 SkipConnection과 비슷한 개념으로 이전 층의 정보를 다음의 모든 층에 Concat 시켜 연결한 모델), SENet (= Feature들을 Attention한 개념을 도입한 모델), EfficientNet (= 모델을 스케일링하는 3가지 방법 (1) Width (2) Depth (3) Resolution 들을 적절히 섞어 성능을 향상시킨 모델) 등이 나왔다.

모델의 성능 비교

1.2) Semantic Segmentation

더보기

Semantic Segmentation

 

 

1. Semantic Segmentation 이란?

앞서 우리는 Image Classification, 즉 이미지 전체를 어느 한 카테고리로 분류하는 문제를 접하였는데, Semantic Segmentation은 이미지 전체를 분류하는 것이 아닌 이미지 안의 픽셀 각각을 분류하는 것이다.

다시 말해, 이미지 안의 픽셀들을 분류함으로써 이미지 안에 있는 물체들을 구별하는 것이다.

Semantic Segmentation의 예시

2. Fully Convolutional Networks (FCN)

- 이전의 Image Classification 모델들을 살펴봤을 때, 마지막 출력을 위한 단에서는 FC Layer (Fully Connected)을 지나기 위해서 Convolution Layer들을 거쳐 추출된 Feature들을 Flatten 하는 과정을 필연적으로 수행해야 한다.

그러나 추출된 Feature들을 바탕으로 Class를 예측하는 것이 아닌, Semantic Segmentation에서의 경우에는 각 픽셀들을 Classification하는 것이므로 위치의 정보가 소실되는 것이 가장 치명적이다. 다시 말해 FC Layer를 거치기 위해 Flatten 하는 과정에서 추출된 Feature들의 위치 정보가 뒤섞여 알 수 없어진다.

 

따라서 이를 해결하기 위해 FC Layer를 Convolution Layer로 대체하여 위치 정보를 기억할 수 있도록 해결책을 제시한 것이 Fully Convolutional Networks (FCN) 이다.

 

또한, FCN의 도입으로 기존 고정된 크기의 Flatten된 FC Layer로 인하여 이미지의 크기도 고정됬어야 했지만, FCN은 이미지의 크기에 대해서도 유연하다.

 

최근에는 Semantic Segmentation 뿐만 아니라 모든 Task에서도 모든 FC Layer를 Convolution Layer (=FCN)으로 대체하는 추세이다.


3. Semantic Segmentation 과정

- 이미지의 픽셀 단위로 태스크를 수행하기 위해서는 결국 Output도 이미지의 크기에 맡게 커져야 한다.

하지만, Convolution Layer와 Pooling Layer를 지나면서 Feature들을 추출하는 과정에서 이미지의 사이즈는 필연적으로 줄어들 수 밖에 없다. (해상도 저하, 물론 이미지 사이즈를 줄이지 않는 방법도 있지만 모델의 성능이 떨어질 것)

 

따라서 Segmentation을 하기 위해 추출된 Feature들과 작아진 이미지 사이즈를 다시 키우는 작업을 해야 한다.

(= UpSampling)

Upsampling

Upsampling 은 크게 3가지의 기법을 사용할 수 있다.

1. UnPooling : 최근에는 사용하지 않음

2. Transposed Convolution

3. Upsample and Convolution

 

Transposed Convolution의 경우는 이전에 배운 개념이듯이 Convolution 과정을 거꾸로 하는 개념으로 이해하면 되지만 이 과정에서 overlaps되는 픽셀들이 생기므로 파라미터의 값을 잘 조절해야한다.

 

Upsample and Convolution는, 영상처리의 기법이 들어가며 Transposed Convolution의 Overlaps 되는 문제점들을 극복하기 위해 적용되기도 한다.

 

또한 높은 해상도를 가진 이미지로 복구하기 위해서 처음 이미지의 Feature를 추출하는 과정의 값들을 저장하였다가 Upsampling하는 과정에서 Concat (= 보다 높은 해상도의 이미지 정보를 받아옴) 하여 처리하는 기법들도 적용한다.


3. U-Net

: Semantic Segmentation의 시작이라고 불리는 가장 Basic한 모델

Fully Convolutional Networks로 구성되어있으며

Similar to skip connections (= 위에서 언급한 높은 해상도의 이미지 정보를 받아와 합치는 기법) 도 사용했다.

 

모델에 대한 자세한 내용(+구현)은, 이전에 포스팅 하였던 부분 참조

dev-hunmin.tistory.com/entry/U-net-%EA%B5%AC%ED%98%84

 

U-net 구현

1. U-net 이란? Semantic Segmentation에 가장 기본적으로 사용되던 모델 (U-net) 모델의 형태가 U자로 되어있어서 U-net이라고 불림 U-net의 모델 구조는 크게 Encoder, Decoder로 이루어져있다. Encoder(= Contr..

dev-hunmin.tistory.com

*) 한가지 중요한 것은, DownSampling, UpSampling 과정에서 이미지의 사이즈가 홀수가 되지 않도록 또는 홀수 사이즈의 이미지가 들어올 때를 구현 단계에서 고려하는 것


4. DeepLab

: Semantic Segmentation에서 중요한 한 획을 그었던 모델

DeepLab의 발전

 

1. Conditional Random Fields (CRFs)

CRF 후처리

- CRF는 후처리에 사용되는 기법

- 그래프 모델링으로, 픽셀과 픽셀 사이의 관계를 이어서 Segmentation의 경계를 잘 찾기 위해 작업

- Iteration을 반복할 수록 정교해진다.

 

2. Dilated Convolution

: 기존 Convolution 보다 더 넓은 Receptive Field를 가지면서도 파라미터의 수는 늘어나지 않는 기법을 적용

Dilated Convoltuon

3. Depthwise separable convolution

: 연산을 줄이기 위한 노력

2단계로 나누어 연산량을 줄인 Depthwise separable convolution

4. Encoder - Decoder 구조

: U-Net과 마찬가지로 Encoder-Decoder 로 구성

DeepLab V3+ 구조

최근에는 이러한 Segmentation 기법보다는 다른 Instance Segmentation과 같은 발전된 기법이 사용된다.


2. 피어 세션

더보기

1. 강의에 대한 내용 토의

- DeepLab -> 모델 아키텍쳐 같은 경우는 지금까지 굵직했던 대표 모델들의 장점들을 잘 차용하여 구성한 것 같다.

- CRFs 에 대하여

- Dilated Convolution


3. Conclusion

더보기

1. 보간법을 사용한 Upsampling vs Transposed Convolution

- interpolation만을 이용한 Upsampling의 경우 정보 손실이 일어날 수 있다.

- 학습 가능한 Transposed Convolution이 보통 좋다.

- 하지만 반드시 어떤 방법만을 사용하라는 법은 없으며, 모델과 주어진 task 상황에 따라 적절하게 선택하고 실험하여 적용하는 것이 좋다.

 

2. Dilated Convolution 알아보기. 

pytorch.org/docs/stable/generated/torch.nn.Conv2d.html

 

Conv2d — PyTorch 1.8.0 documentation

Shortcuts

pytorch.org

Pytorch에서 일반적으로 nn.Conv2d 사용하는 것에서 매개변수로 dilation=값 으로 주면 된다. (Default=1)

Dilated Convolution은 pooling을 수행하지 않고도 receptive field를 넓게 가져갈 수 있기 때문에 연산의 효율이 좋다. 또 공간적 특징을 유지하기 때문에 Segmentation에서 많이 사용된다. (즉, 동일한 계산 비용으로 더 넓은 receptive field을 취할 수 있음)

 

3. Fully Connected CRF (DeepLab) 알아보기

참조 : m.blog.naver.com/PostView.nhn?blogId=laonple&logNo=221017461464&proxyReferer=https:%2F%2Fwww.google.com%2F

 

[Part Ⅶ. Semantic Segmentation] 6. DeepLab [2] - 라온피플 머신러닝 아카데미 -

라온피플 머신러닝 아카데미 [Part Ⅶ. Semantic Segmentation]6. DeepLab [2] Semantic Segmentati...

blog.naver.com


'부스트캠프 AI Tech > 학습정리' 카테고리의 다른 글

[Day 33] Computer Vision (CV) - 4  (0) 2021.03.11
[Day 32] Computer Vision (CV) - 3  (0) 2021.03.11
[Day 30] Computer Vision (CV) - 1  (0) 2021.03.08
[Day 26-29] 특강  (0) 2021.03.02
[Day 25] GNN  (0) 2021.02.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함