호기심 많은 분석가
[BoostCamp] Week6_Day28. 팀원 찾기 본문
1. Semantic segmentation
- 픽셀 단위로 구분하는 작업
- 사람이 두명 있는, 같은 클래스이지만 사물을 구별할 때는 사용하지 않음
1-2. Where can semantic segmentation be applied to?
- Medical images
- Autonomous driving
- 영상 내의 컨텐츠를 이해하는 데 다양하게 사용
- 어떤 오브젝트만 수정하고 싶다라는 신호를 주기가 쉽다 (오브젝트 별로 구분되므로) → 유저 인터페이스가 제공되기 쉽다
- Computational photography
2. Semantic segmentation architectures
2-1. Fully Convolutional Networks (FCN)
- The first end-to-end architecture for semantic segmentation
- 입력에서부터 출력까지 미분 가능한 NN으로 구성되어서 입력과 출력 데이터의 페어만 있으면 학습을 통해 Target Task를 해결할 수 있는 구조
- Take an image of an arbitrary size as input, and output a segmentation map of the corresponding size to the input
- AlexNet의 경우에는 Convolutional layer 뒤에 flatten 파트가 있었다. 그렇게 되면 입력 해상도가 호환되지 않으면 FC layer를 사용하지 못하는 한계가 있었다. 왜냐 입력 해상도가 바뀌면 convolution layer activation dimension이 바뀌고 flatten 했을 때 vector의 길이가 바뀌므로
- 하지만 segmentation은 이에 영향을 받지 않는 구조이다. → 호환성이 높음
- Fully connected vs. Fully convolutional
- Fully connected layer : Output a fixed dimensional vector and discard spatial coordinates
- Fully convolutional layer : Output a classification map which has spatial coordinates
- 입력 출력 모두 tensor형태
- 원래처럼 flattening하는 connected layer는 영상 공간 정보는 고려되지 않음
- 그래서 각각의 위치마다 채널 축으로 쌓는다. (Flatten이 아닌)
- 채널 축과 convolution filter를 내적해서 하나의 layer를 만듬, m개의 filter 그룹이 있으면 m개의 layer 생성 → 1x1 convolution을 sliding해서 작업하기 때문에 크기가 동일한 layer가 생성됨
- Fully connected layer를 1x1 convolution으로 해석과 구현이 가능하므로 FC layer를 convolutional layer로 대체함
- 하지만 input에 비해 굉장히 작은 score map(output)을 얻게 된다. stride와 pooling에 의해 저해상도의 output이 출력되는 것(넓은 receptive field를 고려하고 싶어서 사용) → 이것이 해상도를 필연적으로 낮추게 됨, 그래서 upsampling을 도입
- 작은 activation map을 원래 입력 사이즈에 맞춰주기 위해 upsampling layer을 사용
- stride나 pooling을 제거해버리면 고해상도의 activation을 생성하겠지만 같은 수의 layer를 사용했을 때 receptive field가 굉장히 작기 때문에 영상의 전반적인 context를 파악하지 못함(Trade off 관계)
- 그래서 일단은 작게 만들어서 receptive field는 최대한 크게 만들어두고, upsampling으로 강제로 맞춰주는 것이 좋다.
- 다음 2가지가 가장 자주 사용되는 upsampling 방법
- Transposed convoltion
- Upsample and convoltion
2-1-1. Transposed convolution
- Transposed convolutions work by swapping the forward and backward passes of convolution
- Problems with transposed convolution
- Checkboard artifacts due to uneven overlaps
- 문제점이 있음 → 이렇게 일부만 겹치는 데 사용해도 되는 것인가?
- 이것을 해결하는 게 upsampling때 convolution을 함께 사용하는 것
- Avoid overlap issues in transposed convolution
- 우리는 stride와 pooling에 의해 작아진 해상도를 키우고 싶다. 이때 upsampling을 사용하면 빈 부분을 채워주기 위해(보간) Nearest neightbor interpolation, Bi-linear, Bi-cubic 등의 보간법을 사용합니다. 하지만 어떤 방법을 사용해야할 지 고민이 되죠. 보간법도 학습시켜서 최적화할 수 있지 않을까의 고민으로 탄생한게 Transposed convolution입니다.
- Adding skip connections for enlarging the score map
- 중간단계도 upsampling해서 합쳐주는 것이 굉장히 도움이 된다
2-3. U-Net
- 영상의 일부분을 자세하게 보는 기술들은 U-Net을 기원으로 두고 있는 것이 많음
- 낮은 층의 feature와 높은 층의 feature를 skip connection을 통해서 잘 결합했음
- 한 번에 upsampling하는 것이 아니라 한번에 하는 것이 아니라 점진적으로 해상도와 채널 사이즈를 올려줌
- An even number is required for input and feature sizes
- 7x7의 경우 downsampleing을 하면 3x3이 된다. 이것을 upsampling해줘도 6x6이 되므로 해상도가 무너진다. 그래서 어떤 layer에서도 홀수 해상도의 activation map이 나오지 않도록 유의해야한다.
2-4. DeepLab
- Conditional Random Fields
- 후처리로 사용되는 Tool, 그래프 모델링이나 최적화된 배경 지식이 필요하기에 컨셉만 소개
- 픽셀과 픽셀 사이를 이어주고, regular한 grid, pixel map을 그래프로 본 것 (경계를 잘 찾을 수 있게)
- Dilated convolution
- 한 칸씩 띄워서 실제 convolution layer보다 더 넓은 영역을 고려할 수 있게 해줌
- Parameter 수는 늘어나지 않음
- Receptive Field의 크기가 exponential하게 증가하는 효과를 경험 가능
- Depthwise separable convolution
- 기존 coonvolution은 채널 전체에 내적을 걸어서 값을 뽑아낸다
- Depthwise separable convolution은 2가지 과정을 거치는데 1. 채널별로 convolution해서 값을 뽑고, 2. 그 다음 그것들의 convolution해 값을 뽑음
- 표현력도 유지되면서 연산량이 획기적으로 줄어듦
🌱 피어세션
- 임문경 캠퍼님 발표 x3🙋♂️
- 오늘도 걸리면 2주동안 계속 발표하고, 힘드신 날만 다른 캠퍼들이 발표
- 심지어 걸리셔서 앞으로 발표를 전담하시기로 함 🤣
Q1. 왜 U-Net에서는 Upsample and Convolution이 아니라 transposed convolution을 썼는가?
- 의견
- 비용적인 측면에서 장점이 있기 때문이 아닐까?
Q2. DeepLab 구조에서 decoder로 들어가는 원리?
- 답변
- 중간에 Bilinear upsampling한 결과를 주입시켜주는 것
Q3. transposed conv 나 upsampling conv에서 conv weight가 학습하는 것은 뭘까?
- 답변
- segmentation label을 예측하는 학습 과정이 아닐까?
- 데이터를 만들어내는 과정
Q4. SPP이 정확히 무엇인가요? Inception이랑 비슷한건가요?
- 답변
- distillation을 쓰고 안쓰고의 차이일 것 같다. 하는 일이 다른 것 같다.
Q5. checker board 문제가 segmentation에 영향이 있는지?
- 답변
- 학습 자체에 어려움이 있을 수 있어서
앞으로 11주간 함께할 팀원을 모집하는 중이다. 내가 원하는 팀은 부스트캠프가 끝나도 지속될 동료다. 유쾌하게 자신이 원하는 바를 추구할 수 있고 소통이 잘 되는, 늘 함께하고 싶은 사람들과 작업한다면 결과물도 자연스럽게 따라오지 않을까. 내가 취업을 하게 되면서 시간적 패널티가 발생하게 됐는데 이 점도 이해해주는 좋은 동료들과 팀을 꾸려가고 있다. 요즘 떠오르는 Gather town에서 팀원을 구성해가고 있는데 테트리스를 하면서 편안 분위기에서 대화하다보니 조금 더 좋았다.
'Coding > BoostCamp' 카테고리의 다른 글
[BoostCamp] Week7_Day30. CNN Visualization (0) | 2021.09.27 |
---|---|
[BoostCamp] Week6_Day29. 새로운 멘토님 (0) | 2021.09.21 |
[BoostCamp] Week6_Day27. Image Classification (0) | 2021.09.19 |
[BoostCamp] Week6_Day26. 양날의 검, Pseudo-labeling (2) | 2021.09.14 |
[BoostCamp] Week6_Day25. 새로운 U-Stage, 도메인 심화과정 (0) | 2021.09.07 |