* 이 논문은 기존의 Convolution filter의 곱 연산을 가산(Adder)로 대체하여 연산량을 대폭 줄였으나 정확도는 유지하였다.

* 2019년 Computer Vision and Pattern Recognition 저널에 등재되었다.

* 21년 2월 23일 기준 26회 인용되었다.

 


1. Introduce

 기존의 대부분의 Convolution Networks는 입력과 Convolution Filter 사이의 곱 연산을 통해 Weight를 업데이트 한다. 하지만 이 방식은 많은 GPU 메모리를 소모할 뿐만 아니라 많은 전력을 소비하기 때문에 휴대용 장비에서 사용하기 어렵다. 이를 보완한 MobileNet 등이 제안되어 왔지만, 곱 연산 때문에 많은 연산량이 필요하다는 점은 변하지 않았다.

 이 논문에서 제안한 Adder를 활용한 네트워크는 처음 나온 아이디어가 아니다. 이진화를 활용한 binarized filter 등을 활용한 binary adder 기법들이 소개되어 왔으며, 나름 준수한 성능을 보였다. 하지만 이진화 아이디어는 기존 네트워크의 mAP를 보존할 수 없고, 수렴 속도와 학습률이 저하되는 등 훈련 절차가 안정적이지 않다. 또한, 연구원들은 기존 Convolution Filter가 익숙하고, 연산을 빠르게 만드는 기법을 도입하는 것에 익숙하다.


2. 곱셈을 포함하지 않은 네트워크

위의 그림을 보면 AdderNet과 기존 CNN과의 차별점을 쉽게 파악할 수 있다. CNN의 경우 각도로서 Class를 분류하지만, AdderNet은 군집화 된 점의 좌표를 활용하여 클래스를 분류한다. 그 이유는 CNN은 필터와 입력 간의 cross correlation을 계산하는데, 그 값들이 정규화되면 컨볼루젼 연산은 두 벡터 간의 코사인 거리를 계산하는 것과 같다. 이것이 각도로서 Classification을 하는 이유이다. 반면에 AdderNets이 $l_1 norm$을 활용하여 class를 분류하기 때문에 각각 다른 중심을 가진 포인트로 군집화 된다. 이 Visualize 결과를 봤을 때, $l_1$ distance는 심층 신경망에서 필터와 입력값 사이의 유사도로서 사용할 수 있다.

 

기존의 컨볼루젼 필터 F는 $F \in \mathcal{R}^{d \times d \times c_{in} \times c_{out}}$로 고려되고, 입력값은 $X \in \mathcal{R}^{H \times W \times c_{in}}$로 나타낼 수 있다. 여기서 각각 d는 필터의 커널 사이즈와 같고, $c_{in}$은 입력 채널, $c_{out}$은 출력 채널을 의미한다. H와 W는 각각 입력의 특성 값이다. 이를 활용하여 기존의 컨볼루젼의 연산은 다음과 같이 표현할 수 있다.

 

(Eq.1) $$ Y(m,n,t) = \sum_{i=0}^{d} \sum_{j=0}^{d} \sum_{k=0}^{c_{in}}S(X(m+i,n+j,k), F(i,j,k,t)) $$

 

S는 사전에 정의된 유사도 측정 함수이며, 이 방식을 활용한 대부분의 네트워크는 덧셈보다 연산량이 많은 곱셈을 사용한다.

 

2.1. Adder Networks

저자는 위에서 함수 S를 제거하고 아래와 같은 수식을 정의하였다.

 

(Eq.2) $$ Y(m,n,t) = -\sum_{i=0}^{d} \sum_{j=0}^{d} \sum_{k=0}^{c_{in}}|(X(m+i,n+j,k) - F(i,j,k,t))|$$

 

덧셈은 $l_1$ distance을 측정하기 위한 방법으로서 도입되었다. 뺄셈 역시 보수 코드를 활용하여 덧셈으로 통합된다. $l_1$ distance는 효율적으로 필터와 피쳐 간의 유사도를 계산할 수 있게 한다. 두 가지 모두 유사도를 계산할 수 있는 식이며, 출력값에 약간의 차이를 보인다. Conv Filter의 출력은 양수 또는 음수일 수 있지만, Adder의 출력은 항상 음수이다. 이 부분은 Batch Normalization Layer를 활용하여 정규화 함으로서 문제를 해결한다. 이 정규화 계층에도 곱셈이 포함되어 있지만 그 연산량은 Conv Layer에 비하면 한참 낮다. 결국 Convolution layer를 Adder layer로 대체함으로서 AddNets을 구성할 수 있다.

 

2.2. 최적화

신경망은 역전파를 사용하여 필터의 기울기를 계산하고 확률적 기울기 하강법(Stochastic gradient descent method)을 사용하여 매개변수를 업데이트한다. CNN에서 필터 F에 대한 출력 특성 Y의 편미분은 다음과 같이 계산된다.

 

(Eq.3) $$ \frac{\partial Y(m,n,t)}{\partial F(i,j,k,t)} = X(m+i,n+j,k), (i \in [m, m+d], j \in [n, n+d]) $$

 

AdderNets에서도 역전파할 기울기가 필요하기 때문에 SGD에서 계산된 기울기 값을 활용한다. 여기서 F에 대한 Y의 편미분은 다음과 같이 계산할 수 있다.

 

(Eq.4) $$ \frac{\partial Y(m,n,t)}{\partial F(i,j,k,t)} = sgn(X(m+i,n+j,k)-F(i,j,k,t)) $$

 

sgn은 부호 함수를 뜻하기 때문에 기울기의 값으로 오직 +1, 0, -1만을 취할 수 있다. 그러나 위의 signSGD는 대부분의 경우 가장 가파른 기울기를 가지는 하강 방향을 취하지 않으며 차원이 커질 수록 악화되는 모습을 보인다. 즉, signSGD는 신경망 최적화에 적합하지 않다고 할 수 있다. 이러한 단점을 고려한 상태에서 여기서 $l_2-norm$을 활용한다고 생각해보자.

 

(Eq.5) $$ \frac{\partial Y(m,n,t)}{\partial F(i,j,k,t)} = X(m+i,n+j,k)-F(i,j,k,t) $$

 

위의 수식은 기존 signSGD과 연결시킬 수 있는 업데이트 된 $l_2-norm$ 기울기이다. 이 식이 결국 저자가 주장한 핵심 수식이며, 이후부턴 FPG(Full-precision Gradient)라고 부르겠다.

 

필터의 기울기 외에도 입력 피쳐인 X 역시 매개변수 업데이트에 중요한 역할을 한다. 레이어 $i$의 필터와 입력을 $F_i, X_i$라고 했을 때, $F_i$ 자체의 기울기에만 영향을 주는 $\frac{\partial Y}{\partial F_i}$와 달리 $\frac{\partial Y}{\partial X_i}$는 기울기 연쇄법칙에 따라 $i$ 이전 레이어의 기울기에도 영향을 줄 수 있다. 이 때 위에서 제시한 FPG를 활용하여 기울기 역전파를 수행하려고 보니, 계산된 기울기 값이 [-1,1] 범위를 넘기 때문에 기울기 폭파(Gradient exploding) 현상이 발생할 수 있다는 문제가 발생한다. 이를 아래의 Hard Tanh 함수를 통해 해결할 수 있다.


(Eq.6) $$ \frac{\partial Y(m,n,t)}{\partial F(i,j,k,t)} = HT(F(i,j,k,t)-X(m+i,n+j,k)) $$

여기서 HT함수는 다음과 같다.


(Eq.7) $$ \begin{align} HT(x) = \begin{cases} x & if & -1 < x< 1\\ 1 & & x > 1 \\ -1 & & x < -1 \end{cases} \end{align} $$

 

2.3. 적응형 Learning rate scaling

기존 CNN에서 가중치와 입력 피쳐가 독립적이고 정규 분포에 따라 동일하게 분포한다고 가정하면 출력의 분산은 다음과 같이 계산할 수 있다.

(Eq.8) $$ \begin{align} Var[Y_{CNN}] &= \sum_{i=0}^{d} \sum_{j=0}^{d} \sum_{k=0}^{c_{in}} Var[X \times F] \\ &=d^2c_{in}Var[X]Var[F] \end{align} $$

가중치의 분산이 $Var[F]=\frac{1}{d^2c_{in}}$가 되면 출력의 분산이 입력의 분산과 일치하여 신경망의 정보 전달 흐름에 도움이 된다. 이와 대조적으로, F와 X가 정규분포를 따를 때 AdderNets의 출력의 분산은 다음과 같이 근사할 수 있다.

(Eq.9) $$ \begin{align} Var[Y_{AdderNet}] &= \sum_{i=0}^{d} \sum_{j=0}^{d} \sum_{k=0}^{c_{in}} Var[|X - F]] \\ &=\sqrt{\frac{2}{\pi}}d^2c_{in}(Var[X] + Var[F]) \end{align} $$

일반적으로 Var[F]은 작은 값(CNN에선 $10^{-3}$ 또는 $10^{-4}$)을 가지므로 소수의 곱셈을 취하는 CNN에서의 가중치의 분산은 작아진다. 하지만 덧셈 연산을 활용하는 AdderNes에서는 대부분 CNN 대비 훨씬 더 큰 분산을 취하게 된다.

다음으로 AdderNets이 가지는 더 큰 분산의 영향을 알아보자. 활성화 함수의 효율을 높이기 위해 가산기 계층 이후에 배치 정규화 레이어를 추가한다. 미니배치 $B = \{x_1, …, x_m\}$에 대한 입력 x가 주어졌을 때 배치 정규화 계층은 다음과 같이 표현할 수 있다.

(Eq.10) $$ y = \gamma \frac{x - \mu_\mathcal{B}}{\sigma_\mathcal{B}} + \beta $$

여기서 $\gamma$와 $\beta$는 학습되는 파라미터이고, $\mu_\mathcal{B} = \frac{1}{m} \sum_{i}x_i$와 $\sigma^2_\mathcal{B} = \frac{1}{m} \sum_{i} (x_i - \mu_\mathcal{B})^2$은 각각 미니배치의 평균과 분산을 표현한 수식이다. $x$에 대한 손실 $\ell$의 기울기는 다음과 같이 계산된다.

(Eq.11) $$ \frac{\partial \ell}{\partial x_i} = \sum_{j=1}^{m} \frac{\gamma}{m^2\sigma_\mathcal{B}}{\frac{\partial \ell}{\partial y_i} - \frac{\partial \ell}{\partial y_j}[1 + \frac{(x_i-x_j)(x_j-\mu_\mathcal{B})}{\sigma_\mathcal{B}}]} $$

(Eq.9)에서 더 큰 분산 $Var[Y]=\sigma_\mathcal{B}$가 주어질수록 AdderNets의 X에 대한 기울기의 크기는 (Eq.11)에 따른 CNN에서의 경우보다 훨씬 작을 것이며, 연쇄법칙에 의해 AdderNets의 필터의 기울기의 크기가 감소할 것이다.(분산이 커지는 것은 데이터가 넓게 펼쳐진 정규 그래프를 이룬다는 말이며, 결국 기울기가 작아지는 것과 같다.)

 

 

위의 표는 MNIST 데이터 세트에 CNN과 AdderNets을 활용하여 LeNet-5-BN에서 $||F||_2$의 기울기의 $\ell_2$-norm을 정리한 표이다. BN은 배치 정규화 계층을 추가했다는 뜻이며, 첫번째 iteration에서의 결과를 토대로 작성되었다. 이 표에서 볼 수 있듯이 AdderNets의 필터의 기울기 값이 CNN의 경우보다 훨씬 작기 때문에 업데이트 속도가 느리다. 이를 보완하기 위해 더 큰 학습률을 채택하면 될 듯 싶지만, 표에서 볼 수 있듯이 기울기의 norm 값은 계층마다 크게 달라지는 모습을 보이고, 이에 따라 필터의 특성을 고려한 학습률 선택이 필요하단걸 알 수 있다. 때문에 제안된 Adaptive Learning Rate(ALR)는 아래와 같다.

(Eq.12) $$ \Delta F_l = \gamma \times \alpha_l \times \Delta L(F_l) $$

여기서 $\gamma$는 Local 학습률(가산기와 BN에 적용되는 값과 같음)이고, $\Delta L(F_l)$은 레이어 $l$의 필터의 기울기이며, $\alpha_l$은 Local 학습률(해당 레이어에만 적용)이다. AdderNets에서 필터는 입력과의 차이를 계산하므로 그 크기는 입력에서 의미있는 정보를 추출하는 데에 더 적합하다. 배치 정규화 레이어로 인해 서로 다른 계층의 입력 크기가 정규화되며, 서로 다른 계층의 필터 크기에 대한 정규화가 이루어진다. 따라서 Local 학습률은 다음과 같이 정의할 수 있다.

(Eq.13) $$ \alpha_l = \frac{\eta \sqrt{k}}{||\Delta L(F_l)||_2} $$

k는 $\ell_2$-norm을 평균화하기 위해 사용되는 $F_l$의 요소 수를 나타내며, $\eta$는 가산기 필터의 학습률을 제어하는 하이퍼 파라미터이다. 제안된 Adaptive Learning Rate 스케일링을 활용하면 서로 다른 계층의 가산기 필터를 거의 동일한 단계로 업데이트 할 수 있다.

 

정리하면 알고리즘은 다음과 같다.

- Algoritm is repeated for (convergence):

  1. Input: 초기화 된 가산 네트워크 $\mathcal{N}$, 트레이닝 세트 $\mathcal{X}$, 해당하는 라벨 $\mathcal{Y}$, global 학습률 $\gamma$, 하이퍼 파라미터 $\eta$
    1. $\mathcal{X}$과 $\mathcal{Y}$에서 무작위로 배치 {(x, y)}를 뽑는다.
    2. 미니배치에 AdderNet $\mathcal{N}$을 적용한다: x → $\mathcal{N}(x)$
    3. Eq. 5와 6을 사용하여가산 필터에 대한 FPG($\frac{\partial Y}{\partial F}, \frac{\partial Y}{\partial X}$)를 계산한다.
    4. 체인 룰을 활용하여 $\mathcal{N}$에서 매개변수의 기울기를 생성한다.
    5. Eq.13에 따라 각 가산기 계층에 대한 적응 학습률 $\alpha_l$을 계산한다.
    6. 확률적 경사 하법(SGDM)을 활용하여 N의 매개변수를 업데이트 한다.
  2. Output: 곱셈이 포함되지 않고 충분히 훈련된 가산기 네트워크 $\mathcal{N}$

 


3. Experiment

이 논문에선 MNIST, CIFAR 및 ImageNet을 포함한 여러 벤치마크 데이터셋에서 AdderNet의 효과를 검증하기 위한 실험을 구현하였다. 이와 관련된 Ablation study(머신러닝에서 구성 레이어를 제거하였을 때의 전체 성능에 미치는 영향에 대한 통찰을 얻기 위한 실험) 및 특징 시각화가 이 섹션에 삽입되었다. 실험은 Pytorch 환경에서 NVIDIA Tesla V100 GPU를 활용하여 진행되었다.

3.1. Experiment on CIFAR

위의 표는 32x32 RGB 컬러 이미지로 구성된 CIFAR-10와 CIFAR-100 데이터셋의 Classification 결과이다. 초기 학습률은 0.1로 설정하였으며, polynomial learning rate schedule(keras 내부 함수)을 따랐다. 모델은 400 epochs 동안 256개의 배치 사이즈로 나뉘어 훈련되었다. AdderNets은 곱셈없이 CNN과 거의 비슷한 결과를 달성했지만 XNOR 연산을 활용한 BNN(Binary Neural Network)의 경우는 모델 크기는 오히려 AdderNets보다도 작지만 정확도가 훨씬 떨어진다. ResNet20에서 CNN이 역시 가장 좋은 결과를 보이지만 곱셈이 많이 포함되어 연산량이 가장 많으며, ResNet32에서는 AdderNets와 거의 성능 차이가 없는 모습을 보인다.

 

3.2. Experiment on ImageNet

224x224 RGB걸러의 이미지로 구성된 ImageNet의 데이터셋에 대한 실험 결과이다. ResNet-18을 사용하여 평가되었으며, 코사인 학습률 감소법을 활용하여 150 epochs 동안 훈련하였다. 네트워크들은 NAG(Nesterov Accelerated Gradient)를 사용하여 최적화 되었으며 가중치 감소와 모멘텀은 각각 $10^{-4}$와 0.9로 설정되었다. 배치 사이즈는 256을 사용하였고, 나머지 하이퍼 파라미터들은 CIFAR 데이터셋 실험과 같게 적용되었다. 실험 결과 ResNet-18에선 BNN은 낮은 정확도를 보였으나, 상대적으로 AdderNets은 높은 정확도를 보였으며, ResNet-50으로 구성된 네트워크에선 CNN과 비슷한 성능을 냄을 볼 수 있다.

 

3.3. Visualization Results

3.3.1. Filters

필터를 볼 때 AdderNets과 CNN의 유사성을 볼 수 있는데, LeNet-BN 네트워크 필터를 시각화한 위의 사진에서 AdderNets과 CNN은 다른 metric을 사용함에도 필터의 패턴이 비슷한 것을 볼 수 있다. 결국, 곱셈없이 덧셈으로만 저비용으로 고효율을 낼 수 있다.

 

3.3.2. weights

 

AdderNets(좌측)과 CNN(우측)에 대한 가중치 히스토그램

위의 그림에서, AdderNets은 Laplace 분포에 가깝고 CNN은 가우시안 분포에 가까워 보인다. 실제로 $\ell_1$-norm은 Laplace 분포를 따르고, $\ell_2$-norm은 Gaussian 분포를 따른다.

 

3.4. Ablation study

이 섹션에선 가산 필터를 사용하여 AdderNets의 여러 계층을 처리하기 위한 적응형 학습률 스케일링을 설계하는 과정을 설명하였다. 먼저 학습률을 변경하지 않았을 때, LeNet-5-BN을 훈련시키고 FPG와 Sine Gradient를 사용하여 54.91% 및 29.26의 정확도를 얻었다. 기울기가 매우 작기 때문에 네트워크를 거의 훈련할 수 없었으며, 학습률을 상향할 필요가 있었다. 가산기 필터의 학습률을 100만큼 증가시키고 FPG를 사용하여, 풀 [10, 50, 100, 200, 500]의 다른 값과 비교하며 최고의 성능을 달성할 수 있었다. 아래 그림에서 적응형 학습률(Adaptive Learning Rate, 이하 ALR) 및 증가된 학습률(Increased Leraning Rate, 이하 ILR)을 사용하는 AdderNets은 Sign Gradient를 활용하여 97.99% 및 97.72%의 정확도를 달성하였지만 CNN의 정확도(99.40%)엔 미치지 못했다. AdderNets에서 ILR을 활용한 AdderNets은 FPG를 사용하였을 때 98.99%의 정확도를 달성하였으며, ALR을 활용했을 때는 99.40%의 정확도를 달성하였다. 즉, ALR이 더욱 효과적이었다.


4. Conclusions

이 논문에서 얻을 수 있는 것은 연산량이 많은 곱셈 방식을 가산기로 대체 할 수 있다는 가능성이다. 실제로 논문에선 가산기를 활용한 CNN의 성능과 유사한 성능에 도달하였으며 Full Precision Gradient 기법을 제안하였다. 특히, Adaptive Learning Rate를 도입하여 FPG의 문제점을 해결한 부분 역시 인상적이었다. 연산량을 줄여 알고리즘의 처리속도를 빠르게 할 수 있다면, 기존 FPS와 mAP가 반비례하는 성질을 해소하여 실시간 처리가 필요한(특히 자율주행) 분야에 큰 도움이 될 수 있을것이라 생각한다. 하지만 실험에서 사용한 이미지들의 크기가 작은 것으로 보아 큰 사이즈의 이미지를 처리하는 RCNN류 등의 알고리즘에도 성능 저하 없이 적용할 수 있는지는 검증이 필요하다.

5. Reference

Chen, Hanting, et al. "AdderNet: Do we really need multiplications in deep learning?." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020.

 

 

 

* 이 논문에서 주장하는 DIoU/CIoU는 각각 Distance-IoU/Complete-IoU의 줄임말이며, 바로 직전에 리뷰했던 GIoU의 아이디어에서 한 단계 더 발전한 논문이다.

* 중국의 텐진 대학에서 발표한 논문이며, 현재 21년 2월 18일 기준 96회의 인용수를 기록하였다.


1. Introduce

- 이전에 말했듯이 지금까지 대부분의 논문은 n-norm 손실을 활용해왔고, GIoU 논문에서는 이를 IoU로 대체하는 방식으로 기존 딥러닝 네트워크 성능을 향상시켰다.

(Generalized Intersection over Union: A Metric and A Loss for Bounding BoxRegression(GIoU) 참고)

- 하지만 이 GIoU는 수렴 속도가 느리고 부정확한 회귀를 한다는 문제점을 여전히 가지고 있다. 저자는 이를 해결하기 위해 DIoU를 제시한다.

GIoU의 수렴 과정

- 그림은 GIoU의 수렴 과정을 시각화 한 자료이며 검은 박스가 첫 Detection, 초록 박스가 수렴해야 할 Ground Truth, 파란 박스가 이전 과정에서 수렴한 박스(훈련 중인 박스)를 의미한다. 그림에서 볼 수 있듯이 GIoU의 수렴 속도를 느리게 하는 주요 원인은 박스의 수렴 방식에 있다. 박스는 Ground Truth로 이동하는 모습이 아니라, 박스를 키워 Ground Truth와 겹쳐진 후에 Ground Truth와 완전히 겹쳐지는 과정을 거친다. 여기서 박스의 위치와 스케일 수렴이 따로 이루어진다고 생각할 수 있다.(박스의 크기가 바뀌고 GT와 겹쳐지기까지의 과정이 Location 수렴이라고 생각하면 겹쳐진 후 박스의 크기와 중심을 GT에 맞추는 과정이 Scale 수렴이라고 볼 수 있다.)

DIoU의 수렴 과정

- 하지만 DIoU의 경우 박스 간의 거리(중심점 간의 거리) 역시 파라미터로 도입하여 Scale의 변화가 크지 않고 상대적으로 빠르게 Ground Truth와 겹쳐지는 모습을 보인다. GIoU의 경우 400회에도 완전히 수렴하지 못했지만, DIoU는 120회만에 BBOX가 수렴한 모습을 볼 수 있다.

케이스별 IoU/GIoU/DIoU 비교

- 위의 그림이 수렴 속도를 느리게 하는 가장 큰 원인인데, 박스 두 개가 겹쳐있는 경우엔 GIoU에서 도입한 C 영역은 A와 B의 합집합의 크기와 같아지고, 결국 기존 IoU와 같은 값을 갖는다. 즉, 박스가 떨어져 있는 경우에 집중했던 GIoU는 박스가 겹쳐있는 경우까지는 고려하지 못한 방식이다.

- 이 논문에서는 중심점 간의 거리를 파라미터로 도입한 DIoU를 사용하였고, 위의 그림에서도 각각 다른 값을 갖는 모습을 보여준다.(여기서 세 번째 그림에서 DIoU 역시 완전히 수렴하지 않았음에도 IoU와 같아지는 문제를 보이는데 이는 뒤에 나올 CIoU로 해결이 가능하다.)


2. Related work

2.1 IoU와 GIoU의 Loss 분석

- 원래는 IoU의 손실과 원래는 IoU의 손실과 GIoU의 손실의 한계를 분석하는 것이 필요하다. 그러나 회귀 과정에선 다양한 다른 거리, 척도, 종횡비 등의 요소가 반영된다. 이러한 변인이 통제되지 않고 포괄적이지 않은 벤치마크의 회귀 과정의 경우, Detection 결과에서 BBOX 회귀 절차를 분석하는 것은 매우 어렵다.
이를 위해 저자는 회귀 사례를 종합적으로 고려하여 주어진 손실 함수의 문제점을 쉽게 분석할 수 있는 시뮬레이션 실험을 수행하였다.

 

2.2 Simulation

Simulation 구조, 1,715,000개의 시나리오가 존재

-이 실험에선 그림과 같이 거리, 스케일, 종횡비를 모두 고려하여 BBOX 간의 관계를 다룬다. 위의 그림을 참고하면 이해가 편하다.

 

〈Simulation 환경 구성〉


  1. 타겟 BBOX는 7개의 비율(1:4, 1:3, 1:2, 1:1, 2:1, 3:1, 4:1)을 갖고 넓이가 1인 앵커 박스를 가진다.
  2. 7개의 타겟 박스의 중심점은 (10,10)에 고정된다.
  3-1 거리: 앵커 박스는 5,000개의 지점에 균일하게 흩어져 있다.  
  3-2 배율: 각 점마다 존재하는 앵커 박스의 넓이는 0.5, 0.67, 0.75, 1, 1.33, 1.5, 2로 설정된다.  
  3-3 종횡비: 특정 점 및 배율에 대해 7가지의 종횡비를 사용한다.(이는 타겟 박스와 같다)  
  4. 모든 5,000x7x7개의 앵커 박스는 loss function에 의해 각각의 타겟 박스에 딱 맞도록 이동한다.

 요약하면, 시뮬레이션에는 1,715,000(7x7x7x5,000)개의 회귀 시나리오가 있다고 할 수 있다. 주어진 손실 함수 $L$에 의해 각각의 케이스에서 경사하강법(Gradient decent Algorithm) BBOX 회귀를 시뮬레이션 할 수 있다.

 

$B^t_i = B^{t-1}_i + \eta (2 - IoU^{t-1}_i)\nabla B^{t-1}_i$

 

 예측된 박스 \(B^t_i\)에서 $t$는 반복 횟수를 뜻하고, $\nabla B%{t-1}_i$는 $t-1$번째에 대한 기울기 손실을 의미하며 $\eta$는 step을 의미한다. 여기서 주목할만한 점은 $2 - IOU^{t-1}_i$를 기울기에 곱하여 수렴 속도를 더 빠르게 했다는 점이다.

 BBOX 회귀는 $l_1-norm$에 의해 평가되며, 각각의 손실 함수를 사용한 시뮬레이션은 t=200까지 진행되었으며, error 그래프(Loss의 수렴 결과)는 위의 그림과 같다.

 

- 이 그림을 보면 IoU는 박스가 겹친 경우에만 수렴하는 모습을, GIoU는 모두 수렴은 하지만 그 속도가 느린 모습을 보인다. 하지만 DIoU의 경우는 빠르게 수렴하는 것을 볼 수 있다.

- 실제로 GIoU의 경우 $|C - A \cup B|$를 패널티로 활용하지만 그 넓이가 가끔 너무 작거나 0인 경우가 존재한다. 이런 케이스에선 GIoU의 영향력은 낮거나 없는 것과 같기 떄문에 수렴 속도가 매우 느린 모습을 보인다.

- 저자는 이 수렴 속도를 증가시키기 위하여 두 상자 간의 거리 값도 패널티로 주는 방향으로 설계된 DIoU를 제시하였고, 실제로 더 정확하고 빠른 회귀를 보였다.


3. 제안된 알고리즘(DIoU/CIoU)

3.1 Distance IoU

논문에서 제시한 DIoU 손실함수의 구조는 아래와 같다.

 

$\mathcal{L} = 1 - IoU + \mathcal{R}(B, B^{gt})$

 

- 여기서 1 - IoU 부분은 기존의 IoU를 활용한 손실 함수와 동일하고, $\mathcal{R}$로 묶인 항은 새롭게 정의된 패널티항으로 볼 수 있다. 이 부분은 GIoU와 DIoU, CIoU가 모두 다른데, DIoU의 경우, 아래와 같이 정의할 수 있다.

 

$\mathcal{L}_{DIoU} = 1 - IoU + \frac{\rho^2(b, b^{gt})}{c^2}$

 

- $\rho$는 유클리드 거리를 뜻하고, $b$와 $b^{gt}$는 BBOX들의 중점이다. c는 GIoU에서 정의한 두 박스를 최소의 크기로 감쌀 수 있는 C박스의 대각선 거리이다.(아래 그림 참고)

GT 박스와 Deteced 박스, 그리고 C박스

 

· DIoU의 특징은 다음과 같다.

  1. 1. 스케일에 영향을 받지 않는다.
  2. 2. GIoU와 비슷하게 박스가 겹치지 않아도 겹치도록 수렴한다.
  3. 3. 두 박스가 완전히 겹쳤을 때는 $\mathcal{L}_{IoU} = \mathcal{L}_{GIoU} = \mathcal{L}_{DIoU} = 0$이고, 두 박스가 완전히 겹치지 않았을 때는 $\mathcal{L}_{GIoU} = \mathcal{L}_{DIoU} = 2$이다.
  4. 4. 하지만 DIoU 손실은 박스가 겹치도록 빠르게 수렴하는 모습을 보인다.
  5. 5. $|C - A \cup B| = 0$인 상황일 때도 GIoU와 달리 DIoU는 빠르게 수렴할 수 있다.

3.2 Complete IoU

그렇다면 Complete IoU(CIoU)란 무엇일까? CIoU는 아래와 같은 식으로 표현된다.

 

$\mathcal{R}_{CIoU} = \frac{\rho^2(b,b^{gt})}{c^2} + \alpha\upsilon$

 

$\alpha$는 trade-off 파라미터이고, $\upsilon$은 가로 세로의 비율의 연속성을 나타내는 파라미터이다.

 

$$ \upsilon = \frac{4}{\pi^2}(\arctan{\frac{\omega^{gt}}{h^{gt}}} - \arctan{\frac{\omega}{h}})^2 $$

 

또한, $\alpha$는 다음과 같이 정의되며 겹치는 영역의 값이 높은 우선순위를 갖게 하여, 겹치지 않았을 때 더 빠른 수렴을 가능하게 한다.

 

$\alpha = \frac{\upsilon}{(1 - IoU) + \upsilon}$,

 

최종적으로, 아래의 CIoU loss의 최적화 과정에서 활용되는 $h$와 $\omega$에 대한 $\upsilon$의 기울기 항을 제외하고는 DIoU와 같다.

$\frac{\partial\upsilon}{\partial\omega} = \frac{8}{\pi^2}(arctan\frac{\omega^{gt}}{h^{gt}} - arctan\frac{\omega}{h}) \times \frac{h}{\omega^2 + h^2}$,

 

$\frac{\partial\upsilon}{\partial h} = -\frac{8}{\pi^2}(arctan\frac{\omega^{gt}}{h^{gt}} - arctan\frac{\omega}{h}) \times \frac{\omega}{\omega^2 + h^2}$

 

여기서 $\omega$와 $h$ 값이 0과 1사이에 존재 할 때는 $\omega^2 + h^2$ 값이 너무 작아져서 기울기 폭발(gradient explosion)이 발생할 수 있다. 이를 방지하기 위하여 $\frac{1}{\omega^2 + h^2} = 1$로 대체하여 간단히 위험 요소를 제거할 수 있다. 이 작업을 거치더라도 기울기 수렴 방향은 불변한다.


3.3 Distance IoU를 접목시킨 Non-Maximum Suppression

- 이 아이디어는 NMS 알고리즘에도 접목시킬 수 있는데, 기존의 방식은 IoU를 활용하기 때문에 Occlusion(가림)이 발생한 경우에 올바른 박스가 삭제되는 문제가 발생한다. 이에 DIoU를 병합하는 것은 굉장히 간단하다. 기존 IoU로 점수를 계산하던 부분에 $\mathcal{R}_{DIoU}$항을 추가하면 되기 때문이다.

$$ s_i = \begin{cases} s_i, IoU - \mathcal{R}_{DIoU}(\mathcal{M},B_i) \lt \epsilon \\ 0, IoU - \mathcal{R}_{DIoU}(\mathcal{M},B_i) \geq \epsilon\\ \end{cases}\ $$

 

- $\epsilon$은 임계값이며, $s_i$는 분류 점수이다. 중심 거리가 멀면서 IoU가 큰 경우에는 다른 물체를 감지하였을 가능성이 있기 때문에 삭제하지 않는다. 이 방식은 코드로도 간단히 구현할 수 있다는 장점 역시 가지고 있다.


관련 코드

[Loss function] GIoU / DIoU / CIoU Matlab 코드


4. Reference

Zheng, Zhaohui, et al. "Distance-IoU loss: Faster and better learning for bounding box regression." Proceedings of the AAAI Conference on Artificial Intelligence. Vol. 34. No. 07. 2020.

0. Before review

이 논문은 Loss function의 파라미터 자체를 IoU로 변경하여 기존 딥러닝 네트워크의 추가적인 성능 향상을 목표로 한 논문이다. 19년 CVPR에서 소개된 논문임에도 불구하고 현재(21년 2월 17일) 기준 인용수가 366회에 달할 정도로 주목을 받은 논문이라고 할 수 있다.

 

논문에 대한 리뷰에 앞서, matlab에서 직접 작성한 GIOU를 계산하기 위한 코드를 첨부한다.

function [giou,iou] = gIoU(bboxes1, bboxes2)
    % Reference : Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression
    % Calculate generalized Intersection over Union
    
    % define point of first bounding boxes.
    x1p = bboxes1(:,1);
    x2p = bboxes1(:,1) + bboxes1(:,3);
    y1p = bboxes1(:,2);
    y2p = bboxes1(:,2) + bboxes1(:,4);
    
    % define point of second bounding boxes.
    x1g = bboxes2(:,1);
    x2g = bboxes2(:,1) + bboxes2(:,3);
    y1g = bboxes2(:,2);
    y2g = bboxes2(:,2) + bboxes2(:,4);
    
    % Calculate Area of Bboxes1&2
    area_1 = (x2p - x1p) .* (y2p - y1p);
    area_2 = (x2g - x1g) .* (y2g - y1g);
    
    %cal intersection
    IoU_min = bboxOverlapRatio(bboxes1,bboxes2, 'Min');
    Overlap = IoU_min .* min(area_1, area_2');
    All_Area = (max(x2p, x2g') - min(x1p,x1g')).*(max(y2p,y2g') - min(y1p,y1g'));
    C_boxes = (All_Area - (area_1+area_2'-Overlap))./All_Area;
    
    iou = bboxOverlapRatio(bboxes1, bboxes2);
    giou = iou - C_boxes;
end

Matlab에서 위의 코드로 GIoU를 계산할 수 있다.


1. Introduce

  2D 이미지 분야에서 딥러닝 네트워크를 학습 시킬 때 최종적인 목표는 Ground Truth를 Prediction이 완벽하게 추종하는 것이다. 즉, IoU(Intersection over union)이 1이 되는것을 목표로 한다. 하지만 대다수의 최신 네트워크들은 IoU를 향상시키기 위해서 x, y, w, h라는 파라미터를 활용한 학습을 진행한다. 하지만 ln loss를 최소화 하는 것과 IoU 값을 개선하는 것 사이에는 큰 관련이 없다는 문제가 존재한다.

각 케이스별 l2 loss/IoU/GIoU 비교

 위의 그림에서 두 상자의 좌측 하단 모서리를 고정하고, 검은 상자(여기서는 Prediction이라 가정하자)의 우측 상단 모서리가 회색 점선으로 그려진 원 위에 존재할 때, 모든 경우에서 l2 loss는 같다. 하지만 IoU와 GIoU는 다른 값을 갖고, 우리의 최종 목표인 완벽하게 포개지는 박스를 예측하는 것(IoU = 1)에도 영향을 주지 않는다.

각 케이스별 l1 loss/IoU/GIoU 비교

 그렇다면 l1 loss는 다를까? 딥러닝에선 잘 사용하지는 않지만(Overfitting의 위험성 등 때문) 이 경우에도 비교해보면 세 경우에서 l1 loss가 일정할 때, IoU와 GIoU가 다르게 계산된다.

 

 위와 같은 이유 때문에 저자는 여기서 IoU를 Loss function의 파라미터로서 도입했을 때 직접적인 성능 향상이 가능할 것이라고 예측했다.


2. Related works

 하지만 IoU를 훈련에 활용하기 앞서 문제가 있는데, 바로 박스가 떨어졌을 때 그 문제가 발생한다.

A: Ground Truth / B: Prediction

 그림에서 볼 수 있듯, 예측된 박스가 Ground Truth와 조금이라도 겹친 경우에는 훈련에 활용할 수 있지만, 겹치지 않은 경우 박스가 얼마나 떨어졌는지 판단할 근거가 존재하지 않는다. 즉, Loss = 1 - IoU로 훈련한다고 가정하면 박스가 떨어져있는 경우에는 Loss가 1이 되고 Gradient exploding이 발생할 것을 예측할 수 있다.


3. Generalized Intersection over Union

주저리주저리

 드디어 본론이다. 논문에서는 GIOU를 계산하는 알고리즘 두 가지(한 가지는 세부적인 설명)을 제시하며 주저리주저리 설명하지만 이를 간단히 그림으로 설명하면,

GIoU를 이해하기 쉽게 그림으로 표현해봤다.

 A와 B 영역을 모두 감쌀 수 있는 최소 영역인 C를 만들고, C를 활용하여 A와 B가 얼마나 떨어져 있는지에 대해 반영할 수 있는 추가 항을 도입한다. 처음의 공식을 보면 기존 IoU에서 전체에서 회색 공간이 차지하는 비율을 뺀 값을 GIoU로 설정한 것을 볼 수 있다. 이 때문에 회색 공간의 비율이 IoU보다 크게되면 GIoU는 음수를 가질 수 있다는 특징이 있다.

 GIoU는 -1부터 1 사이의 값을 같게 된다는 것과 두 박스가 얼마나 떨어졌는지를 반영할 수 있다는 점이 기존 IoU와의 가장 큰 차별점이다. 하지만 두 박스가 완전히 겹친 경우(즉, 학습을 더이상 할 필요가 없는 경우) 1의 값을 가진다는 부분에서는 유사하다.

 저자가 처음 제시했던 Loss = 1 - IoU를 수정하여 Loss = 1 - GIoU로 설정하면 박스가 멀어져도 훈련이 가능하고, 박스가 겹친 경우 더이상 훈련되지 않는 시스템을 갖출 수 있다.

 그래프를 보면 초록색으로 표시된 부분(겹치지 않은 박스 샘플)의 IoU 값은 0으로 일정하지만, GIoU 값은 음수로서 계산되는 모습을 볼 수 있다. GIoU를 활용하면 이 부분에 찍힌 점들을 모두 학습 가능하다는 이야기.


4. Experimental Results

 실험 결과는 당연히 GIoU Loss를 활용했을 경우가 기존 MSE나 L1 smooth 를 활용한 경우보다 향상되었다. 이 논문에서는 YOLO v3, Faster R-CNN, Mask R-CNN에 대한 실험을 진행하였고, YOLO v3에선 상대적으로 큰 향상이 이루어졌다.(2014 validation set of MS COCO기준 AP75 9.78% 향상)

이는 R-CNN 계열에서 Anchor Box 개념을 도입하였고, 상대적으로 촘촘하고 정교한 앵커 박스들을 활용했기 때문으로 짐작한다.

+ Recent posts