[프로젝트 3 - Segmentation] 2. Semantic Segmentation 기초

Jade·2021년 4월 26일
0

부스트캠프 AI Tech

목록 보기
45/54

프로젝트 3 - Semantic Segmentation 기초


세그먼테이션 : 원래는 마케팅에서 비슷한 소비자 묶는거였는데 CV 딥러닝에서는 비슷한 픽셀을 묶는 것
시멘틱 세그먼테이션 : 동일 물체를 인식하면 전부 하나의 객체로 분류
인스턴스 세그먼테이션 : 각 물체들을 별도의 객체로 분류

다른 분야와 비교
단일 객체)
classification : 사진에 포함된 이미지가 어떤 이미지인가?
localization : 이미지 분류와 함께 위치파악도 함(바운딩박스)

다중 객체)
Detection : 사진에 있는 객체들을 클래스별로 분류(바운딩박스)
Segmentation : 사진 상의 객체들이 차지하는 영역 구별(픽셀 단위)


FCN
Fully Convolutional Networks

  1. kbone으로 VGG 네트워크를 사용
    backbone을 교체해서 성능 올리기를 노려볼 수도 있다

  2. VGG의 FC 레이어를 Conv로 대체
    각 픽셀의 위치 정보를 해치지 않은 채로 특징을 추출
    fc 레이어를 쓰면 flatten 과정을 거친다. classification은 개체의 위치 정보가 중요하지 않다. flatten해서 쓰게 되면 입력의 위치(이미지 내에서 물체의 위치) 가 어디였든 간에 동일한 출력을 보장할 수 있는데, 물체의 위치 정보를 픽셀 단위로 얻어야 하는 segmentation에서는 이 특징이 오히려 불필요하다. 같은 객체가 있더라도 객체의 위치에 따라 출력을 달리 해야 하기 때문. fc 대신 conv 레이어를 쓰면 최종 출력에서 물체가 카테고리에 속할 확률 대신 물체의 위치에 따른 activation 맵을 얻을 수 있다.

임의의 크기를 갖는 입력에 대해서도 특징 추출 가능
conv 레이어는 커널의 파라미터에만 영향을 받고 이미지나 레이어의 크기는 상관이 없다. 하지만 fc 레이어는 이전 채널의 출력 크기를 필요로 하기 때문에 입력 이미지가 달라지면 일일이 수정해 줘야 한다.

  1. Transposed conv를 이용해 pixel-wise prediction 수행
    픽셀 단위로 물체의 카테고리를 예측하는 segmentation을 하려면 pooling(downsampling)을 거치며 축소된 이미지를 원래 크기로 다시 키워 줘야 한다(upsampling). Transposed convolution을 적용하면 convolution과는 다르게 2x2 input의 원소 하나가 커널의 전체 원소들에 각각 곱해지면서 이미지의 크기가 커진다. stride 기본값은 1인데, 이 값을 더 크게 주면 이미지가

초기 weight(커널...?)를 임의로 정해 놓고 학습을 통해 더 좋은 값으로 업데이트하는 conv연산과 마찬가지로 transposed conv도 커널의 값들이 학습을 통해 업데이트된다.

(그림 넣자)


FCN에서 성능을 향상시키기 위한 방법

VGG backbone을 썼기 때문에 5개의 block으로 이루어져 있다. FC 레이어 대신에 1x1 fully conv를 사용하는데, 이 때 Dropout을 적용했다. pooling을 5번 했기 때문에 1/2^5 로 줄어들었다. transposed conv를 통해 이미지를 다시 원본 크기로 돌리려면 32배 확대해야 하기 때문에 stride를 32로 크게 설정해서 한번에 upsampling을 할 수 있다. 하지만 이렇게 단번에 키워 버리면 예측 픽셀 영역이 뭉개져서 정확한 경계면을 얻을 수 없다. 이를 해결하기 위해서 upsampling에 이전의 output featrue map을 이용하는 skip connection 기법을 사용한다. 최종 출력 feature map 하나만을 사용하는 것이 아니라 중간중간의 pooling 레이어에서 transposed conv를 실행, 여러 개의 feature map을 통해 최종 예측의 정확도를 개선하는 것이다. 이전 pooling 레이어에서 얻은 featrue map을 사용하기 때문에 거듭되는 MaxPooling으로 인해 잃어버린 정보를 복원해 줄 수도 있고, 단번에 stride 32로 upsampling하는 것이 아니라 여러 feature map을 쌓아서 조금씩 복원하는 거라서 이미지를 더 효율적으로 복원할 수 있다.


pixel acc : (TP+TN)/(TP+TN+FP+FN)
mean IoU : 클래스별 (Ground Truth 교집합 Predict) / (Ground Truth 합집합 Predict) 값들의 평균

profile
반가워용

0개의 댓글