반응형
Semantic Segmentation은 px단위로 image classification을 하는 행동이다.
같은 class면 서로 다른 물체라고 인식하지 않는다.
이를 다른 물체라고 인식하게하는 instance segmentation 이라고한다.
Semantic Segmentation Architectures
1. Fully Convolutional Networks(FCN)
- end to end 구조로 입력해상도와 같은 해상도로 출력을 할 수 있다.
- 이전에는 사람의 알고리즘이 더해져 학습가능한 부분도 제한적이였지만 이 네트워크로인해 모든 부분을 미분가능한 구조로 바꿔 학습가능해짐
- Alexnet은 맨뒤에 Flatten해서 벡터화를 시켰지만 이렇게 되면 입력해상도가 train과 실제 문제해결의 해상도와 호환되지 않으면 벡터의 길이가 달라져 문제가 생김
- 하지만 FCN은 이런 문제가 없는 호환성이 높은 네트워크 디자인이다.
맨 마지막 부분의 Layer를 살펴보자
- Image Classification - Fully Connected layer
- 벡터가 주어지면 matrix가 multiplication이 되어서 새로운 벡터가 나온다
- Semantic Segmentation - Fully Convolution layer by 1x1 convolutions
stride와 poolinglayer를 이용해서 receptive field size를 키워서 더 정답에 가까운 결론을 내리기 위해 사용하는데 이게 필연적으로 해상도를 낮추게 된다.
그래서 upsampling을 사용한다
- 일단 해상도를 작게만들어서 receptive field를 크게 만드는게 성능에 좋다
- 우리가 stride나 pooling을 사용하지 않으면 고해상도를 유지할 수 있지만, 영상의 전반적인 context를 파악하기 어렵다
- Upsampling을 통해 강제로 resolution을 맞춰준다
Upsampling 기법
1) Transposed convolution
- 중첩된 부분은 계속 더해지면서 나간다
- 이렇게 되면 일정부분들만 겹쳐지는데 이렇게 더해져도 되나?? -> 문제있음
2) Upsampling and Convolution
- Upsampling과 convolution을 같이 진행한다
- Upsampling operation을 2개로 분리해서 간단한 영상처리 operation으로 많이 쓰이는 interpolation을 먼저 적용하고, Nearest-neighborhood(NN), Bilinear방법을 사용할 수 있다
- 어떤 학습가능한 parameter가 없었지만 이제는 학습가능한 learnable upsampling을 만들어주기위해 conv를 적용해준다
아무리 Upsampling을 하더라도 잃어버린 정보를 살리는것은 쉽지않다
- 왼쪽의 낮은 레이어에서는 receptive field size가 작기때문에 작은 디테일을 볼 수 있다
- 우측의 높은 레이어에서는 해상도는 낮아지지만 큰 receptive field size로인해 의미론적인 내용을 많이 포함하고 있다.
- semantic segmentation은 둘다 필요하다
- 높은 layer에 있던 activation map을 upsampling을 통해서 크게 늘리고 그에 맞춰서 다른 중간층의 activation map을 upsampling을 해서 가져온다
2. Hypercolumns for object segmentation
- 하이퍼 컬럼도 낮은 레이어와 높은레이어의 특징을 해상도를 맞춰놓고 사용하는것과는 FCN과 같다
- 다른 써드파트 알고리즘을 활용해서 바운딩박스를 추출한 이후에 적용한다
- FCN과 같은 시기에 나왔지만 FCN이 압도적으로 많이 인용됐다
3. U-Net
- Fully convolutional networks
- 낮은층의 feature와 높은층의 feature를 더 잘 결합하는 skip connection을 제안
Architecture
- Contracting Path - 좌측
- 입력영상을 몇개의 conv에 통과시키고 pooling을 통해 receptive field를 크게 확보, 해상도를 낮추고 채널수를 늘린다
- activation map을 생성
- 기존의 CNN과 동일
- Expanding Path - 우측
- Upsampling을 할때 점진적으로 activation map의 해상도와 채널사이즈를 올려준다
- 이는 대칭으로 대응되는 feature를 skip connection을 통해서 concat한다
- 채널수는 줄어들고 해상도는 늘어난다
주의할점
- feature size가 7x7로 홀수면 Downsampling 할때에 3x3 혹은 4x4로 feature size가 결정되는데 다시 Upsampling할때 7x7로 돌아갈 수 없다
- 그렇기때문에 홀수가 나오지 않도록 조심해야한다
4. DeepLab
- conditional Random Fields (CRFs)
- 그래프모델링으로 픽셀과 픽셀사이의 관계를 이어준다
- feedforward 구조
- Dilated Convolution
- weight 사이를 한칸씩 띄어서 실제 conv보다 더 사이즈를 늘려서 계산한다
- 파라미터수는 증가하지 않는다
- depthwise separable convolution
- 기존 conv는 한개의 activation값을 얻기 위해서 커널 전체가 채널 전체에 대해서 내적을 한 값으로 1개의 값을 뽑아낸다
- depthwise는 이 절차를 둘로 나눈다
- 채널별로 conv를 해서 값을 뽑아낸다
- 각 채널별로 나온 값들을 1x1 conv를 통해서 1개의 값이 나오도록 한다
- 이렇게 두개의 프로세스로 나누면 conv의 표현력도 유지되고 계산량도 줄어든다
Deeplab v3의 구조
encoder
- Dialted Convolution을 통해 큰 receptive field를 가지는 cnn을 적용해서 feature map을 구한다
- 영역별로 연관된 배경정보가 다르므로 multi scaling을 처리할 수 있는 spatial pyramid를 구한다
- 하나의 concat을 통해 conv로 합쳐준다
decoder
- 낮은레벨에서온 low level feature와 pyramid pooling을 통해 나온 결과를 upsampling해서 concat을 해준다
- upsampling을 통해서 최종적으로 segmentation을 해준다
반응형
'부스트캠프 AI Tech 2기 > 2기 CV U-Stage' 카테고리의 다른 글
CNN Visualization (0) | 2021.09.13 |
---|---|
Object Detection (0) | 2021.09.10 |
CV의 DL 발전(2) (0) | 2021.09.07 |
Annotation Data Efficient Learning (0) | 2021.09.06 |
CV의 DL 발전(1) (0) | 2021.09.06 |