Detection and Segmentation

Detection은 영상 내부에서 찾고자 하는 요소를 찾을 때 사용하며, Segmentation은 해당 영역을 구분해내는 역할을 수행합니다.

  • Detection image
    물체의 위치를 찾습니다. (localization)

  • Sematic Segmentation image
    화소나 색등 비슷한 요소를 모아서 영역화를 진행합니다.

  • Instance Segmentation image
    카테고리별로 서로 다른 객체를 찾습니다.

앞선 내용에서 설명하진 않았지만 중요한 내용인 Classification(분류)가 있습니다. 해당 영상에서 대표하는 값을 찾아서 어떤 영상인지 분류합니다. Detection 과 Segmentation 모두 이를 위한 과정입니다.

Semantic segmentation vs Instance segmentation


image
Semantic segmentation은 각 픽셀별로 어떤 class에 속하는지 label을 구해줘야 합니다. semantic segmentation은 pixel들이 각 class에 대해 binary하게 포함되는지 안되는지 여부만 따집니다. 즉, 강아지 ouput channel에서는 각 pixel들에 대해 강아지에 포함되는 pixel인지 아닌지를 확인합니다. 그러나 단점이 존재합니다. 같은 channel에 있는 값들을 서로 비교할 수 없다는 점입니다.
image
그림과 같이 서로 다른 차를 영상 내부에 가지고 있음에도 Sementic segmatation을 진행하게 되면 서로를 구분하지 못합니다.

반대로 Instance segmentation은 각 픽셀별로 어떤 카테고리에 속하는지 계산하는 것이 아닌 각 픽셀별로 object가 있는지 없는지 여부만 계산한다. 즉 Detection을 통해서 object를 localization을 진행한 후 해당 픽셀에서 segmentation이 되는지를 확인합니다.
image
그림과 같이 같은 channel임에도 서로 다른 차를 구별해 내는것을 확인할 수 있습니다.

Segmentation 의 종류

1. edge 기반


image
영상의 edge들을 연결한후 나눠진 영역들 중에서 연속적인 값들을 모아서 segmentation을 진행합니다.
image
영상속 특정 object를 찾기 위해서 밖 -> 안 으로 이동하면서 edge를 검출해나가는 방법이 있으며 그림과 같이 안 -> 밖 으로 이동하면서 edge를 검출해나가는 방법이 있습니다.
image
다음 그림과 같이 특정 object를 찾기 위한 장애물들이 존재합니다. segmentation을 방해하기 위해서 사진에 선이 그어진 것을 확인 할 수 있습니다. 이경우 물을 채워 나가면서 원하는 값을 찾아간다는 개념을 대입하면 이해하기 편합니다.
image
다음과 같이 아래에서 부터 물을 채워 나가며 원하는 역역들이 오롯이 찾을 수 있도록 진행합니다.

2. region 기반


image
주변요소들과 Grouping pixel을 진행하여 함게 이동합니다. 이때 Grouping 이 일어나는 조건은 pixel값, 혹은 패턴등이 있습니다.

Mean Shift Algorithm

클러스터링(clustering)은 사람의 간섭 없이 컴퓨터가 스스로 유사한 값들을 묶어서 덩어리를 찾아내는 작업을 말합니다. Modes 는 군집의 개수를 의미합니다. 아래는 pixel에 따라 Clustering 을 거친후 영상을 분석한 결과입니다.
image
image
image

kernel Density Estimation

과연 군집을 정하는 기준이 될수 있는 peak를 찾는 방법은 무엇일까요 바로 Kernel을 사용하는 방법입니다.
image
위의 사진에서 파란색 점들에 대해 집중하면 됩니다. 우리는 파란색 점들이 3과 7의 위치에 어느정도 밀집해 있다는 것을 확인할 수 있습니다. 하지만 어느정도가 아닌 정확한 기준을 정하는 방법은 무엇일까요 그것은 바로 기준을 가진 kernel을 통해서 값을 확인하는 것입니다.
image
바로 다음과 같은 Kernel(filter)을 통해서 Estimated density를 측정합니다. 해당 밀집도를 볼 때 mod는 2개가 생기는 것을 확인할 수 있습니다.

Mean Shift 과정


image
image
다음 그림과 같이 일정 크기를 가진 Region of interest 내부에서 해당 데이터들을 바탕으로 무게중심으로 이동합니다. 그리고 다시 이동한 Region of interest 에서 해당 데이터들의 무게중심으로 이동하며 더이상 이동하지 않는 경우 해당 region이 중첩되지 않는 다면 mod 가 됩니다.

Mean Shift Algorithm 요약

  • 일반적인 segmentation 방법이다.
  • outlier(특이한 값)에 대해서 영향을 덜 받습니다.
  • Kernel 의 사이즈와 시그마를 설정해 주어야 합니다.
  • 계산량이 많습니다.

Grab cut

특정 영역에 원하는 object가 있을 확률을 구해보겠습니다.
image

그 방법은 다음과 같습니다. 이미지 전체에서 해당 오브젝트가 있을 확률을 나누는 것입니다. 하지만 noise확률을 최소화할 방법이 있습니다. 그것은 바로 주변의 요소와 비교하여 확인하는 것입니다.

image
다음과 같은 방법을 사용하게 되면 손쉽게 해당 위치의 대표확률 (Label)을 구할 수 있습니다. 그리고 모든 위치에서의 해당 확률을 구하고 인접한 요소들에 대해 쌍으로 함께 object일 확률을 동시에 시그마로 연산합니다. 이경우 상당히 큰 오차를 줄일 수 있습니다.
image
해당 공식을 -log를 씌워서 해당 식으로 바꾸어 줍니다. 해당식은 energy를 다루는 식으로서 해당 위치에서 요소가 아니게 될 에너지를 담당한다고 해석하면 됩니다. 즉 foreground 일 확률이 높을 수록 energy는 낮습니다.


image
label energy를 바탕으로 0으로 갈지 1로 갈지 결정하여 해당 사진과 같이 점선을 통해 이미지를 분할합니다. 이를 통해 graph cut 이 이루어지게 됩니다.

Difficult example


image 해당 사진과 같이 배경색과 유사하거나 Fin한 요소들이 산재한경우 Background의 요소들 또한 detection당하기 쉽게 찍혀있다면 다소 어려울 수 있습니다. 마지막 사진의 경우 img의 영역 reange를 잘 설정해 주면 원하는 object를 잘 graph cut 할 수 있습니다.

Graph cut Algorithm 요약

  • 아주 빠른 연산속도
  • MRF 방식을 기반으로 굉장히 많은 범위의 문제들에 적용해 해결할 수 있다.
  • 항상 가능하지는 않다. (difficult example)

Texture


image
Texture란 공간적으로 반복되는 문양을 의미합니다.
대표적으로 소재, 방향, 크기 등을 통해 나누어집니다. image
Texture을 분석하는 방법은 수많은 filter를 모아둔 **Filter Bank** 를 통해서 이루어집니다.
image 하나의 영상을 기준으로 Filter Bank에 저장된 필터들을 모두 필터링을 진행해줍니다. 그리고 가장 response가 높은 값들을 기준으로 영상의 요소들을 여러 차원에 나누어 명시합니다.
image 그리고 수많은 차원에 나누어진 filter의 결과값들은 서로다른 texture들의 집합들입니다.

Reference

아직 배움의 단계라 정확한 정보가 아닐 수 있습니다.😂
피드백은 seoungin1228@gmail.com 으로 부탁드리겠습니다☺️