새소식

딥러닝

어디에 주목할 것인가 ? : Spatial Attention - STN (Spatial Transformer Network)

  • -

Spatial Attention 은 Case study 로 , 해당하는 논문들을 살펴보며 진행하겠습니다. 

 

목차

  1. Spatial Attention 
    1. STN : Spatial Transformer Networks
    2. GENet : Gather - Excite : Exploiting Feature Context in Convolutional Neural Networks
    3. RAN : Residual Attention Network
  2. Spatial + Temporal Attention
    1. CBAM : Convolutional Block Attention Module

 

Spatial Transformer Networks (STN)

 

Introduce a new learnable module, the Spatial Transformer, which explicitly allows the spatial manipulation of data within the network

Motivation : Limitation of CNNs

  • Limited spatial invariance
  • Max pooling has small spatial support
  • No rotation and scaling invariance

다음과 같은 상황에서 CNN 이 invariant 한 지 아닌지 살펴보면, 

  • Translation : CNN 이 잘 찾습니다. 
  • Rotation : 잘 못 찾습니다. 이론적으로 Convolution 자체가 rotate 하면서 적용하는 연산이 아닙니다. 
  • Scaling : Layer 가 쌓이면서 receptive field 가 커질 수는 있지만, 원리 상으로는 CNN 은 scale 에 invariant 하지 않습니다. 

STN 의 역할

 

따라서 이러한 CNN 의 한계를 극복하기 위해, 어떤 이미지가 들어오든 가운데 이미지로 만들어주는 네트워크가 대안으로 제시되었습니다. 

 

STN Architecture

  • A dynamic mechanism that actively spatially transforms an image or feature map by learning appropriate transformation matrix
  • Transformation matrix is capable of including translation, rotation, scaling, cropping and non-rigid deformations
  • Allows for end - to - end ( = 미분가능하다) trainable models using standard back-propagation

 

Spatial Transformer 의 구조

 

Spatial Transformer 는 다음과 같이 세 가지 구성 요소로 이루어져 있습니다. 

 

  • Localization net : feature 를 입력으로 받아 \(\Theta\) (파라미터)를 내놓음
  • Grid Generator :
  • Sampler : 

Localization Net

이 부분을 이해하려면 Homography 와 같은 이미지 상의 transform 에 대해서 알고 있을 필요가 있습니다. STN 은 결국 원하는 모양이 되도록 input 이미지들을 transform 시켜주는 네트워크이기 때문에, 저 \(\Theta\) 의 개수는 우리가 어떤 transform 을 사용할 것인가 ? 에 따라 결정됩니다. 

다양한 Tranformation 의 종류

일반적으로는 Affine transform 을 사용하여 \(\Theta\) 의 개수는 6개로 정의합니다. 

 

Grid Generator

  • Output pixel is computed by applying a sampling kernel
  • Grid : Element of output tensors
    • Pixels on output matrix in 2D

최종 결과물의 Pixel 은 sampling kernel 을 적용함으로써 생성됩니다. 

이때 forward warping 을 하지 않는 이유는 그렇게 되면 최종 결과물에 공백이 생기기 때문입니다. Dense 한 결과를 얻기 위해서 backward warping 을 하고, V 의 모든 그리드에 어떤 값이 들어갈 지 U 로부터 찾는 식으로 결과값을 얻습니다. 

 

Image Sampling

 

하지만 이때 backward warping 으로 생성된 source image 의 위치가 반드시 정수인 것은 아닙니다. 따라서 interpolation 등으로 지정을 해 줄 필요가 있습니다. 

 

 

  • Integer Sampling
    • target 하는 점과 제일 가까운 점 1개의 값을 가져옴
  • Bilinear Sampling
    • 거리에 따라서 가중치를 두어서 값을 가져옴

STN 결과값

 

STN 소스코드

class Net(nn.Module):
	def __init__(self):
    	super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.conv2_drop = nn.Dropout2d()
        self.fc1 = nn.Linear(320,50)
        self.fc2 = nn.Linear(50,10)
        
        #Spatial transformer localization network
        self.localization = nn.Sequential(
        	nn.Conv2d(1, 8, kernel_size=7),
            nn.MaxPool2d(2, stride=2),
            nn.ReLU(True),
            nn.Conv2d(8, 10, kernel_size=5)
            nn.MaxPool2d(2, stride=2),
            nn.ReLU(True)
  
  		#Regressor for the 3 * 2 affine matrix
        self.fc_loc = nn.Sequential(
        	nn.Linear(10 * 3 * 3, 32),
            nn.ReLU(True),
            nn.Linear(32, 3 * 2)
        )
        
        # Initialize the weights / bias with identity transformation
        self.fc_loc[2].wiehgt.data.zero_()
        self.fc_loc[2].biax.data.copy_(torch.tensor([1,0,0,0,0,1,0], dtype=torch.float)
        )
        
# Spatial transformer network forward function
def stn(self, x):
	xs = self.localization(x)
    xs = xs.view(-1,10 * 3 * 3)
    theta = self.fc_loc(xs)
    theta = theta.view(-1, 2, 3)
    grid = F.affine_grid(theta, x_size())
    x = F.grid_sample(x, grid)

 

* 번외

(내가 보려고 써 놓는) nn.Dropout 을 쓰면 네트워크 성능이 향상되는 이유

 

nn.Dropout은 딥러닝에서 과적합(overfitting)을 방지하기 위한 정규화(regularization) 기술 중 하나입니다. Dropout은 특정 학습 단계에서 신경망의 일부 노드를 무작위로 "비활성화"하여 신경망이 특정 노드나 경로에 너무 의존하지 않게 만듭니다.

 

Dropout을 사용하여 신경망의 성능이 향상되는 주요 이유는 다음과 같습니다:

 

과적합 방지: 딥 뉴럴 네트워크는 많은 매개변수를 가지고 있기 때문에, 주어진 학습 데이터에 대해 너무 복잡한 모델을 학습하는 경향이 있습니다. 이로 인해 훈련 데이터에 대한 성능은 좋지만 새로운 데이터에 대한 성능은 나빠질 수 있습니다. Dropout은 모델이 훈련 데이터에 과도하게 적합하는 것을 방지합니다.

앙상블 효과: Dropout을 사용하면 매 학습 단계마다 다른 "부분 네트워크"가 학습됩니다. 이로 인해 여러 다른 네트워크의 앙상블과 유사한 효과를 얻을 수 있습니다. 앙상블 방법은 일반적으로 예측의 정확도를 향상시키는 데 효과적입니다.

특성 간의 공동 의존성 감소: Dropout은 모델이 특정 특성들 간의 복잡한 공동 의존성에 너무 의존하지 않게 합니다. 즉, 모델은 각 특성이 중요하게 작용하도록 학습됩니다.

 

 

 


위 내용은 경희대학교 소프트웨어융합학과 황효석 교수님의 2023년 <심층신경망을 이용한 로봇 인지> 수업 내용을 요약한 것입니다.

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.