Gorio Tech Blog search

MobileNetV2 논문 설명(MobileNetsV2 - Inverted Residuals and Linear Bottlenecks 리뷰)

|

이 글에서는 Google Inc.에서 발표한 MobileNet V2 논문을 간략하게 정리한다.


MobileNetsV2: Inverted Residuals and Linear Bottlenecks

논문 링크: MobileNets: Inverted Residuals and Linear Bottlenecks

Github: https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/README.md

  • 2018년 1월(Arxiv)
  • Google Inc.
  • Mark Sandler, Andrew Howard, Menglong Zhu, Andrey Zhmoginov, Liang-Chieh Chen

V1: 모바일 기기에서 동작하는 것을 목표로 한, 성능을 별로 희생하지 않으면서도 모델을 크게 경량화하였다. V2: Inverted Residual, Linear Bottleneck을 도입하여 V1을 업그레이드하였다.


Abstract

  • shortcut connection이 얇은 bottleneck layer 사이에 존재하는 inverted residual 구조에 기반한 MobileNet V2를 제안한다.
  • 모델의 representational power를 보존하기 위해 narrow layer 안에서는 비선형성을 제거하는 것이 낫다는 것을 발견하였다.
  • 본 논문에서 제안하는 접근법은 expressiveness of the transformation으로부터 입출력 도메인을 분리하는 것을 가능하게 한다.
  • ImageNet 분류, COCO object detection, VOC image segmentation에서 성능을 측정하여 작은 모델로도 충분히 높은 성능을 기록함을 보인다.

1. Introduction

최근의 모델들은 크기를 상당한 수준으로 키우면서 그 성능도 올라갔지만 메모리나 계산량 역시도 엄청나게 증가하였다. 특히, 모바일 등 작은 기기나 embedded 환경에서는 이러한 모델을 쓰기가 어렵고, 크기가 작은 모델을 개발할 필요가 있다.

이 논문에서는 inverted residual with lienar bottleneck이라는 구조를 제안한다. 이 모듈은 저차원의 압축된 표상(표현)을 받아 먼저 고차원으로 확장한 다음 다시 lightweight depthwise convolution으로 필터링을 거친다. Feature는 이러한 일련의 과정(linear convolution)을 통해 저차원의 표상으로 투영된다.
이는 표준 연산을 통해서 효율적으로 구현이 가능하며 어떤 모델에도 사용할 수 있다. 또 중간 결과로 큰 tensor를 잡는 일도 없어 메모리 사용량을 크게 줄일 수 있다. 이는 작은 기기를 포함하여 많은 곳에서 효율적으로 쓸 수 있음을 뜻한다.


정확도와 성능(latency) 간의 최적의 균형을 찾는 것은 지난 몇 년간 꽤 핫한 주제였다. 모델의 크기를 키워 성능을 높이고, 비슷한 효과를 가지면서 parameter 수를 줄이는 등 여러 연구가 있어 왔다. 최근에는 유전 알고리즘과 강화학습을 비롯한 여러 최적화 기법도 사용되었으나 이들은 너무 복잡하다는 단점이 있다. 이 논문에서는 더 낫고 더 간결한 방법을 제시하고자 한다.


3. Preliminaries, discussion and intuition

3.1. Depthwise Separable Convolution

MobileNet V1을 참조하면 된다.

3.2. Linear Bottlenecks

$n$개의 layer $L_i$로 구성된 신경망을 고려하자.

  • 그러면 실제 이미지 입력에 대해서 각각의 픽셀 및 채널에 대해 $ h_i \times w_i \times d_i $ 크기의 activation이 존재함을 생각할 수 있다.
  • 이걸 $d_i$ 차원을 갖는 “pixel”이 $h_i \times w_i$ 개 있다고 생각할 수 있다.
  • 대략적으로, 실제 입력 이미지에 대해서, 이러한 layer activation은 “manifold of interest“를 형성한다고 생각할 수 있다.
  • 지금까지의 연구들에서는 신경망에서 manifold of interest는 저차원의 subspace로 embedded될 수 있다고 가정해 왔다.
  • 즉, 우리가 deep conv layer의 모든 독립적인 $d$-채널 pixel을 볼 때, 이 값들에 인코딩되어 있는 정보는 어떤 manifold 상에 위치하며, 이것은 저차원의 subspace로 보낼 수 있다는 것이다.

이러한 직관을 갖고, MobileNet V1에서는 저차원의 subspace로 보냈다가 다시 복구시키는 bottleneck layer를 적용하여, activation space의 차원을 효과적으로 줄일 수 있었다. 그러나, manifold의 “정보”는 비선형 변환 함수, ReLU와 같은 것이 있기 때문에 일부 소실될 수 있다.

ReLU가 채널을 collapse시킨다면, 해당 채널에서 정보가 손실되는 것은 피할 수 없다. 그러나, 채널이 충분히 많다면, 해당 정보가 다른 채널에서는 살아 있을 수 있다.

요약하면,

  1. manifold of interest가 ReLU 변환 이후에도 non-zero volume으로 남아 있다면, 그것은 선형 변환에 부합한다.
  2. ReLU가 입력 manifold에 대해 정보를 완전히 보전하는 경우는, 입력 manifold가 입력 space의 저차원 subspace에 있을 때에만 그렇다.

그래서 결론은, ReLU와 같은 비선형 activation이 없는 layer를 하나 더 추가한다. 이것이 linear bottleneck의 역할을 한다.

3.3. Inverted residuals

일반적인 residual connection과 반대이다. 즉, 보통은 wide - narrow - wide의 layer가 있고, wide layer끼리 연결을 추가한 방식인데, 이 논문에서는

  • narrow - wide - narrow layer가 기본으로 있고
  • narrow layer끼리 연결이 되어 있다.

이렇게 하는 이유는 narrow에 해당하는 저차원의 layer에는 필요한 정보만 압축된 채로 저장되어 있다고 가정하기 때문이다. 즉 필요한 정보는 narrow에 이미 있기 때문에, skip connection으로 사용해도 정보를 더 깊은 layer까지 전달할 수 있을 것이라고 생각하는 것이다.

3.4. Information flow interpretation

이 구조가 갖는 흥미로운 특성은 building block(bottleneck layer)의 input/output domains 사이의 자연스러운 분리가 이루어진다는 것이다.

특히, inner layer depth가 0인 경우 다음의 convolution은 shortcut connection 덕분에 항등함수가 된다. expansion ratio가 1보다 작으면 보통의 residual conv block이 되고, 물론, 이 논문에서는 1보다 크다.
이로써 모델의 크기(capacity)와 모델의 표현력을 분리하여 생각할 수 있고, 이는 네트워크의 특성을 이해하는 데 도움을 줄 것이다.


4. Model Architecture

기본 구조는 bottleneck depth-separable convolution with residuals이다. 자세한 구조는 다음 표와 같다.

MobileNet V2는 32개의 filter를 갖는 fully conv layer, 19개의 residual bottleneck layer를 가지며, 활성함수로는 ReLU6을 사용한다.

inverted residual의 확장 비율(expansion ratio)는 모든 실험에서 6으로 고정하였다. 만약 입력 채널 수가 64였다면, 중간의 wide layer에서는 64$\times$6 = 384개의 채널을 갖는다.

Trade-off hyper parameters

기본 모델은

  • multiplier 1
  • 224$\times$224의 입력 크기
  • 300M개의 multiply-adds(계산량)
  • 3.4M개의 parameter

를 갖는다.

그리고 입력 크기나 multiplier를 달리하면서 모델 크기와 정확도 간 trade-off를 조절할 수 있다.


5. Implementation Notes

5.1. Memory efficient inference

Bottleneck Residual Block

메모리 사용량을 분석한 부분인데, 간략하게 결론 내리면 다음과 같다.

  • 표 1에 있는 expantion ratio $t$는 2~5 정도로 잡는 것이 메모리 요구량을 크게 줄일 수 있는 방법이라고 한다.

6. Experiments

6.1. ImageNet Classification

RMSPropOptimizer, Tensorflow, weight decay 0.00004, learning rate 0.045, 16 GPU, batch size 96으로 실험하였다.

6.2. Object Detection

MobileNet와 잘 어울리는, SSDLite라는 것을 소개한다. 이는 기존 SSD의 기본 conv를 separable conv로 바꾼 것이다. 이는 기존보다 계산적인 효율을 높여 준다. 기존 SSD와 비교하여 parameter 수와 계산량을 획기적으로 줄여 준다.

계산량, 성능, 모델 크기 등에서 MNet V2 + SSDLite가 다른 모델을 압도한다.

6.3. Semantic Segmentation

여기서는 MobileNet V1, V2를 feature extractor로서 사용하여 DeepLabv3와 같이 사용하여 실험하였다. PASCAL VOC 2012에서, ResNet base 모델에 비해 크게 작고 계산량이 적으며 성능도 괜찮다.

6.4. Ablation study

Inverted residual connection(fig 6a)와 Linear bottleneck(fig 6b)이 있고 없고의 차이를 아래 그림에서 딱 보여준다.

근데 사실 lienar bottleneck 모델은 non-linearaties를 갖는 모델과 비교하여 딱히 강력하다고 할 수 없다. 이는 activation은 bias와 scale 변화에 적절히 동작할 수 있기 때문이다.

그러나 fig 6a에서 보듯 lienar bottleneck은 성능을 향상시켜주며, 이는 비선형성이 저차원 공간에서 정보를 소실시키는 것을 뒷받침한다.


7. Conclusions and future work

메모리 효율(모델 크기), 계산량에서 크게 이점을 가지는 MobileNet V2를 제안하였다. 그러면서도 정확도는 떨어지지 않는 모습을 보여준다.


Comment  Read more

Strategies for pre-training Grapn Neural Networks 설명

|

이번 글에서는 GNN을 pre-train하는 과정에 대해 설명하는 논문에 대해 간략히 다뤄보겠습니다. domain-specific한 실험에 대한 내용이 많아 전반적인 과정과 인사이트에 대해서면 요약해서 정리해보겠습니다.

논문 원본은 이 곳에서 확인할 수 있습니다. pytorch geometric에서는 이 곳에서 처럼 본 논문에서 사용된 convolution layer를 모듈화 해 두었습니다.


Strategies for pre-training Grapn Neural Networks 설명

1. Introduction

거대한 모델을 pre-train한 후 downstream task에 적용하는 방법 효과적이라는 사실은 이미 증명이 되었습니다만, 이러한 과정이 GNN에도 효과적인지에 대해서는 여전히 의문 부호가 남습니다. 본 논문에서는 개별 node 및 전체 그래프 수준에서 효과적으로 GNN을 pre-train하고 이를 downstream task 수행 과정까지 잘 이어지도록 하는 방법에 대해 설명하고 있습니다.

pre-train의 어려운 점이라고 한다면, 목표로 하는 downstream task와 관계 있는 target label과 example을 잘 골라야 하는데 여기서 상당한 수준의 domain expertise가 필요하다는 점입니다. 만약 이를 적절히 수행하지 못한다면 downstram task에 negative transfer를 하는 셈이 될 것입니다.

논문에서는 이를 해결하기 위해 쉽게 접근할 수 있는 node-level의 정보를 이용하고 GNN으로 하여금 graph-level knowledge 외에도 node와 edge에 대한 domain-specific한 knowledge를 포착하도록 유도하는 것을 핵심 아이디어로 제시하고 있습니다.

2. Strategies for pre-training GNN

pre-train 전략의 핵심은 GNN을 개별 node-level 및 graph-level 모두에서 pre-train 시키는 것입니다.

2.1. node-level pre-training

먼저 node-level에 대해서 알아봅니다.

2가지 방법이 존재합니다. Context PredictionAttribute Masking이 바로 그것입니다.

Context Prediction은 이웃 정보를 활용하여 해당 node 주위에 존재하는 그래프 구조를 예측하는 것이고 이 때 subgraph를 추출하여 학습이 진행됩니다. 그림에서처럼 context graph는 2가지 hyperparameter로 정의됩니다.

$r_1, r_2$ 는 각각 내부/외부 범위를 지정합니다. 위 그림에서 처럼 $r_2=4, r_1=1$ 로 설정하면 2-hop에서 4-hop 까지를 정보로 활용하겠다는 의미입니다. context anchor node를 지정하고 이 node들은 이웃들와 context 그래프가 얼마나 연결되어 있는지에 대한 정보를 제공합니다. 그리고 이에 대한 예측을 수행하기 위해서는 이들을 고정된 길이의 벡터로 변환해야 합니다. 논문에서는 이를 위해 context graph에 존재하는 node embedding들을 평균화하여 context embedding을 얻는다고 이야기 합니다. 그래프 $G$ 에서 이러한 context embedding을 얻었다면 다음과 같이 표현할 수 있습니다.

[c_v^G]

어떻게 학습할지는 정했습니다. 그럼 label은 무엇일까요? 논문에서는 supervised-learning을 통해 pre-train하는 것을 제안하고 있습니다. 기본적으로 그래프 데이터만 주어지면 negative label은 딱히 존재하지 않습니다. 연결 되어 있지 않다는 정보를 바탕으로 negative label을 추출해야 합니다. 논문에서는 positive:negative 비율을 1:1로 맞추어 무작위 추출을 진행했다고 합니다.

그리고 다음 값을 구하여 학습을 진행합니다.

[\sigma( h_i^{(K)T} c_j^{G^j})]

그리고 만약 $i, j$ context graph가 같은 node에 속한다면 위 값은 1이 되어야 할 것이고 그렇지 않다면 0이 되어야 할 것입니다.

Attribute Masking은 node 및 edge의 attribute를 masking 하고 GNN이 이 특징을 예측하도록 task를 정의하는 것입니다. 무작위로 input node/edge attribute를 masking하고 GNN을 통해 이에 상응하는 node/edge embedding을 얻도록 합니다. 이 때 edge embedding은 edge의 end node에 해당하는 node들의 embedding의 합으로 구성됩니다. 그리고 최종적으로 마지막 linear model이 적용되어 masked node/edge attribute를 예측하도록 학습이 수행됩니다.

2.2. graph-level pre-training

이전 section에서 유용한 node embedding을 얻었습니다. 이를 통해 쓸모 있는 graph embedding을 만들어야 합니다. 이를 위해 2가지 task를 생각할 수 있습니다.

하나는 그래프의 구조적 유사성을 판별하는 일인데, 논문에서는 이 과정이 너무 어렵고 ground truth label을 찾는 것이 쉽지 않아 논문에서는 다루지 않겠다고 이야기 하고 있습니다.

다른 하나는 graph-level의 property를 예측하는 일입니다. 예를 들어 분자 구조 그래프가 있다고 할 때 이 구조의 특성을 예측해 볼 수 있을 것입니다.

graph-level representation인 $h_G$ 가 생성되었을 때 이를 직접적으로 downstream prediction task에서 파인 튜닝하는 데 사용하고 domain-specific한 정보를 $h_G$ 에 인코딩하도록 해야 합니다. 많은 graph property에 대해 동시에 예측을 진행하고 각각의 property에 대해 binary classification task를 수행합니다. 이 때는 물론 linear classifier가 붙어야 할 것입니다.

주의점은 있습니다. 그냥 생각 없이 pre-training task를 만들면 negative transfer가 일어날 수 있기 때문에 정말로 관계있는 supervised pre-training task를 구상해야 합니다. 물론 이를 위해서는 상당한 수준의 domain expertise가 필요할 것입니다.

이러한 문제를 조금이나마 덜기 위해 논문에서는 먼저 node-level의 pre-train을 수행하고 graph-level에서는 multi-task supervised pre-train을 수행하라고 이야기 합니다.

최종적으로 node-level, graph-level에서의 pre-training을 마쳤으면 이를 통해 downstream task를 풀어내면 됩니다.

(후략)

Comment  Read more

MobileNetV1 논문 설명(MobileNets - Efficient Convolutional Neural Networks for Mobile Vision Applications 리뷰)

|

이 글에서는 Google Inc.에서 발표한 MobileNet V1 논문을 간략하게 정리한다.


MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

논문 링크: MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

Github: https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md

  • 2017년 4월(Arxiv)
  • Google Inc.
  • Andrew G. Howard, Menglong Zhu et al.

모바일 기기에서 동작하는 것을 목표로 한, 성능을 별로 희생하지 않으면서도 모델을 크게 경량화하였다.


Abstract

모바일, embedded vision 앱에서 사용되는 것을 목적으로 한 MobileNet이라는 효율적인 모델을 제시한다. Depth-wise separable convolutions라는 구조에 기반하며 2개의 단순한 hyper-parameter를 가진다. 이 2가지는 사용되는 환경에 따라 적절히 선택하여 적당한 크기의 모델을 선택할 수 있게 한다. 수많은 실험을 통해 가장 좋은 성능을 보이는 설정을 찾았으며 타 모델에 비해 성능이 거의 떨어지지 않으면서 모델 크기는 몇 배까지 줄인 모델을 소개한다.


1. Introduction

ConvNet은 computer vision 분야라면 어디서든 사용되었지만(2017년 논문이므로 이 당시에는 vision에 Transformer를 쓰지 않았다.) 모델의 크기가 너무 커지고 가성비가 좋지 않다. 그래서 이 논문에서는 모델의 크기와 성능(low latency)을 적절히 선택할 수 있도록 하는 2개의 hyper-parameter를 갖는 효율적인 모델을 제시한다. 섹션 2에서는 지금까지의 작은 모델을, 섹션 3에서는 MobileNet을 설명한다. 섹션 4에서는 실험을, 5에서는 요약을 서술한다.


2. Prior Work

모델 크기를 줄이는 연구도 많았다. 크게 2가지로 나뉘는데,

  1. 사전학습된 네트워크를 압축하거나
  2. 작은 네트워크를 직접 학습하는 방식이다.

이외에도 모델을 잘 압축하거나, 양자화, hashing, pruning 등이 사용되었다.

MobileNet은 기본적으로 작은 모델이지만 latency를 최적화하는 데 초점을 맞춘다. MobileNets은 Depthwise separable convolutions을 사용한다.


3. MobileNet Architecture

MobileNet에서 가장 중요한 부분은 Depthwise Separable Convolution이다.

3.1. Depthwise Separable Convolution

Factorized convolutions의 한 형태로, 표준 convolution을

  • Depthwise convolution(dwConv)과
  • Pointwise convolution(pwConv, $1 \times 1$ convolution)

으로 쪼갠 것이다.

dwConv는 각 입력 채널당 1개의 filter를 적용하고, pwConv는 dwConv의 결과를 합치기 위해 $1 \times 1$ conv를 적용한다. 이와 비교해서 표준 conv는 이 2가지 step이 하나로 합쳐져 있는 것이라 보면 된다.

DSConv(depthwise separable convolution)은 이를 2개의 layer로 나누어, filtering을 위한 separate layer, combining을 위핸 separate layer로 구성된다. 이는 모델 크기를 많이 줄일 수 있게 해 준다.

이 과정을 시각화하면 다음과 같다. 각 큐브는 3차원의 필터 모양(혹은 parameter의 개수)을 나타내며, 표준 conv는 딱 봐도 큐브의 부피 합이 커 보이지만 dwConv와 pwconv는 하나 또는 2개의 차원이 1이므로 그 부피가 작다(즉, parameter의 수가 많이 적다).

다르게 말해서 3차원적인 계산을 두 방향의 차원으로 먼저 계산한 후 나머지 한 차원을 그 다음에 계산하는 방식이라 생각해도 된다.

표준 conv의 입출력 크기는 다음과 같다.

  • 입력 크기: $D_F \times D_F \times M$
  • 출력 크기: $D_F \times D_F \times N$

그래서 표준 conv의 필터 개수는 그림 2에서 보듯이 $N$이다.

표준 conv의 연산량은 다음과 같다.

[D_K^2 \cdot M \cdot N \cdot D_F^2]

  • $D_F$: 입력 Feature map의 너비와 높이
  • $D_K$: Kernel의 크기

이와 비교해서 DSConv의 연산량은 다음과 같다.

[D_K^2 \cdot M \cdot D_F^2 + M \cdot N \cdot D_F^2]

연산의 비율은 다음과 같이 계산된다.

[\frac{1}{N} + \frac{1}{D_K^2}]

$N$은 보통 큰 편이므로 첫 항은 거의 무시되고, MobileNet에서 $D_K=3$을 사용하므로 연산은 8~9배 가량 줄어든다.

참고로 spatial 차원에서 한 번 더 쪼개는 것은 연산량을 거의 줄여주지 못한다(즉 2+1을 1+1+1로 계산하는 것은 별 의미가 없다).

3.2. Network Structure and Training

표준 Conv와 DSConv layer의 구조를 비교하면 아래 그림과 같다. $1 \times 1$ conv가 pwConv이다.

MobileNet은 맨 처음 layer를 full conv로 쓰는 것을 제외하면 전부 DSConv로 사용한다. dwConv는 표에는 Conv dw라고 표시되어 있다. $1 \times 1$ conv를 수행하는 부분이 pwConv이다.

Tensorflow, 그리고 Inception V3와 비슷하게 asynchronous gradient descent를 사용하는 RMSProp로 학습을 진행하였다.
DSConv에는 parameter가 별로 없어서 weight decay는 거의 또는 전혀 사용하지 않는 것이 낫다고 한다.

3.3. Width Multiplier: Thinner Models

이미 충분히 작지만 더 작고 빠르고 만들어야 하는 경우가 있다. Width multiplier라 부르는 $\alpha$라는 hyper-parameter는 각 layer마다 얼마나 (전체적으로 다) 얇게 만드는지를 결정한다. 입출력 채널 수는 $M, N$에서 $\alpha M, \alpha N$이 된다. $\alpha \in (0, 1]$이고 0.75, 0.5, 0.25등의 값을 쓸 수 있다. $\alpha=1$은 기본 MobileNet이다. 이 $\alpha$를 통해 얼마든지 작은 시스템에도 모델을 집어넣어 사용할 수 있다. 물론 정확도, latency, 크기 사이에는 trade-off가 존재한다.

3.4. Resolution Multiplier: Reduced Representation

두 번째 hyper-parameter는 해상도에 관한 multiplier $\rho$이다. 입력 이미지와 각 레이어의 내부 표현 전부를 이 multiplier를 곱해 줄인다. 이 역시 $\alpha$와 비슷하게 $\rho \in (0, 1]$이고 보통 이미지 해상도를 224, 192, 160, 128 정도로 만들게 한다. 계산량은 $\rho^2$에 비례하여 줄어든다.


4. Experiments

MobileNet을 여러 multiplier 등 여러 세팅을 바꿔가면서 실험한 결과인데, 주로 성능 하락은 크지 않으면서도 모델 크기나 계산량이 줄었음을 보여준다. 혹은 정확도는 낮아도 크기가 많이 작기 때문에 여러 embedded 환경에서 쓸 만하다는 주장을 한다.

4.1. Model Choices

Full conv와 DSConv의 차이는 명확하다. 정확도는 1%p 낮지만, 모델 크기는 7배 이상 작다.
또 Narrow와 Shallow MobileNet을 비교하면 아래와 같다. (깊고 얇은 모델 vs 얕고 두꺼운 모델)

4.2. Model Shrinking Hyperparameters

모델이 작을수록 성능도 떨어지긴 한다.

계산량과 성능 상의 trade-off는 아래처럼 나타난다. 계산량이 지수적으로 늘어나면, 정확도는 거의 선형적으로 늘어난다.

정확도, 계산량, 모델 크기를 종합적으로 비교해보자.

다른 모델(GoogleNet, VGG16 등)과 비교했을 때 MobileNet은 성능은 비슷하면서 계산량과 모델 크기에서 확실한 우위를 점한다.

4.3. SFine Grained Recognition

웹에서 얻은 대량이지만 noisy한 데이터를 사용하여 학습한 다음 Stanford Dogs dataset에서 테스트해보았다.

4.4. Large Scale Geolocalizaton

PlaNet을 geo-tagged 사진들로 MobileNet 구조로 재학습시켜 테스트한 결과는 위의 표 11에 나와 있다.

4.5. Face Attributes

MobileNet의 또 다른 쓸모 있는 점은 전혀 또는 거의 알려져 있지 않은(unknown or esoteric) 학습 과정을 가진 큰 모델을 압축할 수 있다는 것이다. MobileNet 구조를 사용하여 얼글 특징 분류기에서 distillation을 수행했는데, 이는 분류기가 GT label 대신에 더 큰 모델의 출력값을 모방하도록 학습하는 방식으로 작동한다. 기본 모델에 비해 최대 99%까지 연산량을 줄이면서도 성능 하락은 별로 없는 것을 볼 수 있다.

4.6. Object Detection

MobileNet을 물체 인식에도 적용시켜서 Faster-RCNN 등과 비교해 보았다. 이 결과 역시 모델 크기나 연산량에 비해 성능이 좋다는 것을 보여주고 있다.

4.7. Face Embeddings

얼굴인식 모델에서 FaceNet은 SOTA 모델인데, 적절히 distillation을 수행한 결과, 성능은 조금 낮으나 연산량을 고려하면 만족할 만한 수준인 것 같다.


5. Conclusion

Depthwise Separable Convolutions을 사용한 경량화된 모델 MobileNet을 제안하였다. 모델 크기나 연산량에 비해 성능은 크게 떨어지지 않고, 시스템의 환경에 따라 적절한 크기의 모델을 선택할 수 있도록 하는 여러 옵션(multiplier)를 제공하였다.


Comment  Read more

Graphormer(Do Transformers Really Perform Bad for Graph Representation?) 설명

|

이번 글에서는 Transformer가 정말로 그래프 데이터에 잘 적용될 수 있는지에 대해 고찰하고, Graphormer라는 더 나은 접근을 제시한 논문에 대해 다뤄보겠습니다.

논문 원본은 이 곳에서 확인할 수 있으며, 깃헙도 참고할 수 있습니다.

본 글에서는 핵심적인 부분에 대해서만 살펴보겠습니다.


Graphormer: Do Transformers Really Perform Bad for Graph Representation? 설명

1. Introduction

Transformer의 유용함은 자명한 사실이지만 이를 그래프 데이터에서도 잘 활용할 수 있는가에 대해서는 완전한 확답을 찾지는 못한 상황입니다. 여러 연구에서 이를 시도하긴 하였지만 충분하지는 않았습니다. Transformer는 본래 sequence modeling을 위해 설계되었는데 그래프의 구조적인 정보를 모델에 잘 반영해야지만 이를 잘 활용할 수 있을 것입니다.

node에 반영된 그래프의 구조적인 정보와 node 쌍 사이의 관계 등을 제대로 고려하지 않은 상태에서 Self-attention을 사용하는 것은 단지 node 간의 semantic similarity를 계산하는 것에 그칠 뿐입니다. 즉 오로지 feature의 특성으로 attention이 적용될 것입니다.

이를 해결하기 위해 논문에서는 Centrality EncodingSpatial Encoding을 제안하고 있습니다. 이 구조에 대해서는 아래에서 자세히 설명하겠습니다.

본 글에서는 그래프 네트워크의 일반적인 부분에 대해서 설명하지는 않겠습니다. 이 내용에 대해서는 이전 글들을 보시면 좋습니다.

2. Model Architecture

2.1. Centrality Encoding

node centrality는 한 node가 그래프에서 얼마나 중요한지를 나타내는데, 이는 그래프를 이해하는 데에 있어 사실 굉장히 중요한 정보입니다. 예를 들어 소셜 네트워크 상의 celebrity는 다른 node에 비해 훨씬 더 강한 영향력을 갖고 있을 것이고, 고객과 상점을 연결하는 그래프에서 인기 있는 상점은 다른 node에 비해 더 많은 이웃을 갖고 있을 것입니다. 이러한 정보는 현재의 attention 계산에서 적절히 활용되고 있지 못합니다.

Graphomer에서는 degree centrality를 이용했습니다. 만약 한 node가 5개의 이웃을 갖고 있다고 해보겠습니다. 그렇다면 이 node가 다른 node 하나에게 미치는 영향력은 1/5입니다. 만약 더 많은 이웃을 갖고 있다고 하면 이 영향력은 더욱 작은 크기로 계산될 것입니다. 여기서 계산된 수치가 outdegree입니다.

반대로 다른 node로 부터 받는 영향력도 존재할 것입니다. 앞서 5개의 이웃을 갖고 있다고 했습니다. 각 이웃 node들은 각각 1, 2, 2, 3, 3개의 이웃을 갖고 있다고 하면, 지금의 node는 1/1 + 1/2 + 1/2 + 1/3 + 1/3의 영향력을 수집한 셈이 됩니다. 여기서 계산된 수치가 indegree입니다.

Graphomer에서는 이러한 정보를 활요하여 Centrality Encoding을 수행합니다. 특정 node의 indegree, outdegree에 따라 2개의 임베딩 벡터를 할당하며 이들은 학습 가능한 파라미터입니다. 인코딩된 이 임베딩 벡터는 input에 자연스럽게 더해집니다.

[h_i^0 = x_i + z^{-}{deg^{-}(v_i)} + z^{+}{deg^{+}(v_i)}]

만약 undirected 그래프라면 아래와 같은 형태가 됩니다.

[h_i^0 = x_i + z^{-}_{deg(v_i)}]

2.2. Spatial Encoding

그래프 데이터에서 node는 연속적으로 배열되어 있지 않습니다. node는 다차원의 spatial 공간에 존재하고 edge에 의해 연결되어 있습니다. 이러한 구조적인 정보를 인코딩하기 위해서 Spatial Encoding이 필요합니다. 두 node의 spatial relation을 파악하기 위한 함수로서 본 논문에서는 최단 거리(distance of the shortest path)를 이용할 것을 제안하고 있습니다. 만약 두 node가 연결되어 있지 않다면 -1과 같은 특정 값을 부여해주면 됩니다.

결과값은 학습 가능한 스칼라이며, 이는 self-attention 모듈에서 bias 항으로 투입됩니다.

[A_{ij} = \frac{(h_i W_Q)(h_j W_K)^T}{\sqrt{d}} + b_{\phi(v_i, v_j)}]

보통의 GNN의 경우 receptive field가 직접적인 이웃에 국한되는 경우가 많은데 이러한 구조로 인해 우리는 좀 더 범위를 확장할 수 있게 됩니다. 이는 결국 가까이 있는 node에는 더욱 attention을 두고 멀리 있다면 중요도가 낮아지는 메커니즘인 것입니다. 다만 이러한 구조를 엄청나게 큰 그래프 데이터에서 활용하기 위해서는 좀 더 고민이 필요해 보입니다.

2.3. Edge Encoding in the Attention

분자 구조 그래프에서 원자의 쌍은 어떤 연결 유형을 설명하는 feature를 갖습니다. 이처럼 그래프의 특성에 따라 edge feature가 중요한 의미를 갖는 경우가 있습니다. 기존에는 edge feature가 node feature에 더해지거나 aggregation 과정에서 함께 쓰이는 경우가 많았습니다. 그러나 이러한 방법은 전체 그래프 상에서의 edge 정보를 충분히 활용한다고 볼 수 없습니다.

논문에서는 edge feature의 인코딩 품질을 개선하기 위해 새로운 방법을 제시합니다. 각 node 쌍 $(v_i, j_j)$ 가 있다고 할 때 가장 짧은 길(shortest path) $SP_{ij} = (e1, e2, …, e_N)$ 중 하나를 찾습니다. 그리고 이 사이에 존재하는 edge feature의 내적 값의 평균과 그 path에 해당하는 학습 가능한 임베딩 벡터를 계산합니다. 이렇게 계산된 값은 2.2에서 본 것과 유사하게 attention 모듈에서 bias 항으로 투입됩니다.

[A_{ij} = \frac{(h_i W_Q)(h_j W_K)^T}{\sqrt{d}} + b_{\phi(v_i, v_j)} + c_{ij}]

[c_{ij} = \frac{1}{N} \Sigma_{n=1}^N x_{e_n} (w_n^E)^T]

3. How Powerful is Graphormer?

이제 생각해보아야 할 부분은 이전 chapter에서 설명한 3가지의 주요 구조가 정말로 Graphomer를 powerful하게 만들어주느냐 입니다. 결론적으로 말하면 Graphomer는 그래프 데이터에서 expressive power를 증명하기 위해 비교 대상으로 사용되는 1-Weisfeiler-Lehman Test가 구분하기 실패하는 케이스에서도 그 차이를 구분할 수 있다고 논문에서는 설명합니다. 부록 A에 이에 대한 설명이 나와있으니 참고하시길 바랍니다.

실제 구현 할 때 Graphomer Layer는 Layer Normalization과 Multi-head Attention 그리고 Feed-forward Network로 구성됩니다. 여기에 추가적으로 Special Node가 존재하는데, VNode라고 불리는 이 노드는 모든 다른 노드와 연결을 갖는 일종의 super virtual node입니다. 이 node는 왜 존재할까요?

논문에서는 이 virtual node trick으로 인해 GNN의 성능을 향상시킬 수 있다고 이야기 합니다. 개념적으로 이 virtual node는 마치 READOUT 처럼 전체 그래프의 정보를 규합하여 각 node에게 전파(propagate)하는 역할을 수행한다고 합니다. 다만 주의해야 할 것이, 단순이 이러한 virtual node를 추가하는 데에서 그쳐버리면 이는 곧 over-smoothing 문제로 이어질 수 있기 때문에 주의가 필요합니다.

4. Conclusion

논문에서는 여러 실험에 대한 결과를 상세히 밝히고 있으며 이에 직접 논문을 참고하시길 바랍니다. 기본적으로 Graphormer는 다른 알고리즘에 비해 파라미터 수가 많고 무거운 편이나 여러 변형 버전도 존재하는 것으로 보입니다.

본 알고리즘은 흥미로운 장치와 구조를 통해 그래프 데이터에 Transformer를 더욱 효과적으로 적용할 수 있는 방법에 대해 알려주고 있습니다. 특히 Centrality Encoding의 경우 적용 범위가 상당히 넓을 것으로 보입니다. Spatial Encoding이나 Edge Encoding의 경우 현재 형태로는 엄청나게 큰 그래프 데이터에서는 직접적으로 적용하기 힘들 수는 있지만 적절한 샘플링 전략이 동반되면 좋은 효과를 발휘할 것으로 보입니다.

Comment  Read more

StyleCLIP 논문 리뷰(StyleCLIP - Text-Driven Manipulation of StyleGAN Imagery)

|

이 글에서는 2021년 3월 발표된 StyleCLIP 논문을 간략하게 정리한다.


CLIP

논문 링크: StyleCLIP: Text-Driven Manipulation of StyleGAN Imagery

Github: https://github.com/orpatashnik/StyleCLIP

  • 2021년 3월(Arxiv), ICCV 2021
  • Hebrew University of Jerusalem, Tel-Aviv University, Adobe Research
  • Or Patashnik, Zongze Wu, Eli Shechtman, Daniel Cohen-Or, Dani Lischinski

StyleGAN + CLIP이라고 보면 된다.


Abstract

다양한 도메인에서 고해상도의 이미지를 생성할 수 있는 StyleGAN의 능력에 힘입어 어떻게 StyleGAN의 latent space에 대해 이해하고 다룰 수 있는지 연구가 많았으나 사람이 직접 공들여 manipulation을 수행해야 했다.

이 논문에서는 총 3가지 방법을 제시하는데,

  • CLIP에다가 StyleGAN을 접목시켜 사용자가 제공한(user-provided) text prompt의 응답으로 input latent vector를 수정하여 CLIP based loss를 쓰는 최적화 기법을 소개한다.
  • 다음으로 주어진 input image에 대해 text-guided latent manipulation을 암시하는 latent mapper를 제안하여 더 빠르고 안정적인 manipulation을 가능하게 한다.
  • 마지막으로 text prompt를 StyleGAN의 style space로 보내는 입력과 무관한 mapping 방법을 제안하여, 이는 text-driven image manipulation이 가능하게 한다.

1. Introduction

GAN 이후 StyleGAN이 굉장히 유명하다. (이후 StyleGAN2과 StyleGAN-Ada 등도 나왔음) StyleGAN에서 manipulation을 특히 파고든 논문으로는 StyleRig, StyleFlow 등이 있다.

그러나 지금까지의 연구에서 control은 오직 (이미 존재하는) preset semantic 방향으로만 제한적으로 가능해서 창조적으로 혹은 상상력, 창작으로 만들었다고는 보기 어려웠다.

이 논문에서는 StyleGAN과 CLIP을 사용하여 이 문제를 해결해보고자 한다.

방법론으로 총 3가지를 제시한다. (초록과 같은 내용)

  1. Text-Guided latent optimization. CLIP 모델은 loss network로 사용된다. 이 방법은 제일 다목적인 방법이지만, 각 이미지에 최적화를 적용하는 데 분 단위의 시간이 걸린다.
  2. A latent residual mapper. 특정 text prompt에 학습된다. latent space에서 시작점이 주어지면(ex. manipulate할 이미지), mapper는 latent space에서 local step을 반환한다.
  3. mapping a text prompt into an input-agnostic (global) direction in StyleGAN’s style space. 말 그대로 StyleGAN의 style space에서 입력과 무관하게 global direction만큼 이동하는 방법인데, 이는 disentanglement 차원만큼이나 강력한 manipulation control을 제공한다.

2.1. Vision and Language

Joint representations

Vision + Language Multimodal 연구는 최근 활발히 진행되고 있다. BERT의 성공에 힘입어 이를 vision 분야에도 적용시키는 등 Transformer도 많이 사용되고 있다. CLIP 등.

Text-guided image generation and manipulation

특정 텍스트를 주고 이에 기반하여 이미지를 생성하거나 변화시키는 분야이며 GAN이 주축이다.

  • GAN, AttnGAN, StyleGAN
  • Dall-E, TediGAN 등

2.2. Latent Space Image Manipulation

많은 연구들은 image manipulation을 위해 사전학습된 generator의 latent space를 어떻게 다룰지를 탐구해 왔다.

대부분의 연구들이 $\mathcal{W}$나 $\mathcal{W}+$ space에서 image manipulation을 수행했으나, Wu et al.에서는 Style space $\mathcal{S}$에서 수행하는 것이 더 나은 disentanglement를 제공하는 것을 밝혔다.


3. StyleCLIP Text-Driven Manipulation

초록 및 서론에서 제시한 3가지 방법론에 대한 간단한 설명이 있다. 아래 표가 대략 어떤 방법인지 나타내 주고 있다.


4. Latent Optimization

제시한 방법론 중 첫 번째에 대한 내용이다.

StyleGAN의 $\mathcal{W+}$ space에 있는 이미지의 latent code가 주어지면 CLIP space에서 계산되는 loss를 최소화하는 간단한 latent optimization 방법이다. 최적화는 각 (source image, text prompte) 쌍에 대해 수행된다.
그래서 이 방법은 여러 곳에 사용될 수 있는 다목적성을 가지지만 매번 최적화를 해주는 시간이 필요하며(분 단위) contol하기 어렵다는 단점이 있다.

source latent code $w_s \in \mathcal{W}+$와 자연어 지시문 혹은 text prompt $t$가 주어지면 다음 최적화 문제를 푸는 것이다:

[\argmin_{w \in \mathcal{W}+} D_{\text{CLIP}}(G(w), t) + \lambda_{L2} \Vert w - w_s \Vert_2 + \lambda_{\text{ID}} \mathcal{L}_{\text{ID}}(w) \quad (1)]

  • $G$는 사전학습된 StyleGAN generator
  • $D_{\text{CLIP}}$는 CLIP embedding의 2개의 argument 사이의 cosine 거리이다.

입력 이미지의 유사도는 latent space의 $L_2$ distance에 의해 조절되며, identity loss는:

[\mathcal{L}_{\text{ID}}(w) = 1 - <R(G(w_s)), R(G(w))> \quad (2)]

  • $R$은 얼굴인식을 위해 사전학습된 ArcFace network
  • $<\cdot . \cdot >$는 cosine 유사도이다.

Gradient descent로 이 최적화 문제를 푼다. 목적함수는 $(1)$ 식을 쓴다. $G$는 고정(fixed)이다.

이 방법으로 수정한 이미지 예시는 아래와 같다. 최적화 과정은 200~300회 반복하였다.

이미지 아래의 숫자는 설명대로 $(\lambda_{\text{L2}}, \lambda_{\text{ID}})$이다.


5. Latent Mapper

위의 최적화 방법은 매 이미지마다 최적화를 수행하다보니 오래 걸려서 비실용적이다. 여기서 설명하는 2번째 방법은 특정 text prompt에 대한 mapping network만을 사전학습하고 이후 입력 이미지에 대해서는 빠른 추론을 가능하게 한다. 입력 latent vector는 3개의 모델(Course, Medium, Fine)로 들어가고 L2 loss를 적용, StyleGAN generator를 통과하여 최종적으로 이미지를 생성한다. Course-Medium-Fine은 StyleGAN의 것과 유사함을 알 수 있다.

입력 이미지의 latent code를 $w = (w_c, w_m, w_f)$라 하면 mapper는 다음과 같이 정의할 수 있다:

[M_t(w) = (M_t^c(w_c), M_t^m(w_m), M_t^f(w_f))]

Loss

CLIP loss는 mapper로 하여금 CLIP latent space에서 cosine 거리를 최소화하도록 한다.

[\mathcal{L}{\text{CLIP}}(w) = D{\text{CLIP}}(G(w + M_t(w)), t)]

$(2)$번 식의 ID loss를 같이 써서 identity를 보존한다.

전체 loss는 아래와 같다.

[\mathcal{L}(w) = \mathcal{L}{\text{CLIP}}(w) + \lambda{L2} \Vert M_t(w) \Vert_2 + \lambda_{\text{ID}} \mathcal{L}_{\text{ID}}(w) \quad (1)]

text prompt는 1가지 이상을 한번에 적용할 수도 있다.

첫번째 방법에 비하면 잘 나오기는 하지만, 어쩐지 다른 스타일이나 이미지에 적용해도 뭔가 비슷해보이는 이미지가 최종 생성되는 문제가 있다고 한다.


6. Global Directions

그래서 3번째 방법으로 이 문제를 해결하려 한다. 이 방법은 한 문장으로 설명하면 text prompt를 StyleGAN의 style space $\mathcal{S}$에 있는 하나의 global direction으로 mapping하는 방법이다.

Notation:

  • $s \in \mathcal{S}:=$ style code
  • $G(s):=s$에 연관되는 생성된 이미지

원하는 특성을 지시하는 text prompt가 주어지면 원하는 조작(manipulation) 방향 $\Delta s$를 찾아야 한다. 이때 $\Delta s$는 $G(s + \alpha \Delta s)$(즉, 조작을 가한 이미지)가 다른 특성을 별로 해치지 않으면서 원하는 특성을 포함하거나 증폭된 상태여야 한다. 조작의 정도는 $\alpha$로 정한다.

  • CLIP text encoder를 사용하여 CLIP의 언어-이미지 결합 임베딩 space 안의 vector $\Delta t$를 얻는다.
  • $\Delta t$를 $\mathcal{S}$ 안의 조작 방향 $\Delta s$로 mapping한다.
  • 안정적인 $\Delta t$는 자연어로부터 prompt emgineering을 통해 얻는다.
  • 연관되는 방향 $\Delta s$는 각 style channel의 원하는 특성과의 연관도를 평가하여 얻는다.

좀더 자세히 알아보자.

  • $\mathcal{I}:=$ CLIP의 joint embedding space 안의 이미지 임베딩의 manifold
  • $\mathcal{T}:=$ text 임베딩의 manifold

이 둘 간의 직접적인 mapping은 없다(이미지는 여러 텍스트로 표현할 수 있고, 반대로 한 텍스트 문장으로부터 여러 이미지를 생각할 수 있다).
CLIP을 학습하는 동안, 모든 임베딩은 unit norm으로 정규화되고, 따라서 임베딩의 방향은 semantic 정보만을 담게 된다. 잘 학습된 CLIP space의 영역에서는 $\mathcal{T}, \mathcal{I}$(의 원소)가 같은 조작 방향에 대해서 같은 방향으로 움직일 것이라고 기대할 수 있다(즉, 높은 cosine 유사도를 갖는다). 정규화 후에는 방향뿐 아니라 움직이는 거리도 거의 같을 것이다.

주어진 이미지 쌍 $G, G(s+\alpha \Delta s)$에 대해 그 $\mathcal{I}$의 임베딩을 각각 $i, i + \Delta i$라 하자. 그러면 CLIP space에서 두 이미지 간 차이는 $\Delta i$가 된다. 자연어 지시문 $\Delta t$가 주어지고 $\Delta t, \Delta i$의 등선성(collinearity)를 가정하면, 조작 방향 $\Delta s$를 $\mathcal{S}$의 각 channel과 방향 $\Delta i$간의 연관도를 측정하여 구할 수 있다.

From natural language to $\Delta t$

text embedding noise를 줄이기 위해 prompt emgineering을 사용한다: 같은 의미를 지니는 여러 문장을 text encoder에 넣은 뒤 그 embedding을 평균하는 방법이다.

예를 든어, ImageNet zero-shot 분류 문제를 생각하자.

80개의 문장 template이 사용되는데 대충 다음과 같이 생겼다.

  • “a bad photo of a {}”
  • “a cropped photo of the {}”
  • “a black and white photo of a {}”
  • “a painting of a {}”

추론할 때에는 ({}가) target class로 자동으로 대체되고 각 문장의 embedding을 평균하여 구하게 된다. 이 과정은 분류 성능을 3.5% 정도 향상시킨다.

$\mathcal{T}$에서 더 안정적인 방향을 얻기 위해 이와 비슷한 방법을 사용한다. 예를 들어 위에서 target class가 “car”이었다면 좀 더 특정한 style을 적용하기 위해 “a sports car”라는 텍스트를 쓰는 방식이다.

Channelwise relevance

이제 우리의 목표는 style space 조작 방향 $\Delta s$를 구성하는 것인데 이는 목표 방향 $\Delta t$와 등선성을 가지는 변화 $\Delta i$를 반환하는 것이다. 이를 위해 CLIP의 joint embedding space의 주어진 방향 $\Delta i$에 대한 $\mathcal{S}$의 각 channel의 연관도를 측정해야 한다.
style code $s \in \mathcal{S}$ 집합을 생성하고 $c$ channel에 양 또는 음의 값을 더해 약간의 perturbation을 준다. 이미지의 결과 쌍 간의 CLIP space direction을 $\Delta i_c$라 하면, channel $c$와 목표 조작방향 사이의 연관도는 다음과 같다:

[R_c(\Delta i) = \mathbb{E}_{s \in \mathcal{S}} \lbrace \Delta i_c \cdot \Delta i \rbrace]

즉 $\Delta i_c$를 $\Delta i$에 mean projection한 것과 같다.

평균을 얻기 위해 100개의 이미지 쌍에 대해 계산을 수행했고 각 이미지 쌍은 $G(s \pm \alpha \Delta s_c$)로 얻는다.

  • $\Delta s_c$는 channel $c$를 제외하고 0인 벡터이다. channel $c$에 대해서는 그 표준편차만큼의 값을 갖는다.

그런데 여기서 값을 바꿀 때 원하는 특성 외에 다른 특성이 변화되는 정도를 제한할 필요가 있다(예로, 머리카락 색만 백발로 바꾸려고 하는데, 얼굴까지 노인이 되는 것을 방지). 그래서 각 channel별로 어떤 threshold 값 $\beta$를 설정한다.

[\Delta s = \Biggl{ \begin{matrix} \Delta i_c \cdot \Delta i \quad \text{if} \vert \Delta i_c \cdot \Delta i \vert \ge \beta \ 0 \qquad \text{otherwise} \end{matrix}]

$\alpha, \beta$를 변화시키면서 이미지를 생성한 결과를 아래에서 볼 수 있다. $\beta$가 커질수록 일부의 특징만이 바뀌는 것을 볼 수 있다.

더 많은 비교 결과..


7. Comparisons and Evaluation

TediGAN 등 다른 모델과 비교한 결과이다.

아래는 text-driven 얼굴 이미지 조작 방법을 비교한 결과를 나타낸다. 이 논문에서 제안한 첫번째 방법인 최적화 방법은 시간도 오래 걸리고 hyper-parameter에 민감한 등의 이유로 생략했다. 트럼프 전 대통령으로 얼굴을 바꾸거나, 머리를 모히칸 스타일로, 혹은 주름 없애기 등을 적용한 결과가 꽤 흥미롭다.


8. Conclusions

Comment  Read more