DenseFuse: A Fusion Approach to Infrared and Visible Images

홍성민·7일 전
0

논문 리뷰

목록 보기
17/18

CNN-based image fusion에서 last layer만을 사용해서 feature들을 사용하는 fusion method는 middle layer들에서 획득한 feature들을 사용하지 못한다는 것을 Limitation이라고 정의했다.

따라서, DenseFuse는 위의 Limitation의 문제를 해결했으며 deep learning architecture는 encoding, decoding network로 구성되어 있다.

Encoding에서는 각 image의 feature들을 뽑아내며, Dense block으로 이루어져 있으며 Decoding은 fused image를 생성한다.

Network

input은 논문에서 I1,...IK,K2I_1, ... I_K, K≥2로 서로 다른 modality의 image를 말하며, input channel은 1개(gray scale) or 3개(RGB)든 똑같은 fusion strategy를 가지기 때문에 상관없다.

전체 구성은 Encoder, Fusion Layer, Decoder로 구성되어 있다.

Encoder

Encoder의 구성은 크게 C1과 Dense block으로 구성되어있으며 CNN을 사용하기 때문에 image의 feature들을 extraction하는 역할이다.

따라서, C1은 333*3의 kernel size를 가지고 있으며 output channel은 16개가 된다.

Dense block은 333*3의 kernel을 사용하지만 각 output을 다음 layer의 output에다가 concatenate하는 구성이며, 각 output은 16개의 channel number를 보여준다.
이러한 stack은 다음과 같은 장점이 있다고 한다.

  • Can preserve as much information as possible

  • Improve flow of information and gradients through network, which makes network be trained easily

  • The Dense connections have a regularizing effect, which reduces overfitting on tasks

Dense block은 last layer만을 사용하지 않고 middle layer도 같이 사용하기 때문에 useful information을 얻을 수 있다.
또한, 중요한 것은 kernel은 333*3만을 이용했으며 각 output은 16개의 channel number만을 사용했다는 것이다.

padding은 zero padding이 아닌, reflection padding을 이용했다고 한다.

reflection padding은 zero padding과 비교해서 edge부분에서 비정상적인 값이 발생할 수 있지만, reflection은 자연스러운 연속성을 유지할 수 있습니다. 이로 인해 더 나은 성능을 낼 수 있는 경우가 많습니다.

예를들어, [123456789]\begin{bmatrix}1&2&3\\4&5&6\\7&8&9\end{bmatrix}가 input이고 이를 reflection pad를 2로 설정하게 되면, [9878987654565432123216545654987898765456543212321]\begin{bmatrix} 9& 8 & 7 & 8 & 9 & 8 & 7 \\ 6 & 5 & 4 & 5 & 6 & 5 & 4 \\ 3 & 2 & 1 & 2 & 3 & 2 & 1 \\ 6 & 5 & 4 & 5 & 6 & 5 & 4 \\ 9 & 8 & 7 & 8 & 9 & 8 & 7 \\ 6 & 5 & 4 & 5 & 6 & 5 & 4 \\ 3 & 2 & 1 & 2 & 3 & 2 & 1 \end{bmatrix}가 된다.

이는, input image가 3행3열부터 6행6열까지이며 나머지는 padding이 된 것인데, 3행1열부터 3행2열의 값을 보면, 3행3열을 기준으로 3행4열, 3행5열의 값이 reflection되었다는 것을 알 수 있다.

Loss Function

Loss Function은 L=λLssim+LpL = λL_{ssim}+L_p이다.

LpL_p는 pixel loss로써 OI2||O-I||_2로 L2-Norm(Euclidean distance)을 사용하였으며 O는 prediction output image, I는 input image를 의미하며, 만약 infrared/visible image가 input으로 들어가게 되면 Lp=k=12OIk2L_p = \sum_{k=1}^2||O-I_k||^2이 되겠다.

LssimL_{ssim}에서 SSIMSSIM에 대해서 먼저 알아보자.

SSIM

SSIM은 Structural Similarity Index Measure로 2개의 image의 유사도를 luminance, contrast, structure 3가지 요소를 이용하여 비교하는 방법이다.

output은 input값에 따라 0~1 or -1~1의 값이 나오는데 1에 가까울수록 2개의 image가 유사하다는 것을 의미한다.

Luminance

빛의 양이라고 하며, image의 pixel value를 사용한다.

μx=1Ni=1Nxiμ_x=\frac{1}{N}\sum^N_{i=1}x_i

  • xix_i: pixel value

  • NN: 전체 pixel 개수

  • μxμ_x: image의 평균 luminance

따라서, 2개의 image가 X,YX, Y라고 할 때 luminance(l)(l)를 비교하기 위한 식은 다음과 같으며, C1은 epsilion이다.
l(X,Y)=2μxμy+C1μx2+μy2+C1l(X, Y)= \frac{2μ_xμ_y+C1}{μ_x^2+μ_y^2+C1}

Contrast

image내에서 빛의 밝기가 바뀌는 정도로 pixel간의 값이 얼마나 차이가 나는지 정량화 할 수 있으므로 표준편차를 이용한다.

σx=1N1i=1N(xiμx)2σ_x = \sqrt{\frac{1}{N-1}\sum_{i=1}^N(x_i-μ_x)^2}

  • σxσ_x: image pixel간의 표준편차

  • μxμ_x: image pixel의 평균

N-1로 나눠준 이유는 모집단의 표준편차를 추종하기 위한 값이므로 표본 표준편차의 값이기 때문이다. 이는 표본 표준편차가 모표준편차를 정확히 추종하기 못하기 때문으로, 표본 크기 N이 충분히 크지 않을 경우 표본 분산이 모분산보다 작기 때문에 N-1의 값으로 설정하면 표본 분산이 약간 커져 유용하게 사용이 가능하다.

따라서, 2개의 image가 X,YX, Y라고 할 때 constrat(c)(c)를 비교하기 위한 식은 다음과 같으며, C2은 epsilion이다.
C(X,Y)=2σxσy+C2σx2+σy2+C2C(X,Y) = \frac{2σ_xσ_y+C_2}{σ_x^2+σ_y^2+C_2}

Structure

pixel value의 구조적인 차이점을 나타내고 성분 확인 시 edge를 나타냅니다.

Sturcture(X,Y)=(C1+C2)Cov(X,Y)(σx2+C1)(σy2+C2)Sturcture(X,Y) = \frac{(C_1+C_2)*Cov(X,Y)}{(σ_x^2+C_1)(σ_y^2+C_2)}이다.

SSIMSSIMSSIM(X,Y)=l(X,Y)αC(X,Y)βS(X,Y)γSSIM(X,Y) = l(X,Y)^α * C(X,Y)^β * S(X,Y)^γ값을 사용하는데, 이를 loss function에 반영해야하므로 1Lssim1-L_{ssim}이 되겠다.

해당 논문에서는 SSIM(F)=(SSIM(F,I1)+SSIM(F,I2))0.5SSIM(F)=(SSIM(F,I_1)+SSIM(F,I_2))*0.5로 사용했다고 한다.

다시, 원점으로 돌아와 L=Lp+λLssimL = L_p+λL_{ssim}에서 λ는 LpL_pLssimL_{ssim}가 3배 정도 차이가 나기 때문에 각 중요도를 맞추기 위한 hyperparameter 값이다.

Fusion Layer

논문에서 이 전까지 사용해왔던 Addition fusion strategy와 새롭게 제안한 method(l1norml_1-norm)를 설명한다.

Addition fusion strategy

Encoder에는 visible, infrared image가 각각 들어가게 된다. 따라서, fusion strategy에 들어가게 되는 channel number는 각각 64가 되겠다.

fm(x,y)=i=1kφim(x,y)f^m(x,y)=\sum_{i=1}^kφ_i^m(x,y)로 fused feature map들이 구성된다.

  • m: feature map이며 channel number가 각각 64이니, mR641m∈R^{64*1}이다.

  • fm(x,y)f^m(x,y): fused feature maps이며, Decoder의 input

  • φim(x,y)φ_i^m(x,y): i번째 Encoder의 output

fm(x,y)f^m(x,y)가 나오게되면, 이는 Decoder의 input이 된다.

L1NormL_1-Norm strategystrategy

Addtion fusion strategy는 salient feature를 selection하기에는 rough fusion strategy이기 때문에, 우리는 좀 더 정교한 L1NormL_1-Normsoft-max operation을 사용한다.

해당 글은 이전 포스트인 Infrared and Visible Image Fusion using a Deep Learning Framework에 있으니 참조바란다.

Training Phase

CNN은 Encoder와 Decoder에서만 쓰이기 때문에 2가지만 train시키면 된다.

Encoder와 Decoder의 weight가 fix된다면, fusion strategy를 사용하여 fusion output을 얻었다고 한다.

visible,infrared의 dataset이 부족하기 때문에, 약 MS-COCO dataset 80,000장으로 train시켰으며 256으로 resize 및 gray scale로 변환해주었다고 한다.

또한, λλ값이 증가함에따라 더 빠르게 수렴했다는 것이 key point이다.


구현

Github

profile
할거면 똑바로 하고 아님 말자

0개의 댓글