딥러닝 Segmentation(7) - Upsampling의 다양한 방법

미남로그·2021년 10월 20일
1

Segmentation

목록 보기
7/7

Segmentation 시리즈

0️⃣ 딥러닝 Segmentation(1) - 개념, 용어, 종류(Semantic, Instance segmentation)
1️⃣ 딥러닝 Segmentation(2) - Semantic/Instance Segmentation
2️⃣ 딥러닝 Segmentation(3) - FCN(Fully Convolution Network)
3️⃣ 딥러닝 Segmentation(4) - U-Net
4️⃣ 딥러닝 Segmentation(5) - DeepLab 계열
5️⃣ 딥러닝 Segmentation(6) - segmentation 평가(Pixel Accuracy, Mask IOU)
6️⃣ 딥러닝 Segmentation(7) - Upsampling의 다양한 방법



지금까지 Segmentation의 종류와 접근 방식에 대해서 알아보았습니다. 논문을 직접 리뷰한 것도 아니고 논문 리뷰를 보고 리뷰했을 뿐인데, 머리가 지끈거리긴 하네요.😳

Segementation에서는 masking 단계에 Upsampling이 중요하게 사용되었다는 것을 알 수 있었습니다. Convolution layer와 다양한 Pooling 등으로 Feature의 크기를 줄여왔는데, 반대로 키우는 방법에는 어떤 방법들이 있을까요?

upsampling 방법을 cs231n의 강의에서 배웠던 기억이 나네요. cs231n 복습 필요가 지금 간절하게 느껴짐😳



1) Nearest Neighbor

Nearest upsampling은 Dense layer를 그대로 늘려 빈 구역에 채워넣는 예입니다. 이름 그대로 scale을 키우는데, 키운 위치에서 원본에서 가장 가까운 값을 그대로 적용하는 방법입니다.

원래 2x2 matrix가 있을 때 이를 2배로 키워 4x4 size의 matrix를 만들어 주려고 하는데, 늘린만큼 그 근처에 있는 데이터를 사용하는 방법입니다.



2) Bilinear Interpolation

이 개념은 잊을만하면 나오는 것 같습니다.

Bilinear Interpolation은 x, y의 2차원에 대해 선형 보간법을 통해 필요한 값을 채우는 방식입니다.

위처럼 2x2 matrix를 4x4 size로 upsampling하고 싶을 때, 빈 값을 채워야 하는데 이때 축을 두 가지 interpolation을 적용한 것을 Bilinear Interpolation이라고 합니다.

R1이 Q11, Q21의 x축 방향 interpolation 결과이고, R2는 Q12, Q22의 x축 방향의 interpolation 결과입니다.

그리고 R1, R2를 y축 방향으로 interpolation하면 새로운 위치 P의 값을 추정할 수 있습니다. 이러한 선형 보간 방법으로 Interpolation을 하는 방법이 있고 Bicubic interpolation의 경우 삼차보간법을 사용합니다.



3) Transposed Convolution

위에서 본 방식은 정해진 규칙에 따라 upscaling하는 방법이었습니다. 그렇다면 학습할 수 있는 parameter를 가진 upsampling 방법이 있을 거라는 생각을... 할 수 있는데요. Transposed Convolution이 그 방법 중 하나입니다.

사용해왔던 Conv layer는 kernel의 크기를 정의하고 Feature를 Window에 따라 output을 계산했습니다. Transposed Convolution은 반대로 연산을 합니다!

따라서 거꾸로 학습된 parameter로 입력된 벡터를 통해 더 넓은 값을 추정해냅니다. Deconvolution은앞의 U-Net에 나왔던 개념이니 참고 부탁드립니다.



📃 참고 자료

해당 강의에선 upsampling에 대한 다른 방법 등도 설명이 잘 되어 있습니다. 또한, segmentation과 object detection을 처음 공부할 때, 이 영상을 보고 공부를 시작하면 많은 도움이 될 것입니다.

위의 Transposed Conv 개념은 처음 접했을 때, 같이 스터디하던 멤버들끼리도 머리를 싸매고 얘기를 나눴었습니다. Upsampling을 하기 위해서 왜 Transposed한 Convolution을 사용해야 합니까? 이 질문에 대한 답을 같이 생각해보면 좋겠습니다.

딥러닝은 진짜 어렵습니다. 뭐 하나를 배우려면 이전에 발표된 모델 Backbone부터 거슬러 올라가야 할 것만 같고, 혼동되는 개념, 어려운 용어 등이 많이 섞여 있다 보니 결코 쉽지 않습니다. 저는 요약된 정보와 논문 리뷰를 통해 개념을 접하고 그 다음에 논문을 읽어보는 방식으로 앞으로 공부를 해볼까 합니다!

segmentation은 제대로 처음 공부해보는데 다시 날잡고 공부하고 싶습니다.

또한, kaggle에 segmentation과 object detection model을 많이 볼 수 있는 대회가 있었습니다.

코드 공유이다 보니 baseline, EDA 등 많은데 YOLO v3나 DeepLab을 사용한 코드도 있었습니다! 학습이 도움이 되었으면 합니다.👏

profile
미남이 귀엽죠

0개의 댓글