안녕하세요.

이번 글(Part2)에서는 지난 Part1에 이어서 GAN의 수학적 증명그 외 나머지 부분들에 대해 정리하려고 합니다.

 

(↓↓GAN part1 ↓)

https://89douner.tistory.com/329?category=908620 

 

5-1. GAN (Part1. GAN architecture)

안녕하세요. 이번 글에서는 최초의 GAN 논문인 "Generative Adversarial Nets"을 리뷰하려고 합니다. 우선, GAN이라는 모델이 설명할 내용이 많다고 판단하여 파트를 두 개로 나누었습니다. Part1에서는 GAN a

89douner.tistory.com

 

 

논문의 section 4, 5, 6 부분들 마저 다룰 예정인데, 설명의 편의를 위해 'section 5'와 'section 6'의 순서만 바꾸도록 하겠습니다.

 

  • Section 4: Theoretical Results
  • Section 6: Advantages and disadvantages
  • Section 5: Experiments

 

먼저, "section 4: Theoretical Results"리뷰하기 딥러닝 모델을 설계할 시 필요한 몇 가지 기준(질문)들에 대해서 이야기 하려고 합니다. 

 

 

 

 

 

1. 딥러닝 모델 설계를 위한 네 가지 기준(질문)

딥러닝 모델을 확률 모델로써 설계할 때에는 네 가지 기준(질문)을 충족하는지 따져봐야 합니다. (물론 더 많은 기준(질문)이 있겠지만 GAN 논문에서는 크게 네 가지 기준으로 요약하고 있습니다.

 

(뒤에서 더 자세히 설명하겠지만, 실제 neural network가 사용되면 아래 기준을 이상적으로 만족하는게 불가능하다고 합니다. 그러니, 아래 기준들은 딥러닝 설계 시 이상적인 guideline 정도로 보시면 좋을 것 같습니다.)

 

  1. 설계한 확률(딥러닝)모델이 tractable 한 것인가? (계산 시스템 관점에서 충분히 다룰 수 있는 알고리즘인가?)
  2. 설계한 확률(딥러닝)모델이 최적해(global optimum)를 갖는가?
  3. 설계한 확률(딥러닝)모델이 최적해(global optimum)에 수렴하는가?
  4. 설계한 확률(딥러닝)모델의 최적해(global optimum)을 찾을 수 있는 알고리즘이 존재하는가?

 

먼저, 첫 번째 질문tractable과 관련한 답은 이미 part1에서 했기 때문에 아래 링크를 참고해주시면 좋을 것 같습니다.

 

(↓아래 링크에서 “3.Adverarial nets” → "[3-1-1-. First paragraph & Second sentence]" 부분 참고)

https://89douner.tistory.com/329

 

5-1. GAN (Part1. GAN architecture)

안녕하세요. 이번 글에서는 최초의 GAN 논문인 "Generative Adversarial Nets"을 리뷰하려고 합니다. 우선, GAN이라는 모델이 설명할 내용이 많다고 판단하여 파트를 두 개로 나누었습니다. Part1에서는 GAN a

89douner.tistory.com

 

 

 

나머지 질문들은 "4. Theoretical Results"를 리뷰하면서 설명해보도록 하겠습니다. 

 

 

 

 



 

4. Theoretical Results

[ 4-1. Global optimality of \(p_{g}=p_{data}\) ]

 

"설계한 확률(딥러닝)모델이 최적해(global optimum)를 갖는가?"

 

딥러닝에서 분류(classification)하는 문제에서는 최종 losscross-entropy 값이 0에 도달하기를 바랍니다.

 

<그림 출처: https://towardsdatascience.com/cross-entropy-loss-function-f38c4ec8643e>

 

 

 

"그렇다면, GAN의 최종 loss는 어떠한 값을 갖어야 global optimum이라고 할 수 있을까요?"

"즉, 최종적으로 도달하고자 하는 loss 값은 무엇일까요?

 

 

지금부터 이에 대한 답을 해보도록 하겠습니다.

 

 

Generator 관점에서 MinMax problem (value function)은 \(P_{g}=P_{data}\) 에서 global optimum 값을 갖아야 합니다. 직관적으로 봤을 때, GeneratorData와 유사한 distribution을 형성하는 지점인 곳에서 global optimum 값을 찾게 되면 학습을 중단하겠죠?

 

이 논문에서는 optimal discriminator의 global optimum 값은 아래와 같은 수식에 의해 도출 된다고 합니다.

 

\(D^{*}(x)=\frac{P_{data}(x)}{P_{data}(x)+P_{g}(x)}\)

 

 

위 수식의 직관적인 설명은 아래와 같습니다.

 

\(P_{g}=P_{data}\) 일 경우 \(D^{*}(x)=\frac{1}{2}\) 값을 갖는데, 이것이 의미하는 바는 discriminator가 가짜 이미지와 진짜 이미지를 판별할 확률이 모두 \(\frac{1}{2}\)라는 사실과 값습니다. 즉, 가짜와 진짜를 완벽히 혼동한 상태인 것이죠. 그러므로, GAN loss function인 V(D,G) 값이 \(\frac{1}{2}\)에 가까이 도달하면 학습을 종료하면 됩니다. (CNN loss인 Cross entropy 에서는 0값에 도달하면 보통 학습을 중단시키죠)

 

"그럼, 이제부터 어떻게 optimal discriminator 수식이 V(D,G) 수식에서 \(D^{*}(x)=\frac{P_{data}(x)}{P_{data}(x)+P_{g}(x)}\) 수식으로 유도되는지 수학적으로 살펴볼까요?" 

 

 

(유도과정과 관련된 내용은 아래 영상 내용을 기반으로 작성했으니 참고해주세요.)

https://www.youtube.com/watch?v=odpjk7_tGY0 

 

 

 

 

 

 

Optimal discriminator 상태에 도달했다는 것은 Generator관점에서 봤을 때 이미 \(P_{data}=P_{g}\) 상태로 학습이 거의 다 됐다는 것을 의미합니다.  G가 이미 최상의 상태에 도달했다고 가정하여 Gfix시키고 optimal discriminator D*(x)에 대한 수식만 찾는 것이죠.

 

위와 같은 사실을 봤을 때, GAN이라는 모델은 generator와 관련된 loss가 아닌 discriminator와 관련된 loss에 의해 학습을 종료할지 말지 결정하게 되는 것이죠. 바꿔 말하자면, optimal discriminator의 값을 찾기 위해 discriminator(D) 부분만 고려하겠다는 것입니다.

 

 

 

위 수식을 보면 G(z)를 x로 바꿔 주면서 \(E_{z\sim ~p_{z}(z)}\) 수식부분이 \(E_{x\sim ~p_{g}(x)}\) 로 변경된 것을 확인할 수 있습니다. 이것이 가능한 이유는 G(z)의 차원이 곧 X차원과 동일하여 G(z)에서 발생한 값을 X 차원 상의 하나의 x값으로 표현(=mapping)할 수 있기 때문입니다.

 

  • Pz(z): low dimension distribution,  z = 100
  • Pg(x): high dimension distribution, x = 64x64 

 

 

위와 관련된 내용아래 링크(글)에서 3. Adversarial nets” “[3-2-2. Second paragraph & Second sentence]" 부분을 참고해주세요. 

 

https://89douner.tistory.com/329?category=908620 

 

5-1. GAN (Part1. GAN architecture)

안녕하세요. 이번 글에서는 최초의 GAN 논문인 "Generative Adversarial Nets"을 리뷰하려고 합니다. 우선, GAN이라는 모델이 설명할 내용이 많다고 판단하여 파트를 두 개로 나누었습니다. Part1에서는 GAN a

89douner.tistory.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(지금까지 설명한 내용논문에서는 아래와 같이 함축해서 설명하고 있습니다)

 

 

 

앞서 \(\frac{a}{a+b}\)에서 global optimum을 갖는걸 파악했습니다.

 

그렇다면, a=b or \(P_{data}=P_{g}\)라는 조건 하에 global optimum을 갖는지,

global optimum 값이 왜 1/2이 되는지 수학적으로 증명해보겠습니다.

 

 

 

 

 

 

 

 

(지금까지 설명한 내용을 논문에서는 아래와 같이 함축해서 설명하고 있습니다)

 

 

 

정리하자면, 앞서 언급했던 질문인 "설계한 확률(딥러닝)모델이 최적해(global optimum)를 갖는가?" 에 대해서 

"최적해(global optimum)"을 갖는다고 할 수 있습니다.

 

 

"다시 말해, MinMax 구조의 함수에서 \(P_{data}=P_{g}\)일 때, global optimum을 갖는다고 할 수 있습니다.”

 

 

 

 

 

 

[ 4-2. Convergence of Algorithm 1 ]

앞서, GAN 이라는 확률(딥러닝) 모델은 loss를 통해 살펴 봤듯이 최적해(global optimum)존재하는걸 볼 수 있었습니다. 딥러닝 모델을 해(solution)를 찾을 수 있는 조건 중 하나가 loss가 convex function인지 확인하는 것입니다.

 

 

"그래야 grident descent 와 같은 iterative optimization 방식을 통해 해를 찾을 수 있기 때문입니다."

 

 

(↓iterative optimization과 딥러닝과의 관계를 설명한 글; "3.Adversarial nets" -> "[3-3-2. Third paragraph & The last sentence]" 부분을 참고)

https://89douner.tistory.com/329?category=908620 

 

5-1. GAN (Part1. GAN architecture)

안녕하세요. 이번 글에서는 최초의 GAN 논문인 "Generative Adversarial Nets"을 리뷰하려고 합니다. 우선, GAN이라는 모델이 설명할 내용이 많다고 판단하여 파트를 두 개로 나누었습니다. Part1에서는 GAN a

89douner.tistory.com

 

 

그럼, 딥러닝 모델 설계 시 고려해야 하는 4가지 질문 중, 세 번째 질문에 대한 답을 설명드려보겠습니다.

 

"설계한 확률(딥러닝)모델이 최적해(global optimum)에 수렴하는가?"

 

위에 있는 질문을 바꿔서 표현하면 "\(p_{g}\)가 \(p_{data}\)로 수렴할 수 있는가?"로 표현할 수 있습니다. 즉, generative model인 \(p_{g}\) 관점에서 loss 함수가 (global optimum으로) convergence(수렴) 할 수 있는지 따져야 하는 것입니다.

 

"Generative model인 \(p_{g}\) 관점에서 loss 함수가 (global optimum으로) convergence(수렴) 할 수 있는지 따지기 위해서는 'D를 고정시키고, loss 함수가 convex한지 확인하는 것' 입니다." 

 

 

 

아래 그림을 잠깐 설명해보겠습니다. D는 고정했기 때문에 \(U(P_{g},D)\) 를 \(P_{g}\) 관점에서 보면 D는 (고정된) 상수값입니다. 바꿔말해, \(P_{g}\) 관점에서 보면 \(U(P_{g},D)\)의 변수는 \(P_{g}\)인 셈인 것입니다. 결국, \(P_{g}\)가 학습함에 따라서 변할 텐데, 변하는 \(P_{g}\)에 따라서 \(U(P_{g},D)\)convex한지 알아봐야 iterative optimization(=ex: gradient descent) 방식으로 global optimum을 찾을 수 있는지 확인 할 수 있습니다.

 

 

위의 설명 중에서 "어떤 함수를 미분했을 때, 해당 함수가 상수 값을 갖는다면 그 함수는 convex하다고 할 수 있다"는 개념이 있습니다. 예를 들어 보충 설명하면, 2x+1라는 수식에서 x에 대해서 미분하면 미분값=2가 나옵니다. 즉, 어떤 수식을 x로 미분 했더니 상수가 나오면 그 수식은 선형함수가 되는 것입니다. 그리고, 선형함수는 convex 라고 할 수 있는데, 특정 구간 (ex=(0,1))을 설정해놓으면, 해당 구간에서 minimum 값을 찾을 수 있게 됩니다.

 

(↓↓↓linear function이 convex function 임을 보여주는 글↓↓↓)

https://89douner.tistory.com/221?category=985926 

 

[Convex function]2-2. Example of Convex function

※시간이 충분하지 않아 필기로 정리한 내용을 아직 블로그 글로 옮기지 못해 이미지로 공유하는점 양해부탁드립니다. 아래 내용의 키워드는 다음과 같습니다. Exponential function, affine function, powe

89douner.tistory.com

 

 

 

 

 

 

 

 

(지금까지 설명한 내용을 논문에서는 아래와 같이 함축해서 설명하고 있음)

 

 

 

[그 외 위에서 본 수식과 관련된 background or 용어]

 

 

 

 

[ 4-2. Algorithm 1 ]

"설계한 확률(딥러닝)모델의 최적해(global optimum)을 찾을 수 있는 알고리즘이 존재하는가?"

 

 

이 논문에서는 아래와 같은 방식으로 D와 G를 서로 학습함으로써 최적해(global optimum)을 찾을 수 있음을 보여줬습니다.

 

 

위의 알고리즘을 실제로 코딩할 때 아래와 같이 구현할 수 있습니다. (D학습시 따로 k step을 두진 않은 것 같네요)

 

(↓↓D, G 관련 loss가 왜 아래와 같이 변하는지는 GAN part1에서 설명 함)

 

 

[Neural network를 Generative model에 도입할 경우]

 

GAN을 통해 생성하는 데이터의 분포 \(p_{g}\)를 추정하고 최적화 하는 것이 아니라, \(p_{g}\)를 생성하는데 직접적인 영향을 미치는 parameter인 \(\theta_{g}\)를 추정하고 최적화 합니다. 또한, 엄밀히 말하자면 수학적인 증명에서는 generative model, discriminative model이 neural network를 사용한다는 언급이 없습니다. 그런데, Generative model을 MLP(multilayer perceptron; neural network; deep learning)와 같은 것으로 설정하게 되면 실제로 최종 loss function 자체가 convex하지 않을 수 있고, 즉 multiple critical points를 가질 수 있습니다. 하지만, 마법같은 MLP는 이러한 theoretical guarantees가 굳이 보장되지 않고도 나름 생성모델에서 잘 작동한다고 주장하고 있습니다.

 

 

 

 

5. Advantages and disadvantages

이 부분("5. Advantages and disadvantages")은 GAN의 대표적인 disadvantage라고 할 수 있는 mode collapse에 대해서만 설명하도록 하겠습니다.

 

먼저, mode라는 용어에 대해서 이해하도록 하겠습니다.

 

보통 통계학에서 mean, median, mode, range라는 용어가 사용되는데, 해당 용어들이 의미하는바는 아래와 같습니다.

 

<그림 출처. https://danielmiessler.com/blog/difference-median-mean/>

 

 

위의 개념들을 distribution 상에서 설명하면 아래와 같이 표현할 수 있습니다.

<그림출처. https://medium.com/@nhan.tran/mean-median-an-mode-in-statistics-3359d3774b0b>

 

<그림 출처. https://velog.io/@tobigs-gm1/basicofgan>

 

 

 

쉽게 말해 mode는 빈도수가 가장 많은 수를 일컫습니다.

 

"The mode is the most frequent value."

 

 

그렇다면 이제 mode collpase에 대해 설명해보도록 하겠습니다.

 

MinMax Value function을 살펴보면, 학습 시 G(z)가 생성하는 이미지의 종류에 대해서는 고려하지 않습니다. 예를 들어서, G(z)가 MNIST의 1이라는 이미지를 생성하는데 D가 계속해서 판별을 못하고, G(z)가 생성하는 MNIST의 2라는 이미지만 잘 판별해도 되면 결국 value loss 값은 낮아지게 되는 것이죠. 극단적으로 설명해서 MinMax 방식으로 서로 학습하면 D가 만족하는 (판별을 잘 할 수 있는) 이미지(from G(z))만 생성하도록 G가 학습할 것이며, 결국 (서로 좋은쪽으로만) 편향되게 D와 G는 alternative하게 학습하게 될 것 입니다. 

 

 

앞서 설명한 것을 다르게 표현하면, G(z)는 MNIST의 1의 distribution은 잘 표현해주지 못하고, 2라는 이미지의 distribution만 잘 표현해도 전체 value function의 loss 값은 낮게 나올 수 있습니다. 이렇게 되면 Generative model G가 특정 숫자만 생성하게 되겠죠.

 

 

Mode collpase를 정리하자면 아래와 같이 표현할 수 있습니다.

 

"Mode collapse happens when the generator can only produce a single type of output or a small set of outputs. This may happen due to problems in training, such as the generator finds a type of data that is easily able to fool the discriminator and thus keeps generating that one type."

 

 

 

 

위의 그림을 설명하면 다음과 같습니다.

 

먼저 3개의 검은색 실선이 실제 이미지를 나타내는 것이라고 볼 수 있습니다예를 들어, 각각실선들은 금발여성, 흑발과 안경을 쓰고 있는 남성, 흑발 여성을 나타낸다고 해보겠습니다.

 

"즉 우리가 원하는 목표는 실선 3개를 모두 표현해줄 수 있는 확률 분포를 익히는 것이라고 볼 수 있습니다."

 

가운데 실선에 해당하는 데이터 셋이 제일 많다고 하면, VAE는 제일 데이터 셋이 많은 그룹에 맞게 distribution을 형성하면서 동시에 normal distribution을 이용해 주변 이미지 그룹들도 다 포괄할 수 있도록 학습을 하기 때문에 모든 데이터 그룹을 포괄하려는 것을 볼 수 있습니다.

 

반대로 GANgenerator가 만드는 이미지 그룹을 discriminator가 더 이상 구별해내지 못할 때 (real image가 들어왔을 때 맞출 확률 ½, fake image가 들어왔을 때 맞출 확률 ½ 이 될 때) 학습이 종료가 됩니다. 그렇기 때문에 이미지 데이터 셋이 많은 (가운데 실선에 해당하는) 그룹만 학습하다 끝내버리면 해당 그룹만 잘 generation해주는 현상이 발생 할 수 있습니다.

 

각각의 실선 (이미지 그룹)이 우리가 representation (By generator)해야 할 중요한 mode라고 부르기도 하는데, GAN에서는 이러한 mode들을 잘 학습하는 것이 안되는 붕괴(collapsing) 현상이 일어난다고 하여 mode collapsing의 단점을 갖고 있다고도 합니다.

 

 

 

그 외 mode collpase에 대한 설명이 필요하시면 아래 링크를 참고해주시면 좋을 것 같습니다.

http://jaejunyoo.blogspot.com/2017/02/unrolled-generative-adversarial-network-1.html

 

초짜 대학원생의 입장에서 이해하는 Unrolled Generative Adversarial Networks (1)

Easy explanation for unrolled generative adversarial network (쉽게 풀어 설명하는 Unrolled GAN)

jaejunyoo.blogspot.com

 

https://wandb.ai/authors/DCGAN-ndb-test/reports/Measuring-Mode-Collapse-in-GANs--VmlldzoxNzg5MDk

 

Measuring Mode Collapse in GANs

Evaluate and quantitatively measure the GAN failure case of mode collapse - when the model fails to generate diverse enough outputs.

wandb.ai

 

 

 

 

 

 

 

6. Experiments

 

사용된 데이터셋

  • MNIST
  • Toronto Face Database (TFD)
  • CIFAR-10

 

Activation function

  • Generator nets: a mixture of rectifier activations and sigmoid activations
  • Discriminator net: maxout activations

 

Drop out

  • discriminator net 학습시에만 drop out 적용

 

 Noise

  • 이론적으로는 intermediate layers of generator에 주겠금 되어있음
  • 하지만, 실제 구현 상에서는 "the bottommost layer of the generator network"의 input에 해당하는 data에 noise를 주어 학습 시킴

 

"Conventionally people usually draw neural networks from left to right or from bottom-up (input to output). So by “top layer” it’s more likely to be the last (output) layer."

 

<그림 출처: https://velog.io/@hwany/GAN>

 

 

 

아래 그림 처럼 논문에서는 1과 5 사이의 vector linear interpolation, 7과 1사이의 vector linear interpolation 했을 때의 결과를 보여줍니다.

 

 

 

아래 수식을 이용하면 실제 이미지 데이터에 대응하는 z 값을 찾을 수 있습니다.

 

이렇게 찾은 z값들 간에 vector linear interpolation을 하게 되면, 7과 1사이의 z 중간 값이 9가 나오는걸 확인할 수 있습니다.

 

 

 

 

 

 

 

실제 논문에서는 결과에 대한 여러 해석들이 있는데, 요즘에 사용하고 있는 GAN 평가지표와는 다른 부분이 있어 생략하도록 하겠습니다.

 

 

 

 

지금까지 GAN 논문에서 설명하고 있는 이론적 배경에 대해 다루어봤습니다.

감사합니다.

 

 

 

[Reference]

1. Yunjey Choi, NAVER AI Lab

https://www.youtube.com/watch?v=odpjk7_tGY0 

 

2. Yoo Jaejun, UNIST

https://www.youtube.com/watch?v=kLDuxRtxGD8 

 

https://jaejunyoo.blogspot.com/2017/01/generative-adversarial-nets-2.html

 

초짜 대학원생 입장에서 이해하는 Generative Adversarial Nets (2)

쉽게 풀어 설명하는 Generative Adversarial Nets (GAN)

jaejunyoo.blogspot.com

 

https://brunch.co.kr/@kakao-it/145

 

[카카오AI리포트]Do you know GAN? 1/2

유재준 | 카이스트 | 최근 딥러닝 분야에서 가장 뜨겁게 연구되고 있는 주제인 GAN(generative adversarial network)을 소개하고 학습할 수 있는글을 연재하려고 한다. GAN은 이름 그대로 뉴럴 네트워크(neur

brunch.co.kr

 

안녕하세요.

이번 글에서는 최초 GAN 논문"Generative Adversarial Nets"을 리뷰하려고 합니다.

 

우선, GAN이라는 모델이 설명할 내용이 많다고 판단하여 파트를 두 개로 나누었습니다. 

 

Part1에서는 GAN architecture를 포함한 GAN에 대한 전반적인 내용(Abstract, 1.introduction, 3.Adversarial nets)을 이야기하고, Part2에서는 GAN수학적으로 정리한 내용(4.Theoretical results)나머지 부분(5.Experiments, 6.Advantages and disadvantages)에 대해 이야기 해보도록 하겠습니다.

 

그럼 이번 글에서는 Part1에 대해 설명하도록 하겠습니다.

 

 

https://arxiv.org/abs/1406.2661

 

Generative Adversarial Networks

We propose a new framework for estimating generative models via an adversarial process, in which we simultaneously train two models: a generative model G that captures the data distribution, and a discriminative model D that estimates the probability that

arxiv.org

 

 

 

Paper: Generative Adversarial Networks

arXiv: 2014.06.10 등록

Conference: 2016 NIPS

 

 

 

 

Ian J. Goodfellow

논문을 리뷰하기 전에 GAN저자Ian J. Goodfellow를 간략히 소개할까 합니다. (딥러닝 하시는 분들이라면 대부분 알고 있으실테니, 보기 편하게 간략히 정리하는 정도로만 하겠습니다~)

 

  • B.S, M.S (2004~2009)
    • University: Stanford University
    • Major: Computer Science
    • Supervisor: Andrew Ng
  • Ph.D (2010~2014)
    • University: Université de Montréal
    • Major: Machine Learning
    • Supervisor1: Yoshua Bengio
    • Supervisor2: Aaron Courville
    • GAN 논문은 박사과정때 쓴 것 (arXiv 2014.06)
  • Google Brain (2015~2016)
    • Senior Research Scientist
  • Open AI (2016~2017)
    • Research Scientist
    • GAN논문이 NIPS에 accept되어, presentation 발표함
  • Google Research (2017~2019)
    • Senior Staff Research Scientist
  • Apple (2019~Current)
    • Director of Machine Learning

 

 

(↓↓↓2016 NIPS에서 Open AI 소속으로 GAN발표하는 Ian J. Goodfellow↓↓↓)

 

 

Ian J. Goodfellow박사과정 졸업 후, supervisor인 Yoshua Bengio, Aaron Courville와 함께 Deep Learning book편찬했습니다. 제 생각에는 책의 발행년도가 2015년이니 이전부터 아마 박사과정 졸업 논문을 쓰면서 background로 정리해 놨던 내용들을 지도교수들과 함께 책으로 만든게 아닌가 싶습니다. 제가 석사 때 다녔던 대학원을 포함해, 많은 학교에서 이 책을 deep learning 수업교재로 사용했던걸로 기억합니다.

 

(이 책은 아래 사이트에서 무료로 볼 수 있습니다↓)

<그림 출처: https://www.techleer.com/articles/260-deep-learning-by-goodfellow-bengio-and-courville/>

https://www.deeplearningbook.org/

 

Deep Learning

What is the best way to print the HTML format? Printing seems to work best printing directly from the browser, using Chrome. Other browsers do not work as well.

www.deeplearningbook.org

 

 

(↓↓↓Ian J. Goodfellow LinkedIn↓↓↓)

https://www.linkedin.com/in/ian-goodfellow-b7187213/

 

GAN의 저자인 Ian J. Goodfellow에 대해서 간단히 알아봤으니 이제부터는 논문을 본격적으로 리뷰해보도록 하겠습니다.

 

 

 

 

 

 

0. Abstract

 

 

Abstract에서 설명한 내용을 6가지 key words로 나누어 설명드리고자 합니다.

  1. Adversarial process (Abstract에서 분홍색 음영처리 된 부분)
  2. Minimax two-player game (Abstract에서 주황색 음영처리 된 부분) 
  3. Estimating generative models (Abstract에서 노란색 음영처리 된 부분)
  4. A unique solution (Abstract에서 보라색 음영처리 된 부분)
  5. Architecture (Abstract에서 빨간색 음영처리 된 부분)
  6. Qualitative and quantitative evaluation (Abstract에서 회색 음영처리 된 부분)

 

 

[0-1. Adversarial process]

 

 

"GAN이라는 것은 기본적으로 generative model의 성능을 높이기 위해 고안된 architecture입니다."

 

 

즉, 실제와 유사한  이미지를 생성해주는 generative model을 만드는 것이 목적이죠. 

이렇게 이상적인 generative model을 만들기 위해 생각한 것이 generative model을 경쟁시키는 것입니다.

 

 

"우리도 경쟁을 통해서 성장하는 것 처럼 generative model도 경쟁을 통해 성장하게 하는 것이 GAN 논문의 기본 철학이죠."

 

 

GAN이라는 구조에서는 generative model경쟁자discriminator model로 두고 있습니다. 그리고, 앞서 언급한 경쟁이라는 표현보다는 "adversarial(적대적)"이라는 표현을 사용합니다. "Adversarial"이라는 표현을 쓴 이유는  generative model과 discriminator model은 서로 반대의 목적을 갖고 있었기 때문이라고 생각합니다 (경쟁이라는 표현은 사실 같은 목적을 두고도 사용할 수 있으니까요).

 

예를 들어, 위조 지폐범경찰서로 적대적이라고 할 수 있습니다. 왜냐하면, 위조지폐범은 일반인들이 진짜라고 믿게 만드는 fake money를  잘 생성하는 것이 목적이고, 경찰은 일반인들이 위조지폐를 가려낼 수 있는 방법들을 알려주는 것이 목적이기 때문입니다.

 

 

"범죄라는 것이 항상 '만들어 놓은 예방법을 피해가려는' 속성이 있기 때문에, 위조지폐를 가려낼 수 있는 방법이 좋아질 수록, 이를 피해 위조지폐를 만드는 기술도 더욱 교묘해 집니다." 

 

<그림 출처:  https://lepoeme20.github.io/archive/ADV_Training>

 

 

"이렇게 서로 적대적인 경쟁을 하다보면 위조지폐(=generative model)의 성능은 계속해서 좋아질 겁니다."

 

 

 

"a discriminative model D that estimates the probability that a sample came from the training data rather than G."라는 표현을 쓴 이유는 discriminative model이 기준을 'generative model로 부터 생성된 이미지인지를 판별하는 것'에 두는 것이 아니라, '실제 이미지인지를 판별하는 것'에 두는 것으로 봤기 때문이 아닌가 싶습니다. (CNN 관점에서 보면 background or negative sample 들을 잘 구별할 수 있게 학습하는 것과, foreground or positive sample들을 잘 구별할 수 있게 학습하는 것은 다른 문제이니까요. 예를 들어, 한 이미지에는 대부분 negative sample or background들이 많을 텐데, 이를 방치해두면 학습시 인공지능 모델이 background or negative sample만 잘 구분할 수 있도록 학습하게 될거에요. ) ← 혹시 이 부분에  대해서 다른 의견이 있으면 댓글로 남겨주세요!

 

 

 

[0-2. Minmax two-player game] 

 

앞서 언급한 "adversarial"이라는 개념을 좀 더 간단히 표현하면 다음과 같습니다.

 

 

"경찰(D)가 최대한(max) 위조지폐를 구분할 수 있는 능력을 높일수록, (adversarial 관계에 의해) 위조지폐범(G)은  (경찰을 속이기 위해) 자신들이 만들어내는 가짜 이미지와 실제 이미지의 차이를 최소화(min)하게 된다."

 

 

위의 말수식적으로 아래와 같이 표현하는데, 아래 수식에 대한 설명은 뒤에서 더 자세히 다루도록 하겠습니다.

 

 

 

 

 

[0-3. Estimating generative models]

 

Generative model추정(estimating)한다는 것의 의미를 파악하기 위해서는 이미지라는 개념을 distribution 관점에서 해석할 수 있어야 합니다.

 

(↓↓ 이미지, 차원, 분포와 관련된 개념들↓)

https://89douner.tistory.com/330?category=908620 

 

1. 이미지, 차원(dimension), 그리고 분포(distribution)간의 관계

안녕하세요. 이번 글에서는 이미지(data), 차원(dimension), 그리고 분포(distribution)간의 관계에 대해서 설명해보도록 하겠습니다. 앞으로 AutoEncoder, VAE, GAN을 이해하기 위한 가장 기본적인 background이..

89douner.tistory.com

 

 

(↓↓↓latent space와 이미지를 2차원 상에서 확률분포로 표현하는 의미↓↓↓)

링크 업로드 예정

 

 

 

위의 링크를 토대로 추가적인 설명하면 generative model을 추정한다는 개념을 아래와 같이 정리할 수 있습니다. 

 

"Generative model을 추정한다는 것은 실제 이미지 확률 분포에 maximum likelihood하도록 하는 generative model의 확률 분포를 추정(estimating)한다고 간주할 수 있습니다."

 

 

 

 

[0-4. A unique solution]

 

이 부분은 "3.Adversarial nets", "4.Theoretical results"에서 좀 더 상세히 설명하도록 하겠습니다.

 

 

 

 

[0-5. Architecture]

 

위의 내용에 대한 설명은 아래 그림으로 대체하겠습니다. (보통 Vision 분야에서 생각하고 있는 GAN은 DCGAN을 기반으로 한 것인데, DCGAN은 이 논문 이후에 나온 모델입니다. 그래서, 아래 그림은 현재 논문에서 설명하고 있는 MLP를 기반으로 구성되었습니다)

 

<그림1 출처:  https://towardsdatascience.com/applied-deep-learning-part-3-autoencoders-1c083af4d798>    <그림2 출처:  https://techblog-history-younghunjo1.tistory.com/130>

 

 

 

 

[0-6. Qualitative and quantitative evaluation]

 

CNN, Object detection, Segmentation 모두 각각의 task에 대한 성능을 평가하기 위한 지표들이 존재합니다. (ex: F1 score, ACC, mAP, Dice loss, etc ...) 예를 들어, CNN model에서는 VGGNet보다 ResNet의 ACC가 더 좋으면 ResNet이 더 좋은 모델이라고 (일반적으로) 평가하죠. 

 

마찬가지로 generative model도 여러 종류들이 있을 텐데 어떠한 생성모델이  좋은지 평가할 수 있는 기준이 있어야겠죠? 

 

보통 generative model의 성능 평가 지표는 두 가지 큰 categories가 있습니다.

  1. Qualitative measures are those measures that are not numerical and often involve human subjective evaluation or evaluation via comparison.
    • ex) Rapid Scene Categorization: 사람한테 잠깐 보여주고 이미지가 뭔지 맞추게 하여 생성모델이 이미지를 잘 생성하는지 평가
  2. Quantitative GAN generator evaluation refers to the calculation of specific numerical scores used to summarize the quality of generated images
    • ex) Frechet Inception Score (FIS) → DCGAN paper에서 설명할 예정

https://machinelearningmastery.com/how-to-evaluate-generative-adversarial-networks/

 

How to Evaluate Generative Adversarial Networks

Generative adversarial networks, or GANs for short, are an effective deep learning approach for developing generative models. Unlike other deep […]

machinelearningmastery.com

 

※이 논문에서 Markov Chain 관련 내용이 많이 나오는데, 이 글에서는 넘어가도록 하겠습니다. Markov Chain에 대한 설명까지 하게 되면 글이 너무 길어질 것 같아서....

 

 

 

 

 

 

 

 

1. Introduction

Introduction 부분은 문단(paragraph) 별, 문장(sentence) 별로 설명할 내용들이 많아 따로따로 나누어서 설명하도록 하겠습니다.

 

 

[1-1-1. First paragraph & First sentence]

[영어단어]

  • corpora: 말뭉치(corpus의 복수형태)

 

 

 

보통 CNN 같은 경우 다양하고(rich) 구조적(hierarchical)으로 filter가 구성되어 있습니다. 예를 들어, low-level layer 만해도 가로 edge, 세로 edge 등 다양한 feature들을 extraction 해줄 수 있는 filter들로 구성 되어있죠. 또한, low-level layer에서는 edge, middle-level layer에서는 texture, high-level layer에서는 semantic 정보들을 추출해 줄 수 있게 filter가 구성되어 있습니다.

 

 

<그림 출처: https://slidetodoc.com/introduction-to-deep-learning-professor-qiang-yang-outline/>

 

위와 같은 CNN(discriminator)모델은 어떤 이미지를 분류하기 위해 filter들이 최적화되었다고 볼 수 있습니다. 결국 어떤 이미지를 생성하는 generative model 역시 다양한 이미지를 생성하기 위해 rich and hierarchical feature들을 생성해야겠죠. (※CNN과 같은 discriminative modelfeature extraction하고, GAN과 같은 generative modelfeature generation한다고 보면 될 것 같네요)

 

"즉, generative model 입장에서는 어떤 이미지를 생성하기 위해 filter들을 최적화해야 합니다."

 

하지만, 이 논문에서 딥러닝의 미래는 이렇게 어떤 이미지를 분류하는 것이 아닌 어떤 데이터들을 그대로 표현(representation)해 줄 수 있는 모델을 만드는 것에 있다고 주장합니다. (어떤 데이터들을 그대로 표현해줄 수 있다면 해당 데이터들 또한 생성 할 수 있게 됩니다. 이에 대한 구체적인 설명은 논문을 리뷰해가면서 자세히 알아가도록 하겠습니다) 

 

 

 

 

 

[1-1-2. First paragraph & Second, Third sentence]

 

이 논문의 저자는 CNN(=discriminative model)과 같은 딥러닝 모델 성공한 이유세 가지 측면에서 설명하고 있습니다. 

 

<그림 출처:  https://towardsdatascience.com/a-comprehensive-guide-to-convolutional-neural-networks-the-eli5-way-3bd2b1164a53>

  1. Map a high-dimensional, rich sensory input to a class label. ← discrimination(or classification)을 위해 저차원 vector(=FC layer의 neuron들)를 선별해줌 (Curse of dimensionality 극복)
  2. Backpropagation and dropout algorithms ← Neural network의 첫 번째 겨울을 극복하게 해준 알고리즘
  3. Piecewise linear units ← Neural network의 두 번째 겨울을 극복하게 해준 ReLU (Vanishing gradient 극복)  
    • ReLU0을 기점으로 구분적으로 linear한 성격을 갖고 있습니다. Sigmoid보다 piecewise linear units (ReLU)에 의해 gradient가 더 잘 작동되었습니다.
    • piecewise 뜻: [수학] 구분적으로

<그림 출처: https://sanghyu.tistory.com/102>

 

 

 

 

[1-1-3. First paragraph & Fourth, Fifth sentence]

[영어단어]

  • sidestep: If you sidestep a problem, you avoid discussing it or dealing with it.

 

 

Deep generative model은 CNN 만큼 큰 임팩트를 주지는 못했는데, 그 이유는 deep generative model의 계산 복잡성 때문입니다. Deep generative model과 같은 확률모델을 생성하기 위해 maximum likelihood 계산을 할 때는 (보통) 계산시스템 관점에서 intractable problem 문제에 부딪히는 경우가 많습니다. 예를 들어, VAE와 같은 deep generative model은 본래 intractable problem이었는데, variational inference라는 mathematical trick을 이용하여 tractable problem으로 변경해주었죠. (VAE 관련 글은 짧은 시간내에 다루도록 하겠습니다. 정리는 해놨는데 시간 때문에 옮겨적고 있지 못하고 있어서ㅜ...;;)

 

(↓intractable에 대한 설명을 다룬 글↓)

https://89douner.tistory.com/327

 

3. Intractable problem이란? (Feat. Turing machine)

안녕하세요. 이번 글에서는 intractable problem에 대해서 설명드리려고 합니다. 딥러닝 뿐만 아니라 컴퓨터를 통해 연구를 할 때, 자신이 설계한 모델이 컴퓨터 상에 돌아갈 수 있는지 없는지를 알아

89douner.tistory.com

 

또한, 기존 deep generative model ReLU와 같이 piecewise linear units의 장점을 잘 살리기도 어려웠다고 합니다.

 

"이러한 문제를 해결하기 위해 Ian Goodfellow는 새로운 generative model estimation procedure 방식을 제안하게 됩니다."

 

 

 

 

[1-2. Second paragraph & First sentence]

[영어단어]

  • pit (somebody/something) against something: ~를 ~와 겨루게(경쟁하게) 하다.
  • counterfeiter: 위조자

 

 

앞서 abstract의 "0-1.Adversarial process"의 내용을 다시 설명한 문단입니다.

 

 

<그림 출처: https://www.slideshare.net/NaverEngineering/1-gangenerative-adversarial-network>

 

다시 말하자면, 결국 adversarial 경쟁으로 위조자와 판별자의 능력이 서로 향상된다는 내용입니다. 위조지폐범의 위조지폐제작 기술은 경쟁하기 전 보다 훨씬 발전해 있을 것이고, 경찰의 위조지폐판독 기술 역시 경쟁 전 보다 훨씬 발전해 있을 것 임.

 

<그림 출처:  https://lepoeme20.github.io/archive/ADV_Training>

 

 

 

 

 

[1-3. Third paragraph]

 

위의 문단에 대한 설명은 아래 그림으로 대신하도록 하겠습니다.

 

<그림1 출처:  https://towardsdatascience.com/applied-deep-learning-part-3-autoencoders-1c083af4d798>    <그림2 출처:  https://techblog-history-younghunjo1.tistory.com/130>

 

 

VAE에서 와 같은 variational inference (approximate inference) 기법이나, 전통적인 생성모델에 쓰이던 Markov chains 같은 거 안써도 된다는 것이 GAN의 큰 장점이라고 합니다. (앞서 언급했듯이, VAE와 Markov chains은 나중에 따로 글을 작성하여 설명하도록 하겠습니다)

 

 

 

 

 

 

 

 

3. Adversarial nets

"3.Adversarial nets" 부분도 문단(paragraph) 별, 문장(sentence) 별로 설명할 내용들이 많아 따로따로 나누어서 설명하도록 하겠습니다.

 

 

[3-1-1. First paragraph & Second sentence]

 

논문에서는 uniform distribution으로 input noise를 sampling 했다고 합니다. 그 외 설명은 아래 이미지로 대신할 수 있을 것 같습니다.

 

 

여기서 한 가지 질문을 해보도록 하겠습니다.

 

"앞서, uniform sampling을 했다고 했는데, gaussian sampling을 하는건 안되나요?"

 

지금부터 이에 대한 답을 간단히 하기 위해 generative modeltaxonomy를 살펴보도록 하겠습니다.

 

앞서 "[0-3. Estimating generative models]"에서도 언급했듯이 우리는 generative model이 이미지 데이터의 확률분포를 maximum likelihood 하기를 원합니다. 하지만, 이미지 데이터를 표현(representation)하는 확률분포를 단 번에 아는 것은 쉬운일이 아니죠. 그래서, 학습을 통해 generative model을 이미지 데이터의 확률분포에 maximum likelihood 하도록 estimation(추정)하게 되는 것입니다.  이렇게 추정을 하는 방식에는 크게 두 가지로 나눌 수 있습니다. 

 

 

 

첫 번째 방식은 explicit desnity입니다.  예를 들어, VAE에서는 이미지 데이터 확률분포  \(x\sim~p_{x}(x)\) or \(p_{x\sim~data}(x)\) 를 표현(representaiton)해주기 위해 이상적인 z 값을 sampling하기를 원합니다. 즉, 이상적인 z의 확률분포인 \(z\sim~p_{z}(z)\) or \(p_{z\sim~latent}(z)\)를 알아내고 싶은 것이죠. 그래서, VAE 모델은 사전명시적(explicit)으로 z의 확률분포인 \(p_{z\sim~latent}(z)\)가 특정 probability distribution인  gaussian distribution을 따를 것이라 가정합니다.  특히, VAE에서 초기에 설정한 density estimation 수식은 intractable했기 때문에 이를 variational inference를 이용해 approximation하도록 하여 tractable하게 바꾸게 됩니다. (← 이 부분에 대한 자세한 설명에서는 VAE paper 리뷰하면서 하도록 하겠습니다)

 

\(Z\sim~N(\mu, \sigma^{2})\)

\(P_{Z}(z)\)

 

<그림 출처: https://taeu.github.io/paper/deeplearning-paper-vae/>

 

 

두 번째는 GAN과 같은 implicit density 방식입니다. 앞서 VAE에서 언급한 것 처럼 explicit density(명시된 사전 확률분포)를 이용하는 방식아닌 사전에 어떠한 확률 분포도 명시하지 않습니다. 이것의 의미하는 바는 z의 확률 분포가 특정 확률분포를 따라야 한다는 가정이 없어도 된다는 뜻입니다.  그래서 앞서 input noise에 해당하는 z를 sampling 할 때, z가 uniform distribution을 따른 다는 가정하에 sampling을 해도 되고, gaussian distribution을 따른 다는 가정하에 sampling을 해도됩니다. 즉,  GAN 방식에서의 generative model은 (z의 확률분포가 무엇인지와는 별개로) 알아서 이미지 데이터의 확률 분포를 estimation할 수 있게 됩니다. 

 

앞서 VAE에서 intractable하다고 했던 이유는 사전에 명시적(explicit)으로 정의된 z의 probability distribution(=density function) 때문이라고 했는데, GAN에서는 z의 probability distribution에 대한 제약이 없으니 애초에 intractable density funciton을 approximating 할 필요가 없게 되는 것이죠.

 

"Since an adversarial learning method is adopted, we need not care about approximating intractable density functions."

 

(↓↓↓위의 영어문장을 발췌한 사이트↓↓↓)

https://towardsdatascience.com/generative-adversarial-networks-explained-34472718707a

 

Generative Adversarial Networks — Explained

Deep learning has changed the way we work, compute and has made our lives a lot easier. As Andrej Karpathy mentioned it is indeed the…

towardsdatascience.com

 

 

즉, GAN은 구조적으로 adverarial training 방식을 채택함으로써 몇몇 generative model에서 겪었던 intractable 문제들을 다룰 수 있게 된 것입니다. 

 

"It's this back and forth that allows GANs to tackle otherwise intractable generative problems."

 

(↓↓↓위의 영어문장을 발췌한 사이트↓↓↓)

https://developers.google.com/machine-learning/gan/training

 

GAN Training  |  Generative Adversarial Networks  |  Google Developers

Send feedback GAN Training Because a GAN contains two separately trained networks, its training algorithm must address two complications: GANs must juggle two different kinds of training (generator and discriminator). GAN convergence is hard to identify. A

developers.google.com

 

 

 

 

 

 

[3-1-2. First paragraph & Third, Fourth sentence]

 

세 번째 문장은 아래 그림으로 대체하고, 네 번째 문장은 "0-1. Adversasrial process"에서 설명했으니 넘어가도록 하겠습니다.

 

 

[3-1-3. First paragraph & Fifth sentence]

 

 

"Discriminator 관점에서는 Value function(=V(D,G)maximization 되어야 하고, Generator 관점에서는 Value functionminimization되어야 합니다."

 

 

지금부터 이 부분에 대한 설명을 조금 더 자세히 해보도록 하겠습니다.

 

 

[Discriminator 관점]

먼저 Discriminator 관점에서 Value function(=V(D,G))해석해보겠습니다.

 

<그림 출처: https://www.slideshare.net/NaverEngineering/1-gangenerative-adversarial-network>

 

"Discriminator 관점에서는 real datax가 들어왔을 때 true=1 이라고 판별해줘야 하고 (D(x)=1), z로부터 생성된 fake dataG(z)가 들어왔을 때는 fake=0 이라고 판별해줘야 합니다(→D(G(z))=0)."

 

Discriminator가 이상적으로 작동하게 되면 D(x)=1, D(G(z))=0이기 때문에 V(D,G) 값은 0이 출력됩니다. 반대로, discriminator가 제 기능을 하지 못 하면 D(x)=0, D(G(x))=1 과 같은 값을 출력합니다. 이 때는, V(D,G) 값이 -∞로 흘러가죠. (D(x)=1, D(G(x))=1), (D(x)=0, D(G(x))=0) 다양한 조합을 생각해 보더라도 V(D,G)의 max 값은 0이고, min 값은 -∞ 인것을 알 수 있죠. 그래서 V(D,G) 함수가 갖는 range0 ~ -∞ 가 됩니다.

 

즉, discriminator 관점에서 봤을 때 V(D,G)maximization 한다는 것, 0값에 수렴한다는 뜻과 같습니다.

 

사실 위와 같은 수식은 어떤 새로운 개념이 아니라, binary cross classification (real or fake)을 위해 binary cross entropy 수식을 이용한 것이라고 보시면 됩니다.

 

 

 

[Generator 관점]

Generator 관점에서는 Value function(=V(D,G))minimization되어야 합니다.

 

<그림 출처: https://www.slideshare.net/NaverEngineering/1-gangenerative-adversarial-network>

 

V(D,G)두 식으로 구성된다고 봤을 때, generator 관점에서 좌측 식은 고려 대상이 아닙니다. 왜냐하면, generator는 단지 z만을 입력으로 받기 때문이죠. (아래 그림 참고)

 

Generator는 discriminator를 속여야 하기 때문에 D(G(z))=1 방향으로 학습을 진행하게 됩니다. 이러한 방향으로 학습이 되다보면, 우측식에 의해 Value function(=V(D,G)은 min 값인 -∞ 으로 수렴하게 되기 때문에, V(D,G)minimize 하는 방향으로 학습하게 됩니다.

 

 

즉 이렇게 Generator를 학습시기키기 위해 Generator와 Discriminator가 상반된 (Adversarial) 목적을 갖는 다는 특성이 있기 때문에 Generative Adversarial Network 라고 부르게 됩니다.

 

<그림 출처: cs231n. lecture 14. Generative models>

 

 

수식에서 평균의미하는 바는 간단합니다.

  • X: Real image dataset, G(z): Fake image dataset

 

 

V(D,G)라는 objective function은 결국 GAN이 어떠한 방향으로 학습하길 원하는지를 의미합니다. 만약, E라는 수식이 없으면 V(D,G)를 통해 GAN이 학습 할 때, 하나의 X 데이터, 하나의 G(z) 데이터만을 고려해서 학습하게 됩니다. 이렇게 되면 GAN이 굉장히 불안정하게 학습을 하게 되죠. 왜냐하면 다음에 학습할 X데이터와 G(z) 데이터가 이전  X, G(z) 데이터들과 확연히 다를 수 있기 때문입니다.

 

이는, 우리가 batch를 크게 잡아주지 않을 때와, 크게 잡아줄 때의 차이점을 생각해보면 더 이해가 쉬울 듯 한데, 아래 링크에서 “3-1.large batch training”&”3-1-1.linear scaling learning rate” 부분을 참고하시면 좋을 것 같습니다.

 

https://89douner.tistory.com/248

 

2. Bag of Tricks for Image Classification with Convolutional Neural Networks

안녕하세요. 이번 글에서는 아래 논문을 리뷰해보도록 하겠습니다.(아직 2차 검토를 하지 않은 상태라 설명이 비약적이거나 문장이 어색할 수 있습니다.) ※덧 분여 제가 medical image에서 tranasfer l

89douner.tistory.com

 

다시말해, 다수의 X데이터, 다수의 G(z) 데이터를 평균적으로 고려할 수 있게 학습해야 GAN이 하나의 X real data, 하나의 G(z) 데이터가 아닌 X real dataset, G(z) fake dataset 모두를 고려하여 학습하게 되죠. 이렇게 모든 dataset을 고려한다는 표현에 평균과 distribution이라는 개념이 동시 내포되어 있는것이라고 생각합니다. (흔히 우리가 알고 있는 mini-batch 관점에서 해석해볼 수 있을 것 같습니다.)

 

 

 

 

[3-2-1. Second paragraph & First sentence]

 

다음 section4장(="4.Theoretical Results")에서는 GAN이라는 모델을 이론적으로 분석하는 내용들에 대해서 소개합니다

 

위의 문장 중 아래 부분에 해당되는 내용을 잠깐 설명드리겠습니다. 

 

"the training criterion allows one to recover the data generating distribution as G and D are given enough capacity, i.e, in the non-parametric limit"

 

Discriminator가 충분히 학습이 되면, generatorrecover할 수 있다고 표현하는데, 이 때 recover라는 뜻은 아래 의미 중 세 번째 의미로 쓰인 것 같습니다. , discriminator를 먼저 학습을 시킴으로써 초기에 어려운 상황에 놓인 generator가 성장할 수 있다는 의미를 내포하고 있는 것 같습니다.

 

 

Machine learning book에서는 parametric과 non-parametric의 차이를 아래와 같이 정의하고 있습니다.

 

"Does the model have a fixed number of parameters, or does the number of parameters grow with the amount of training data? The former is called a parametric model, and the latter is called a nonparametric model."

 

GAN이라는 모델은 데이터셋의 크기에 따라 generator, discriminator를 구성하는 parameter들의 수가 달라야 합니다. 그렇기 때문에, 신경망을 사용하는 GAN 모델을 non-parametric model로 보는 것 같네요.

 

개인적으로는 아래 인용구 처럼 Yann LeCun이 페이스북에서 언급했던 내용이 직관적으로 받아드리기 좀 수월했던 것 같습니다.

 

"In general, a model that you cannot "saturate" as you increase training dataset is non parametirc."

 

또한, 책에서는 parametric model과 non-parametric model의 장단점을 아래와 같이 정의하고 있습니다.

 

Parametric model

  • 장점: faster to use
  • 단점: stronger assumptions about the nature of the data distribution → 예를 들어, parameter 수가 고정 된 어떤 모델에 사전 확률 분포를 미리 설정하여 generative model을 만든다는건, data distribution이 설정된 사전 확률 분포를 따를 것이라고 가정하는 것 → 하지만, 현실 세계에서 data distribution이 앞서 설정한 강력한 가정(="사전확률 분포를 따를 것이다")을 따르는 경우가 많지 않음

 

Non-parametric model

  • 장점: flexible → 굳이 사전확률 분포같은 것을 안정해도 됨
  • 단점: often computationally intractable for large datasets. → 큰 데이터셋에서는 많은 parameter들이 필요하므로 종종 계산 시스템 관점에서 intractable할 수 있음

 

"the training criterion allows one to recover the data generating distribution as G and D are given enough capacity, i.e, in the non-parametric limit"

 

논문의 문장을 다시 한 번 살펴보겠습니다. 

 

Non-parametric (model의) limit(한계)은 computaionally intractable 문제를 늘 갖고 있습니다. 그래서 이러한 computationally intractable을 다룰 수 있는 enough capacity가 주어진다면, GAN training이 잘 될 수 있을거라 보고 있습니다.

 

(사실 앞서 GAN이 generative model에서 겪는 intractable 한 것을 해결했다고 하지만, 엄밀히 말해 "enough capacity"에 따라서 다시 intractable해질 수 있는 듯 합니다. )

 

(↓↓↓machine learning book에서 언급하는 parametric VS non-parametric models; "1.4.1 parametric vs non-parametric models" 참고↓↓↓)

http://noiselab.ucsd.edu/ECE228/Murphy_Machine_Learning.pdf

 

 

 

[3-2-2. Second paragraph & Second sentence]

 

이 문장에서는 Figure 1에 대해서 설명하도록 하겠습니다.

  • \(D\): Dashed blue line = discriminative distribution
  • \(p_{x}\): Dotted block line = data distribution
  • \(p_{g}(G)\): Solid green line = generative distribution

 

이미지를 표현할 수 있는 저차원 latent space를 z차원으로 간주하고, z차원에서 sampling할 때 사전확률 분포를 uniform distribution \(z\sim~p_{z}(z)\)으로 설정하면 아래와 같이 일정한 간격으로 sampling됩니다. 추출된 각각의 sample들로부터 generated image가 생성 됩니다.

 

 

 

 

 

 

(실제로 z축의 차원과 x축의 차원은 다르기 때문에 1차원 개념으로 표현하는건 엄밀히 말하자면 잘 못 된 이지만, 이해를 돕기 위해 이렇게 한 듯 합니다. 그래서, “a less formal, more pedagogical explanation of the approach”라는 표현을 쓴게 아닌가 싶기도 하네요..)

 

위에서 설명한 내용을 아래와 그림과 같이 표현 할 수 있을 것 같습니다.

 

 

 

 

 

위 ③에서는 이미지 같은 데이터non-uniform distribution으로 표현(representation)될 수 있음을 언급하고 있습니다. 여기서의 포인트는 이미지 데이터의 차원에서 이미지 데이터들의 분포를 표현할 때는 uniform distribution으로 표현하기 어렵다(or 표현할 수 없다)라는 사실 입니다. 그러므로, 정규분포가 아닌 다른 non-uniform distribution으로 볼 수 있습니다.

 

(↓이미지와 non-uniform distribution간의 관계를 설명한 글↓)

https://89douner.tistory.com/330?category=908620 

 

1. 이미지, 차원(dimension), 그리고 분포(distribution)간의 관계

안녕하세요. 이번 글에서는 이미지(data), 차원(dimension), 그리고 분포(distribution)간의 관계에 대해서 설명해보도록 하겠습니다. 앞으로 AutoEncoder, VAE, GAN을 이해하기 위한 가장 기본적인 background이..

89douner.tistory.com

 

 

 

 

그럼 이제부터 (a), (b), (c), (d)에 대한 설명을 해보도록 하겠습니다.

  • \(D\): Dashed blue line = discriminative distribution
  • \(p_{x}\): Dotted block line = data distribution
  • \(p_{g}(G)\): Solid green line = generative distribution
  • (a): data distributiongenerative distribution이 어느 정도 유사한 상태 (pg is similar to pdata) → D가 아직까지는 잘 구분해주긴 하나, 조금 불안정한 상태
  • (b): D가 잘 학습이 된 상태 → 예를 들어, (b) 그림상 해당 지점에서 왼쪽 값이면 real data로 구분, 오른쪽 값이면 fake data로 구분 D분포(관점)에서 x축 상의 값이 왼쪽일 수록 fake이미지라고 판단할 확률(y)이 높아짐 → D*관련 식은 뒤에서 설명
  • (c): G를 업데이트 한 후, 학습이 잘 된 D분포의 gradient가 G(z)가 좀 더 의미있는 이미지를 생성할 수 있게 유도 함→ 이 부분은 문장에 어떤 숨어 있는 뜻이 있는지 잘 이해를 못했는데, 그냥 학습이 잘 된 D로 인해 \(p_{g}(G)\)분포가 업데이트 되면서 점점 \(p_{x}\)분포에 가까워진다는 것으로 이해함
  • (d): GD가 충분히 학습되면 결국, G의 성능이 매우 높아져 Dreal datafake data전혀구분하지 못함 → 1/2 uniform distribution이 형성 됨

 

 

 

 

[3-2-3. Second paragraph & The rest]

 

 

 

[3-3-1. Third paragraph & First, Second, Third, Fourth sentence]

 

초기에는 D(G(z))=0 이나옵니다. 왜냐하면 초반에는 G:Generative model”이 정교하지 않은 fake 이미지를 생성하기 때문에, discriminatorG(z)로 생성된 이미지를 fake라고 잘 판별(D(G(z))=0)하게 됩니다. 그런데, log(1-(D(G(z)))) 꼴의 함수에서 초기 D(G(z)) 값이 0이 나온다면 gradient 값 자체가 saturation 된 상태이기 때문에, 업데이트가 더딜 수 있습니다.

 

그래서, G를 학습시키는 관점을 log(1-D(G(z)))minimization 하는 방향이 아니라, log(D(G(z)))maximization 하는 방향으로 학습시키게 하기 위해 term을 변경해 줍니다. 이렇게 term 변경이 가능한 이유는 아래와 같습니다.

 

"log(1-D(G(z)))minimization 한다 = D(G(z))=1 뱉어내도록 G를 학습시키기만 하면된다 =log(D(G(z)))maximization 하게 학습시킨다 = D(G(z)))=1뱉어내도록 G가 학습된다."

 

 

 

위와 같은 이유로 인해 실제 학습에 쓰이는 Value function (=V(D,G))는 아래와 같이 변경됩니다.

 

 

 

 

[3-3-2. Third paragraph & The last sentence]

 

위의 문장을 이해하기 위한 핵심 키워드"the same fixed point of the dynamics" 입니다. 이 키워드에 대한 개념을 세 가지 부분으로 나누어 차례대로 설명하겠습니다.

  1. Numerical Analysis
  2. Fixed point iteration (with 경사하강법(Steepest Gradient Descent))
  3. Dynamics

 

[Numerical Analysis]

수치해석학(numerical analysis)해석학 문제에서 수치적인 근삿값을 구하는 알고리즘을 연구하는 학문입니다. 현대의 수치해석 역시 정확한 해를 구하지는 않습니다. 왜냐하면 현실에서 많은 문제들을 접했을 때, 실제로 정확한 해를 구하는 것이 불가능한 경우가 많기 때문입니다. 그대신 대다수의 경우, 수치해석을 이용해 합리적인 수준의 오차를 갖는 근사값을 구하는 것에 집중합니다.

 

그래서, 수치해석에서 optimization 이라는 용어가 쓰입니다. 최적화(optimization)라는 뜻 자체가 완벽하지 않다는 것을 가정하에 어느 정도의 오류를 수용하면서 최적의 값을 얻어내는 과정을 의미합니다.

 

수치해석 응용분야 예시

  • 미분방정식: 수치적으로 미분 방정식을 푼다는 것은 주어진 미분 방정식의 근사해를 찾는 것 → Ex) Euler’s Methods
  • 확률미분방정식과 Markov Chain
  • 선형대수

 

최신 한양대 응용수학과 커리큘럼을 보면 수치해석을 위한 선수과목이 무엇인지 알 수 있습니다. (최적화이론에 convex optimization 같은게 들어있는 것 같은데..., 평소에 인공지능 하면서 부족하다거나 배우고 싶어했던 수학과목들이 체계적으로 잘 정리되어 있다는 느낌을 받았습니다)

<그림 출처:  http://amath.hanyang.ac.kr/page/?pid=curriculum1>

 

 

 

[Fixed point]

보통 Numerical Analysis 수업 자료들을 살펴보면 Fixed point라는 개념Chapter 3 정도에 위치해 있습니다.

 

<그림 출처:  https://web.ma.utexas.edu/CNA/NA2/toc.html>

 

Fixed points는 Nonlinear Equations(비선형 방정식)과 관련이 되어있기 때문에 먼저, Noninear Equations에 대해서 알아보도록 하겠습니다.

 

Nonlinear Equations은 일차 함수식처럼 변수들 사이의 관계가 직선적으로 증가하거나 감소하는 것이 아니라, 변수들 사이의 관계가 곡선적으로 증가하거나 감소하는 현상을 나타내는 방정식을 말합니다.

 

딥러닝 activation function, softmax와 같은 non-linear 함수가 결합된 합성함수 형태이므로 딥러닝의 최종 loss function 자체는 nonlinear function이라 할 수 있습니다

 

(↓딥러닝과 nonlinear function과의 관계를 설명한 글)

https://89douner.tistory.com/22

 

4. Activation Function은 왜 만들었나요?

Q. Activation function은 왜 쓰이는건가요? Q. Activation function은 왜 이렇게 종류가 다양한건가요? 앞서 Neural Network에 대해서 배워보았습니다. 다시 Neural Network를 살펴볼까요? 아래그림중에 f라고 표..

89douner.tistory.com

 

https://89douner.tistory.com/23

 

5.Multi-Layer Perceptron (MLP), Universal Theorem

Q. 왜 단층 Perceptron 모델에서 Layer를 추가하게 되었나요? Q. Universal Approximation Theorem은 뭔가요? 2~4장까지 배웠던 부분을 아래와 같이 하나의 그림으로 요약을 할 수 있습니다. 1.입력값들이 가중치.

89douner.tistory.com

 

 

 

 

 

 

"딥러닝을 학습한다는 concept을 non-linear (loss) equation을 푸는(solving; solution) concept으로 이해할 수 있습니다."

 

 

이 때, x를 입력 데이터라고 하면 non-linear (loss) equation = f(x) = 0 의 값을 찾는 것이 목적이 됩니다. 하지만, 현실에서 loss=0 값을 찾는건 불가능에 가깝기 때문에 0에 가까운 loss 값을 찾기 위해 반복(iteration)하여 학습을 하게 되는 것이죠.

 

 

"이렇게 반복적인 방법으로 0(허용오차 범위 내에 있는) 근사값을 찾는 방법 중에 하나가 fixed-point iteration이라는 방법입니다."

 

 

Fixed-point iteration을 알아보기에 앞서 fixed-point의 수학적 정의가 무엇인지 살펴보겠습니다.

 

"In mathematics, a fixed point (sometimes shortened to fixpoint, also known as an invariant point) of a function is an element of the function's domain that is mapped to itself by the function."

 

(↓↓↓함수에서 Domain과 Range의 개념을 잘 보여주는 그림↓↓↓)

<그림 출처:  https://www.cuemath.com/calculus/domain-and-range-of-a-function/>

 

 

 

아래 그림의 f(x) 함수에서는 3개의 fixed opints를 갖습니다.

 

"y = f(x) = x → a fixed set = {fixed point1, fixed point2, fixed point3}"

 

Fixed point에 대해서 알아봤으니, 이제는 Fixed point iteration에 대해서 알아보도록 하겠습니다. 

  • Fixed point iteration은 x=f(x)를 만족하는 x(=fixed point) 값을 알면 g(x)=0를 풀 수 있다는 관점에서 출발합니다.
  • 하지만, x=f(x)를 만족시키는 x를 찾는 것은 현실세계에서 쉬운 문제는 아닙니다.
  • 그래서, x값을 iteration 방식을 통해 업데이터 하여 x=f(x)에 근사하게 만드는 것이죠.
  • x=f(x)를 만족시키는 근사값 x를 구하게 되면 g(x)=0을 풀 수 있게 됩니다.
  • iteration을 구하는 방식을 예로 들면 아래와 같습니다.
  • \(x_{2}=g(x_{1})\)    →    \(x_{3}=g(x_{2})\)    →    \(x_{4}=g(x_{3})\)    →    ...    →    \(x_{i+1}=g(x_{i})\)
  • 위와 같은 방식을 통해 x=g(x)를 만족시키는 근사값 \(x_{i+1}\)을 구합니다. 그리고, 이를 통해 g(x)=0의 최적해인 x값을 구하게 되는 것이죠
  • (여기서 간주해야 할 것이 fixed point iteration을 통해 최적해를 찾아가기 위해서는 f, g 함수 모두 연속적이어야 한다는 점입니다.
  • 아래 문제를 통해 위에서 설명한 내용들을 직관적으로 이해해보도록 하겠습니다.

[문제1] g(x) = log(x)-x = 0을 구하기 위한 fixed point iteration 풀이법은?

  1. g(x) = log(x) - x
  2. f(x) = log(x) = x
  3. \(x_{1}=g(x_{0})\)    →    \(x_{2}=g(x_{1})\)    →    ...    →    \(x_{i+1}=g(x_{i})\)

<그림 출처:  https://pseudo-code.tistory.com/123>

 

[문제2] 아래 그림을 보고 fixed point iteration으로 해를 찾아가는 방식을 이해하시오.

 

※참고로 fixed point iteration 방식을 이용해 근사해를 찾을 수 있는지 없는지에 대해 알아보려면 아래와 같은 조건을 따져보면 됩니다.

  • Fixed point (a)에서 f'(a)가 1보다 작은지? 큰지? 확인

<그림 출처:  https://cae.seoultech.ac.kr/num/m06_Equation2.pdf>

 

Fixed point iteration에 대해 알아봤으니 이것이 딥러닝에서 사용되는 경사하강법과 어떠한 연관이 있는지 알아보겠습니다.

 

먼저, 아래 내용은 위스콘신 대학 computer science 부서의 Stephen J. Wright 교수의 수업교재 중 일부를 발췌한 내용입니다.

 

우리가 deep learning을 통해 배운 경사하강법 (Steepest Descent method) 방식은 Fixed point iteration 으로 간주할 수 있습니다. 앞서 배운 fixed point iteration과 조금 다른 점은 아래와 같습니다. 

  • 함수는 convex 조건을 만족해야 최적해를 구할 수 있다.
  • 기존 f(x)=0 방식이 아닌 (앞선 설명에서는 g(x)=0로 표기했습니다), gradient 관점에서 ∇f(x)=0 의 최적해를 구하기 위해 iteration 방식을 적용한다.

 

(아래 x*는 실제 해라고 가정하는 x의 근사값(=최적값)으로 볼 수 있습니다)

 

 

 

 

다시 논문으로 돌아와 해당 문장을 살펴보겠습니다.

 

 

 

 

앞서 설명한 내용을 요약하면 generator 부분의 초기 학습 시, log(1-D(G(z)))의 gradient값이 굉장히 낮기 때문에 saturation되는 현상을 보여줍니다. 그래서 G 입장에서는 log(1-D(G(z))의 gradient 값으로 학습해야 하는데, 충분한 gradient가 backpropagation되지 않기 때문에 초기 학습에 어려움을 느낍니다. 그래서, 아래 그림과 같이 log(D(G(z)))와 같은 형태로 변경시켜주었죠. (←이렇게 변경이 가능한 이유는 "3-3-1. Third paragraph & First, Second, Third, Fourth sentence"에서 설명드렸습니다)

 

 

 

문맥상에서 보면 log(D(G(z))로 변경시켜 주기 전에는 "the same fixed point of the dynamics of G and D" 가 아니었다고 생각하는데, 구체적으로 dynamcis와 same fixed point간의 관계를 파악하진 못했습니다. 여기서 말하는 dynamics라는 것도 결국에는 dynamic optimization(or programming) 관점에서 해석할 수 있고, "chain rule + dynamic programming = neural network"이기 때문에 여기서 언급하는 dynamics가 gradient를 내포하고 있는 듯 합니다. 그래서, log(D(G(z))로 변경되면 같은 gradient가 전파가 되고, 이것이 the same fixed point"와 연관이 있을 것 같긴한데, 아직까지 정확한 연결고리를 찾진 못했네요. 혹시 아시는 분 있으면 알려주세요!

 

 

 

 

 

 

 

 

지금까지 GAN에 대한 구조적인 부분에 대해서 설명해보았습니다.

 

설명이 잘 못 됐다고 생각되는 부분은 언제든 댓글을 남겨주세요!

 

다음에는 GAN이라는 모델이 numerical, iterative 방식으로 최적해(optimum)을 구할 수 있는지 증명하는 "4.Theoretical Results"에 대해설명하도록 하겠습니다.

 

 

감사합니다!

 

 

 

 

 

 

[Refernece]

1. 1시간 만에 GAN 학습하기

https://www.youtube.com/watch?v=odpjk7_tGY0 

 

 

2. CS231n. Lecture13. Generative Models 

https://www.youtube.com/watch?v=5WoItGTWV54 

 

 

 

 

안녕하세요. 

이번 글에서는 intractable problem에 대해서 설명드리려고 합니다.

 

딥러닝 뿐만 아니라 컴퓨터를 통해 연구를 할 때, 자신이 설계한 모델컴퓨터 상에 돌아갈 수 있는지 없는지를 알아내는 것은 굉장히 중요한 문제입니다.

 

"왜냐하면, 어렵게  어렵게 모델을 설계했는데, 해당 모델이 계산 불가능하다면 컴퓨터 상에서 쓸 수 없기 때문이죠."

 

컴퓨터 과학에서는 보통 계산 불가능하다는 것intractable하다고 표현합니다.

 

"그렇다면, 계산 불가능하다는 것을 어떻게 정의할 수 있을까요? " 

 

지금부터 위의 질문에 대한 답을 찾아가면서 intractable에 대한 개념을 이해해보도록 하겠습니다.

 

※Note. 참고로 intractable computation을 설명하기 위해서는 필연적으로 수학 역사를 다루어야 합니다. 하지만, 제가 수학과가 아니기 때문에 잘 못 된 설명이 있을 수 있으니 발견 시 꼭 댓글 달아주시면 감사하겠습니다!!!!!   

 

 

 

 

 

 

1. 무한이라는 개념의 등장

식탁에 있는 오렌지 하나냉장고에 있는 오렌지 하나를 가져와 제 접시에 놓았습니다. 그렇다면, 제 접시에는 두 개의 오렌지가 있을 겁니다. 이것을 수식으로 표현하면 아래와 같죠.

1 + 1 = 2

오렌지라는 물체를 하나의 단위(unit) 즉 수(number)로 간주하기 때문에 위와 같은 식이 성립하죠. 이것은 우리 눈으로 직관적으로 확인 할 수 있기 때문에 매우 자명하다고 할 수 있습니다. 

 

"그런데, 여러분은 무한이라는 개념을 직관적으로 설명하실 수 있으신가요?"

"우리 주변에 무한이라는 개념을 관찰할 수 있는 것이 무엇이 있죠?"

 

처음에 이런 질문들을 듣는다면 굉장히 혼란스러우실 겁니다. 어떤 분들은 무한대(∞)를 세상에서 가장 큰 수라고 이야기 하기도 하지요. 그런데, 수라는 관점에서 무한대(∞)를 해석하면 "1+무한대>무한대"가 되어야 하는데, 수학적 정의에 따르면 "1+무한대=무한대" 이죠. 그래서, 무한대(∞)라는 것을 수라는 관점으로 제한하기에는 무리가 있어보입니다.

 

"그렇다면, 무한대라는 개념을 어떤 관점에서 이해하면 되는 것일까요?"

먼저, 아래 영상을 살펴보도록 하겠습니다!

 

 

 

"위 영상에서 살펴봤듯이 무한이라는 개념은 "과정(process)"이라는 관점에서 이해할 수 있습니다."

 

아래 영상에서 아르키메데스(Archimedes; BC.287)삼각형의 변의 무한이 작게 만들어가는 과정을 통해 원의 둘레정의하기도 했죠. 이때, 한 변의 길이가 무한히 작게 간다는 것은 0에 가까워 지는 것과 같은데, 이러한 과정을 설명하기 위해 무한소(infinitesimal)라는 개념이 등장하게 됩니다. (반대로, 무한대는 무한히 커지는 과정을 의미하겠죠?)

 

 

 

이 후, 아이작 뉴턴(Isaac Newton; 1642), 라이프니츠( Gottfried Wilhelm Leibniz; 1646)무한소(infinitesimal)라는 개념을 이용미적분학발전시키게 됩니다.

 

 

하지만, 당시 미적분학체계가 갖춰지지 않은 상태였기 때문에 베르나도 볼차노(Bernard Placidus Johann Nepomuk Bolzano; 1781), 오귀스탱 루이 코시(Augustin Louis Cauchy; 1789), 카를 바이어슈트라스(Karl Theodor Wilhelm Weierstraß; 1815) 등의 수학자들이 엡실론-델타 논법을 발명했고, 이를 통해 극한, 미분, 적분 등의 개념들을 엄밀화하기 시작합니다. 예를 들어, 극한이라는 개념은 "x가 한없이 커질 때, f(x)가 한 없이 어떤 값에 가까워지면 그 값을 극한 값"이라고 하는데, 이때 "한없이"라는 개념과 "가까워진다"라는 개념을 공리(axiom), 정리(definition) 이용 수학적으로 엄밀하게 정의한 것이죠. 그리고, 이러한 노력들을 통해 초기 해석학(analysis)이 탄생합니다. 

 

(↓↓↓코시의 엡실론-델타 논법 설명↓↓↓)

 

 

(↓↓↓ 해석학 탄생의 역사↓↓↓)

 

 

또한, 칸토어(Georg Ferdinand Ludwig Philipp Cantor; 1845)무한이라는 개념을 집합의 관점에서 정리하였고, 데데킨트(Julius Wilhelm Richard Dedekind; 1831) 실수체계를 엄밀하게 정리함으로써 무한이라는 개념을 체계화시켰습니다. 결국 해석학을 통해 대수학, 기하학에 대한 개념을 엄밀하게 하려는 시도까지 하게 되죠.

 

 

그림 출처: https://dm19sky.tistory.com/59

 

이렇게 무한이나 극한에 대한 개념체계화 함으로써 미적분학, 해석학이 발전해갔습니다. 하지만, 이러한 분야가 발전하는 것을 마음에 들지 않았던 수학자도 있었죠. "라위천 에흐베르튀스 얀 브라우어르(Luitzen Egbertus Jan Brouwer: 1881)"는 18~19세기 미적분학, 해석학의 발전이 기존 수학에 많은 문제점을 야기했다고 주장하는데 그 이유는 아래와 같습니다.

 

"수학이라는 것은 철저하게 공리(axiom)과 정리(definition)에 의해 견고하게 구축되어야 하는 분야인데, 무한이나 극한 같이 관찰하기 어려운 개념들을 추상화 되면서 이러한 체계들이 무너지고 있다"

 

라위천 에흐베르튀스 얀 브라우어르

 

 

예를 들어, 이 당시 집합론은 모든 수학의 근간이었는데, 러셀(Bertrand Arthur William Russell; 1872)이 집합론에 모순이 있다고 주장합니다. (러셀의 역설(Bertrand Russel's paradox)이라고 알려져있죠)

 

러셀

 

"이렇게 수학의 체계가 흔들리려고 할 때즘 독일의 수학자 힐베르트(David Hilbert; 1862)가 등장합니다."

 

 

 

 

2. 힐베르트와 괴델의 불완전성 정리

"힐베르트(David Hilbert; 1862)는 공리계를 잘 설계할 수 있다면 '러셀의 역설' 이 해결 될 수 있다고 주장했습니다."

즉, 당시 수학 개념들은 충분히 체계화 시킬 수 있다고 본 것이죠.

 

힐베르트

 

힐베르트는 1928년 볼로냐 세계 수학자대회에서 한 가지 문제를 던집니다.

 

"현재 존재하는 모든 수학 문제들을 풀 수 있는 일반적인 알고리즘(기계)이 존재하는가?"

 

이러한 질문을 던진 이유는 "모든 수학 문제들을 풀 수 있는 일반적인 알고리즘 또는 기계가 있다면 모든 수학 체계를 형식화 할 수 있다는 것을 의미"했기 때문입니다.

 

만약 모든 수학 문제들을 풀 수 있는 일반적인 알고리즘 또는 기계가 등장한다면 수학자들이 찾아내는 모든 수학 공식들을 계산 할 수 있을 것이고, 그렇게 되면 수학자들은 모두 실직할 것이라고 봤죠.

 

또한, 앞서 언급한 알고리즘(or 기계)이 등장하면 수학의 '무모순성', '완전성', 그리고 '결정가능성'을 증명할 수 있다고 주장합니다.

 

미국의 수학자 괴델( Kurt Gödel; 1906)은 힐베르트가 궁금해 했던 "모든 수학 문제들을 풀 수 있는 일반적인 알고리즘"은 없다고 주장합니다. 아무리 공리 체계가 잘 설계되더라도 러셀의 역설은 피할 수 없다고 주장하죠. 자신의 주장을 증명하기 위해 "괴델의 불완전성 정리(Gödel's incompleteness theorems)"를 발표합니다. 

 

괴델

 

또한 괴델주장뒷 받침수학자가 있었습니다. 바로, Alan Turing인데요.

 

"지금부터 Alan Turing에 대해 설명하면서 좀 더 intractable이라는 개념에 다가가도록 하겠습니다."

 

 

 

3. Alan Turing 그리고 Halting problem

Alan Turing(1921)1934년 케임브리지 수학과졸업하고, 학업더 연장하게 됩니다.

 

"1935년 Max Newman 교수의 수업 중 "괴델의 불완정성 법칙"에 대한 이야기를 듣게 됩니다."

 

그리고 힐베르트가 말한 "모든 수학문제를 풀 수 있는 일반적인 기계"에 대해서 관심을 갖게 됩니다. 결국, 1936년 "On Computable Numbers, with an Application to the Entscheidungsproblem" 이라는 논문에서 앞서 언급한 기계를 고안하게 되죠.  그리고, 오늘날 이 기계를 Turing Machine이라 부릅니다.  (해당 논문에서는 universal mahince이라고 표현된 것을 오늘날 Turing Machine이라고 부르게 된 것이죠)

 

https://www.semanticscholar.org/paper/On-Computable-Numbers%2C-with-an-Application-to-the-Turing/ab7790485f26ce65f9d83dd700c43e49058bdd2b

 

[PDF] On Computable Numbers, with an Application to the Entscheidungsproblem | Semantic Scholar

1. Computing machines. 2. Definitions. Automatic machines. Computing machines. Circle and circle-free numbers. Computable sequences and numbers. 3. Examples of computing machines. 4. Abbreviated tables Further examples. 5. Enumeration of computable sequenc

www.semanticscholar.org

 

 

 

 

힐베르트가 말한 "모든 수학문제를 풀 수 있는 일반적인 기계"는 바꿔말해 "모든 연산(=계산; computation)이 가능한 가상의 기계"라는 것과 같습니다. 왜냐하면 결국 "수학문제를 푼다는 것"은 "계산을 한다는 것"과 같으니까요.

 

"그렇다면, 이러한 Turing Machine을 이용해 어떻게 괴델의 주장을 뒷받침 했을까요?"

 

이에 대한 답을 하기 위해서 Turing Machine에 대해서 잠깐 설명해보도록 하겠습니다. 

 

 

[Turing machine 작동원리]

Turing machine 작동원리는 아래 영상들을 참고해주세요!

 

 

 

[Hibert's Decision Problem & Halting Problem]

힐베르트는 "'모든 수학 문제들을 풀 수 있는 일반적인 알고리즘 또는 기계'가 존재하면 '모든 수학적 문제에 대해서 그 문제가 참인지 거짓인지를 확실하게 결정해 줄 명확한 방법이 존재할 수 있는지'" 궁금해했습니다.

 

이러한 질문을 "힐베르트의 결정 문제(Hilbert's Decision Problem)"라고 합니다. 이 문제에 답을 하기 위해서는 수학 문제가 참인지 거짓인지 증명이 되어야 합니다. 앞서 Turing 머신은 모든 연산을 할 수 있기다고 배웠습니다. 그렇다면, 모든 수학적 문제를 Turing 머신에 넣었을 때 참인지 거짓인지 판명하면 수학의 '결정가능성'을 입증할 수 있게 되는 것이죠. 

 

 

"그런데 반대로, 수학의 '결정가능성'을 반증하려면 어떻게 해야할까요?"

 

Turing machine이 수학 문제를 입력 받았을 때, 참 또는 거짓과 같은 답을 내놓지 않는다면 '결정가능성'을 반증할 수 있을겁니다. 참 또는 거짓과 같은 답을 내놓지 않는다는건 Turing Machine이 어떤 결론에 도달하지 않고, 즉 멈추지 않고 계속해서 돌아간다는 뜻이죠. 그래서 Turing은 힐베르트의 결정 문제(Hilbert's Decision Problem)를 "(수학 계산이 가능한) Turing machine에 데이터를 입력했을 때, 해당 machine이 궁극적으로 정지하는지 정지하지 않는지"에 대한 문제인 Halting Problem으로 바꿔 생각합니다. 만약, 정지하지 않으면 수학의 '결정가능성'을 반증하게 되는 것이죠.

 

 

 

 

[Turing Machine과 오늘날 컴퓨터]

Turing Machine계산이 가능한 시스템을 갖고 있습니다. 폰 노이만(John von Neumann; 1903)은 이러한 Turing machine확장하여 폰 노이만 구조설계하죠. 그리고, 오늘날 폰 노이만 구조를 오늘날 컴퓨터의 prototype으로 보고 있습니다.

 

"바꿔 말해, 모든 컴퓨터는 Turing Machine을 기반으로 하고 있다고 할 수 있습니다."

 

예를 들어서, 슈퍼컴퓨터가 할 수 있는 계산은 일반 컴퓨터에서 할 수 있습니다.  왜냐하면 모두 CPU, GPU 같은 장치들로 연산이되기 때문이죠. 단지 일반 컴퓨터에서는 시간이 더 오래걸릴 뿐입니다. 다시말해, 계산 능력자체는 동일한 것이라 할 수 있습니다. 이와 같은 맥락으로, 일반 컴퓨터의 계산 능력은 Turing machine과 동일하다고 할 수 있는 것이죠. 

 

 

 

 

4. Intractable & Tractable (Feat. NP & P 문제)

Turing machine은 다른 말로 "결정론적 튜링 기계(Deterministic Turing Machine: DTM)"라고도 합니다. 

 

결정론적이라는 표현이 붙은 이유는 Turing Machine 작동원리 영상에서 언급됐듯이 "테이프의 symbol이 s이고, 현재 상태가 q라면 알고리즘에 의해 다음 명령어가 유일하게 결정"되기 때문이죠.  

 

Deterministic Turing Machine은 현대 모든 계산 기능을 갖춘 기계들 (ex: 컴퓨터, 스마트폰, 슈퍼 컴퓨터 등)을 대표합니다. 그래서, "어떤 문제를 컴퓨터를 사용해 다항시간(polynomial time) 내에 답을 구할 수 있냐?"는 질문을 "어떤 문제를 Deterministic Turing Machine을 사용해 다항시간내에 답을 구할 수 있냐?"라는 문제로 치환할 수 있는 것이죠.

 

"어떤 문제를 Deterministic Turing Machine을 사용해  다항시간내에 답을 구할 수 있냐?"

 

이 치환된 질문은 굉장히 중요합니다. 왜냐하면, 이 질문을 기준으로 intractable computation(problem)인지 tractable computation(problem)인지 구분하기 때문이죠. Deterministic Turing Machine을 이용하여 어떤 문제를 polynomial time(다항시간) 안에 풀 수 있으면 "해당 문제는 polynomial time complexity을 갖는다"라고 말할 수 있게되고, 해당 문제를 tractable problem으로 간주하게 됩니다. 반대로, polynomial time 안에 풀 수 없으면 intractable problem으로 간주하게 되죠.

 

 

[P문제]

컴퓨터 과학에서는 tractable computation(problem)을 Polynomial의 P를 따서 P문제라고 정의합니다. 다시 말해, polynomial time complexity를 가지면, tractable(=풀만한; feasible) 문제라고 여기며, 이러한 문제들의 집한을 P라고 나타내는 것이죠. 

 

 

현실에서는 어떤 문제를 풀 때 이용되는 알고리즘이 (차수가) 2차 이하의 time complexity를 가진다면 유효한 알고리즘이라고 합니다. 이러한 알고리즘으로 풀리는 문제들을 P 문제 또는 tractable problem이라고 하죠. 예를 들어, shortest path 같은 최단거리를 다루는 다양한 알고리즘은 이미 P문제, 즉 tractable problem이라는 것이 증명되었죠.

 

 

그림 출처: https://www.joyk.com/dig/detail/1608665582509127

 

 

[NP문제]

반대로 None-Polynomial time complexity를 가진다면 intractable computation(problem)으로 여기며, 이러한 문제들의 집합을 NP라 합니다.

 

현실적에서는 3차 이상의 time complexity를 갖고 있을 경우 NP로 정의합니다.

 

"정리하자면, P, NP 문제는 Turing machine과 같은 계산 시스템 관점에서 풀기 어려운 (=intractable; NP) 문제인지 그래도 현실적으로 풀기 수월한 (=tractable; P) 문제인지에 따라 결정되는 것입니다."

 

 

 

 

 

5. 왜 P, NP 문제를 구분하는 것이 중요한가요?

현재 딥러닝을 연구하는 사람들에게 컴퓨터는 빼놓을 수 없는 장비입니다. 설계한 딥러닝 모델을 컴퓨터에서 학습시키고 그 결과를 도출해야하기 때문이죠. 새로운 딥러닝 모델을 설계하기 위해서는 기존에 쓰이지 않은 개념들을 접목시켜야 합니다.

 

"그런데, 이러한 새로운 모델을 설계하고 연구 할 때 중요한 것이 "기존에 쓰이지 않은 개념"을 접목시킨 새로운 딥러닝 모델이 계산 가능해야 한다는 것입니다."

 

만약, 새로 설계된 새로운 딥러닝 모델이 계산 불가능하다면, 해당 모델을 학습시키는건 현실적으로 불가능하다고 볼 수 있겠죠?

 

예를 들어서, 초기에 딥러닝이 막 나왔을 때에는 mutual information이라는 개념이 접목되지 않은 상태였습니다. 그렇기 때문에 연구자들은 mutual information을 접목시켜 새로운 딥러닝 모델을 만들려고 했죠. 하지만, mutual information이라는 개념을 딥러닝에 적용하여 수식화해보니 intractable computation(problem) 인 것으로 판명됐습니다. (←이 부분에 대한 자세한 설명은 Self-Supervised Learning 카테고리에서 글을 작성한 후 링크를 걸어두도록 하겠습니다)

 

그렇다면, 연구자들은 mutual information이라는 개념을 적용하는 것을 포기해야 할까요? 

 

컴퓨터 분야(or 딥러닝 분야)에서는 이와같이 intractable computation 문제를 tractable computation하게 바꿔주는 mathematical trick이 사용되기도 합니다. 예를 들어, VAE에서는 generative model을 만들기 위해 variational inference를 사용해 intractable generative model을 tractable generative model로 바꿔 주었고, Self-Supervised Learning 분야에서는 contrastive learning을 하기 위해 intractable mutual information 문제를  tractable하게 바꿔주기도 합니다.

 

"다시말해, intractable computation 문제들을 tractable computation으로 변경해주는 mathematical trick을 이용하는 것이죠. "

 

 

 

 

지금까지 intractable이라는 개념에 대해서 알아보았습니다.

"앞에서 배운것을 요약하면 'Deterministic Turing Machine으로 어떤 문제를 다항시간안에 풀 수 있는지 없는지에 따라 intractable, tractable을 구분할 수 있다'라고 정리할 수 있습니다."

 

 

 

글을 마치면서 질문을 하나 남기겠습니다.

"최근에 나온 양자컴퓨팅은 nondeterministic Turing machine입니다. 그렇다면, 양자컴퓨팅을 이용하면 NP였던 문제들이 P문제가 될 수 있을까요?"

 

답은 아래영상에서 확인하시면 좋을 것 같습니다.

 

 

 

[Reference]

https://blog.zarathu.com/posts/2019-05-20-godelincompleteness/

 

Zarathu Blog: 괴델의 불완전성 정리

괴델(Kurt Gödel)의 불완전성 정리가 나온 배경을 소개하고 증명의 핵심 아이디어를 수학과 메타수학(meta-mathematics), 괴델수(Gödel number), 그리고 메타수학의 수학화 3가지로 나누어 설명하였습니다.

blog.zarathu.com

 

안녕하세요. 

이번 글에서는 이미지(data), 차원(dimension), 그리고 분포(distribution)간의 관계에 대해서 설명해보도록 하겠습니다.

 

앞으로 AutoEncoder, VAE, GAN이해하기 위한 가장 기본적인 background이니 만큼 잘 설명해보도록 하겠습니다.

 

 

 

1. 이미지와 차원(dimension) 간의 관계

먼저, 한 가지 질문을 던지면서 글을 시작하도록 하겠습니다.

 

"색(color)을 표현(representation)하기 위해서는 몇 차원이 필요한가요?"

 

답부터 말씀드리면 "색을 표현하기 위해서는 3차원이 필요"합니다. 현실세계에서는 3차원 (R,G,B) 값을 다양하게 조합하여 색상표현할 수 있죠. 그리고, 이렇게 표현된 공간을 "색 공간 (color space)"라고 부릅니다.

 

<그림 출처: https://geraldbakker.nl/psnumbers/rgb-explained.html>
<위 그림을 설명을 위해첨부되었습니다 . 실제 pixel 값과 색상이 매칭이 안될 수 도 있으니 유의하세요 !>

 

 

 

 

 

"그렇다면, 색을 표현할 수 있는 모든 경우의 수는 어떻게 될까요?"

 

당연히 조합 경우의 수를 구하면 되므로 \(255^{3}\)  이 될 것입니다

 

<그림 출처:  https://overface.tistory.com/593>

 

 

 

 

 

"gray color를 표현하기 위해서 필요한 차원은 무엇일까요?"

 

gray color1차원 (0~255) 으로 모두 표현 가능합니다. 또한, gray color표현할 수 있는 모든 경우의 수255가지가 되겠죠. 그래서, 흑백 이미지를 다루는 문제에서는 이미지를 1차원으로 가정하고 gray scale이라고 표현하기도 합니다.

 

<그림 출처:  https://medium.com/javarevisited/converting-rgb-image-to-the-grayscale-image-in-java-9e1edc5bd6e7>

 

 

 

 

 

"앞서 색상관련해서는 정해진 차원(1차원 or 3차원)이 필요하다고 했는데, 그렇다면 이미지를 표현하기 위해서도 정해진 차원이 필요한가요?"

 

결론부터 말씀드리면, 이미지에 대한 차원은 "이미지 크기에 따라 달라진다" 입니다. 아래 gray scale의 튜링 이미지의 크기가 200×200이라고 한다면, 이러한 이미지를 표현하기 위해서는 40000 차원이 필요합니다. 왜 이렇게 고차원이 나오는지 설명해보도록 하겠습니다. (사실 엄밀히 말하면 색상도 R,G,B외에 다른 요소들로 표현할 수 있으면 색상의 차원은 또 달라질 수 있습니다)

 

 

 

 

200×200 gray scale 이미지를 표현한다고 하면 어떻게 생각해볼 수 있을까요? 먼저, 이미지라는 것은 pixel의 조합으로 이루어져 있습니다. 그리고, 하나의 픽셀에는 하나의 색 표현이 가능하죠. Gray scale인 경우에는 하나의 pixel0~255 사이 값 중 하나가 할당될 수 있습니다.

 

<그림 참고: https://blog.tonkabi.com/blog/post/computer-vision-vs-human-vision>

 

 

그렇다면, 200×200 gray scale 이미지의 pixel들을 1차원 일렬로 늘린다고 생각해보겠습니다.

 

<2D 이미지를 1D 이미지로 늘리는 예시>

 

 

그럼 40000개의 pixel이 나올 것입니다. 이때, 각각의 pixel들은 0~255개의 값을 지니고 있죠. 이를 다른 관점에서 보면, 40000개의 독립된 변수로 볼 수 있고, 각각의 변수는 0~255 값의 범위를 갖고 있다고 할 수 있죠. 40000개의 독립된 변수하나의 이미지 구성될 수 있기 때문에, 200×200 gray scale 이미지는 40000차원을 갖는다고 할 수 있습니다. 200×200 이미지는 40000 차원의 독립된 변수들이 갖는 고유의 값들에 의해 표현될 수 있는 것이죠. 

 

 

 

"그렇다면, 200×200 gray scale 이미지를 표현할 수 있는 모든 경우의 수는 어떻게 될까요?"

 

정답은 아래에서 구한 것 처럼 \(10^{96329}\) 경우의 수가 됩니다.

 

 

 

 

 

2. 이미지와 분포간의 관계 

앞서 200×200 gray scale 이미지의 차원 40000차원이고, 표현할 수 있는 이미지의 개수 (경우의 수)는 대략  \(10^{96329}\) 라고 했습니다.

 

"그렇다면, 200×200 gray scale 에서 표현될 수 있는 모든 경우의 수에 해당하는 이미지들은 의미가 있다고 할 수 을까요?"

예를 들어, \(10^{96329}\) 경우의 조합들 중에서는 아래 왼쪽과 같이 의미 없는 이미지(noise image)들도 있을 것이고, 오른쪽 같이 사람이 구별할 수 있는 의미 있는 이미지가 있을 수 있습니다. 

 

<그림 출처: http://web.mit.edu/kenta/www/three/grayscale-noise/zxevanas/images/?S=A>

 

 

여기서 우리는 또 한 가지 질문을 던져볼 수 있습니다.

 

"200×200 gray scale  즉, 40000차원 상에서 의미있는 이미지들은 고르게 분포(uniform distribution)하고 있을까요? 아니면 40000차원이라는 공간의 특정 영역에 몰려있거나 특정 패턴으로 분포(non-uniform distribution)하고 있을까요?"

 

이러한 질문에 을 하는 방법 중 하나는 200×200 gray scale 이미지들을 uniform distribution으로 수 없이 샘플링 해봐서 경험적으로 보여주는 것입니다. 만약, uniform distribution을 전제로 수 없이 샘플링 했을 때, 의미있는 이미지들이 종종 보인다면 의미있는 이미지들이 40000차원 상에 고르게 분포한다고 볼 수 있겠죠.

 

(※ 직관적으로 이해하기 위해 편의상 40000차원을 아래 이미지 처럼 3차원으로 표현했습니다. (즉, 아래 그림은 '본래 40000차원이다'라고 간주하시면 될 것 같습니다))

 

 

"오토인코더의 모든 것"이라는 영상에서 이활석님은 20만번 샘플링한 결과 의미없는 이미지(noisy image)만 추출된 것을 확인 할 수 있었다고 합니다. 이러한 실험을 통해 의미있는 이미지들은 40000차원에서 특정 패턴 또는 특정 위치에 분포해 있다고 경험적으로 결론내릴 수 있게 되는 것이죠.

 

(↓아래 영상 1:01:25초 부터)

 

 

 

 

 

 

 

지금까지 AutoEncoder, VAE, GAN을 배우기 위한 기본 지식들을 정리해봤습니다.

다음 글에서는 AutoEncoder에 대해서 다루면서 dimension reduction에 대한 개념을 소개하도록 하겠습니다. 왜냐하면 VAE, GAN 같은 논문들을 살펴보려면 "latent"말을 이해하기 중요하기 때문이죠!

 

그럼 다음 글에서 뵙도록 하겠습니다! 

 

 

 

안녕하세요.

이번 글에서는 앞으로 GAN에 대한 글을 어떠한 방식으로 작성해나갈지 간단히 설명하려고 합니다.

 

  1. AutoEncoder
  2. VAE (paper review)
  3. GAN (paper review)
  4. DCGAN (paper review)
  5. 이외 다른 GAN 모델들 (paper review 위주)

 

첫 번째 AutoEncoder를 다루는 이유는 VAE라는 모델 설명하기 위해서 입니다.

AutoEncoder는 본래 generative model concept 목적으로 연구된 것이 아니라, dimension reduction 연구를 위해 사용되던 모델입니다. 하지만, VAE라는 모델이 AutoEncoder 기반으로 이루어져있기 때문에 VAE를 배우면서 AutoEncoder 관련 용어들이 종종 등장합니다. 그렇기 때문에 AutoEncoder를 제일 먼저 다루려고 합니다.

 

두 번째로 VAE를 다룰 예정입니다. 기존generative model을 만들기 위해서는 여러 어려움이 존재했습니다. 대표적으로 intractable computation 문제가 있었죠. 쉽게 말해, 컴퓨터로 generative model을 만들려고 하면 계산이 불가능할 정도의 복잡한 수식을 풀어내야 합니다. VAE는 이러한 intractable computation 문제를 tractable computation 문제로 전환시키는 기법을 도입하여 generative model을 만드는 시도를 했습니다. Generative model을 자주 다루다 보면 intractable이라는 용어와 probabilistic 이라는 용어가 자주 사용되는데, VAE 논문 리뷰하면서 이러한 용어들에 대한 설명을 하려고 합니다. 

 

세 번째로는 GAN을 다룰 예정입니다. Ian J. Goodfellow 논문리뷰하면서 GAN에 대해서 알아보려고 합니다. 그리고, 네 번째DCGAN을 다루면서 vision 분야에서 GAN을  어떻게 적용했는지 알아보겠습니다.

 

 

처음 GAN을 접하시는 분들이라면 지금 말씀드린 내용이 모두 이해가 안되시는게 당연합니다.

앞으로 포스팅 하는 글을 최대한 열심히 작성하여 다시 이 글을 보셨을 때, 이해하실 수 있게 노력해보도록 하겠습니다!

 

안녕하세요.

이번 글에서는 2019년도 이후 부터 현재 글을 쓰고 있는 시점인 2021년 (9월) 까지object detection (based on deep learning) 모델에 대해서 소개하려고 합니다.

 

현재 제 블로그에 작성한 Object detection 모델은 YOLOv3까지입니다. 그 이유는 제가 2018.05월에 석사 졸업논문을 쓸 당시 주로 사용되던 최신모델이 YOLOv3, SSD, RetinaNet이었기 때문이죠. (RetinaNet은 아직 업로드가 안되어 있는데, 추후에 빠르게 업로드 하도록 하겠습니다!)

 

그럼 지금부터 2021년까지의 Object Detection model trend 변화를 설명해보도록 하겠습니다.

 

Note1. 참고로 모델의 trend만 설명드리는거라 디테일한 설명은 하지 않을 예정입니다. 디테일한 기술부분은 차후에 따로 해당 모델에 대한 논문을 리뷰하는 방식으로 업로드 하도록 하겠습니다!

Note2. 이 글에서 trend라고 설명되는 모델들은 저의 주관과 paperwithcode를 기반으로 선택된 모델들임을 미리 말씀드립니다!  

 

 

 

 

1. Object Detection History (From 2013 ~ 2019)

2013년최초의 딥러닝 기반 object detection 모델R-CNN등장했습니다. 이 후, R-CNN 계열의 object detection 모델인 Fast R-CNN, Faster RCNN 모델들이 좋은 성과를 보여주고 있었죠. 그러다, 2016년에는 YOLOSSD등장하면서 새로운 계열의 딥러닝 기반 object detection 모델이 등장하게 됩니다. 2017년에는 RetinaNet이 등장하면서 높은 성능을 보여주기도 했죠. (Mask-RCNN 모델도 등장하긴 했지만, Mask-RCNN 모델은 segmentation 분야에서 더 설명할 수 있는게 많은 모델이라 여기에서는 따로 object detection 모델의 mile stone으로 언급하진 않겠습니다)

<그림1 출처:&nbsp; https://mlai.iptek.web.id/2019/01/20/object-detection-state-of-the-art-progress/>

 

<그림2 출처. YOLOv3 논문>

 

2018.04월 치매환자 행동패턴 분석연구를 하기 위해 이용했던 딥러닝 모델들이 SSD, RetinaNet, YOLOv3 정도가 있었던거 같습니다. (당시에 TF 1.5 버전을 쓰면서 좋아했던 기억이.... )

 

"그럼 언제부터 새로운 object detection 모델들이 등장하기 시작했나요?"

 

앞서 언급했던 모델들이 오랜 시간동안 사용되다가  2019년 후반부터 새로운 object detection model 등장하기 시작했습니다. 2019년부터 CNN 모델에 다양한 변화가 일어나기 시작했는데, 이러한 변화가 object detection 모델에 영향을 주었습니다. (Object detection 모델classification task와 bounding box regression task가 결합된 multi-task loss로 구성되어 있기 때문에 CNN의 변화가 생기면 classification task에 영향을 주게 되겠죠? 만약 좋은 영향을 주면 그만큼 object detection 모델의 성능도 좋아질테니까요!)

 

<그림3 출처. CS231n>

 

그럼 지금부터 해당 모델들을 순차적으로 설명해보도록 하겠습니다.

 

 

 

 

 

 

 

2. EfficientDet (2020 CVPR)

2-1. EfficientNet

2019.03월 arXiv에 EfficientNet이라는 논문이 등장합니다.

  • 2019.03.28 arXiv 등록
  • 2019 ICML accept

https://arxiv.org/abs/1905.11946

 

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

Convolutional Neural Networks (ConvNets) are commonly developed at a fixed resource budget, and then scaled up for better accuracy if more resources are available. In this paper, we systematically study model scaling and identify that carefully balancing n

arxiv.org

 

 

보통 CNN은 224×224 크기로 training&evaluation을 진행했는데, CNN의 입력크기를 키워줄 수록, 성능이 좋아진다는 사실을 알게 됐습니다. 입력 크기를 키워주려면 CNN의 규모(scale) 자체를 크게 키워야 하는데, 어떻게 하면 적절하게 규모를 키워 줄 수 있을지에 대한 방법론이 연구되었습니다. 이 과정에서 AutoML 기법을 도입하여 적절한 CNN 모델을 만들게 되었고, 이것을 EfficientNet이라고 부르게 되었습니다. 드디어 EfficientNet의 등장으로 CNN 모델이 84% top-1 accuracy를 넘어서는 성능을 보여주기 시작했죠

 

 

 

(↓↓↓입력이미지 크기에 따라 Efficient 모델 버전(ex: B0, B1, ..., B7)을 나눈 것↓↓↓) 

<그림4 출처.&nbsp; https://developpaper.com/keras-efficient-net-introduces-that-the-rising-point-of-imagenet-task-is-obvious/>

 

 

2-2. EfficientDet

2019.03 EfficientNet 모델이 등장하고 8개월 후, EffcientNet을 backbone (for classification task)으로 한 EfficientDet이 등장하게 됩니다.

  • 2019.11.20 arXiv 등록
  • 2020 CVPR accept

https://arxiv.org/abs/1911.09070

 

EfficientDet: Scalable and Efficient Object Detection

Model efficiency has become increasingly important in computer vision. In this paper, we systematically study neural network architecture design choices for object detection and propose several key optimizations to improve efficiency. First, we propose a w

arxiv.org

 

 

(↓↓↓EfficientDet 논문을 보면 Bacbone Network로 EfficientNet을 사용한 걸 확인할 수 있습니다↓↓↓)

 

 

EfficientDet의 등장으로 50 AP넘는 object detection 모델이 등장하기 시작했고, EfficientDet 모델은 2020년 초반까지 object detection SOTA 모델의 자리를 유지합니다. 

 

 

 

 

 

 

3. Deformable DETR

기존 object detection은 CNN을 기반으로 다양한 bounding box regression 기법을 연구하는 방향으로 진행되어왔습니다. 하지만, 2020년 초반부터 NLP 분야에서 사용되던 attention기반의 transformer 기법을 object detection에 적용해보려는 시도가 이루어지면서 새로운 object detection 모델들이 등장하게 됩니다.

 

3-1. Transformer (Feat. Attention)

2017.06월GoogleNLP(자연어처리) 분야에서 attention mechanism을 기반으로한 Transformer 모델을 소개합니다.

  • 2017.06.12 arXiv 등록
  • 2017 NIPS accept

 

https://papers.nips.cc/paper/2017/hash/3f5ee243547dee91fbd053c1c4a845aa-Abstract.html

 

Attention is All you Need

Attention is All you Need Part of Advances in Neural Information Processing Systems 30 (NIPS 2017) Authors Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, Illia Polosukhin Abstract The dominant seque

papers.nips.cc

 

 

 

 

3-2. DETR

2020.03월Facebook NLP (자연어처리) 분야에서 사용하던 Transformer 기술들을 CV (컴퓨터 비전)에 적용하기 시작합니다.

  • 2020.03.22 arXiv 등록
  • 2020 ECCV accept

https://arxiv.org/abs/2005.12872

 

End-to-End Object Detection with Transformers

We present a new method that views object detection as a direct set prediction problem. Our approach streamlines the detection pipeline, effectively removing the need for many hand-designed components like a non-maximum suppression procedure or anchor gene

arxiv.org

 

 

 

 

하지만, 성능자체는 기존 object detection 모델의 성능보다 높게 나오지는 않았습니다. 사실 EfficientDet(←2019.11월 출현 & 50 AP)에 비하면 성능이 많이 뒤쳐지는 편이죠. 여기서 인지해야 하는 부분이 DETR에서 transformer를 사용했다는걸 ViT모델을 사용했다는 걸로 착각하시면 안된다는 점입니다. (참고로 ViT 모델은 DETR가 나오고 7개월 후인 2020.10월에 등장합니다. )

 

 

3-3. Deformerable DETR

DETR 모델이 등장하고 7개월 후에, DETR 모델의 후속연구로 Deforma DETR출현합니다.

  • 2020.10.08 arXiv 등록
  • 2021 ICLR accept

https://arxiv.org/abs/2010.04159

 

Deformable DETR: Deformable Transformers for End-to-End Object Detection

DETR has been recently proposed to eliminate the need for many hand-designed components in object detection while demonstrating good performance. However, it suffers from slow convergence and limited feature spatial resolution, due to the limitation of Tra

arxiv.org

 

 

Deformable DETR에서는 deformable attention module을 이용하여 성능을 높이려고 시도했습니다.

 

 

Deformable DETR의 성능이 EfficientDet보다 조금씩 더 나은 것을 볼 수 있었습니다. 이것을 통해 Transformer를 CV에 접목하려는 연구가 주목을 받기 시작했죠.

 

 

 

 

4. YOLOS

2020.10월 ViT 모델의 등장으로 object detection 모델의 backbone을 기존 CNN에서 Transformer 계열로 바꾸려는 시도가 이루어지기 시작합니다.

 

4-1. ViT

2020.10월 Deformable DETR로 인해 object detection 분야에서 Transformer의 관심을 보이기 시작했다면, 동시에 classification 분야에서는 2020.10월 ViT 모델의 등장으로 Transformer에 대한 관심이 뜨거워졌습니다. (Transformer라는 개념을 처음 소개한 것도 google이고, Transformer를 object detection에 처음 접목시킨 DETR도 google이고, Transformer를 (vision) classification에 처음 접목시킨 것도 google이네요 ㅎㄷㄷ...)

  • 2020.10.22 arXiv 등록
  • 2021 ICLR accept

 

https://arxiv.org/abs/2010.11929

 

An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

While the Transformer architecture has become the de-facto standard for natural language processing tasks, its applications to computer vision remain limited. In vision, attention is either applied in conjunction with convolutional networks, or used to rep

arxiv.org

 

 

 

 

하지만, ViT의 단점 중 하나는 모델이 지나치게 크기 때문에 학습을 시키기 위해서 방대한 양의 데이터를 필요로 한다는 점이었죠. (물론 모델이 크기 때문에 transfer learning에 적합하지 않다는 지적도 받았습니다.)

 

 

 

4-2. DeiT (Data-efficient Image Transformer)

기존에 ViT에서 지적된 것 중 하나가 방대한 양의 데이터셋을 필요로 한다는 점이었습니다. Transfer learning 관점에서 보면 pre-training을 위해 방대한 양의 데이터셋이 필요한 것이라고 볼 수 있죠. 이러한 단점극복하기 위해 FacebookDeiT이라는 classification 모델 제안하게 됩니다.

  • 2020.12.23 arXiv 등록
  • 2021 ICML accept

https://arxiv.org/abs/2012.12877

 

Training data-efficient image transformers & distillation through attention

Recently, neural networks purely based on attention were shown to address image understanding tasks such as image classification. However, these visual transformers are pre-trained with hundreds of millions of images using an expensive infrastructure, ther

arxiv.org

 

 

DeiT 모델 구조 자체는 ViT와 유사합니다. 대신, vision transformer 계열의 모델을 학습 시킬 때 기존의 CNN 방식과 다른 학습 기법을 적용했다는 것이 ViT와 큰 차이라고 볼 수 있습니다. 예를 들어, vision transformer 모델에 적합한  augmentation, optimization, regularization 등의 기법을 찾으려고 시도했고, 효율적인 학습을 위해 knowledge distillation 기법을 transformer 모델에 적용 (←Transformer-specific distillation) 하려는 노력도했습니다. (참고로 knowledge distillation을 적용했을 시에 teacher 모델로 RegNet을 이용했다고 하네요)

 

 

위와 같은 ViT와 같이 방대한 양의 학습 데이터 없이도 EfficientNet 보다 classification 성능이 좋은 vision transformer 모델을 선보이게 됩니다.  

 

 

4-3. YOLOS

Note1. 기존에 알고 있는 YOLO 모델 계열과 전혀 관계가 없다는 것을 알아두세요!

 

2021년에 들어서자 object detection 모델의 backone으로써 vision transformer 계열의 모델을 사용하는 연구가 진행됩니다. 

  • 2021.06.01 arXiv 등록
  • 2021 ICML accept

 

https://arxiv.org/abs/2106.00666

 

You Only Look at One Sequence: Rethinking Transformer in Vision through Object Detection

Can Transformer perform $2\mathrm{D}$ object-level recognition from a pure sequence-to-sequence perspective with minimal knowledge about the $2\mathrm{D}$ spatial structure? To answer this question, we present You Only Look at One Sequence (YOLOS), a serie

arxiv.org

 

항저우 대학은 앞서 소개되었던 DeiT이라는 classification 모델을 object detection 모델의 backbone으로 사용하여 YOLOS라는 object detectioin 모델을 만듭니다. 하지만, 기존 object detection 모델에 비해 좋은 성과를 거두지는 못합니다 (오히려 EfficientNet, Derformalbe DETR 성능이 더 좋은 것 같네요).   

 

 

 

 

 

5. Scaled YOLO v4

YOLO계열의 object detection 모델은 real-time이라는 측면에서 많은 사랑을 받아왔습니다. 하지만, 상대적으로 낮은 AP 성능으로 인해 YOLO v3 이후 많은 외면을 받아오기도 했는데요. 올해 제안된 YOLO 계열의 object detection 모델이 56 AP 성능을 기록하면서 다시 한 번 주목을 받고 있습니다. 

 

5-1. YOLO v1, YOLO v2, YOLO v3

2015년 첫 real-time object detection 모델인 YOLO v1이 출현합니다. 하지만, real-time에 초점을 맞춘 나머지 정확도 측면에서 많은 아쉬움을 주었죠.

  • 2015.06.08 arXiv 등록
  • 2016 CVPR accept

https://arxiv.org/abs/1506.02640

 

You Only Look Once: Unified, Real-Time Object Detection

We present YOLO, a new approach to object detection. Prior work on object detection repurposes classifiers to perform detection. Instead, we frame object detection as a regression problem to spatially separated bounding boxes and associated class probabili

arxiv.org

 

그리고, 1년 뒤 YOLO v1의 정확성보완YOLO v2 모델등장합니다. 이때부터 YOLO 계열의 object detection 모델이 많은 연구자들에게 관심을 받기 시작하죠.

https://arxiv.org/abs/1612.08242

 

YOLO9000: Better, Faster, Stronger

We introduce YOLO9000, a state-of-the-art, real-time object detection system that can detect over 9000 object categories. First we propose various improvements to the YOLO detection method, both novel and drawn from prior work. The improved model, YOLOv2,

arxiv.org

 

YOLO v2의 개발자 Joseph Redmon은 Ted 나가서도 자신의 모델을 강연하는 등 대중들에게 YOLO 라는 모델을 각인시키는 노력도 합니다.

https://www.youtube.com/watch?v=Cgxsv1riJhI 

 

 

Joseph Redmon은 YOLO v2가 나온 후 2년이 지난 2018년에 YOLO v3를 보여줍니다. 

  • 2018.04.08 arXiv 등록

https://arxiv.org/abs/1804.02767

 

YOLOv3: An Incremental Improvement

We present some updates to YOLO! We made a bunch of little design changes to make it better. We also trained this new network that's pretty swell. It's a little bigger than last time but more accurate. It's still fast though, don't worry. At 320x320 YOLOv3

arxiv.org

 

 

YOLO v3는 다른 학회에 제출하지는 않고 Tech Report 형식으로 arXiv에 올리기만 했는데 그 이유는 다음과 같습니다. 사실, Joseph Redmon은 YOLO v3 Tech Report에서도 computer vision 분야에서 object detection 모델을 개발하는 것에 대한 윤리적 책임감을 강조했습니다. 어떤 이유가 결정적이었는 지는 모르겠지만, YOLO v3 모델을 개발하고 2년 후 자신은 object detection 모델을 개발하는 것을 그만두겠다는 트윗을 올리게 되죠. 그 이유는 아래와 같이 군사적 목적으로 쓰이는걸 원치않았기 때문이라고 합니다. 

 

 

 

 

5-2. YOLO v4

2018년 석사시절에 필자는 YOLO v3를 사용할 때, Joseph Redmon의 official site를 이용하지는 않았습니다. (질문을 올려도 답을 잘 안해줬던 기억이...) 이 당시에 Alexey라는 russian reseacher의 github에서 YOLO v3를 자주 이용했습니다. 

 

 

질문하면 정말 빠르게 피드백 해주어서 연구할 때 많은 도움을 받았던 기억이 있네요...ㅎ (사실, 설치나 코드 파악하기에도 Alexey의 코드가 더 보기 편했던 것 같습니다.)

 

 

2020.02월에 Joseph Redmon이 YOLO v4에 대한 개발 포기를 선언하자, 2달뒤 2020.04월에 Alexey가 YOLO v4 모델을 개발합니다.

  • 2020.04.23 arXiv 등록
  • 2020 CVPR accept

https://arxiv.org/abs/2004.10934

 

YOLOv4: Optimal Speed and Accuracy of Object Detection

There are a huge number of features which are said to improve Convolutional Neural Network (CNN) accuracy. Practical testing of combinations of such features on large datasets, and theoretical justification of the result, is required. Some features operate

arxiv.org

 

EfficientDet에 비교하면 아직 아쉬운 수준이었지만, 기존 YOLO v3보다는 더 좋은 성능을 보여주었습니다. 아래 figure1을 보면 GPU V100 모델 기준으로의 높은 FPS 성능을 보여주고 있기 때문에 충분히 낮은 GPU 성능이 장착된 작은 device에 임베딩해서도 사용될 수 있음을 예상 할 수 있습니다.

 

 

 

5-3. YOLO v5

YOLO v4라는 논문이 2020.04월에 나온 후, 곧바로 한 달뒤인 2020.05월에 YOLO v5가 나왔습니다.  그런데, YOLO v5는 arXiv와 같은 paper형식이 아닌 blog site에 소개가 됩니다.

https://blog.roboflow.com/yolov5-is-here/

 

YOLOv5 is Here

State of the art object detection at 140 FPS.

blog.roboflow.com

 

https://docs.ultralytics.com/

 

YOLOv5 Documentation

Introduction To get started right now check out the Quick Start Guide What is YOLOv5 YOLO an acronym for 'You only look once', is an object detection algorithm that divides images into a grid system. Each cell in the grid is responsible for detecting objec

docs.ultralytics.com

 

AP와 FPS 측면에서 모두 성능향상을 이루긴 했지만, machine learning commuity에서 여러 의견이 있었던 것 같습니다. 특히, YOLO v4의 저자인 Alexey가 성능을 측정하는 것에 대해 여러 문제점을 제기했다고 합니다. (자세한 내용은 아래 사이트의 "Controversy in machine learning community" section에서 확인해주세요!)

https://towardsdatascience.com/yolo-v4-or-yolo-v5-or-pp-yolo-dad8e40f7109

 

YOLO v4 or YOLO v5 or PP-YOLO?

What are these new YOLO releases in 2020? How do they differ? Which one should I use?

towardsdatascience.com

 

 

5-4. Scaled YOLO v4

Alexey는 YOLO v4를 개발하고 7개월 뒤 (2020.11) 후속연구인 Scaled YOLO v4를 발표합니다. 

  • 2020.11.16 arXiv 등록
  • 2021 CVPR 

https://arxiv.org/abs/2011.08036

 

Scaled-YOLOv4: Scaling Cross Stage Partial Network

We show that the YOLOv4 object detection neural network based on the CSP approach, scales both up and down and is applicable to small and large networks while maintaining optimal speed and accuracy. We propose a network scaling approach that modifies not o

arxiv.org

 

YOLO 모델이 EfficientDet의 AP 성능을 뛰어 넘는 것 까지 보여줌으로써 object detection 모델이 FPS, accuracy 모두 잡을 수 있다는 것을 보여주게됩니다. (YOLO 계열의 모델이 SOTA를 기록할 수 있다는 것을 보여준 것이죠.)

 

5-5. YOLOR

YOLO v4 때부터 같이 개발에 참여한 팀원들은 Taiwan의 nataional academy인 Sinica academy 소속이었습니다. (참고로 Alexey의 약력은 아래와 같습니다) 

 

[Alexey]

  • 2001~2008: MISIS University
  • 2019.11~현재: Lead Machine Learning Engineer: Academica Sinica, Taiwan
  • 2020.07~현재: Intel Research Engineer

 

해당 팀원들이 Scaled YOLO v4를 같이 개발 한 후,  6개월 뒤 후속 연구로써 YOLOR 라는 논문을 arXiv에 등록하게 됩니다. 

  • 2021.05.10 arXiv 등록

https://arxiv.org/abs/2105.04206

 

You Only Learn One Representation: Unified Network for Multiple Tasks

People ``understand'' the world via vision, hearing, tactile, and also the past experience. Human experience can be learned through normal learning (we call it explicit knowledge), or subconsciously (we call it implicit knowledge). These experiences learne

arxiv.org

 

논문의 결과나 paperwithcode에서 살펴봤을 때, 모델의 성능 자체는 크게 개선되지 않았던것 같습니다.

 

 

하지만, Scaled YOLO v4 모델을 좀 더 representation 관점에서 다양한 해석을 시도하려고 했기 때문에 이를 기반으로 후속 연구들이 나오지 않을까 기대하고 있습니다.

 

 

 

 

 

6. Soft Teacher+Swin-L

2021년에 들어서면서 Transformer 계열의 object detection 모델이 CNN 계열의 object detection 모델을 밀어내고 독주하기 시작합니다. 필자가 조사를 했을 당시 (2021.08) paperwithcode에서 object detection SOTA 모델Soft Teacher+Swin-L 이었는데, 이 모델 역시 Transformer 계열의 objecte detection 모델이었습니다.

 

6-1. Swin Transformer

2021.03월에 Microsoft Reseaerch Asia에서 새로운 vision Transformer 모델 Swin Transformer 모델을 선보입니다.

  • 2021.03.25 arXiv 등록
  • 2021 ICCV accept 
    • 2021.10.11~2021.10.17 온라인 개최 예정
    • Oral 3 Strong Accepts

https://arxiv.org/abs/2103.14030

 

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

This paper presents a new vision Transformer, called Swin Transformer, that capably serves as a general-purpose backbone for computer vision. Challenges in adapting Transformer from language to vision arise from differences between the two domains, such as

arxiv.org

 

Swin Transformer는 사실 semantic segmentation 분야에 Transformer 모델을 적용시키기 위해 고안되었습니다. Segmentationdense prediction을 해야하기 때문에 계산량이 많은데, 기존 Transformer 모델 자체도 계산량이 많기 때문에 sementic segmentation과 Transformer 기술 까지 같이 접목시키면 intractable 문제로 바뀐다고 합니다. 이러한 intractable 문제를 극복하기 위해서 Swin Transformer 논문은 hierarchical feature mapShifted window (Swin) block을 이용했다고 합니다.

 

 

 

 

Swin Transformer 모델은 2021.03월에 58 AP를 기록하면서 object detection SOTA 모델로 등극하게 됩니다.

 

 

6-2. Soft Teacher+Swin-L

Swin Transformer 모델이 나온 후 3개월 뒤 후속 연구로써 Soft Teacher+Swin-L 모델이 등장합니다.

  • 2021.06.16 arXiv 등록
  • 2021 ICCV (제출예정)

https://arxiv.org/abs/2106.09018

 

End-to-End Semi-Supervised Object Detection with Soft Teacher

This paper presents an end-to-end semi-supervised object detection approach, in contrast to previous more complex multi-stage methods. The end-to-end training gradually improves pseudo label qualities during the curriculum, and the more and more accurate p

arxiv.org

 

Swin Transformer의 저자 중 한 명이 Soft Teacher+Swin-L 모델 연구 개발에 참여한 것으로 보이고, Micro Soft와 항저우 과기대 (HUST) 팀원들이 같이 참여 한 것으로 보이네요. (올해는 항저우 과기대라는 이름을 더 자주 보는 듯합니다)

 

 

Pseudo label 기반의 Semi-Supervised Learning 방식을 Swin Transformer에 적절히 잘 적용Soft Teacher+Swin-L 모델이 제안됩니다

 

 

기존에는 Semi-Supervised Learning이 Supervised Learning의 성능을 뛰어 넘지 못했던 것과 달리, Soft Teacher+Swin-L 모델에 Semi-Supervised Learning을 적용했을 때는 더 좋은 성과를 보여준 것이 고무적입니다. 또한, 드디어 60 AP 고지를 돌파한 object detection 모델을 선보이기도 했죠. 

 

 

 

 

 

7. ETC

2021.08월을 기준으로 현재 paperwithcode에서 object detection 1, 2, 3등 모델 모두 Swin Tranformer기반으로 하고 있습니다.

 

  • DyHead 
    • 2021.06.15 arXiv 등록
    • 2021 CVPR accept
  • Dual-Swin-L
    • 2021.07.01 arXiv 등록

 

 

 

1, 2 3등을 기록한 연구들은 서로 별개의 독립적인 연구였던 것 같습니다.

 

 

 

 

지금까지 2021.08월까지 object detection 모델의 trend에 대해서 소개해드렸습니다.

앞으로 object detection 관련 글을 쓰게 되면 Swin Transformer 또는 EfficientDet 부터 쓰게되지 않을까 싶습니다.

 

읽어주셔서 감사합니다! 

 

 

 

[Reference Site]

1) Vision Transformer 관련 글

https://hoya012.github.io/blog/Vision-Transformer-1/

 

Transformers in Vision: A Survey [1] Transformer 소개 & Transformers for Image Recognition

“Transformers in Vision: A Survey” 논문을 읽고 주요 내용을 정리했습니다.

hoya012.github.io

 

 

 

'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

13. YOLO V3  (0) 2021.08.26
11. SSD  (3) 2020.02.06
10. YOLO V2  (4) 2020.02.06
9. YOLO V1  (4) 2020.02.06
8. Faster RCNN  (1) 2020.02.06

안녕하세요. 

이번 글에서는 YOLO V3 object detection "TECH REPORT"를 설명하려고 합니다.

 

지금까지 리뷰한 object detection 모델은 어떤 학회나 저널에 제출된 논문들이었습니다.

하지만, YOLO V3 저자는 YOLO V3가 YOLO V2를 약간 업데이트한 버전이라서 논문이 아닌 TECH REPORT 개념으로 작성한다고 언급했습니다.그래서, 현재 어떤 학회에 제출되지 않고 arXiv에만 올라와 있는 상태 입니다.

그렇게 때문에 YOLO V2를 잘 이해하고 있으시다면 어렵지 않게 이해하실 것으로 판단됩니다.

 

그럼, 지금부터 YOLO V3 TECH REPORT를 리뷰해보도록 하겠습니다.  

 

 

Paper: YOLOv3: An incremental Improvement

2018. 04. 08 arXiv  

[영어단어 및 표현 정리]

  • Incremental: Incremental is used to describe something that increases in value or worth, often by a regular amount.

 

 

 

0. Abstract

YOLO V3는 YOLO(V2)의 디자인을 약간씩 변경했다고 언급하고 있습니다. 대표적으로 변경한 부분은 새로운 네트워크 부분인데, 뒤에서 자세히 언급하겠지만 YOLO V2에서 사용했던 darknet19 darknet53으로 발전시켜 YOLO V3의 backbone 네트워크로 사용했습니다.

 

이러한 변경들로 인해 YOLO V2에 비해 모델이 약간 커지긴 했지만 정확성이 높아졌다고 합니다.

  • 320×320 (input resolution) YOLO V3 performance
    • Speed1 (mAP 기준): 22ms ← three times faster than SSD
    • Accuracy1 (mAP 기준): 28.2 mAP ← same as SSD
    • Speed2 (\(AP_{50}\) 기준):: 51ms (on Titan X) ← about four times faster than RetinaNet
    • Accuracy 2 (\(AP_{50}\) 기준):: 57.9 \(AP_{50}\) ← same as RetinaNet

 

 

이 논문에서는 YOLO V3를 mAP가 아닌 \(AP_{50}\)강조하고 있는데요. 이 이유에 대해서는 뒤에서 자세히 설명하도록 하겠습니다.

 

 

[영어단어 및 표현 정리]

  • swell: an old word that basically means fantastic, generally used by old people or hipsters to try to sound hip. 
    • YOLO V3 글 자체가 TECH REPORT다 보니까 슬랭(slang)어를 자주 사용하는 경우가 있습니다. 그래서, 공식사전같은 곳에서 swell의 뜻을 대입해 해석하면 이상해지는 경우가 많죠. 보통 영어 슬랭어는 Urban dictionary 라는 사전을 이용하면 잘 찾을 수 있습니다.

https://www.urbandictionary.com/

 

Urban Dictionary, August 25: milves

plural of milf.

www.urbandictionary.com

 

 

 

 

 

 

1. Introduction

[첫 번째 문단]

역시 official paper가 아니기 때문에 처음에 친숙한 어투로 글 전개를 시작 하는것 같습니다.

 

"가끔 그냥 너도 1년 동안 다른 짓만 할때도 있잖아? 나도 올해에는 research 많이 안하고 트위터만 한 듯... 뭐 물론 GAN 같은 것도 조금 해보긴 했지만...."

"그래도 여력이 조금 남아있어서 YOLO (V2) 성능을 조금 개선시키긴 했어~"

"근데 뭐 막 엄청 interesting한 기법을 쓴건 아니고, 조금씩 변화만 줘서 실험했어~"

 

 

 

[영어단어 및 표현 정리]

  • kinda: (구어) kind of ((발음대로 철자한 것))
  • momentum: If a process or movement gains momentum, it keeps developing or happening more quickly and keeps becoming less likely to stop. (=impetus)

 

 

 

[두 번째 문단]

 

대부분 학회에서는 "Camera ready due"가 있습니다.

학회같은 곳에서 다루는 paper 종류는 두 가지 입니다.

  • Accepted paper
  • Camera-ready paper

아래 그림1을 보면 "Paper Submission Deadline"이라고 나와있을 겁니다. 일반적으로 학회에 제출하여 논문에 accept되면 이를 "Accepted paper"라고 합니다. 

 

그런데, "accepted paper"를 최종 인쇄하기 위해서는 "폰트 종류, 크기", "대소문자" 등의 양식을 다시 통일시켜주어야 합니다. 이때 최종 인쇄를 위해 통일된 양식으로 바꾼 paper를 "Camera-ready paper"라고 보시면 됩니다.

그림1. CVPR (2021) Submission Timeline

 

YOLO V3 저자가 Camera-ready를 하긴했지만, "a source"가 없어서 TECH REPORT로 내기로 했다고 한 것 같네요. (정확히 "a source"가 무엇을 의미하는지는 모르겠습니다....)

 

 

 

[세 번째 문단]

이 tech report는 크게 세 가지 section으로 구성되어 있습니다.

 

  1. Deal: Method (YOLO V3에 대한 전반적인 architecture를 설명)
  2. How we do: Experiment (YOLO V3 결과 해석)
  3. Things we tried that didn't work: Ablation Study 개념
  4. What this all means: Conclusion + 기존 evaluation 방식 불만 제기

 

[영어단어 및 표현 정리]

  • intros: an introduction의 복수형 
  • y'all: you-all의 축약형
  • contemplate: 생각하다

 

 

 

 

 

 

2. Deal

Section2("2. The Deal) 에서는 YOLOv3의 아키텍처에 대해 설명합니다. Secion2 구성을 미리 설명하면 다음과 같습니다.

  • 2.1. Bounding Box Prediction: 제목 그대로 bbox prediction 할 때 사용되는 수식들을 설명합니다 (미리 말씀드리면, 이 부분은 YOLOv2와 동일합니다.
  • 2.2. Class Prediction
  • 2.3. Predicitons Across Scales: darknet-53으로 feature extraction 한 후, bounding box를 찾을 때 다양한 resolution에서 boundinb box를 찾는 방식을 설명합니다. 이 부분이 YOLOv2와 다른 첫 번째 특징입니다.
  • 2.4. Feature Extractor: YOLOv2에서 feature extractor로 사용한 darknet-19를 업그레이드 한, new classifier인 darknet-53을 소개 합니다. 이 부분이 YOLOv2와 다른 두 번재 특징입니다.
  • 2.5. Training: YOLOv3를 어떻게 학습시켰는지 설명합니다.

제가 글을 읽어보면서 순서를 조금 변경시키면 좋겠다고 판단하여, 이 블로그에서는 순서를 아래와 같이 변경하여 설명하려고 합니다.

  • 2.4. Feature Extractor
  • 2.3. Predictions Across Scales
  • 2.2. Class Prediction
  • 2.1. Bounding Box Prediction
  • 2.5. Training

 

 

2-4. Feature Extractor

YOLO V2에서는 feature extractor로써 darknet-19를 사용했었습니다. 아래 그림(테이블)에서 darknet-19를 보면 convolutional layer 19개인 것을 확인할 수 있습니다. YOLO V3에서는 residual connection을 이용하여 layer를 더 deep하게 쌓게 되었고, 그 결과 darknet-53을 만들 수 있게 되었습니다. 아래 그림에서 darknet-53convolutional layer가 총 52개인데, 아마 Avgpool(=average pooling layer) 직전에 1×1×1000 convolutional layer가 생략된 듯 합니다. 이렇게 추측한 이유는 다음과 같습니다.

  • Connected가 softmax 직전에 위치한 것을 보면 logit인 것을 알 수 있습니다. 
  • Connected는 average pooling 결과라고 볼 수 있는데, 아래 그림상으로는 average pooling에 들어가기 직전의 convolutional channel 수 는 1024개 입니다.
  • Average pooling 연산 후 1000개의 neuron을 출력하기 위해서는 입력 직전의 convolutional channel 수가 1000개여야 하기 때문에, 1000개의 채널을 갖는 1×1 convolutional layer가 생략되었다는걸 추측 할 수 있습니다.
  • 즉, 아래 그림의 convolutional layer 총 개수와 Avgpool 직전에 생략된 하나의 1×1 convolutional layer를 더하면 총 convolutional layer 개수가 53개인 것을 확인할 수 있습니다.   
  • (참고로, Size 부분에 "/2"라고 되어 있는 부분은 convolution filter의 stride=2라는 뜻입니다. Pooling이 아닌 conv filter의 stride를 통해 downsampling을 진행했네요)

 

 

Darknet-53을 자세히 도식화하면 다음과 아래 그림과 같이 표현할 수 있습니다. (제가 임의대로 그린거라 틀린부분이 있으면 말씀해주세요!)

 

그림2

 

 

위의 결과표를 보면 darknet-53이 darknet-19보다 좋은 accurcay를 기록하고 있다는걸 알 수 있습니다. ResNet-152보다는 accuracy가 조금 떨어지기는 하지만 더 효율적이라고 하는데, 이 부분은 바로 다음 문단에서 설명하도록 하겠습니다. 

 

 

 

Darknet-53이 ResNet 모델들 보다 efficient하다고 하는 이유는 FPS, BFLOP/s 에 있습니다 (BFLOP의 B는 Billion의 약자입니다. FLOPS에 대한 설명은 아래 글을 참고해주세요!)

 

https://89douner.tistory.com/159

 

4.NVIDIA GPU 아키텍처(feat.FLOPS)

안녕하세요~ 이번글에서는 NVIDIA에서 출시했던 GPU 아키텍처들에 대해 알아볼거에요. 가장 먼저 출시됐던 Tesla 아키텍처를 살펴보면서 기본적인 NVIDIA GPU 구조에 대해서 알아보고, 해당 GPU의 스펙

89douner.tistory.com

 

컴퓨터가 초당 연산할 수 있는 능력을 "BFLOP/s"로 나타내는데, "BFLOP/s"가 높을 수록 GPU가 1초에 더 많은 연산을 실행해준다는 것과 같으니 GPU utilization을 잘 활용한다는 것을 뜻하기도 합니다. 결국, darknet-53이 ResNet-152보다 성능이 약간 떨어지긴 해도 (개인적으로는 0.4%의 오차는 편차에 따라서 큰 의미가 없을 수 있다고 생각하긴 합니다만...), FPS (or GPU utilization)이 월등이 높기 때문에 더 "efficient"하다고 주장하는 것이지요.

 

 

 

 

[영어단어 및 표현 정리]

  • newfangle
    • 형용사로 쓰이는 경우: Eager for novelties; desirous of changing
    • 동사로 쓰이는 경우: To change by introducing novelties

 

 

 

 

2-3. Predictions Across Scales

 

 

위의 두 문단을 정리한 그림을 도식화해서 보여드리겠습니다. (아래 그림에서 "conv[3,3,32,64]/2"라고 되어 있는 부분에서 "/2"가 의미하는 바는 conv filter의 stride가 2라는 뜻힙니다 (즉, conv filter의 stride를 크게 설정함으로써 downsampling을 해주겠다는 뜻이죠))

<그림3 이미지 출처:  https://arxiv.org/ftp/arxiv/papers/1812/1812.10590.pdf>

 

 

 

<그림4 이미지 출처:  https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/>

 

 

 

우선 저 "We perform the same design~ " 문단은 정확히 무엇을 의미하는 내용들인지 모르겠네요. 

"We still use k-means ~" 문단은 YOLOv3가 학습 전에 bounding box의 aspect ratio를 각 scale마다 어떻게 설정해 줄 지 사전정의한 hyper-parameter 입니다. (제 생각으로는, (10×13), (16×30), (33×23) 이렇게 3개는 small object (52×52 feature map과 관련된 bounding box 정보인듯 합니다. 아니라면 답변주세요!)

 

 

 

 

2-2. Class Prediction

 

우선 위의 문장에서 의미하는 바들을 이해하기 쉽게 풀어서 설명해보도록 하겠습니다.

 

COCO dataset80개의 클래스를 갖고 있습니다. 즉, COCO dataset의 이미지들을 분류하겠다는 것은 80개의 class들을 분류하는 multi-classification task인 것이죠. 그런데, 80개의 클래스들이 모두 서로 전혀관계가 없는 것은 아닙니다. 예를 들어, 80개에 "Person", "Man"이라는 클래스가 포함될 수 도 있는데, 이 두 클래스는 서로 독립적인 클래스가 아니죠. 왜냐하면, "Man"은 "Person"의 부분집합 개념이기 때문입니다. 그래서, '앨론 머스크' 이미지를 classification하면 "Man"이 나올 수 도 있고, "Person"이 나올 수 도 있는 것이죠. (보통 이러한 관계를 지닌 클래스들은 서로 hierarchy한 구조를 갖고 있다고 합니다)

 

일반적으로 classification 방식은 softmax를 취해준 후, cross entropy를 계산하는 경우가 대부분입니다. 그런데, softmax를 취해주면 logit값(=softmax 입력 값: \(z_{i}\))이 제일 높은 하나의 클래스 확률 값만 지나치게 높게 설정해주는 경우가 있습니다. 이렇게 하나의 클래스 확률 값만 높여주는 이유는 입력 이미지에는 하나의 클래스만 있을 것이라는 가정을 하기 때문입니다. 

 

<그림5 이미지 출처: https://gombru.github.io/2018/05/23/cross_entropy_loss/>

 

 

 

그런데, 앞서 설명했듯이 위의 '앨론 머스크' 이미지는 두 가지 클래스(=레이블)를 갖고 있을 수 있다고 했습니다. 즉, muti-label 이미지인 것이죠. 그래서, 이 경우는 multi-label을 모두 정확하게 예측하기 위해서 independent logistic classifiers를 사용합니다. 

 

<그림6>

 

 

 

 

2-1. Bounding Box Prediction

※"2-1.Bounding Box Prediction" 파트는 총 두 문단으로 구성되어 있는데, 여기에서는 문단 순서를 바꾸어 설명하도록 하겠습니다.

 

 

위의 문장을 요약하면 아래 그림으로 표현할 수 있습니다.

YOLOv3는 한 번 연산할 때, feature map의 한 cell당 총 3개의 box에 해당하는 3d-tensor들을 출력합니다. 이론적으로, 한 번 학습 시 생성되는 bounding box 개수는 (10647=52×52×3+26×26×3+13×13×3) 일겁니다. 여기서 IOU가 제일 높은 box의 3d-tensor만 loss function을 위해 사용하게 됩니다. 또한, IOU가 제일 높은 3d-tensor의 objectness score(=confidence score)를 1로 설정해줍니다. (이 과정을 굉장히 간단하게 설명했지만, 실제로 bounding box 후보군을 가려내는 작업은 훨씬 복잡합니다. 이 부분은 코드 구현 부에서 좀 더 자세히 다루도록 하겠습니다)

 

<그림7>

 

YOLOv3에서는 IOU의 threshold를 0.5로 설정하고 있습니다. 그렇기 때문에, 초기에는 10647개 box들의 IOU가 모두 0.5가 넘지 않을 수 도 있습니다. 이 경우에는 아래 YOLO loss에서 objectness loss 부분을 제외한 regression loss, classification loss를 발생시키지 않습니다. (아마, loss를 발생시키지 않는다는 것은 loss 값을 0으로 할당시켜준다는 뜻 같은데, 이 부분은 코드를 리뷰하면서 더 자세히 살펴보도록 하겠습니다. (사실 엄밀히 말하면 아래 수식은 YOLOv1의 loss function입니다. 실제로는 시그마 부분이 좀 변경되어야 할 것 같네요.)

 

<그림8>

 

 

 

 

 

 

이 부분은 YOLOv2와 똑같기 때문에 설명을 더 하지는 않겠습니다. 

(↓↓↓아래 글에서 "3-3) Direct location prediction" 부분을 참고해주세요!↓↓↓)

https://89douner.tistory.com/93

 

10. YOLO V2

안녕하세요~ 이번글에서는 YOLO V1을 업그레이드한 버전인 YOLO V2에 대해서 알아보도록 할거에요. YOLO V2 논문에서는 YOLO V1을 3가지 측면에서 업그레이드 시켜서 논문 제목을 Better, Faster, Stronger이라

89douner.tistory.com

 

 

 

 

 

3. How We Do

[첫 번째 문단]

COCO dataset의 mAP 성능을 살펴보니 SSD variants (SSD513, DSSD513)와 동일한 반면 속도는 3배더 빨랐다고 합니다. 하지만, 여전히 RetinaNet의 mAP 성능을 뛰어넘진 못했네요. (YOLO v3 저자는 mAP 방식의 evaluation 방식이 "weird"하다고 표현했는데, 그 이유는 "5.What This All Means"에서 설명드리도록 하겠습니다) 

 

[영어단어 및 표현 정리]

  • on par with: ~와 동등(대등)한

 

(※아래 "stealing all these tables from [9]" 표현은 RetinaNet 모델 결과는 RetinaNet 논문 [9]에서 그냥 가져온거라고 합니다. RetinaNet을 Scratch로 구현하려면 너무 오래 걸린기 때문에 이렇게 했다고 하네요)

그림?

 

 

 

[두 번째 문단]

하지만, \(AP_{50}\)을 기준으로하면 YOLOv3의 성능은 RetinaNet과 동등해집니다. 하지만, IOU의 threshold를 올리면 AP 성능이 급격히 떨어지는데, 이러한 것으로 보아 YOLOv3 모델이 어떤 객체를 완전히 "fit"(정확)하게 detect하지 못하는걸 알 수 있습니다.

 

그림?+1

 

[영어단어 및 표현 정리]

  • on par with: ~와 동등(대등)한
  • excel at ~ing: ~하는 것이 뛰어나다 

 

 

[세 번째 문단]

위의 그림?(Table 3)을 보면 예전 YOLO(v2) 같은 경우에는 small object에 대한 성능이 매우 안좋았음을 알 수 있습니다. "2.3. Predictions Across Scales"에서 언급된 multi-scale predictions을 이용해 small object에 대한 AP (\(AP_{S})\)를 향상시킬 수 있었습니다. 

하지만, medium, large size objects의 detection 성능 향상 정도가 small object 성능 향상 정도에 미치지 못했다고 합니다. (개인적으로는 뭐... 당연한거 같다는 생각이... YOLO V2에서 multi-scale을 쓰지 않았으면 small object를 아예 놓치는 경우가 있을 수 있을테니, 이런 경우에 mAP를 성능을 크게 깍아먹지 않았었을까라는 생각이 드네요.)

 

 

[영어단어 및 표현 정리]

  • get to the bottom of it: 진상을 규명하다; 진짜 이유를 찾아내다.
    • "get to the bottom of ~"의 본래 뜻은 ~의 바닥까지 본다입니다. 진상을 확인 하는 것도 보이지 않는 밑바닥까지 살펴보는 행위라고 볼 수 있기 때문에, 관용어구로 사용됩니다.

 

 

 

[세 번째 문단]

(논문에서 "see figure 5"라고 했는데, 제가 봤을 땐 오타 같습니다. "see figure 3"이 맞는듯 하네요.)

확실히 mAP보다 mAP-50 지표로 보면 YOLOv3의 성능이 굉장히 좋게 보입니다.

 

mAP-50 기준 결과
mAP 기준 결과

 

 

 

 

 

4. Things We Tried That Didn't Work

이 부분은 오히려 설명을 하는게 YOLOv3를 이해하는데 더 혼동시킬 수 도 있다고 생각하여 따로 글을 올리진 안았습니다. 아래 영상 "24:38~27:00"를 참고하시는게 더 좋을 듯 합니다.

 

 

 

 

 

 

 

5. What This All Means

[첫 번째 문단]

저자는 YOLOv3가 mAP와 \(AP_{50}\) 간의 성능차가 심하게 나는 것을 강조하고 있습니다.

 

 

[두 번째 문단]

mAP 성능이 안좋아서 그런지.... ,mAP를 evaluation 지표로 사용하는 것에 대한 불만을 제기하는데, 그 이유는 아래와 같습니다.

 

"사람도 50% IoU와 30% IoU를 잘 구분하지 못하는데, 즉 20% 차이나는 IOU gap도 구별을 못하는데, 50%, 55%, 60%, ..., 95%씩 나눠서 평가하고 mAP을 구하는게 무슨 의미가 있는거냐"

 

저자는 추가적인 (좀 더 근본적인) 이유도 이야기를 하는데, 그 내용은 뒤에 "6.Rebuttal"에서 설명하도록 하겠습니다.

 

 

[영어단어 및 표현 정리]

  • cryptic: A cryptic remark or message contains a hidden meaning or is difficult to understand.

 

 

 

[세 번째, 네 번째, 다섯 번째 문단]

그리고, 자신이 개발 중인 기술에 대한 근원적인 질문을 합니다.

 

"우리가 object detection 기술을 가졌으니, 그걸로 뭘 할거냐?"

 

이 질문과 함께 자신이 개발한 기술이 privacy를 침해하는 데 사용될 수 있고, 사람을 죽이는 military 목적으로 사용될 수 있다는 것을 우려하고 있습니다. 해당 기술 (Object Detection)은 동물원의 얼룩말 수를 세는 것이나, 자신들의 애완동물을 잘 찾을 수 있는 용도로 사용되어야 한다고 강조합니다. 그리고, 이러한 방향으로 기술이 개발되도록 책임의식을 갖어야 한다고 주장하면서 글을 마무리합니다. (트위터도 끊을 거라고 하네요.. 근데, 2020년에 트위터 내용을 보니 못 끊은건지... 다시 가입한건지..)

 

 

 

 

 

 

6. Rebuttal

Reference 뒷 부분을 보면 "Rebuttal"이라는 section이 있습니다. 일반적으로 저자가 논문이나 자신의 article을 제출하면 reviewer들이 comment를 남깁니다. 그럼, 저자는 해당 comment에 대한 답변을 해야하는데 이러한 답변을 보통 "Rebuttal Letter"라고 부릅니다. 보통 답변을 할 때는 두 가지의 제스처를 취할 수 있습니다.

  • 수락: reviewer들로부터 피드백 받은 comment들 기반으로 잘 내용들을 업데이트 하겠다.
  • 반박: reviewer들이 comment한 것을 동의하기 어려운 경우도 있습니다. 이 때는 동의하지 않는 이유를 설명합니다. 

 

YOLO V3 tech report에서는 저자가 따로 comment 받은 내용과 자신의 rebuttal letter를 "Rebuttal" section으로 만들어 공개했습니다. (첫 번째 문단을 보면 ICCV에 제출한건지......)

첫 번재 문단은 따로 설명하지 않겠습니다. YOLO랑 크게 관련 없는 내용이라....

 

 

[첫 번째 문단 관련 영어단어 및 표현 정리]

  • shouts: shout이 보통 복수형으로 쓰이면 '외침'이라는 뜻으로 쓰이긴 하는데, 슬랭의 의미로 사용할 때는 누군가가 좋은 아이디어를 낼 때 "that's shouts'라고 사용한다고 하네요.
  • heartfelt: 진심어린
  • invariably: 변함없이, 언제나

 

 

[첫 번째 Reviewer: Dan Grossman]

첫 번째로 받은 comment는 "Figure 1, 3"에 대한 지적입니다. "Figure1", "Figure3" 두 그림을 보면 YOLOv3 그래프의 X축이 0부터 시작하지 않습니다. 

 

 

 

그래서, 이러한 comment를 받아들여, 아래와 같은 "Figure 4"를 만들어 제공했습니다.

 

[첫 번째 Reviewer관련 용어]

  • AKA: 일명 ~로 알려진 (as known as ~)
  • throw in ~: ~를 덧 붙이다.

 

 

[두 번째 Reviewer: JudasAdventus]

JudasAdventus라는 사람이 "the arguments against the MSCOCO metrics seem a bit weak."라고 comment 해준 것 같은데, 뭔가.. YOLO v3 저자가 굉장히 기분 안좋은 것 같은 반응을....(제가 해석을 잘 못 하고 있는건지...) 아마, reviewer가 "COCO 데이터 셋은 segmentation 관련 label도 진행하기 때문에 더 정확한 bounding box 정답 좌표를 갖고 있을 것이기 때문에 COCO metric을 쓰는 것에 대한 반문은 "bit weak"하다고 한 것 같습니다. 그러자, 저자는 그런게 문제가 아니라 mAP 쓰는 것에 대한 정당성 자체에 문제를 제기하고 있는 거라고 반문합니다. (그 이유는 아래 문단에서...)

 

 

 

YOLO v3 저자가 지적하는 바는 다음과 같습니다. Objecet detection 모델은 bounding box loss와 classification loss로 구성된 multi-task learning (← classification 학습도 하고, bounding box regression 학습도 하기 때문에 multi-task learning이라고 부름) 을 하는데, 기본적으로 bounding box regression 부분을 지나치게 강조하면 classification 학습이 잘 안될 수 있다는 것이 문제임을 제기합니다. 현실적으로도 물체를 잘 classification하는게 중요한거지 bounding box의 IoU를 50%, 55%, 60% 이런식으로 타이트하게 맞추는게 더 중요하지 않다고 주장하고 있습니다. (예를 들면, 보행자에서 지나가는 물체가 사람임을 인식하는게 중요한거지 사람에 대한 bounding box를 정확히 치는것이 중요하지 않다는 논리인것 같습니다)

 

또한, mAP라는 성능 지표자체가 갖고 있는 치명적인 결함은 다음과 같습니다. 아래 그림에서 누가봐도 "Detection #1"의 결과가 "Detection #2"의 결과보다 좋은거 같은데, 실제 "Detection #1"과 "Detection #2"의 mAP 값이 동일하게 나옵니다. 그 이유는 다음과 같습니다.

 

그 이유는 아래글에서 object detection에서의 precision 개념을 살펴보시면 이해할 수 있으실 겁니다! (간단하게만 말하자면, Detector2의 경우 FN이 많아진 것일 뿐, TP, FP의 개수에는 변함이 없습니다. 그래서, Precision=TP/(TP+FP) 수식 관점에서는 precision은 변하지 않는 것이죠)

https://89douner.tistory.com/76?category=878735 

 

 

 

 

 

 

위와 같은 이유를 들어 저자는 mAP 성능 지표를 쓰는 것이 현실적으로 의미가 있는거냐라는 질문을 다시 한 번 하고 있습니다.

 

 

 

 

 

 

 

 

 

7. Joseph Redmon quits CV research

 

YOLO V1부터 YOLO V3까지 개발해왔던 Joseph Redmon은 2020년이 되자 더 이상 CV (Computer Vision) 연구를 진행하지 않겠다고 선언합니다. 자기가 개발하는 CV 기술들이 군사목적으로 사용되는 것도 원치 않고 privacy 문제도에도 영향을 미치는 것 같다고 합니다 (뭐 드론 같은데에 잘 못 쓰이면 심각한 privacy 문제가 생길 수 있죠). 그래서 YOLO를 더 이상 개발하지 않습니다.

 

 

하지만, Alexey Bochkovskiy라는 러시아 연구원이 이전부터 YOLO 연구를 계속하고 있었기 때문에, Joseph Redmon이 YOLO 개발 중지 선언한 두 달 뒤 (2020.04.23) YOLO V4를 개발하고 논문화합니다. YOLO V4는 다른 글에서 설명하도록 하겠습니다. 

 

 

 

 

 

[참고한 자료]

1. PR-12. YOLOv3 이진원님 발표영상

 

'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

14. Object Detection Trend (2019~2021.08)  (7) 2021.09.12
11. SSD  (3) 2020.02.06
10. YOLO V2  (4) 2020.02.06
9. YOLO V1  (4) 2020.02.06
8. Faster RCNN  (1) 2020.02.06

안녕하세요.

이번 글에서는 의료분야에서 보편적으로 많이 사용되는 segmentation 모델인 UNet에 대해서 소개해드리려고 합니다.

 

Conference: MICCAI 2015

Paper title: U-Net: Convolutional Networks for Biomedical Image Segmentation

Authors: Olaf Ronneberger, Philipp Fischer, Thomas Brox

ISBI cell tracking challenge: First prize 

https://arxiv.org/abs/1505.04597

 

U-Net: Convolutional Networks for Biomedical Image Segmentation

There is large consent that successful training of deep networks requires many thousand annotated training samples. In this paper, we present a network and training strategy that relies on the strong use of data augmentation to use the available annotated

arxiv.org

 

 

지난 글("1.FCN")에서 설명한 FCN 모델 다음으로 가장 주목받은 segmentation 모델이 UNet 입니다.

UNet은 biomedical image 분야에 특화시킨 FCN을 기반 segmenation 모델입니다.

 

참고로 UNet 논문에서 나오는 대부분의 용어는 FCN 논문에서 나옵니다. 그래서 중간 중간에 FCN 글을 참조해달라는 글을 많이 적었는데, 해당 FCN 글은 아래 링크를 참고해주세요

(↓↓↓ FCN 글 참조 ↓↓↓)

https://89douner.tistory.com/296?category=878997 

 

 

실제로 많은 의료분야에서 UNet을 베이스 모델로 하여 병변들을 segmentation 하고 있습니다. 

그러므로 의료분야에서 딥러닝 기반 segmentation 모델을 이용해보려는 분들UNet 구조를 이해하고 UNet논문에서 언급하고 있는 여러 용어들에 친숙해 질 필요가 있습니다.  

 

그럼 지금부터 UNet 논문을 리뷰해보도록 하겠습니다.

 

 

 

 

 

 

0. Abstract

  • UNet에서 강조하고 있는 부분 중 하나는 강력한 data augmentation을 이용했다는 점입니다.
  • "contracting path to capture context and a symmetric expanding path"라는 문장은 아래와 "그림1"을 그대로 설명한 문장입니다. 아래 "그림1"을 보면 contracting path를 통해 context 정보(=features from almost last layers)를 구하고, contracting path 부분과 symmetric 한 expanding path를 통해 다시 원본 이미지 크기에 맞도록 (upsampling 후) segmentation (for precise localization) 을 진행하는 작업이 수행됩니다 (사실 이 부분은 FCN과 거의 다른 부분이 없습니다.)
  • FCN과 UNet의 차별점은 아래 "그림1"에서 같은 층(ex: contracting path 568×568×64 & expanding path 392×392×128)끼리 이어붙여주는 연산의 유무입니다. (좀 더 자세한 설명은 UNet 구조를 설명하는 부분에서 자세히 다루도록 하겠습니다.
  • "segmentation of neuronal structures in electron microscopic stacks" → "segmentation for stacks of serial images generated by EM (Electron Microscopy(=전자 현미경)).

 

그림1

 

  • UNet 모델ISBI cell tracking challenge 2015에 참가하여 주목을 받은 모델이기 때문에 해당 challenge 대회에서 사용한 데이터 셋을 사용했습니다. 해당 데이터 셋의 간단한 정보는 아래와 같습니다 (ISBI challenge에 대해서는 FCN 관련 글에서도 설명해놨으니 참고해주세요!)
    • Dataset: Transmitted light microscopy images (phase contrast and DIC((Differential Interference Contrast)))
      • Transmitted light microscopy = 투과 광선 현미경검사
      • Phase-contrast microscopy = 위상차 현미경
      • Differential interference contrast microscope ( DIC) = 차등간섭대비현미경
    • Input Size: 512×512
    • Deep Learning Framework: Caffe
    • Inference Time: a second on a recent GPU 
    • Training time: 10 hours → "5. Conclusion"에서 알 수 있는 정보
    • GPU: NVidia Titan (6 GB) → "5. Conclusion"에서 알 수 있는 정보

 

 

 

 

1. Introduction

  • 기존 CNN에 대해서 짧게 설명하고 있습니다.
    • AlexNet 소개
    • VGGNet 소개
    • 2015년 당시에 CNN 최신 모델은 VGGNet 또는 GoogLeNet이었습니다.

 

 

 

  • 기존 CNN은 보통 single classification task에 사용되었습니다.
  • 하지만 biomedical image processing 분야에서는 한 이미지 내에 모든 pixel을 classification을 하는 segmentation task가 중요하게 사용되기도 합니다. (예를 들어, 암의 위치 또는 크기를 segmentation 할 필요가 있겠죠?)
  • ImageNet에 비해 (biomedical tasks을 위한) biomedical image 수가 충분하지 않다는 문제가 있습니다. 
    • by reach = 손이 닿지 않는 곳에 = "가능성이 없는" 늬앙스
  • 이러한 데이터 수 문제를 해결하기위해 (UNet 이전에) patch 기반의 학습 기법("Ciresan et al"="Sliding-window setup")을 이용해 data 수를 늘리려는 시도를 했습니다.
    • Sliding-window setup 방식은 FCN 글에서 설명해 놨으니 참고해주세요. 
  • Sliding window 기반 딥러닝 segmentation 모델이 EM (Electron Microscopy: 전자현미경) segmentation 종류인 ISBI 2012 challenge 우승했습니다.

(↓↓↓ EM segmentation ↓↓↓)

http://brainiac2.mit.edu/isbi_challenge/home

 

About the 2D EM segmentation challenge | ISBI Challenge: Segmentation of neuronal structures in EM stacks

 

brainiac2.mit.edu

 

 

 

 

  • "Ciresan et al"="Sliding-window setup" 방식은 2가지의 문제점이 있는데, 이 부분도 FCN 글을 참조해주시길 바랍니다!

 

 

 

  • 이 문단은 FCN에 대한 설명이므로 FCN 글을 참조해주세요!
    • successive layers = deconv layers

 

 

 

  • "그림1"에서 볼 수 있듯이 expanding path(=upsampling part) 를 보면 기존 FCN 보다 더 많은 conv filter channel들이 사용되었다는걸 확인 할 수 있습니다. 이를 통해 저자는 "propagate context information to higher resolutioin layer" 가 가능하다고 주장하고 있네요.

 

그림1

 

  • "segmentation map only contain ~ in the input image"→ segmentation map (=아래 "그림1"을 보면 최종 output결과를 segmentation map이라고 부름) 에는 입력 영상에서 전체 context를 "available"할 수 있는 pixel만 포함(=segmentation)된다고 합니다. → 이 부분은 그냥 segmentation map 결과가 context (의미 or 객체) 단위로 표현된다는 것으로 이해했습니다. 예를 들어, 아래 그림처럼 입력 이미지는 고양이의 질감이나 다양한 정보들을 확인 할 수 있는데 반해, segmentation map에서는 오로지 context 정보만 확인할 수 있습니다.  
    • Valid part에 대한 정확한 의미는 잘 모르겠네요. Valid part만 보면 segmentation map을 의미하는거 같다가도, "valid part of each convolution"을 보면 convolution과 연관지어 해석해야 할 것 같기도합니다. Segmentation map에 적용되는 각각의 convolution이라고 해석해야하는건지.....

 

 

 

  • This strategy(=not using FC layer)는 입력 이미지 크기에 제한 받지 않고 (=arbitrarily large images) segmentation이 가능하게 만들었는데, over-tile strategy를 이용해 좀 더 seamless(=매끄러운) segmentation이 가능하게 만들었습니다.
  • 지금부터 아래 "그림2(=over-tile strategy)"에 대해서 좀 더 자세히 설명 해보도록 하겠습니다.

그림2

 

 

  • 아래 "그림3"과 같이 기존의 patch 방식으로 학습하면 overlapping되는 부분이 많이 생깁니다.
  • 이러한 문제는 computation의 redundancy를 증가시키기도 합니다.
  • Unet에서는 이러한 문제를 해결하기 위해 overlap-tile strategy를 적용시켰습니다.

그림3. 이미지 출처: http://brainiac2.mit.edu/isbi_challenge/home

 

 

  • Over-tile strategy를 설명하기에 앞서 “그림1”Unet 구조를 보면 input size와 output size가 다릅니다.
  • 다시 말해, 실제 segmentation 되는 부분은 input image의 일부분이라는 말과 같습니다. (→ 아래 "그림6"의 오른쪽 이미지 참고)

그림6

 

 

 

  • Overlap-tile strategy 을 이용하면 실제 segmentation 되는 부분은 overlapping이 안 되는 것을 알 수 있습니다. (이 부분 때문에 “seamless segmentation”이라는 표현을 쓴 건지....)

그림7

 

 

 

    • To predict the pixels in the border region of the image, the missing context is extrapolated by mirroring the input image.
      • the pixels in the border region of the image → input image의 주황색 bounding box(=the border region) 내부(in) pixel
      • 실제 segmentation되는 부분(=오른쪽 그림에서 “원본 이미지“)이 ground truth의 크기이기 때문에, input으로 들어가는 이미지에 추가 작업을 진행해줘야 합니다.
      • 이 논문에서는 input size에 해당하는 빨간색 bounding box와 실제 segmentation size에 해당하는 주황색 bounding box를 뺀 나머지 부분을 “missing context”라 언급하고, mirroring 기법을 이용해 missing context 부분을 extrapolation(=추론) 하여 input image를 만들어 준다고 합니다.

그림8

 

 

  • 이러한 over-tile strategy를 이용해서 input image resolution에 제한받지 않고 segmentation 학습이 가능해졌다고 말하고 있습니다. 

그림9. 이미지출처: https://kuklife.tistory.com/119

 

 

 

 

 

  • Segmentation 학습을 위해 제한적인 training dataset을 갖고 있었기 때문에 excessive data augmentation을 진행해 학습 데이터 수를 증가시켰다고 합니다.
    • 여기에서는 elastic deformation augmentation 방식을 설명했지만 "3.1. Data augmentation" 파트에서 실제로 학습에 적용된 다양한 augmentation 방식들을 소개하고 있기 때문에 추가적인 설명은 "3.1. Data augmentation" 파트에서 하도록 하겠습니다.
    • 최근에는 "As for our tasks ~ the available training images"라는 말이 상식적이라 최근 논문에는 굳이 사용하지 않지만, 이 당시 (2015) 까지만 하더라도 data augmentation에 대한 언급을 한 문단으로 따로 해줬나보네요.

 

 

 

 

  • biomedical image segmentation (ex: cell segmentation) 같은 경우는 인접한 세포들간을 분리하는 segmentation을 적용하는 것이 쉽지 않습니다. (→ Instance segmentation)

(↓↓↓ Instance segmentation VS Semantic segmentation↓↓↓)

https://89douner.tistory.com/113

 

1. Segmentation이 뭔가요?

안녕하세요~ 이번 Chapter에서는 segmentation에 대해서 알아보도록 할거에요. Segmentation을 하는 방식에는 여러가지가 있지만, 이번 chapter에서는 딥러닝을 기반으로한 segmentation에 대해서 알아보도록

89douner.tistory.com

  • 이 논문에서는 인접한 cell들 사이에 경계가 될 수 있는 background (=the separting background labels) 를 잘 segmentation 해줄 수 있도록 별도의 loss function을 사용했다고 합니다 (해당 부분은 "3.Training" 파트에서 자세히 설명하도록 하겠습니다)

 

 

 

  • UNet2D transmitted light datasets을 기반으로하는 (대표적인) 두 challenging 대회에서 기존 모델들과 큰 격차(=by a large margin)로 우승을 했다고 합니다. (Transmitted light microscopy = 투과 광선 현미경검사)
    • A 대회: Segmentation of neuronal structures in EM (Electron Microscopy: 전자현미경) stacks at ISBI 2012
    • B 대회: Light microscopy (=광선 현미경검사) images from the ISBI cell tracking challenge 2015

 

 

 

2. Network Architecture

 

  • UNet 구조는 앞에서 추상적으로 설명했기 때문에 이 부분에서는 좀 더 구체적으로 설명하도록 하겠습니다.
    • Contracting path
      • Two 3×3 Conv filter (stride=1) with zero padding of input feature map → feature map size-reduction → 2×2 max-pooling → feature map size-reduction (to Half) 
      • 이 과정을 반복해서 적용
    • Expansive path (Expansive path는 크게 세 단계로 나눌 수 있습니다.)
      1. 2x2 De-Conv filter that halves the number of feature channels. (아래 "그림10"에서 보라색 점선 화살표를 보면 input channel (=512)을 256으로 줄여주는걸 확인할 수 있습니다.)
      2. Copy and Crop a → "concatenation with the correspondingly cropped feature map from the contracting path" 
        • 아래 "그림10"에서 ①②라고 되어 있는 부분을 기준으로 설명하겠습니다.
        • Crop: Contracting path에 있는 136×136 feature map size → crop → 104×104 feature map size
          • 정확한건 아니지만 이 과정에서 앞서 언급한 mirroring이 적용된 부분이 제거 되는 것으로 추론됩니다. (어떻게 crop하는지 코드를 살펴봐야겠네요)
        • Copy and Concatentation: Contracting path에서 crop된 (104×104)×256 feature map을 Copy → 아래 "그림10" 기준으로 같은 층에 존재하는 expansive path의 (104×104)×256 feature map에 concatenation → Concatenation 결과: (104×104)×512 feature map 생성 
      3. Final layer: 388×388×64 feature map을 output segmentation map으로 만들어주기 위해, 1×1 conv filter를 이용해 388×388×2 feature map으로 만들어줌 (=mapping)
        • 아래 "그림10"을 기준으로 보면 2는 classification해야 할 class 개수인 것 (binary classification: cell인지 아닌지(=background)) 같은데 아니라면 댓글 달아주시면 감사하겠습니다!
    • Total 23 convolutional layers = 18 conv 3x3  (blue arrows) + 4 up-conv 2x2 (green arrows) + 1 final layer (an orange arrow) = 23

 

 

그림10

 

 

  • 2×2 max-pooling을 적용하기 위해서 conv layer에 입력으로 들어오는 feature map size가 x, y축 모두 짝수가 되도록 고려해서, input title size를 설정해줘야 over-tile strategy가 잘 적용될 수 있다는 것을 언급하는 듯 합니다.

 

 

 

 

 

3. Training

  • Optimizer
    • Stochastic Gradient Descent (SGD)
    • Momentum: 0.99
  • Deep learning framework: Caffe
  • Batch: A single image 

 

 

1) Loss function

  • UNet은 아래와 같은 loss function을 사용하고 있습니다.
  • 논문에서 글로 설명하는 내용들을 그림으로 대체해서 설명해보도록 하겠습니다. 

 

 

1-1) SoftMax

 

그림11. 이미지 출처: https://medium.com/hyunjulie/1%ED%8E%B8-semantic-segmentation-%EC%B2%AB%EA%B1%B8%EC%9D%8C-4180367ec9cb

 

 

 

1-2) Cross-Entropy

 

그림12. 이미지 출처:  https://naokishibuya.medium.com/demystifying-cross-entropy-e80e3ad54a8

 

 

 

1-3) Weight Map

  • 먼저 weight map equation 식 자체에 대한 concept 부터 이해하도록 하겠습니다.

그림13

 

 

  • 다음은 \(w_{c}(x)\) 수식을 설명하겠습니다.

그림14

 

(↓↓↓\(w_{c}(x)\) 수식 관련 reference site↓↓↓)

https://kr.mathworks.com/help/vision/ref/nnet.cnn.layer.pixelclassificationlayer.html

 

 

 

 

  • weight map equation에서 exp 수식 부분 설명
  • weight map equation 수식의 오른쪽 수식은 guassian distribution과 유사합니다.
  • 개인적으로 gaussian function 수식과 weight map equation 수식의 오른쪽 수식이 어떤 관계가 있을 거라 생각 하는데, 그 이유는 이 논문에서는 σ 개념을 도입했기 때문입니다. 하지만, 좀 더 구체적인 설명은 하지 않고 있어서 해당 exp 수식이 정말 guassian function 개념을 기반으로 설명 될 수 있는지 잘 모르겠네요... (exp 수식을 왜 사용했는지 좀 더 알고 싶은데.... 시간이... 혹시 아시는 분 있으면 답글 달아주세요!)

그림15

 

 

 

 

 

2) Weight initialization

  • Gaussian distribution initialization (=standard deviation distribution)
    • Standard deviation: \(\sqrt{\frac{2}{N}}\) 
    • N = conv filter size × conv filter channel

 

 

 

3.1 Data Augmentation

  • 이 논문에서 언급하고 있는 data augmentation 방식은 총 가지 입니다.
    • Shift
    • Rotation
    • Gray value
    • Random elastic deformation
  • Random elasstic deformation에 대해서 다양하게 설명하고 있는데, 해당 설명은 아래 그림으로 대체하도록 하겠습니다.

이미지 출처: https://www.researchgate.net/figure/Training-data-augmentation-through-random-smooth-elastic-deformation-a-Upper-left-Raw_fig5_329716031

 

 

 

 

 

 

 

4. Experiments

이 부분에서는 UNet을 적용한 세 가지 task (3가지 dataset 종류)에 대해서 소개합니다. 세 가지 task에 대한 설명은 그냥 논문에 있던 글들을 요약해서 정리해 놓았습니다. 대신에 성능평가를 위해 사용한 evaluation 종류에 대해 자세히 설명하도록 해보겠습니다.

 

  • 이 논문에서 UNet 모델을 이용해 3가지 segmentation task에 적용해봤다고 합니다.
    • First task: The segmentation of neuronal structures in electron microscopic (EM) recordings
      • Dataset: the EM segmentation challenge (at ISBI 2012)
      • 20 training images "512×512" (from serial section transmission electron microscopy of the Drosophila first instar larva ventral nerve cord (VNC)) 
        • Drosophila: 초파리
        • Instar larval: 어린 유충
        • Ventral nerve cord: 복부 신경 코드
    • Other tasks: A cell segmentation task in light microscopic images (=A part of the ISBI cell tracking challenge 2014 and 2015)
      • Second task
        • Dataset: PhC-U373 containing Glioblastoma-astrocytoma U373 cells on polyacrylimide substrate (from phase-contrast microscopy)
          • Glioblastoma-astrocytoma U373 cells on polyacrylimide substrate → 생물학 용어인거 같은데 잘 모르겠네요;;
        • 35 partially annotated training images
      • Third task
        • Dataset: DIC-HeLa (from differential interference contrast (DIC) microscopy)
        • 20 partially annotated training images 

 

 

1) Pixel error

  • Pixel error는 prediction과 ground truth에 pixel마다 할당된 class들끼리 불일치하는 pixel들의 개수가 전체 pixel들을 기준으로 어느정도 비율이 되는지 알려주는 metric입니다. 

이미지 출처: https://imagej.net/plugins/tws/topology-preserving-warping-error

 

 

 

  • Warping error와 Rand error는 digital topology error과 관련이 있는듯 합니다. 이 부분은 topology(위상수학)에 대한 이해를 기반으로 해석해야 하는데, 시간상 해당 부분을 살펴보지 못했습니다. 좀 더 디테일한 설명을 원하신다면 아래 reference를 참고해주시고, 추후에 시간이나면 설명해 놓도록 하겠습니다!

(↓↓Evaluation 관련 reference site↓) 

https://imagej.net/plugins/tws/topology-preserving-warping-error

 

Topology preserving warping error

The ImageJ wiki is a community-edited knowledge base on topics relating to ImageJ, a public domain program for processing and analyzing scientific images, and its ecosystem of derivatives and variants, including ImageJ2, Fiji, and others.

imagej.github.io

 

 

 

'Deep Learning for Computer Vision > Segmentation' 카테고리의 다른 글

2. FCN  (1) 2021.07.08
1. Segmentation이 뭔가요?  (1) 2020.02.17

안녕하세요.

이번 글에서는 처음으로 딥러닝을 적용한 segmentation 모델인 FCN에 대해서 소개해드리려고 합니다.

 

 

 

Conference: CVPR 2015

(논문은 2014년에 나옴)

Paper title: Fully Convolutional Networks for Semantic Segmentation

Authors: UC Berkely

https://arxiv.org/abs/1411.4038

 

Fully Convolutional Networks for Semantic Segmentation

Convolutional networks are powerful visual models that yield hierarchies of features. We show that convolutional networks by themselves, trained end-to-end, pixels-to-pixels, exceed the state-of-the-art in semantic segmentation. Our key insight is to build

arxiv.org

 

FCN 모델최초의 딥러닝 기반 segmentation 모델입니다. 

물론 FCN 이전에 딥러닝을 사용한 segmentation 모델이 있긴 했지만, 현재 대부분의 segmentation 모델들이 FCN을 베이스로 사용하고 있기 때문에 FCN을 최초의 딥러닝 기반 segmentation 모델로 간주하고 있습니다.

 

FCN 논문이 중요한 이유는 두 가지로 요약할 수 있습니다.

  1. 앞으로 딥러닝 기반의 segmentation 논문들을 읽으실 때, FCN 논문에서 언급되는 다양한 용어들이 자주 등장하기 때문입니다.
  2. 대부분의 딥러닝 기반 segmentation 모델들이 FCN 구조를 기반으로 하고 있기 때문입니다.  

 

그럼 지금부터 FCN 모델을 리뷰해보도록 하겠습니다.

(중간중간에 설명이 더 필요한 부분은 "CS231n Lecture 11. Detection and Segmentation"강의를 참고했습니다)

 

 

 

 

0. Abstract

 

  • Convolutional (neural) network는 아래 그림과 같이 단계별로(=stage) hierarchical feature를 뽑아 내는 강력한 visual model 입니다.

 

그림1 이미지 출처: https://www.researchgate.net/figure/Learning-hierarchy-of-visual-features-in-CNN-architecture_fig1_281607765

 

  • 이 논문에서는 convolutional network를 이용하여 "end-to-end", "pixel-to-pixel" 학습을 기반으로 semantic segmantation을 학습한다고 언급했습니다.
    • end-to-end학습을 시킨다는 말을 이해하기 위해서"end-to-end"가 아닌 모델을 이해해야 합니다. 우선 "그림2", "그림3"을 통해 설명하도록 하겠습니다.
    • 그림2
      • 첫 번째로 end-to-end가 아닌 모델은 전통적인 pattern recognition 모델입니다.
      • 딥러닝에서는 이미지의 특징을 추출해주는 filter(=conv filter)들이 학습 가능 (learnable) 하지만, 전통적인 pattern recognition 모델은 사람이 미리 (fixed) filter를 설계하는 방식으로 디자인 됩니다.
      • 예를 들어, 자동차를 잘 분류할 수 있을 것 같은 filter를 설계하여 feature를 뽑은 뒤, 자동차 객체를 잘 분류할 수 있도록 분류기 부분을 학습시키는 것이지요.
      • 이렇게 하면 classifier만 학습이 되는데, 만약 분류하려는 객체가 바뀌면 filter를 또 수동적으로 바꿔줘야 합니다.
      • 이러한 전통적인 pattern recognition 모델"hand-crafted feature extractor(=filter)""trainable classifier" 두 부분으로 구성되어 있다고 할 수 있는데, 실제로 학습을 하는건 classifier 부분 뿐입니다.
      • 다시말해, 입력이 들어오면 "hand-crafted feature extractor 부터 classifier까지" = "처음부터 끝까지" ="end-to-end "로 학습하는 것이 아니기 때문에, end-to-end 모델이 아닙니다.
    • 그림3
      • 두 번째로 "end-to-end"가 아닌 모델은 cascade 방식의 모델입니다.
      • Cascade는 폭포라는 사전적 의미가 있지만 순차적 단계적인 늬앙스를 내포하고 있습니다.
      • 예시1 (그림3-1)
        • 먼저, Segmentation 작업을 cascade 방식으로 진행할 수 있습니다.
        • Segmentation 작업을 진행할 때, 우선 관심 영역을 detection 하고 (RoI detection), 해당 RoI 영역을 segmentation 하도록 설계할 수 있습니다.
        • 즉, object detection 모델과, segmenation 모델을 각각 독립적으로 사용하는 것이죠.
        • 반면에, Mask RCNN은 하나의 모델에 같이 개별 task를 수행하는 loss들을 결합시킨 multi-task learning 방식(=classification loss+bouding box loss+mask loss)을 사용합니다. 즉, RoI detection과 segmentation이 동시에 end-to-end로 학습이 되는 방식이라 할 수 있겠습니다. 
      • 예시2 (그림3-2)
        • 어떤 이미지의 key point (or landmark)를 찾아야 한다고 가정해보겠습니다.
        • 이때, 처음부터 큰 이미지에서 key point를 찾는 것은 굉장히 어려운 문제입니다.
        • 그러므로 먼저 object detection 모델을 이용해 key point가 있을 만한 RoI를 선별(=RoI detection)하고, 선별된 RoI를 CNN 모델에 입력해 해당 key point를 찾아주도록 합니다(=이때 CNN모델의 loss function은 해당 key point의 x,y 좌표값을 학습하는 regression loss를 이용합니다).
        • 이 경우 object detection 모델과 CNN 모델은 독립적으로 이용됩니다.

그림2 이미지 출처: https://stackoverflow.com/questions/40552928/what-is-meant-by-end-to-end-fashion-convolutional-neural-networkcnn

 

 

그림3-1. 이미지 출처: https://www.programmersought.com/article/21122704833/

 

 

그림 3-2 이미지 출처: https://www.mdpi.com/journal/applsci/special_issues/Machine_Learning_Biomedical

 

  • FCN segmentation 모델은 아래와 같은 이유로 "end-to-end" 방식을 취하고 있다 할 수 있습니다.
    • Segmentation을 위해 사용되는 filter들이 learnable 합니다.
    • 독립적인 딥러닝 모델들을 이용하지 않고(=not cascade), 하나의 딥러닝 모델에서 segmentation 작업을 진행 합니다. 
  • FCN 모델은 segmentation을 위해 사용되는 filter들이 전부 conv filter (=Fully Convolution Network)로 구성되어 있기 때문에, 구조적으로 봤을 땐 input image size 크기를 고정될 필요가 없습니다 (=arbitrary). → FC layer가 제거 되었기 때문에 입력 이미지 크기가 고정될 필요는 없겠죠. 
  • Correspondingly-sized output는 "3.Fully convolutional networks"를 봐야 자세히 이해가 가능한데, 간단히 설명하면 segmentation 결과가 input size와 같은 spatial dimensions을 지닌다고 할 수 있겠네요.
    • "3.Fully convolutional networks" ← "An FCN naturally operates on an input of any size, and produces an output of corresponding (possibly resampled) spatial dimensions."

 

 

 

 

  • Pixels-to-Pixels를 짧게 설명하면 이미지의 pixel마다 classification 학습을 진행한다는 뜻으로 이해하면 될 것 같습니다. 그렇기 때문에 이 논문에서는 최종 segmentation 결과가 모든 pixel을 classification 하는 방식인 dense prediction task라고 설명하고 있습니다. 

(↓↓↓ Dense Prediction Task 설명 ↓↓↓)

https://89douner.tistory.com/113?category=878997 

 

1. Segmentation이 뭔가요?

안녕하세요~ 이번 Chapter에서는 segmentation에 대해서 알아보도록 할거에요. Segmentation을 하는 방식에는 여러가지가 있지만, 이번 chapter에서는 딥러닝을 기반으로한 segmentation에 대해서 알아보도록

89douner.tistory.com

 

 

 

 

 

  • 먼저 위의 문장에서 나오는 semantic information, coarse layer, appearance information, fine layer와 같은 용어들만 정리하도록 하겠습니다.
    • Appearance information
      • Appearance는 말 그대로 "외관"이라는 뜻입니다 (appearance: the way a person or thing looks to other people).
      • 사람들의 외관을 파악할 때 보통 전체적인 shape(or 윤곽선)들을 보고 판단하게 됩니다.
      • CNN의 첫 번째 layer에 있는 filter들은 보통 edge feature들을 추출하기 때문에 "그림 4"에서 볼 수 있듯이 사람의 윤곽과 관련된 feature들이 잘 추출되는 것을 확인 할 수 있습니다.
      • 이러한 세밀한 feature들(=edge)을 잘 추출한다고 하여 CNN의 초기 layer들을 fine layer라고도 합니다.
      • 반대로 마지막 layer에서 추출된 feature들만 보면 이 물체의 외관(appearance)이 어떤지 알기 힘들다는걸 확인할 수 있습니다.
    • Semantic information
      • Semantic"의미론적"이라는 뜻을 지니고 있습니다.
      • "그림 4"에서 볼 수 있듯이, 보통 CNN에서 제일 deep한 위치에 있는 layer들이 뽑는 feature들을 보면 객체의 외관을 파악하기 힘든 반면, feature들이 활성화된 부분들을 보면 옷과 같이 하나의 의미를 갖는 정보들을 보여준다는걸 알 수 있습니다.
      • Coarse는 (fine과 반의어로 사용될 때) 굵다라는 뜻을 갖고 있습니다.
      • 앞서 언급한 fine(=미세한; edge) feature들을 뽑은 초기 layer들과 비교해서 생각하면 여기서 언급하는 coarse의 의미가 어떻게 쓰인건지 파악하실 수 있을거라 생각됩니다. (Coarse: rough and not smooth or soft, or not in very small pieces)      

 

그림 4 이미지 출처: https://www.researchgate.net/figure/Visualization-of-hierarchical-deep-features-Convolutional-layers-of-a-typical-CNN-model_fig1_318392516

 

 

 

(↓↓↓CNN구조에서 layer의 깊이에 따라 conv filter가 뽑는 feature들이 다르다는걸 설명한 내용↓↓↓)

https://89douner.tistory.com/category/Deep%20Learning%20for%20Computer%20Vision/Convolution%20Neural%20Network%20%28CNN%29?page=2 

 

'Deep Learning for Computer Vision/Convolution Neural Network (CNN)' 카테고리의 글 목록 (2 Page)

#Interest: World History (The past) #Work: Deep Learning (The future) #Hobby: Music, Sports

89douner.tistory.com

 

(↓↓↓CNN layer의 깊이에 따라 나타나는 activation map을 직관적으로 설명한 내용 ↓↓↓) 

https://89douner.tistory.com/260?category=993921 

 

1. Activation Map

안녕하세요. 이번 글에서는 Class Activation Map (CAM)을 알아보기 전에 Activation Map을 통해 알 수 있는 것들이 무엇인지 알아보도록 하겠습니다. 1. CNN의 기본적인 연산 과정 Activation Map에 대해 설명하..

89douner.tistory.com

 

  • FCNsemantic informationappearnace informationcombining(결합)하여 사용 한다고 하는데, 이 부분은 "4.2 Combining what and where"에서 더 자세히 설명하도록 하겠습니다.

 

 

 

 

 

1. Introduction

  • CNN의 등장으로 인해 classification task, local task(ex: object detection, key-point detection (or landmark detection), local correspondence와 같은 분야에서 엄청난 발전을 이룰 수 있었습니다.
  • Local correspondence는 따로 task라기 보다는 , CNN은 conv filter는 구조상 주변 pixel들을 고려하여 최종 값을 도출하기 때문에 local corresponence를 상대적으로 잘 고려해준다고 하여 local correspondence에 advance가 있었다고 표현한 것 같습니다. (CNN이전 모델들(ex: ML모델, SIFT, DNN(Deep Neural Network) 구조)에서는 pixel간의 local 정보를 무시하면서 학습하는 경향이 있었습니다)

 

 

  • 이 논문이 나올 당시에는 아직 CNN 베이스의 segmentation 모델이 없었기 때문에, 앞서 object detection, classification과 같이 전체 이미지(=coarse)를 기반으로 task를 수행하는 것이 아닌, 이미지의 pixel(=fine)들 마다 classification 해주는 dense prediction을 수행할 수 있도록 연구가 되어야 한다고 주장하고 있습니다.
  • 이러한 task를 위해서는 pixel마다 labeling을 해줘야 한다는 것을 보니, supervised learning 기반으로 학습할 것이라고 추론할 수 있습니다.

 

 

  • 앞서 언급한대로 FCNend-to-end 방식으로 학습을 진행하며, pixel 별로 classification 작업을 수행하기 때문에 pixel-to-pixel (=dense prediction) 기반의 semantic segmentation을 수행한다고 할 수 있습니다. (참고로 semantic segmentation과 대비되는 개념으로는 instance segmentation이 있는데, instance segmentation은 다음 글 UNet에서 더 자세히 설명하도록 하겠습니다) 

(↓↓↓ semantic segmentation VS instance segmentation↓↓↓ )

  • 또한 supervised pre-training을 이용하는 것으로 언급이 되어 있는데 pre-training을 어떻게 이용할 것인지는 뒷 부분을 봐야 더 명확히 이해할 수 있을 듯 합니다.
  • FCN모두 convolutional layer로 구성되어 있기 때문에 입력 이미지 사이즈에 제약을 받지 않으며 (=arbitrary-sized inputs), dense prediction하기 위해 dense outputs을 출력한다고 설명하고 있습니다.
  • 그외 dense feedforward computation, backpropagation, upsampling, pixel-wise prediction, learning with subsampling pooling라는 개념들은 뒤에서 FCN architecture를 상세히 설명하는 부분을 보고 어떻게 연계되는지 파악하는 것이 좋을 것 같습니다.  

 

 

 

 

  • asymptotically (점진적으로), absolutely 효과적이라고 표현하고 있는데 뒷 부분에도 따로 부가 설명을 하고 있지 않아 정확한 의미를 파악하진 못했습니다. (그냥 개인적으로 유추했을 때 이전 CNN 기반이 아닌 segmentation 모델이 CNN처럼 hierarchical 하지 않거나, 성능적으로 좋지 않기 때문에 "asymptotically, absolutely"라는 표현을 사용한게 아닌가 싶습니다. 혹시 아시는 분이 있으면 댓글 달아주세요!)

 

  • 사실 FCN이 나오기 전에도 딥러닝 방식이 사용되긴 했으나 이것을 최초의 딥러닝 기반 segmentation 모델로 보고 있진 않습지만, FCN 모델의 우수성을 설명하기 위해 대비되는 개념으로 자주 등장하기 때문에 정확히 이해하고 있을 필요가 있습니다.
  • 그럼 지금부터 FCN 이전에 나왔던 두 가지 방식 segmentation 학습 방법론을 설명하면서 이 논문에서 제기하고 있는 FCN 이전 모델들의 단점을 좀 더 자세히 설명해보도록 하겠습니다.
  • FCN이전에 고안된 첫 번째 segmentation 학습 방법론은 patchwise(≠pixelwise) 학습 방식입니다.
  • Patchwise learning 방식은 아래와 같습니다.
    1. 특정 크기의 patch를 설정해주고 CNN에 입력해 줍니다.
    2. 입력으로 들어간 patch는 CNN에 의해 classification이 됩니다.
    3. 이때 특정 class로 분류가 되었다면, 해당 patch 중앙에 위치한 pixel을 해당 class로 분류해줍니다.
    4. 이러한 과정을 슬라이딩 윈도우 (sliding window) 방식으로 반복하게 됩니다.

그림5. 이미지 출처: https://www.slideshare.net/xavigiro/image-segmentation-d3l1-2017-upc-deep-learning-for-computer-vision

 

그림6. sliding window 방식

 

  • 이러한 Patchwise learning 방식에는 여러 문제들이 있었습니다.
    • 문제점1: 모든 Patch들을 CNN에 넣고 일일이 분류하는 작업을 수행하면 너무 많은 계산량을 요구하게 됩니다.
    • 문제점2: Patch 크기를 키우면 하나의 patch에 두 개의 class가 동시에 들어가 있을 확률이 크기 때문에 어떻게 classification 해줄지 애매한 경우가 생깁니다. 또한, patch 끼리 겹치는 부분이 커지므로 중복계산이 진행되는 경우가 많아지겠죠. 
    • 문제점3: 그렇다고, 다시 patch 크기를 줄여주면 low resolution을 갖게 되는 문제가 발생합니다. (CNN에 input image로 들어가는 patch가 low resolution이라면 classification accuracy가 떨어질 가능성이 크겠죠? → 보통 CNN의 입력 크기가 클 수록 classification accuracy, object detection accuracy가 높아집니다)

그림7 출처: Patch 방식

  • FCN이전에 고안된 두 번째 학습방법론은 pixelwise 방식입니다. FCN이전 pixelwise 방식은 아래와 순서로 진행됩니다.
    1. 전체 이미지를 CNN에 넣어줍니다.
    2.  Pooling 과정 없이 feature를 추출해줍니다.
    3. 최종결과로 나온 "C×H×W" 형태(=아래 그림에서 "Scores:C×H×W"부분)의 tensor에서 C는 우리가 classification하고 싶은 class의 총 개수를 의미합니다. 다시말해, 최종 결과로 나온 "C×H×W" 형태의 tensor는 classification scroes (map)이라고 할 수 있습니다.
    4. 각 픽셀 위치(\(x_{ij}\))에 해당하는 score map (=C×1×1)에서 제일 높은 i번째 class score를 지닌 \(c_i\)에 맞는 색을 할당시켜줍니다.
    5. 이미지 상의 모든 pixel에 대해 할당작업이 끝나면 최종적으로 prediction 결과 (prediction map=H×W)가 나옵니다.
    6.  Supervised learning 방식으로 학습이 진행되기 때문에 ground truth로 설정된 H×W의 true pixel들 정보가 존재합니다. Prediction (H×W)와 True label (H×W)에 대한 정보를 이용해 각각의 위치에 mapping되는 pixel들끼리 (classification) loss function을 적용시켜 줍니다. 이때, 각각의 위치에 해당되는 prediction과 true label pixel들간 계산되는 loss function은 cross entropy로 진행됩니다. 이러한 loss function 방식을 pixelwise loss function이라고 합니다.
    7.  아래 "그림8"에서는 각각의 pixel들의 loss를 총합하여 최종 loss값을 출력해주고 있는데, 각각의 pixel에서 계산된 loss의 총합(sum)으로 최종 loss를 출력할 수도 있고, 평균값(=sum/total number of pixels)으로 최종 loss값을 출력할 수 있습니다.

그림8 출처: pixelwise 방식

 

 

  • 위에서 설명한 내용을 CS231n에서는 아래와 같이 표현합니다.
    • You could see this tensor (C,H,W) as just giving our classification scores for every pixel in the input image at every location in the input image.
    • You can imagine training this thing by putting a classification loss at every pixel of this output, taking an average over those pixels in space, and just training this kind of network through normal, regular back-propagation.
    • Q.What is loss function?
      • Since we’re making a classification decision per pixel, then we put a cross-entropy loss on every pixel of the output.
      • So we have the ground truth category label for every pixel in the output, then we compute across entropy loss between every pixel in the output. And the ground truth pixels and then take either a sum or an average over space and then sum or average over the mini-batch.

 

 

  • 앞서 언급한 FCN 이전의 pixelwise segmentation 방식은 방대한 계산량과 구조적인 feature를 뽑지 못한다는 문제점을 갖고 있습니다.
    • 일반적인 CNN구조와 비교하면 쉽게 알 수 있습니다.
    • 일반적인 CNN 구조(아래그림=VGG)는 layer가 깊어질 수록 더 많은 channel depth를 갖게 됩니다.
    • 그렇기 때문에, 증가하는 channel depth에 맞게 feature map size도 (pooling 연산을 통해) 줄여줌으로써 일정한 계산량을 유지시켜 줍니다. 
    • 하지만, 앞선 방식에서는 pooling 연산을 적용시키지 않기 때문에 layer가 깊어질 수록 계산량이 굉장히 많아진다는 문제와 hierarchical feature(←글 앞 부분에서 설명함)를 뽑지 못하는 문제점을 갖고 있습니다.
  • 결과부터 이야기하자면 위와 같은 문제로인해 FCN이 고안됩니다. 즉, FCN의 encoder 부분을 기존 CNN 방식처럼 수행하고, decoder(=upsampling) 부분을 붙여 segmentation 작업을 수행해줍니다. 자세한 설명은 FCN 모델 구조를 다루는 파트("3.Fully convolutional network"~"4.Segmentation Architecture")에서 하도록 하겠습니다.

그림9 출처: CS231n

 

 

 

  • 위에서 언급한 문제들 외에 FCN 이전 segmentation 모델을 사용할 때 또 다른 문제는 superpixels, proposals, post-hoc refinement와 같은 전,후처리를 수행해야 했어서 번거로움이 있었다고 합니다.
  • 여기에서 "fine-tuning from their learned representations"라는 표현이 있는 것으로 보아, classification에서 사용됐던 CNN conv filter들이 pre-trained model로써 FCN에 적용된 것을 확인할 수 있습니다. (더 정확한건 뒷 부분에서 설명해야 하지만, 결과적으로 먼저 말씀드리면 "FCN=Encoder+Decoder" 구조에서 encoder 부분이 ImageNet으로 학습한 pre-trained CNN model을 사용합니다 → 해당 논문에서 "imageNet"을 검색해보세요!)

 

 

 

  • FCN이 등장하기 전에 semantic segmentation 모델들은 semantics한 정보location 정보들을 어떻게 잘 조합하여 이용할지에 대한 걱정이 있었습니다.
  • FCN 이전 모델"그림 8"을 살펴보면 pooling 연산이 없기 때문에 conv filter가 전체 이미지에서 local 부분에 대한 feature만 뽑기 때문에 local information에 대한 정보만 획득하게 됩니다. 즉, semantic (or context) information을 알아내기는 힘들겠죠.
  • 반대로 input size와 feature map size가 애초에 작으면 local information 에 대한 정보를 뽑을 수 없게 됩니다.
  • 즉, pooling 연산을 적용하지 않는다는 가정하에 보면 semantic information과 local information의 trade-off(=inherent tension)가 발생하겠네요.
  • 하지만 개인적으로 여기까지만 봐서는 왜 local information을 기반으로 "where"를 알 수 있는건지 잘 모르겠어서 "4.2 Combining what and where" 부분을 살펴 본 후 다시 설명해보도록 하겠습니다.
  • CNN 구조를 이용하면 계층적인 정보(edge→texture→object) 들을 얻을 수 있는데 마치 이것이 feature map size가 작아지면서 encode하는 과정과 같아서 "deep feature hierarchies jointly encode location and semantics in a local-to-global pyramid(=featuer map)"이라고 설명한 듯 합니다. 
  • "skip" architecture를 이용하여 deep layer의 coarse=semantic information와 shallow layer의 fine=appearance 정보를 잘 혼합하여 segmentation에 사용할 수 있다고 설명하고 있습니다. 이 부분이 FCN 논문의 핵심인데 이 부분 역시 "3.Fully convolutional network"~"4.Segmentation Architecture" 파트에서 하도록 하겠습니다.

 

 

 

  • 이후 논문을 전개할 방향성에 대해서 설명하고 있습니다.
  • 마지막 부분에서 PASCAL VOC, NYUDv2, and SIFT Flow 데이터셋을 기반으로 성능을 측정했다는 것을 알 수 있습니다. (일반적으로 NYUDv2, SIFT Flow 데이터 셋은 다른 논문에서 보지 못한듯 하여 따로 설명하진 않겠습니다)

 

 

 

 

 

 

3. Fully convolutional networks

  • CNN의 기본적인 구조에 대해서 설명하고 있습니다.
  • 첫 번째 layer의 d는 color channel인데 보통 color image는 R,G,B 채널로 구성되어 있으니 d=3이 됩니다.
  • 그리고 location과 receptive fields 부분에 대한 설명은 아래 그림을 표현하고 있습니다. 

The receptive field in Convolutional Neural Networks (CNN) is the region of the input space that affects a particular unit of the network. 

그림10 출처: https://syncedreview.com/2017/05/11/a-guide-to-receptive-field-arithmetic-for-convolutional-neural-networks/

 

 

 

  • 기본적인 CNN 구조에 대한 설명을 간략히 표현하고 있습니다. 
  • translation invariance 관련 개념은 아래 링크를 참고 해주세요!

(↓↓↓translation invariance 설명↓↓↓)

https://89douner.tistory.com/58?category=873854 

 

4. CNN은 왜 이미지영역에서 두각을 나타나게 된건가요?

안녕하세요~ 이번 시간에는 DNN의 단점을 바탕으로 CNN이 왜 이미지 영역에서 더 좋은 성과를 보여주는지 말씀드릴거에요~ 1) Weight(가중치) parameter 감소 (가중치 parameter가 많으면 안되는 이유를 참

89douner.tistory.com

 

 

 

 

 

  • 다음은 CNN에서 진행되는 연산들을 \(f_{ks}\)라는 함수 하나로 표현하고 있습니다.
    • \(x_{ij}\)
    • \(k\): kernel size
    •  \(s\): stride or subsampling factor
    • \(f_{ks}\): layer type
      • convolutional layer
      • pooling layer (average or max)
      • activation function(layer)
    • \(y_{ij}\)
  • 사실 위의 수식은 여러 연산종류(convolution, pooling, activation)를 한 번에 표현하려다 보니 위와같이 표현하려 한 것인데, 제 경우에는 사실 혼동을 줄 우려가 있을 수 있겠다고 생각했습니다.
  • 그래서 제 나름대로 아래와 같이 해석하긴 했는데, 잘 못된 부분이 있으면 말씀해주세요!

 

 

 

  • 앞서 언급했던 \(f_{ks}\) 함수는 위에 있는 합성함수꼴로 대체될 수 있다는 뜻인 듯 합니다 (아니라면 댓글달아주세요!). FC layer 없이 모든 layer가 convolutional layer로 구성(=Fully Convolutional network)되어 있기 때문에 위와 같이 모두 convolution 연산으로 이루어진 합성함수 꼴로 나타낼 수 있는게 아닌가 싶습니다.
  • 아래 "그림 11"에서 윗 쪽에 있는 CNN을 deep net으로 표현한듯 합니다. 윗 쪽 그림의 deep net을 보면 FC layer를 통해 연산이 prediction 연산이 진행되는데 이 부분에서 non-linear function이라고 표현한 듯하고, FC layer를 convolutionalization을 한 아래 FCN 구조에서는 모두 convolutional filter로 구성되어 있기 때문에 deep filter or nonlinear (conv) filter라고 표현한 듯 합니다 (아마 non-linear라고 한 것을 보아 activation function까지 포함한 의미인듯 합니다). 그림을 자세히 보면 convolutionalization이 적용되기 전의 (전형적인) CNN의 4096이라고 표현된 부분은 FC layer로 인해 flatten된것처럼 표현되어 있는데, convolutionalization이 적용된 FCN의 4096 부분은 N×N의 feature map size에 4096개의 conv filter가 적용된 것 처럼 표현이된 것을 확인할 수 있습니다.
  • 아래 "그림11"을 기준으로 보면 FCN 구조에서는 heatmap 형태로 출력(=output)합니다. 이러한 heatmap을 곧 spatial dimension이라고 할 수 있습니다. (FC layer를 사용하면 feature map의 spatial information이 다 사라지겠죠?)
  • 이러한 spatial dimension을 가지고 resample을 할 수 있다고 설명하고 있는데 이 부분은 "3.3. Upsampling is backwards strided convolution"을 봐야 어떻게 resampling(or upsampling) 하는지 명확히 알 수 있을 듯 합니다. (검색해보니 resampling에는 보통 2가지 종류가 있는데, 그 중 하나가 upsampling하는거라고 하네요. 아마 FCN 구조의 decoder 부분을 말하려고 한게 아닌가 싶습니다)

그림 11. FCN paper

 

  • ※참고로 위의 그림(그림11)을 자세히 살펴보면 convolutionalization이 적용되기 전의 CNN 구조 입력 데이터는 전체 이미지의 일부 patch라는걸 알 수 있고 flatten되어 FC layer가 적용된 것을 볼 수 있습니다. 반면, convolutionalization이 적용된 CNN 구조는 전체 이미지를 입력으로 받고 flatten 없이 conv filter를 통해 feature map 형태를 그대로 유지하고 있는걸 확인할 수 있습니다. 이 부분이 갖는 장점을 뒷 부분에서 설명하도록 하겠습니다.

 

 

 

  • FCN에서 사용한 loss function에 대해 설명하고 있습니다.
  • "그림8" or "FCN이전에 고안된 두 번째 학습방법론" 부분에서 설명한 loss function과 같은 내용이니 해당 부분을 참고하시면 될 것 같습니다.
  • Gradient descent 부분은 학습 시 사용되는 일반적인 개념을 말로 풀어쓴 내용이니 CNN 구조에서 backpropagation 부분을 함축적으로 설명하고 있구나 생각하시면 될 것 같습니다.

 

 

 

  • 앞서 patch 방식의 학습방법론이 갖는 문제점을 통해 FCN 구조의 장점을 이야기하는 문장입니다.
  • Conv filter가 receptive field에 많이 중첩(ex: stride=1인 경우)돼서 계산 될 때, 앞서 설명한 아래 그림7 처럼 path-by-path 방식으로 (독립적으로 by indivisual CNN) 계산하는 것보다, 그림9의 layer-by-layer 계산하는 것이 (계산량 측면에서) 더 효율적입니다.

 

그림7 출처: CS231n 

 

그림9 출처: CS231n

 

 

 

 

 

  • 지금까지의 내용은 어떻게 보면 FCN의 알고리즘을 설명했다기 보다는 기존 CNN에 대한 설명FCN이 나오기전의 모델들을 살펴보면서 FCN 모델의 우수성추상적으로 설명했습니다. 
  • 이 후부터는 이전 모델보다 왜 성능이 뛰어날 수 있었는지 FCN의 알고리즘을 구체적으로 살펴보면서 알아보도록 할 예정입니다.
  • 먼저, "section 3.1"에서는 "그림11"처럼 어떻게 classification nets을 fully convolutional nets으로 바꿀지 설명할 예정입니다.

 

그림 11. FCN paper

 

  • 앞서 "그림8" or "FCN이전에 고안된 두 번째 학습방법론" 부분에서 설명했듯이 loss function (for pixelwise prediction)을 계산하기 위해서는 원본 이미지 사이즈와 같은 prediction (map)과 정답 이미지가 있어야 합니다 (FCN이 중간과정(encoding+decoding)이 다를 뿐 결국 동일한 loss function 계산을 한다고 언급했습니다. ←"FCN에서 사용한 loss function에 대해 설명" 이 부분 참고). 이를 위해서 F×F heat map (="coarse output maps") 을 원본 이미지 사이즈만큼 키워줘야 하는데 이를 위해 "Section 3.3"에서 up-sampling이라는 기법을 설명합니다.
  • "Section 3.2"에서는 OverFeat에서 사용한 trick (="shift-and-stitch")을 설명합니다. 여기서 언급하는 "reinterpreting it as an equivalent network modification"의 의미는 Section 3.2를 봐야 구체적으로 파악할 수 있을 듯 합니다. → 결과부터 말씀드리면 "shift-and-stitch" 방식을 FCN 모델에서 사용하지는 않았다고 합니다.
  • "Section 3.4"에서 pathwise sampling에 의한 training을 했다고 하는데 이 부분도 해당 section을 통해 더 자세히 살펴보도록 하겠습니다. (대략적인 개념은 아래 "그림12"와 같습니다) → 결과부터 말씀드리면 patchwise sampling 방식으로 학습시키는 것보다 그냥 전체 이미지를 이용해 segmentation 학습을 시키는 것이 더 효과적이라고 합니다.

그림12 이미지 출처: https://www.researchgate.net/figure/The-architecture-of-the-patch-wise-convolutional-network-This-paper-splits-the-large_fig3_327941585

 

 

 

 

 

3.1 Adapting classifiers for dense prediction

  • 여기서 언급하는 recognition nets이라는건 CNN을 말합니다. 이 논문이 나올 당시 (global average pooling이나 fully convolutional layer와 같은 기법들이 적용되지 않았었기 때문에) input 이미지 크기가 제한된 상태로 CNN 학습이 가능했습니다. 그 이유는 FC layer에 도달하게 되면 직전 feature map이 flatten되어야 하는데, FC layer는 고정된 입력크기(=neuron)를 받아야 하는 구조이기 때문입니다. 
  • 예를 들어, 아래 "그림13"을 봤을 때 layer의 수와 conv filter에 적용되는 모든 hyper-parameter(=stride, padding 등)가 고정되어 있다는 가정하에, 입력 이미지의 크기가 매번 다르면 마지막 feautre map을 flatten 시켰을 때 최종 neuron 수들이 이미지 입력 크기에 비례해 다를 것 입니다. 
  • FC layer로 넘어가는 과정에서 feature map이 flatten되면 위치에 대한 정보손실된다고 간주하기 때문에 spatial coordinate을 잃어버린다고 표현합니다. 

 

그림13 출처: https://stanford.edu/~shervine/teaching/cs-230/cheatsheet-convolutional-neural-networks

 

  • 위 "그림13"에서 FC layer 부분을 convolution 으로 바꿔줄 수 도 있습니다.
  • 예를 들어, 아래 "그림11"에서 윗 부분의 CNN을 기준으로 256개의 dimension(=channel)에 해당하는 feature map size가 F×F라고 가정해봅시다. F×F×256개의 neuron이 4096개의 neuron들과 Fully Connection이 되는데, 이때 spatial coordinate을 모두 잃어버립니다. 그런데 FC layer를 적용시키지 않으려면 어떻게 해야할까요?
  • 우선, 아래 "그림11"에서 아래 부분(=convolutionalization 적용된 CNN)의 CNN을 기준으로 256 dimension(=channel)에 해당하는 feature map size가 T×T라고 가정해봅시다. 여기서 flatten 시키지 말고 다시 한 번 conv filter를 적용해 4096 dimension을 갖는 F×F feature map을 출력했다고 해봅시다. 이 후에 "1×1×4096" Conv filter 4096개를 적용시키고, "1×1×4096" Conv filter 1000개를 순차적으로 적용시켰다고 해보겠습니다. 그럼 최종적으로 "F×F×1000"의 output feature map이 출력 됩니다. 위에서 언급한 "cover their entire input regions" 이 부분은 1×1 conv filter가 (sliding window 방식으로) 적용되면서 결국 feature map을 모두 커버하므로 entire input regions를 커버하는 것이라고 표현한 듯 합니다. (아니라면 댓글달아주세요!)
  • "take input of any size" 이 부분은 사실 upsampling을 봐야 명확히 이해되는건데, 미리 말씀드리자면 (구조적인 관점에서 봤을 때) 결국 아래 "그림14"처럼 output feature map size가 F×F이던지 M×M이던지 상관 없이 해당 output feature map (F×F×21 or M×M×21)을 기반으로 각 upsampling을 진행할 수 있기 때문에 segmentation을 위한 입력 이미지의 크기는 문제가 되지 않는다는 것을 의미합니다.

그림14

 

 

그림 11. FCN paper

 

 

 

  • 아래 "그림15"를 보면 resulting(=heat) map에 해당하는 특정 위치(pixel)가 input image의 특정 patch상의 CNN evaluation 결과라고 볼 수 있습니다. 

그림14
그림15

  • "the computation is highly amortized over the overlapping regions of those patches"라는 표현은 아래 그림과 같이 진행하는 방식보다 FCN으로 할때 더 계산효율성이 뛰어나다는 식으로 이해했습니다. FC layer를 이용한 AlexNet을 기반으로 segmentation하려면 아래와 같이 고정된 input size를 이용하는 patch(=224×224)를 이용해야하는데, convolutionalization된 FCN을 이용하면 input size에 영향을 받지 않으므로 굳이 patch 방식으로 training or inference 할 필요가 없습니다.

그림7 출처: CS231n 

 

  • 아래 그림(그림11)을 보면 convolutionalization이 적용되지 않고 FC layer를 사용하면 patch 단위로 입력이됩니다. 이렇게 되면 위의 그림7처럼 patch(=receptive field)에 속한 pixel(=해당 patch의 중간이 되는 pixel) 부분에 해당 class에 속한 색을 할당해주면서 segmentation을 진행해줍니다.

Q. 보통 FCN이 naive approach보다 5배 빠르다면, naive approach가 110ms 이상된다는 건데, AlexNet 기준으로 1.2ms가 걸린다는 가정하에 500×500 기준으로 patch 방식을 적용하면 100의 patch 별로 계산이 되어야 한다. 그런데, 그림7에서 설명한 방식을 기준으로 하면 100개보다 훨씬 많은 patch가 필요해서 naive approach가 정확히 뭔지 레퍼를 봐야 판단 할 수 있을 듯 하다... 아니면 patch 개수와 위치를 선별적으로 고르는건가.....(혹시 아시는 분이 있으면 댓글달아주세요!)   

그림16

 

 

  • 이 부분도 앞서 언급한대로 naive approach를 알아야 구체적으로 설명할 수 있습니다.
  • 맥락만봤을 때는 backward 할때 전통적인 segmentation 방식(=여러 patch에 AlexNet(with FC layer)를 적용시킨 것) 보다 FCN 방식이 계산양과 시간적인 측면에서 훨씬 효율적이라는 이야기를 하고 있습니다. 

 

 

  • 전형적인 CNN 구조에서 output dimension(←이 논문에서 dimension을 검색해보니 spatial dimension으로 언급된 부분도 있어서 subsampling과 같이 사용된걸 보고 spatial dimension을 언급하고 있는거라고 생각했습니다)을 줄여주기 위해서는 pooling과 같은 연산을 통해 subsampling을 적용시켜줍니다. 그래야 다음 conv layer에 적용될 feature map size가 줄어들고, 이로 인해 filter size를 키워줄 필요없이 3×3 conv filter size(=small size)를 유지해줄 수 있게 됩니다. 물론, (더 많은 conv filter도 사용하면서) GPU가 견딜만한 연산량도 유지할 수 있죠.
  • FCN에서는 이러한 output dimension을 줄여주기 위해 pooling대신 conv filter의 stride를 조절하여 subsampling 했다고 언급하고 있습니다. 

 

 

 

 

 

3.2 Shift-and-stitch is filter rarefaction

 

  • 앞선 "3.1. Adapting classifiers for dense prediction" 부분은 FCN 구조에서 encoder 부분을 설명한 것과 같습니다. 즉, 기존 CNN 방식에서 FC layer 부분을 convolutionalization 해주고 최종 output map (or heat map) = coarse output을 얻는 과정을 설명했습니다.
  • 그럼 지금부터 아래 "그림17"처럼 coarse outputs으로 부터 어떻게 dense precition을 하는지 알아보도록 하겠습니다.
  • ※사실 "3.2"에서 설명하고 있는 "shift-and-stitch" 방식이 FCN에 사용되지 않았습니다. 결과적으로 말하자면 이러한 "3.2"와 같은 기법을 이용해 dense prediction을 하려고 했지만 "4.2 section"에서 설명하는 skip architecture 방식이 더 효율적이여서 skip architecture 방식의 upsampling 기법을 사용했다고 합니다.
  • 그래서 여기에서는 shift-and-stitch가 어떻게 동작하는지 알아보기만 하겠습니다. 

그림17

 

 

 

  • 우선 위에 있는 문장을 말로 설명하는 것보다 아래와 같이 그려서 설명하겠습니다.

 

 

 

  • 위의 설명은 아래 그림 두 개로 대체하도록 하겠습니다.

 

그림 출처: https://stackoverflow.com/questions/40690951/how-does-shift-and-stitch-in-a-fully-convolutional-network-work

 

 

 

 

 

  • pooling or convolution 을 통해 feature map size를 downsampling 하는 행위 or 정도를 줄여주면 (ex: 행위=pooling or convolution layer 수를 적게 설정 or 정도=pooling or convolution layer의 stride를 작게 설정) trade off가 발생합니다. 다시 말해, downsampling 행위를 줄여주면서 얻는 장점과 단점이 있다는 뜻이죠.
  • Downsampling이 적용되지 않을 수록 입력 이미지의 크기가 클 것이고 상대적으로 고정된 conv filter (ex: 3×3)가 커버하는 범위 (=receptive field)가 작을 것입니다. 이로인해 computation 시간도 더 오래 걸릴 것입니다. 반면에, downsampling이 적용이 되지 않을 수록 conv filter는 좀 더 finer한 정보를 얻게 됩니다.

(↓↓↓위의 설명이 이해가 안되시면 아래 글을 참고해주세요!↓↓↓)

https://89douner.tistory.com/57?category=873854 

 

3. CNN(Convolution Neural Network)는 어떤 구조인가요?

안녕하세요~ 이번글에서는 Convolution Neural Network(CNN)의 기본구조에 대해서 알아보도록 할거에요. CNN은 기본적으로 Convolution layer-Pooling layer-FC layer 순서로 진행이 되기 때문에 이에 대해서 차..

89douner.tistory.com

 

  • Shift-and-stitch trick을 적용시킬 때도 trade-off가 존재 합니다. 
  • "The receptive field sizes of the filters" (convolution or pooling size) 의 감소 없이도 coarse한 output map을 dense 하게 (for dense prediction) 만들어 줄 수 있지만, "The receptive field sizes of the filters"의 크기가 클 수록 finer scale한 객체 or information에 접근하는 것이 제한이 될 수 있습니다.

 

 

 

 

  • 앞서 언급했듯이 이 논문에서는 shift-and-stitch trick 방식을 사용하진 않았다고 합니다. 
  • 이 논문에서는 upsampling을 위한 방법으로 skip layer fusion을 사용했다고 하는데 이 부분은 "3.3. Upsampling is backwards strided convolution"과 "4.2. Combining what and where" 부분에서 더 자세히 설명하도록 하겠습니다.

 

 

 

3.3 Upsampling is backwards strided convolution

  • 앞서 언급한 shift-and-stitch 방법이 아닌, "Section 3.3"에서 설명하는 기법과 "Section 4.2"의 skip architecture를 결합시켜 upsampling을 진행했습니다.
  • 그럼 지금부터 Section 3.3의 upsampling 방식에 대해서 설명하도록 하겠습니다.
  • 앞서 언급한 shift-and-stitch 방식 외에 사용되는 upsampling 방식은 크게 두 가지가 있습니다.
    • Interpolation 기법
    • Deconvolution 기법

 

1) Interpolation 기법

  • Interpolation 종류 중 간단한 방식인 bilinear interpolation입니다.
    • 예를 들어, 2×upsampling을 적용 할 시, 10과 30사이에 두 가지 pixel이 들어가게 됩니다. 이 때, 등차수열 개념을 도입해 적용합니다. 만약 10과 20사이에 완벽히 등차수열이 적용되지 않으면 약간의 미세한 조정을 두어 pixel값을 적용시킵니다.

 

그림18 출처: https://theailearner.com/2018/12/29/image-processing-bilinear-interpolation/

 

 

 

 

2) Deconvolution 기법

  • Upsampling하는 방법은 convolution 연산을 이용해서도 할 수 있습니다. (←"a fractional input stride of \(\frac{1}{f}\), "output stride of \(f\)"와 같은 개념을 이용해 정확히 어떻게 연산이 되는지는 "4.2. Combining what and where" 파트에서 설명하고, 이곳에서는 결과적인 부분만 설명하도록 하겠습니다.

 

 

  • 결과적인 측면에서보면 결국 upsampling이라는 것을 deconvolution을 통해 할 수 있습니다. 여기에서는 deconvolution과 backwards convolution이라는 용어를 동의어로 사용하고 있습니다.
  • convolution이라는 것이 본래 신호처리에서 사용된 개념이라 continuous한 상황을 가정하면 integral 수식을 이용하게 되고, discrete한 상황을 가정하면 sigma 수식을 이용하게 됩니다.
  • 위 논문에서 표현한 integral이라는 표현은 continuous한 개념에서 차용한 것 같고, 실제로 딥러닝 CNN 기반으로 연산이 진행되는 것을 보면 discrete convolution인 것을 알 수 있습니다. 

 

 

 

  • Discrete convolution도 미분 가능 (by chain-rule) 하기 때문에 학습이 가능합니다.
  • 또한 cascade 방식이 아닌 기존 network (내부)에 upsampling과 관련된 deconvolution layer를 붙일 수 있기 때문에 (=in-network), end-to-end 방식으로 학습이 가능합니다.

 

 

 

 

  • 앞서 언급했던 bilinear upsampling 같은 경우는 upsampling시 등차수열로 인해 미리 정의된 값이 할당 됩니다. 즉, 누구나 예측가능한 값(=fix)이 할당되는 것이죠. 하지만, deconvolution filter를 이용해 upsampling을 적용하면, upsampling 적용 시 학습된 deconvolution filter에 의해 우리가 예측하지 못한 값들이 할당됩니다.
  • deconvolution layer 역시 activation function(=ex: ReLuU ← nonlinear function)이 적용되어 nonlinear upsampling을 배울 수 있다고 할 수 있습니다.

 

 

  • in-network upsampling이라는 표현을 쓴 이유는 deconvolution network(=decoder or upsampling)을 기존 convolution network(=encoder)에 포함(or 결합)시켰시켰기 때문인 듯 합니다.  
  • Deconvolution으로 인해 기존 segmentation 방식보다 좀 더 효율적으로 dense prediction (for segmentation) 할 수 있다고 설명해놨네요.
  • 사실 upsampling이 정확히 어떻게 되는지 여기에서 설명을 하고 있지 않습니다. 그렇기 때문에 추가적으로 deconvolution을 이용해 upsampling하는 방법을 기술하도록 하겠습니다.

 

 

 

[Upsampling by decovnolution]

  • Convolution 연산이 어떻게 되는지 살펴본 후, 역으로 deconvolution이 어떻게 되는지 살펴보겠습니다.

※참고로 여기에서는 deconvolution이라고 설명하고 있는데 pytorch tutorial 구현 코드를 보면 upsampling 시 transposed convolution으로 되어 있습니다. 결국, transposed convolution 방식과 deconvolution을 유사하게 본것이라고 할 수 있겠는데. 엄격히 말하면, transposed convolution과 deconvolution은 같은 개념이 아닙니다. 이러한 부분을 DCGAN 논문에서 지적하고 있는데, 해당 부분은 DCGAN 논문에서 설명하도록 하겠습니다.

 

<Step1. Convolution 연산을 matrix 연산으로 변환>

먼저 convolution 연산이 진행되는 방식을 그림으로 표현하면 아래와 같습니다.

그림19

 

다음은 위의 convolution연산을 matrix연산으로 바꾸어주도록 합니다.

먼저, 입력차원을 (\(N×N\))에서 (\(N^{2}×1)\)로 변경해 줍니다.

 

그림20

 

 

 

Convolution 연산을 matrix 연산으로 바꿔줘야 하기 때문에 이에 맞게 convolution filter에 해당하는 부분도 convolution 연산 결과와 동일하게 나오도록 알맞는 matrix 형태로 변경해줘야 합니다.

 

 

그림21

 

 

 

 

위의 그림을 간략히 표현하면 아래와 같습니다.

그림22

 

 

<Step2. Deconvolution 연산>

Convolution filter에 해당하는 matrix (=Convolution Matrix) Transpose Transpose (Convolution) Matrix를 만들어 줍니다.

 

그림23

 

 

위에서 얻은 Convolution Trasnpose Matrix에 맞는 deconvolution filter를 matrix연산에 맞게 바꿔준 후 upsampling을 해줍니다. 이때, deconvolution filter는 "segmentation loss function (with backprogation)"에 따라 segmentation을 최대한 잘 해줄 수 있도록 학습됩니다.

 

그림24

 

앞서 설명한 convolution 연산과 deconvolution 연산의 matrix 수식을 아래와 같이 표현할 수 있을 것 같습니다.

 

 

 

 

결국 upsampling은 위와 같은 deconvolution 연산에 의해 이루어지고, 지금까지 설명한 대로 FCN을 도식화하면 아래와 같습니다.

 

※하지만, 아래 "그림25"가 최종적인 FCN 모델은 아닙니다. 아래"그림25"에서 skip architecture가 적용되어야 하는데, 이 부분은 "4.2. Combining what and where"에서 더 자세히 설명하도록 하겠습니다. 

그림25 출처: https://www.researchgate.net/figure/Fully-convolutional-neural-network-architecture-FCN-8_fig1_327521314

 

 

지금까지 설명한 deconvolution 설명은 아래(↓↓↓) 블로그를 참고했으니, 참고해주세요!

https://naokishibuya.medium.com/up-sampling-with-transposed-convolution-9ae4f2df52d0

 

Up-sampling with Transposed Convolution

If you’ve heard about the transposed convolution and got confused what it actually means, this article is written for you.

naokishibuya.medium.com

 

 

 

 

 

 

 

3.4. Patchwise training is loss sampling

 

  • 여기에서는 distriibution이라는 말을 썻는데 그냥 data라고 해석해도 될 듯 합니다. 결국 data가 어떤 distribution을 형성 할 것이기 때문입니다.
  • Patchwise 방식으로 학습 할 경우 patch들간에 overlap이 많이되면 불필요한 computation양이 많아질 것입니다. 반면에 아래 "그림19"처럼 전체 이미지를 입력받는 fully convolutional training 방식은 전체 이미지 크기가 큰 경우 GPU 메모리를 상당 부분 차지하기 때문에 충분한 minibatch size를 잡기 힘듭니다. 
  • "whole image ~" 이 부분은 그냥 pathwise 방식에서 patch가 전체 이미지가 되면 'whole image fully convolutional training'이 된다는 의미로 받아들였는데 확실하진 않습니다 (혹시 정확한 개념을 알고 있으시면 댓글달아주세요!)

 

그림19

 

  • 이 부분은 DropConnect mask 부분을 이해하면 좋을 것 같은데, 다로 볼 시간이 없어서 위의 내용이 정확히 이해가 안되네요;;; (혹시 아시는 분은 댓글 부탁드립니다!)

 

 

 

 

 

  • 이 부분은 patch 방식으로 학습시킬 경우 발생할 수 있는 현상에 대해서 기술 한 듯 합니다.
  • 논문 앞 부분에서 "그림7"을 통해 설명한 것 처럼 한 이미지 내에서 두 patch의 중첩되는 영역이 많다면 당연히 fully convolutional computation으로 학습시키는 것이 더 빠를 것 입니다.
  • mini-batch 단위로 학습시키면 다른 이미지들로 부터 얻은 다 수의 patch를 기반으로 multiple backward pass를 계산한뒤 각각의 patch에서 얻은 gradeint값을 축적한 후 weight update를 위해 사용하게 됩니다.

 

 

 

  • Patch 방식의 training을 적용했을 때 더 빠르게 학습한다거나 loss가 잘 수렴한다던지의 장점은 없었다고 합니다. (앞서 patchwise sampling이라는 말이 있는데 위에서 언급하는 sampling은 patchwise sampling을 언급하는 듯 합니다)
  • Fully convolution training 방식으로 전체 이미지를 입력으로 받아 traning 시키는 것이 효과적이고 효율적이라고 합니다.

 

 

 

4. Segmentation Architecture

  • FCN 모델 구조를 보면 downsampling 부분기존 classification task에 사용되었던 CNN 구조와 동일함을 알 수 있습니다.
  • 위와 같은 이유로 인해 ILSVRC 데이터 셋으로 학습된 CNN 모델들 (ex: AlexNet, VGG16, GooLeNet) 등을 FCN 모델의 downsampling을 위한 pre-trained model로 사용했습니다.
  • 이 후, segmentation을 학습시킬 때 downsampling에 적용된 pre-trained 부분을 fine-tuning 시켰다고 합니다.
  • Segmentation의 성능을 높이기 위해 "novel skip architecture"를 적용했다고 하는데, 이 부분은 "4.2. Combining what and where" 에서 더 자세히 설명드리겠습니다. 

 

 

 

 

  • 앞서 segmentation 학습을 위해 fine-tuning 시킨다고 언급했는데, PASCAL VOC 2011 데이터 셋으로 fine-tuning 시킨것으로 추측됩니다. 
  • Perforamnce measurement로는 "mean pixel intersenction over union"이 사용되었습니다. Performance measurement는 "5. Results" 부분에서 더 자세히 설명하도록 하겠습니다.

그림8 출처: CS231n

  • Segmentation을 위한 loss functionpixel 마다 multinominal logistic loss가 사용되었습니다. 

(↓↓↓multinominal logistic loss와 cross entropy의 관계를 설명한 글입니다.↓↓↓)

https://89douner.tistory.com/21?category=868069 

 

3. 학습을 하는 목적에 따라 cost function이 달라진다구(최대우도법, Cross Entropy)?

앞선 2장에서는 MSE(Mean Square Error)를 cost function으로 사용했습니다. 그런데, 모든 딥러닝에서 Cost function이 MSE로 통일되는건 아니에요. 그래서 이번장에서는 또 다른 cost function에 대해서 알아보..

89douner.tistory.com

 

 

 

 

4.1. From classifier to dense FCN

  • 앞서 그림 11에서 기존 CNN을 어떻게 convolutionalization 해주는지에 대해 언급하고 있습니다.
  • 이 부분은 앞에서 충분히 설명했으니 넘어가도록 하겠습니다. (대략적으로 설명하면 마지막 layer 부분 (=classifier layer)을 제거하고 1×1 conv filter를 적용시켰다는 이야기 입니다)

 

그림 11. FCN paper

 

 

 

  • 이 논문에서 실험한 segmentation 모델 (FCN with AlexNet, FCN with VGG, FCN with GoogLeNet) 중에 가장 성능이 나쁜 모델 조차도 당시 conventional segmentation 모델 중 SOTA에 해당하는 모델의 75% 정도 성능을 보여줬다고 합니다.
  • 특히 FCN-VGG16 모델은 segmentation 결과 SOTA 성능을 기록했는데, 추가적인 training을 진행 했을 때, 그 성능이 더 올라갔다고 합니다. 
  • VGG-16과 GoogLeNet의 기존 classifciation 성능이 비슷함에도 불구하고, segmentation과 같이 사용했을 때는 FCN-GoogLeNet이 FCN-VGG 모델을 따라오지 못했다고 하네요.

 

 

 

4.2. Combining what and where

  • 지금까지 설명한 FCN 구조를 다시 그림으로 표현하면 아래와 같습니다.

그림25 출처: https://www.researchgate.net/figure/Fully-convolutional-neural-network-architecture-FCN-8_fig1_327521314

 

 

결론부터 말하자면 위에 있는 FCN 구조(without skip architecture)로는 segmentation 성능이 좋지 않기 때문에, "4.2. Combining what and where"에서 설명하는 skip architecture 기법을 적용하여 최종 FCN 모델 구조를 고안했다고 합니다. 그럼 지금부터 해당 논문 내용과 skip architecture에 대해 설명해보도록 하겠습니다.

 

 

  • Combine과 refine의 의미를 정확히 이해하기 위해서는 지금부터 설명할 skip architecture 를 이해해야 합니다.
  • Fine-tuning 관련한 부분은 4.1에서 언급했다고 하는데, 좀 더 구체적으로 어떻게 fine-tuning을 했는지는 "4.3. Experimental framework" 부분의 "fine-tuning" 부분을 보셔야 합니다. 그렇기 때문에 fine-tuning과 관련된 자세한 설명은 "4.3.Experimental framework"에서 자세히 설명하도록 하겠습니다. 
  • 우선 "Section 4.2"는 논문에 있는 순서 그대로 해석하기 보다는 먼저 skip architecture에 대해서 간단히 설명한 후 해당 논문들의 문단 순서를 변경해가며 해석을 해보도록 하겠습니다.

 

1) Skip architecture 관련 용어 및 notation

  • 논문에서 제시한 FCN-32 결과는 224이미지를 받아 들인 것이 아닌 32×32 이미지를 입력이미지로 하고 1x1 heat map (입력이미지 224×224 기준으로는 heat map 크기가 7×7)을 본래 입력 이미지 크기인 32×32에 맞게 up-sampling한 결과를 보여주고 있습니다. 1x1 heat map을 원본이미지 크기에 맞게 up-sampling해주기 위해서는 32배 up-sampling해야 하기 때문에 FCN-32s 라는 이름을 붙였습니다.
  • Ground truth와 비교하면 결과가 생각보다 좋지 못하다는 사실을 발견할 수 있습니다. Pooling 과정을 많이 거치다 보면 feature들의 정보가 손실되는데, 결국 마지막 heat mappooling layer를 제일 많이 거쳐서 나온 feature map이라고 할 수 있습니다. , feature 정보가 많이 손실된 feature map으로 up-sampling을 진행하게 되면 당연히 제약사항이 많아지거나 제대로 up-sampling 할 수 없게 되고, 이에 따라 좋지 않은 결과를 얻게 니다. (특히 fine scale object들을 이미 정보가 손상이 되니 fine scale object들을 segmentation하긴 굉장히 어렵겠죠?)
  • 그래서 이 논문에서는 1x1 외에 2x2, 4x4 와 같이 pooling 과정을 덜 거친 feature map들을 잘 이용하는 skip architecture 방식을 이용해 위와 같은 문제를 해결하고자 했습니다

그림26 출처: https://www.youtube.com/watch?v=JiC78rUF4iI

 

2) Skip architecture 방식 (위의 "그림26"을 같이 참조)

※ heat map = prediction된 결과 feature map

 

<1.FCN-16s> 그림26의 좌측 하단 그림을 기준으로 설명

  1. Pool5를 통해 생성된 1×1 heat map (prediction)을 2배 up-sampling 합니다. (→ 2×2 up-sampled heat map 생성됨)
  2. Pool4로 생성된 2×2×512 feature map에서 1×1×512 conv filter를 적용해 2×2 heat map (prediction)을 생성합니다. (→ 2×2 heat map 생성됨)
  3. “2×2 up-sampled heat map” + “2×2 heat map” 연산을 수행한 후 (element-wise operation), 16배로 up-sampling (by deconvolution) 해주어 “32×32 prediction” 결과를 보여줍니다.

 

 

<2.FCN-8s>

  1. Pool5를 통해 생성된 1×1 heat map (prediction)을 2배 up-sampling 합니다. ( 2×2 up-sampled heat map 생성됨)
  2. Pool4로 생성된 2×2×512 feature map에서 1×1×512 conv filter를 적용해 2×2 heat map (prediction)을 생성합니다. ( 2×2 heat map 생성됨)
  3. “2×2 up-sampled heat map” + “2×2 heat map” 연산을 수행한 후 (element-wise operation), 2배로 up-sampling 해주어 “4×4 up-sampled heat map”을 생성 합니다.
  4. Pool3로 생성된 4×4×256 feature map에서 1×1×256 conv filter를 적용해 4×4 heat map (prediction)을 생성합니다. ( 4×4 heat map 생성됨)
  5. “4×4 up-sampled heat map” + “4×4 heat map” 연산을 수행한 후 (element-wise operation), 8배로 up-sampling 해주어 “32×32 prediction” 결과를 보여줍니다.

 

 

 

 

 

 

그림26

 

 

 

 

FCN-16 구조의 skip architecture

 

 

FCN-16 구조의 skip architecture

 

 

 

 

 

FCN-16

 

 

 

FCN-8

 

 

그림27. https://www.mdpi.com/2072-4292/10/12/1984/htm

 

 

 

 

 

 

  • 앞서 언급한 skip architecture 방식을 "lower layer의 prediction map과 final prediction layer의 prediction map을 합산하여 연산하는 것"이라고 표현하며, 이렇게 합산하는 것을 통해 "combining 한다"고 표현합니다.
  • Topology는 수학에서 사용되던 용어인데 여기에서는 graph 정도르 이해하면 좋을 것 같습니다. 
  • Skip architecture가 적용되지 않은 FCN구조는 line topology라고 표현할 수 있으며, skip architecture가 적용된 FCN구조는 DAG topology라고 표현할 수 있습니다. 이 논문에서 말하는 edge는 graph에서 말하는 edge를 말하는 것 같습니다 (edge들을 이으는 선을 vertex라고 합니다)

그림

 

 

 

  • Skip architecture를 적용시키지 않고 "32pixel stride at final prediction layer" 만을 이용하면 "the scale of detail" 부분이 문제가 되어 아래 그림처럼 (FC-32s) 결과가 좋지 못하다고 합니다. 

 

 

 

 

 

 

 

4.2. Experimental framework

  • Optimizer
    • SGD
    • Momentum: 0.9
  • Minibatch size: 20 images
  • Learning rate
    • FCN-AlexNet: \(10^{-3}\)
    • FCN-VGG16: \(10^{-4}\)
    • FCN-GooLeNet: \(10^{-5}\)
  • Weight decay
    • \(5^{-4}\) or \(2^{-4}\)
  • 위에서 언급하고 있는 "biases, these parameters" 들이 weight decay를 언급하고 있는것인지 잘 모르겠네요;;;;;; 맞다면 weight decay 정도에 따라 learning rate을 두 배 증가시켜 사용했다고 해석할 수 있을텐데.... (정확하게 아시는 분은 댓글달아주세요!)
  • zero-initialization 부분은 아마 downsampling 부분에서 pre-trained 모델을 불러와서 사용할 시, fine-tuning을 위해 class score에 해당 부분을 초기화 시켜주기 위한 방법인듯 합니다 (아니라면 댓글 달아주세요!). 논문에서는 Random initialization 하는 것 보다 zero initialization을 하는게 더 좋다고 합니다.
  • Drop out은 downsampling을 위해 사용된 pre-trained 모델에 구현되어있는 drop out을 segmentation 학습시킬 때에도 변경시키는 것 없이 그대로 사용했다고 합니다.

 

 

  • 이 논문에서 3가지 방식으로 학습을 시켰습니다.
    • Fine-tuning all layers: 제일 결과가 좋음
    • Fine-tuning the output layers: "Fine-tuning all layers"결과의 70%정도 performance 밖에 내지 못함
    • Scratch training: FCN의 downsampling 하는 부분이 보통 pre-trained CNN 모델을 사용합니다. 만약 segmentation을 scratch training 하려면 downsampling 부분(=pre-trained CNN)도 scratch training이 되어야 합니다. 그러므로 시간상 비효율적이라고 언급하고 있네요 (사실 시간적인 부분도 그렇고 pre-training 한 후, transfer learning을 통해 학습한 filter들이 scratch training을 통해 학습된 filter들 보다 더 다양할 것 같아 성능면에서도 transfer learning을 적용하는게 더 좋을 것 같다는게 제 개인적인 생각입니다).

 

 

 

  • 앞서 patch sampling 방식이 더 좋지 않다고 설명해서 이 부분은 따로 언급하지 않도록 하겠습니다.

 

 

 

  • 이 논문에서 사용된 training dataset의 labeling pixel들 대부분(3/4)은 background이기 때문에 다른 클래스들과 background 사이에 class imbalance 문제가 발생할 수 있습니다.
  • 그래서 weighting or sampling loss 를 통해 class imbalance 문제를 해결하려고 했는데 크게 향상된 부분이 없어서 그런건지는 몰라도 class balancing이 불필요하다고 합니다. (weighting or sampling loss에 대한 별도의 수식은 없으나 불필요하다고 언급하고 있어 따로 찾아보진 않았습니다)

 

 

  • 앞서 언급한 upsampling 방식에 대해서 설명하고 있습니다.
  • Deconvolutional layer 부분에서 마지막 layer에 해당하는 부분은 bilinear interpolation 방식을 이용하는 filter 값들이 고정된 값으로 지정됩니다.
  • 반면, deconvolutional layer 부분의 중간 layer들은 bilinear upsampling으로 초기화 되지만 학습이 가능하게 설정되었습니다.
  • 그리고 앞서 "section 3.2"에서 설명한 또 다른 upsampling 방식들은 FCN에 사용되지 않았다고 언급하고 있습니다.

 

 

  • 여기서 언급한 augmentation 방식은 3가지가 있습니다.
    • Mirroring: Horizontal Flip
    • Jittering과 translation이 각자 따로 적용됐다고 생각했는데, 문장을 보니 translation 하는 방식으로 jittering을 했다고 보여집니다. 정확히 어떻게 했는지는 잘 모르겠네요. 코드를 봐야 알 것 같습니다.
  • 결론적으로 이러한 augmentation 방식이 눈에 띄게 향상을 불러오진 않았다고 합니다.

 

 

 

  • 앞서 언급한 training dataset 외에 Hariharan 이 쓴 논문에서 사용된 8498 PASCAL training image 데이터셋을 더 활용했다고 합니다.
  • 추가된 training dataset을 이용해 기존 FCN-VGG16의 validation 성능을 3.4% 향상시켰다고 하네요.

 

 

  • 구현에 사용된 GPU장비 및 딥러닝 프레임워크를 소개하고 있습니다.
    • Framework: Caffe
    • GPU: NVIDIA Tesla K40c

 

 

 

 

 

 

 

5. Results

  • Result 부분은 따로 풀어서 설명하지 않고, performance measurement를 위해 사용되는 metrics를 설명하는 차원에서 마무리하도록 하겠습니다.

 

  • Matrics를 설명하기 전에 내용들을 아래와 같이 간단히 정리해보도록 하겠습니다.

 

그림 출처: 그림 출처: https://www.programmersought.com/article/5001878564/

 

 

 

 

 

 

 

 

 

 

 

[Reference]

https://www.youtube.com/watch?v=nDPWywWRIRo 

 

 

https://www.youtube.com/watch?v=JiC78rUF4iI 

 

 

 

 

 

 

 

 

 

 

'Deep Learning for Computer Vision > Segmentation' 카테고리의 다른 글

3.UNet  (4) 2021.07.19
1. Segmentation이 뭔가요?  (1) 2020.02.17

안녕하세요 이번글에서는 CNN 모델을 평가하는 또 다른 지표인 F1 score에 대해서 알아보도록 할거에요.


앞서 "5.CNN 성능은 어떻게 평가하게 되나요?"라는 글에서 봤듯이 CNN은 accuracy 기반을 하여 CNN 성능을 평가한다고 말씀드렸어요.


하지만 어떠한 상황에서는 accuracy를 기반으로 하는 것 보다는 다른 성능지표를 사용하는것이 더 좋을 수 있어요. 그래서 이번글에서는 accuracy를 사용하면 좋지 않은 상황과 이런 상황에서 대안이되는 성과지표(measurement)를 알아보도록 할게요.


 


이번 글의 이미지와 모든 내용은 아래 유튜브 영상에서 참고하였으니 아래영상을 보시는걸 추천드립니다.






<1.Confusion Matrix>


로봇에게 A라는 글을 보여주고(input) 로봇이 A라고 답(answers)했을 때 아래 테이블 처럼 1이라는 표시를 해줍니다. 만약 B라는 글을 보여줬는데 D라고 답한다면 (B,D) 구역에 1이라고 표시를 해볼게요.

       


이러한 과정을 반복해서 최종적으로 아래와 같은 테이블을 얻었다고 해봅시다. 로봇A, 로봇B는 각기 다른 결과들을 보여주었어요 (아래와 같은 결과(Matrix)를 Confusion Matrix라고 합니다). 그렇다면 우리는 두 로봇의 Confusion Matrix를 봤을때 어떤 로봇모델을 쓰는것이 좋을까요? 



위에서 질문한 답을 하기 위해서 "Accuracy, Recall, Precision, F1 score"라는 성능평가 지표를 보고 어떤 로봇(모델)을 사용할지 결정하게 되는데, 이러한 개념을 이해하기 위해서는 먼저 TP, TN, FP, FN이라는 개념에 대해서 알아봐야해요. 





<2. TP(True Positive), TN(True Negative), FP(False Positive), FN(False Negative)>


특정 클래스를 잘 구분하는지 알아본다고 해볼게요.

만약 A라는 클래스를 잘 구분하는지 알아본다고 했을 때, 아래 두 가지 개념이 유용하게 사용돼요


Positive and Negative: 정답과 관계없이 A 클래스 입장에서 모델이 A라고 분류하면(+) A기준에서는 Positive하게 분류한것이고, A라고 분류하지 않으면(-) Negative 하게 분류한거에요.


True and False: 정답과 관련하여, 예측과 정답이 일치하면 True, 예측과 정답이 일치하지 않으면 False로 분류해요.



1-1) TP (True Positive)


로봇이 A 클래스를 얼마나 잘 분류하는지 알아본다고 해볼게요 (A관점에서 positive, negative를 나눈다고 가정하겠습니다.)

예를들어, A클래스를 보여주고 A라고 (positive) 올바르게 (True) 예측하면 A에 대해서 True Positive하다고 할 수 있어요 (True Positive for A).





1-2) FP (False Positive for A)


로봇이 A 클래스를 얼마나 잘 분류하는지 알아본다고 해볼게요 (A관점에서 positive, negative를 나눈다고 가정하겠습니다.)

예를들어, B,C,D 클래스를 보여줬을 때 A라고 (positive) 잘 못 판단(False) 한다면 A에 대해서 False Positive하다고 할 수 있어요 (False Positive for A).



1-3) FN (False Negative for A)


로봇이 A 클래스를 얼마나 잘 분류하는지 알아본다고 해볼게요 (A관점에서 positive, negative를 나눈다고 가정하겠습니다.)

예를들어, A 클래스를 보여줬을 때, A가 아니(Negative)라고 잘 못 (False) 판단하는 경우를 A에 대해서 False Negative 하다고 해요 (False Negative for A).




1-4) TN (True Negative for A)


로봇이 A 클래스를 얼마나 잘 분류하는지 알아본다고 해볼게요 (A관점에서 positive, negative를 나눈다고 가정하겠습니다.)

예를들어, B,C,D 클래스를 보여줬을 때, A가 아니(Negative)라고 올바르게 판단(True) 하는 경우를 A에 대해서 True Negative 하다고 합니다 (True Negative for A).



<사진5>





<3. Accuracy>


위에서 언급한 개념들을 토대로 우리가 사용할 수 있는 첫 번째 성능지표는 Accuracy에요. Accuracy는 아래와 같은 수식을 통해 계산이되요



(아래영상은 TP로만 계산이 되었네요. 개념만 이해하시면 될 것 같습니다.)


이런 경우에는 Accuracy 지표를 이용하여 Model1, Model2를 평가하고 Model1을 사용하게되면 실제로 어떤 class(A,B,C,D)를 보여줘도 Model2보다 높은 확률로 정답을 도출해낼거에요.


하지만, 위와 같은 경우는 Model1, Model2 모두 실제 테스트 클래스(actual values)가 A=10, B=10, C=10, D=10 으로 각각 동일할 거에요. 이럴때 머신러닝이 학습하기 위한 데이터셋의 class가 balance하게 구성되어 있다고 이야기해요. 그렇다면 class가 imbalance한 구조에서도 accuracy라는 지표가 효율적일까요?


예를들어, 의학 이미지 데이터들을 보면 정상인(normal)에 해당하는 데이터셋은 굉장히 많이 있는 반면에, 병(변)이 있는 사람들의 데이터셋은 굉장히 적어요. 만약 정상인의 MRI 이미지가 1000개가 있고, 암환자의 MRI 이미지가 100개가 있는 경우에 accuracy 지표를 쓰면 어떤 문제가 일어날까요?





1) Accuracy 문제점


위에서 언급한 Accuracy measurement는 imbalanced dataset을 갖고 있는 상황에 따라서 그닥 효율적이지 않은 성능지표가 될 수 있어요. 만약 위의 예시처럼 모든 클래스의 데이터가 10개씩 balance하게 있지 않고 아래와 같이 A클래스에만 집중적으로 데이터가 몰려있다면 어떻게 될까요? A기준에서 봤을때는 아래 성능지표가 좋을 수 있지만, B,C,D 관점에서 보면 해당 모델을 평가하는데 accuracy가 좋은 measurement가 될 수 있을까요?


한 눈에 보더라도 모든 데이터가 A에 쏠려있기 때문에 accuracy가 B,C,D에도 적용이 되기에는 B,C,D에 대한 모집단이 부족한걸 보실 수 있으실 거에요.


아래 예시를 통해 살펴볼게요.

 



먼저 Model1을 오로지 A관점에서 보면 모델이 그닥 좋지 않을 수 있어요. 왜냐하면 100/(200=100+80+10+10) = 50%의 정확성을 보이기 때문이에요. 하지만, B,C,D 관점에서 보면 모두 80% 이상의 정확성을 보이기 때문에 Model1은 B,C,D 관점에서는 좋은 모델이고, A모델 관점에서는 좋지 않은 모델이되요.


Model2의 경우 A관점에서 보면 198/200 = 99%의 정확성을 보여 좋겠지만, B,C,D의 관점에서 보면 모두 10%의 정확성을 보이기 때문에 Model2가 좋은 모델이라 할 수 없어요.


이런 경우 Accuracy를 적용해 Model을 평가하게 되면 어떻게 될까요? 이런 상황에서는 특정 class의 샘플수와 해당 class의 정확성에 많이 의존해서 accuracy가 도출될 수 밖에 없게되요. 위에 있는 예시를 보더라도, Model1,2에 입력된 A클래스가 앞도적으로 많고, A클래스에 대한 accuracy에 따라서 전체 클래스(A,B,C,D)에 대한 accuracy 가 결정이돼요. 


우리가 의학적인 목적으로 머신러닝을 이용한다고 해볼게요. 1000명이 진료를 보러 왔는데 실제 990명이 정상인이고 나머지 10명이 병(변)이 있다고 해보겠습니다. 이 머신러닝 모델은 정상인들에 대해서는 100%의 정확성을 보였고, 실제 병(변)이 있는 분들에 대해서는 50%의 확률을 보였다고 할게요. 전체적으로 볼때 1000명의 환자중 995명을 제대로 판별했으니 99.5%의 정확성을 보인다고 할 수 있겠죠. 그럼, 이 병원을 신뢰하고 가야하는건가요? 실제로 병(변)이 있는 분들께서 이 병원을 찾았다가는 큰 낭패를 보시게 될 거에요. 


위와같이 데이터셋의 class가 imbalance하게 되어있다면 어떤 성능지표를 사용해야 하는걸까요? 이럴때 상용될 수 있는 기법이 F1 score를 계산하는거에요. 그럼 지금부터 F1 score 개념을 이해하기 위해 Precision, Recall 개념을 차례대로 살펴볼게요.





<4. Precision>


Given a class prediction from the classifier, how likely is it to be correct? 


각각의 클래스에 대해서 정확하게 분류됐는지를 알고 싶을 때, Precision이라는 개념을 사용해요. 아래 예시를 기준으로 A 상황에 대한 Precision을 보고자 한다면, 9/(9+1+5+0=15) 가 되겠네요.


일반화해서 보자면, 머신러닝 모델이 특정 클래스를 prediction할 때, 해당 클래스에 대한 prediction(예측) 얼마나 잘 맞을지를 보여주는 지표라고보시면돼요. 즉, 특정 클래스에 대해 prediction 했다는 것만 고려한다는 것에대한 숨어 있는 의미는 Negative 요소를 고려하지 않는다는 점이에요. 




<TP 예시>


<FP 예시>



Model1의 Average precision 결과를 보면 Accuracy와 비교해서 비교적 class A에 덜 의존적인 결과를 볼 수 있다는 것을 알 수 있어요.



Model2도 마찬가지네요.



결과적으로 보면 Accuracy는 imbalance한 dataset 상황에 있을 때, 특정 class의 accuracy에 지나치게 의존적일 수 있지만, Precision은 평균을 취함으로써 그 의존성을 줄여주게 됩니다. 즉, 다시말해 precision은 머신러닝 모델이 A or B or C or D를 prediction할 때, 평균적으로 얼마나 정확하게 prediction하는지 알려주는 성과지표라고 할 수 있겠어요.






<5. Recall>

Given a class, will the classifier detect it?

어떤 클래스가 주어졌을 때, 주어진 클래스를 다른 클래스들 중에서 잘 검출(detect)하는지 알고싶을 때 사용하는 개념이 recall이라는 개념입니다. 예를들어, 실제 A 클래스가 머신러닝 모델에 들어 왔을 때, 9번 정도 A라고 예측(prediction)했다면, "A,B,C,D 클래스"들 중에서 A 클래스를 90% 잘 검출해냈다고 할 수 있어요.



그래서 아래같와 같이 A에 대한 recall은 9/(9+1+0+0) 이 됩니다.



<TP 예시>


<FN 예시>



Recall 또한 각각의 클래스에 대한 recall의 평균을 취하기 때문에 한 class의 accuracy에 지나치게 의존하지 않게 됩니다.




Recall 또한 마찬가지로 imbalance한 dataset 상황에 있을 때, 각 클래스에 대한 평균을 취함으로써 특정 class의 의존성을 줄여주게 됩니다. 즉, 다시말해 recall은 머신러닝 모델이 특정 class에 대해 (특정 class가 test 입력으로 들어올때), 평균적으로 (전체 (A,B,C,D) 클래스들 중에서 정답이 되는 특정 클래스를) 얼마나 잘 detect(검출)하는지 알려주는 성과지표라고 할 수 있겠어요.





<6. F1-score>


앞선 글에서 봤듯이 클래스가 imbalance한 문제에서는 precision과 recall이 유용하게 사용될 수 있어요. 그렇다면 precision과 recall 지표를 동시에 잘 이용한다면 imbalance dataset이 주어진 상황에서 좀 더 좋은 모델을 선택할 수 있지 않을까요?


다시말해, 특정 class의 accuracy에 덜 의존하면서, precision(Given a class prediction from the classifier, how likely is it to be correct? )과 recall(Given a class, will the classifier detect it?)이 내재하고 있는 두 가지 상황(어떤 관점에서 모델을 판단할지)을 모두 고려하면, 좀 더 객관적이고 다양한 상황을 고려할 수 있는 평가지표가 될거에요.


일반적으로 어떤 두 개념을 동시에 고려할 때 도입되는 개념은 평균입니다. 그래서 Precision과 Recall 두 개념(속에 녹아있는 상황들)을 적절하게 고려해주기(나타내주기) 위해 Precision과 Recall의 평균을 취하게 되는거죠. 


<사진1>



평균을 내는 방식에도 종류가 여러가지인데, 일반적으로 산술평균을 내게 되면 precision과 recall 두 개념(상황)을 모두 고려할 때 문제가 발생할 수 있어요. 앞서 Precision과 Recall에서 얻었던 장점이 특정 클래스의 accuracy에 의존적이지 않다는 점이라면, Precision과 Recall을 개념을 혼합할 때도 조심해야하는 부분이 두 값의 평균(precision과 recall을 혼합했을 때)값이 precision 또는 recall 두 개념을 적절하게 고려할 수 있는 값을 의미하는가에요.


precision = (p(A)+p(B)+p(C)+p(D))/4 = p

recall = (r(A)+r(B)+r(C)+r(D))/4) = r

산술 평균값 = (p+r)/2


예를들어, 어떤 A라는 모델에서 precision 값이 0.9이고, recall 값이 0.1이라고 해볼게요. 이 결과 산술평균값은 0.5일거에요. B라는 다른 모델에서는 precision 값이 0.5이고, recall 값도 0.5라고 해볼게요. 이 결과 산술평균값도 0.5에요. 그런데, A라는 모델에서 얻은 0.5라는 값이 precision, recall을 동시에 잘표현해주나요? precision의 의미를 내포한다고 하기에는 너무 결과값(평균값)이 작은것 같고, recall을 표현하기에는 결과값이 너무 큰 것 같지 않나요? 


우리가 알고 싶은건 precision과 recall 이라는 두 개념을 동시에 잘 아울러서 보여줄 수 있는 결과값이 존재하는가에요. 즉, precision과 recall 값들의 차이가 나지 않아야 precision과 recall 모두 성능이 좋은지 아닌지를 이야기 할 수 있게 되는거에요. precision과 recall 두 값이 차이가 많이난다면 두 개념 중에 특정 값(precision or recall)에 의존적이게 됩니다. 


precision, recall 값이 차이가 많이 난다면 당연히 두 개념이 머신러닝 모델 성능에도 문제가 있다고 보는것이 합리적인 판단이에요. 그래서 precision과 recall 이라는 상황을 고려할 때, 두 상황을 "모두" 적절하게 고려했는지를 판단하려면 precision과 recall 값의 차이가 심하게 나면 안됩니다. 


그래서 precision과 recall 간에 차이가 급격하게 나는 것 보다, precision과 recall을 혼합한 결과가 두 값의 차이가 적을 때 높아야 두 상황(precision, recalll)을 적절하게 고려했다고 할 수 있을거에요. 


이러한 철학을 기반으로 도입된 개념이 '조화평균'이라는 개념이에요.



1) 조화평균(harmonic mean)


말을 그대로 풀어 쓰면, 어떤 두 값에 대한 평균을 낼때 두 값이 조화롭다면(두 값의 차이가 많이 나지 않는다면) 높은 값을, 두 값이 조화롭지 않다면 (두 값의 차이가 많이 난다면) 낮은 값을 도출해준다는 철학을 갖고 있어요.



예를들어, 어떤 모델이 precision = a = 0.9 라고 하고, recall = b = 0.1을 기록했다고 하고, 다른 모델이 precision = a = 0.5, recall = b = 0.5라고 했을 때의 조화평균을 구하면 아래와 같아요.


 


첫 번째 케이스는 precision과 recall의 차이가 너무 크기 때문에 결과값이 낮게 나왔어요. 이 경우에는 precision과 recall 값들 간의 차이가 크기때문에 두 값을 동시에 잘 보여줄수 (상징할수) 없기 때문에 그러한 의미로 낮은 값이 도출됩니다. 두 번째 케이스는 precision과 recall을 모두 잘 대변해주고 있네요.


이렇게 precision과 recall에 대한 조화평균의 철학을 도입한 성과지표를 F1 score라고 할 수 있겠어요.




###요약하자면###


위와 같이 precision, recall에 대한 조화평균 값이 낮다고 한다면 두 가지 경우를 생각해 볼 수 있어요.

첫 번째는 precision, recall 값이 서로 차이가 많이 나는 경우입니다. 이러한 경우에는 두 값을 "동시에" 고려할만한 지표로 사용하기에 적절치 않기 때문에 조화평균값이 낮게 나옵니다. 즉, imbalance dataset 상황상에서 사용하기 힘든모델이라는 결론을 내릴 수 있어요.

두 번째는 precision, recall 값이 서로 차이가 많이 나지는 않은 경우입니다. 이러한 경우에는 precision, recall 값 모두가 낮기 때문에 이 역시 imbalance dataset 상황에서 사용하기 힘든모델이라는 결론을 내릴 수 있어요.


Precision만 너무 높아도 안되고, Recall만 너무 높아도 안되고, 이 둘 간의 평균값이 높아야 모델에 대한 전반적인 성능이 좋다고 할 수 있습니다. 그런데, 일반적인 산술평균을 적용하면 Precision or Recall 둘 중에 엄청 높은 값에 해당하는 쪽으로 평균이 치우쳐질 수 있기 때문에 조화평균을 사용하게됩니다.


일반적으로 두 값(precision, recall)이 어느정도 비례해야 좋은건데, 어느 한 값이 너무 낮아버리면 성능에도 당연히 문제가 있다고 보는게 맞기 때문에 산술평균을 쓰는것보다 조화평균을 쓰는 F1 score라는 성과지표를 사용하는것이 더 좋습니다.



[사진 래퍼런스]

사진1

http://blog.naver.com/PostView.nhn?blogId=dalsapcho&logNo=20167498252

'Deep Learning for Computer Vision > Convolution Neural Network (CNN)' 카테고리의 다른 글

11. Transferlearning (Feat. fine-tuning)  (0) 2020.01.17
10. DensNet  (0) 2020.01.17
9. ResNet  (12) 2020.01.17
8.GoogLeNet (inception v1)  (2) 2020.01.17
7. VGGNet  (5) 2020.01.17

+ Recent posts