Visual Features: KeyPoints and Descriptors 

keypoints : (locally) distinct location in an image. noise, 회전, 크기 변환, 밝기 변환에 강인한 point. 이 조건에 맞는 특징점 중 하나를 코너점이라고 얘기할 수 있음. (cf. 코너점 : 상하좌우로 움직였을 때, 모두 큰 변화가 일어나는 곳) 

Descriptors : keypoint를 설명하는 방식. 128개의 숫자. keypoint 주변의 local structure 요약

corners는 translation, rotation, illumination에 불변함. 

corner : roughy orthogonal directions(직교방향)의 2개의 edges 

edges : sudden  brightness change 

Finding Corners 

- corners를 찾기 위해서, 우리는 two directions에서 intensity changes를 찾아야 함. 

- (x, y) 주변의 neighbor pixel의 SSD(sum or squared differences of image intensity values of pixels under a given shift (du, dv))를 계산하면 변화의 정도를 알 수 있음. 

하지만 모든 픽셀을 계산하는 것은 계산량이 너무 많아서 비효율적임. 따라서 제안된 것이 Taylor expansion 

Taylor expansion이란 어떤 함수 f(x)를 다항함수로 근사시키는 것을 의미함. 

Structure Matrix : first derivative에 대한 정보를 담고 잇는 식으로 edges와 corners를 찾아내는 key와 같은 역할 image gradients로부터 만들어짐. Computing the Structure Matrix - Jacobians는 Scharr 또는 Sobel과 같은 gradient kernel을 이용하여 convolution으로 계산됨. Harris, Shi-Tomasi & Forstner corner을 정의하기 위한 3개의 비슷한 연구들이 있었음. - 1987: Forstner- 1988: Harris- 1994: Shi-Tomasi 모든 연구는 sturcture matrix를 기반으로 point가 corner인지 아닌지 결정할 때 서로 다른 기준 (criterion) 사용 Fostner은 subpixel estimation 방법을 사용

수정 중인 글입니다.

'Machine Learning and Deep Learning' 카테고리의 다른 글

FPN 개념 및 코드 사용  (1) 2024.01.11

FPN(Feature Pyramid Network)을 통해 컴퓨팅 자원을 적게 차지하면서 다양한 크기의 객체를 인식하는 방법을 제시. 

 

Feature Pyramid Network

 

 원본 이미지를 convolutional network에 입력하여 forward pass를 수행하고, 각 stage마다 서로 다른 scale을 가지는 4개의 feature map을 추출한다. 이 과정을 Bottom-up pathway라고 한다. 이후, Top-down pathway를 통해 각 feature map에 1x1 conv 연산을 적용하여 모두 256 channel을 가지도록 조정하고 upsampling을 수행한다. 마지막으로 lateral connections 과정을 통해 pyramid level 바로 아래 있는 feature map과 element-wise addition 연산을 수행한다. 이를 통해 얻은 4개의 서로 다른 feature map에 3x3 conv 연산을 적용한다.  

 

 Pyramid란 convolutional network에서 얻을 수 있는 서로 다른 해상도의 feature map을 쌓아올린 형태를 의미한다. level은 피라미드의 각 층에 해당하는 feature map이다. 

CNN features

CNN에서 더 얕은, 즉 입력층에 보다 가까울수록 feature map은 높은 해상도(high resolution)을 가지며, 가장자리, 곡선 등과 같은 저수준 특징(low-level feature)를 보유하고 있다. 반대로 더 깊은 layer에서 얻을 수 있는 feature map은 낮은 해상도(low resolution)을 가지며, 질감과 물체의 일부분 등 class를 추론할 수 있는 고수준 특징(high-level feature)를 가지고 있다. 

 

Feature Pyramid Network

Feature Pyramid Network는 임의의 크기의 single-scale 이미지를 CNN에 입력하여 다양한 scale의 feature map을 출력하는 네트워크이다. 주어진 논문에서는 ResNet을 사용하였다. 

 

TopicFM 모델의 backbone으로 FPN이 사용되었다. 여기서 FPN이 어떻게 구현되었는지, 텐서의 사이즈가 어떻게 변화하는지 리뷰하고자한다. 

 

ConvBlock은 3x3 convolution with padding, BN(Batch Normalization), Activation F(GELU)로 구성되어있다. 

 

def _make_layer(self, block, dim, stride=1):
	layer1 = block(self.in_planes, dim, stride=stride)
    layer2 = block(dim, dim, stride=1)
    layers = (layer1, layer2)
    
    self.in_planes = dim 
    return nn.Sequential(*layers)

여기서 block은 ConvBlock을 의미한다. 초기 input의 차원은 initial_dim, ouput의 차원은 dim으로 구현하고, layer 두 개를 sequential 하게 쌓은 형태로 구성하였다.

dim에 block_dims의 값을 순서대로 입력하여  1/2, 1/4, 1/8, 1/16 feature map을 생성한다.  여기서 block_dims = [128, 192, 256, 384] 이다. 

1/16을 upsampling한 것과 1/8을 conv1x1에 통과시켜 1/16으로 만든 것을 더한다. 이를 ConvBlcok + conv3x3을 nn.Sequential 로 쌓은 레이어에 통과시킨다. 이러한 과정으로 x3_out을 만들고, 마찬가지로 1/2에 대해서도 진행해 x1_out을 만든다. 

 

feats_c, feats_f = self.backbone(torch.cat([data[‘image0’], data[‘image1’]], dim=0))

의 코드를 사용하여 backbone에 통과시킨다. backbone에 통과시키는 것은 image 두 장으로 입력된 크기는 (2N, 1, H, W)이다. 

위의 FPN 코드를 통과시키면 feats_c, feats_f는 각각 (2N, 1, H/8, W/8), (2N, 1, H/2, W/2)를 얻게 된다. 

 

'Machine Learning and Deep Learning' 카테고리의 다른 글

KeyPoints  (0) 2024.01.17

+ Recent posts