오늘은 데이터와 레이어에 대해 고민을 조금하게 되었다. Segmentation 테스크를 수행하는 도중 아래와 같이 작지만 임팩트 있을 것으로 보여지는 흰점들이 있는데이터를 만나게 되었다. 해당 점들은 VR 장비 내에서 나오는 것 같은데, 문제는 흰색에 가까우니 값이 (255,255,255)에 가까울 것이다.

CNN 알고리즘의 Convolutional layer는 아래와같이 커널 사이즈에 해당하는 윈도우(3x3)에 대해 연산을 수행하고, 그 결과를 Weight 와 연산하여 결과를 산출한다.

연산과정은 아래의 블로그에서 가져온 그림을 보면 보다 확실히 알 수 있다.


즉, CNN은 해당 결과들이 진행됨에 따라 다양한 Edge를 찾아낸다. Edge는 당연히 layer가 깊어질수록 점점 이미지가 축약되므로 거시적인 Edge를 잡는다. 그렇다면 원래 이미지에서 흰색 광은 Edge로 계속 디텍팅 될 것이라 생각된다. 따라서 Segmentation 성능을 높이기 위해서는 아마도 저 점들이 근처 안구와 동일하게 혹은 근방으로 가는게 좋지 않을까 라는 생각이 든다. CNN에서 연산을 Max 대신 Mean 을 수행할 수도 있겠지만, 해당 방법은 레이어가 깊어질수록 엣지를 잘 찾지 못할 것 같다.
Strides
그래서 드는 생각은 Strides였다. CNN 연산에서는 기본으로 Strides를 1로 하여 연산을 한다. Strides는 Windows가 움직이는 거리라 생각하면 편하다. 아래는 Strides가 2인 3x3 커널의 연산과정이다.

예상대로 Strides를 수행하면, 아래와 같은 feature를 확인할 수 있었다.

Dilation
그 다음으로 드는 생각은 Dilation였다. Dilation를 주게 되면 빈공간이 존재하니, 흰색광에 해당하는 이미지를 잘 무시할 수 있을 것이라는 생각이 든다.


아래는 Dilation을 추가한 그림인데 흰색광이 어느정도 뭉게졌지만, 동공에 대한 패턴 또한 무너지는 것을 볼 수 있었다.

아래는 최종적으로 Strides와 dilation을 결합한 결과이다. 해당 조합으로는 원하는 목표 대로 흰색광을 무시된 안구 이미지를 뽑아내는 Feature를 생성할 수 있는 것 같다.

참고될 포스팅

