Data augmentation과 optimization 같은 training procedure refinements (학습 절차 개선)은 image classification 성능 향상에 큰 기여를 했습니다.
training procedure refinements라는 말이 모호하긴 한데, 이 논문에서는 CNN 구조(모델링) 관점에서 CNN 성능을 향상시키는 방법이 아니라, CNN을 학습시킬 때 어떠한 방법 (= training procedure) 을 사용해야 CNN 성능을 개선 (refinments) 시킬 수 있는지에 대한 방법론들을 의미하는 용어로 이해했습니다.
지금까지 언급된 training procedure refinements 방법론들은 간략하게 detail한 정도로 언급되거나, source 코드를 들여다 봐야 알 수 있는 경우가 있었습니다.
이 논문에서는 지금까지 언급된 training procedure refinements 방법들을 모두 모아 empirically (경험적으로) 실험하고 accuracy를 평가했습니다.
그 결과, ResNet-50 모델에 training procedure refinements 방법론들을 적용시켰을 때, top-1 accuracy는 75.3%에서 79.29% 까지 향상됐습니다.
이렇게 향상된 CNN 모델은 transfer learning, object detection, semantic segmentation의 성능을 향상시키는데 좋은 영향을 미쳤습니다.
Transfer learning, object detection, semantic segmentation 모두 CNN을 backbone으로 사용하고 있습니다.
즉, abstract 내용을 아래와 같이 요약정리 할 수 있습니다.
"우리 논문에서는 training precedure refinements를 위한 방법론들을 모두 적용시켜 CNN 성능을 향상시켰어!"
1. Introduction
1-1. 첫 번째 문단
→ CNN 모델 구조들의 간략한 history
AlexNet이라는 CNN 모델이 처음 등장한 후 VGG, Inception, ResNet, DenseNet, NasNet과 같은 여러 CNN 모델이 출현했습니다.
이러한 CNN 모델은 image classification 분야에서 top-1 accuracy를 62.5%에서 82.7%까지 향상시켰습니다.
앞서 언급한 Top-1 accuracy의 향상은 대부분 CNN 구조를 모델링하는 연구에서 기인했습니다.
CNN 모델링을 하는 것 외에, training procedure refinements (ex: loss function, data preprocessing, optimization) 방법론들도 굉장히 중요하지만, 덜 주목을 받고 있습니다.
1-3. 세 번째 문단
→ "CNN 학습방법론들 적용 + 약간의 모델링 수정"을 통해 CNN 성능의 변화를 테스트
이 논문에서는 아래 두 가지 방법을 기준으로 CNN 모델 성능 향상을 꾀했습니다.
Training procedure refinements
stride size, learning rate schedule 과 같은 요소들을 적절하게 변경해주는 방법 → 이 논문에서는 이러한 방법들을 trick이라고 표현 함 → "bag of = plenty of" 이므로, 다양한 tricks(=training procedure refinements)을 사용한다고 해서, 논문 제목을 "Bag of Tricks for Image Classification with Convolutional Neural Networks"라고 명명했습니다.
Model architecture refinements
객관적인 evaluation을 위해 다양한 CNN 아키텍쳐와 다양한 dataset을 기반으로 실험을 진행했습니다.
예를 들어, 특정 dataset이나 특정 모델에서만 "Bag of tricks"가 적용되는건 의미가 없기 때문입니다.
1-4. 네 번째 문단
→ "CNN 학습방법론들 적용 + 약간의 모델링 수정"을 통해 CNN 성능의 변화를 테스트
여러 trick들을 결합시키면 accurcy를 크게 향상시킬 수 있습니다.
ResNet-50을 기준으로 top-1 accuracy가 75.3에서 79.29까지 향상된 것을 확인 할 수 있습니다.
이러한 training procedure refinements를 적용시켰을 때, 새로운 CNN 모델링 연구를 통해 개발된 SE-ResNeXt-50 모델보다 더 accuracy 성능이 좋은 것으로 나타났습니다. → 그러므로, CNN 모델링 연구 뿐만 아니라 training procedure refinements관련 연구도 중요하다는 것을 입증했습니다.
이러한 training procedure refinements 방법론들은 ResNet-50 모델의 성능만 향상시킨 것이 아니라, 다른 CNN 모델들의 성능도 향상시켰으므로, 이 논문에서 제시한 "training procedure refinements" 방법론들이 특정 CNN 모델에 국한되지 않았다는 것을 보여줍니다.
추가적으로, 이렇게 향상된 CNN 모델은 transfer learning, object detection, semantic segmentation 의 성능도 향상시켰습니다.
training을 위한 이미 전처리 or data augmentation 전략은 아래와 같이 설정했습니다.
해당 전략들을 순차적으로 설명하도록 하겠습니다.
Step1: 이 부분은 Section 3에서 "3.2 Low-precision Training" 부분을 통해 더 자세히 설명 하도록 하겠습니다.
Step2: ImageNet의 원본 이미지 size는 굉장히 큰데, 이 크기에서 8%~100% 비율에 맞게 랜덤하게 crop 합니다. 이 때, 가로 세로의 비율은 3:4 or 4:3으로 설정합니다. 이렇게 crop된 이미지는 ResNet 입력 사이즈인 224x224로 resize됩니다.
Step3: 50%의 확률로 horizontal flip augmentation 기법을 적용합니다.
Step4: Scale hue, saturation, brightness의 정도(강도)를 결정하는 coefficients 를 [0.6~1.4] 범위로 설정해 줍니다.
Step5: PCA augmentation은 AlexNet에서 사용된 data augmentation 기법입니다.
PCA noise의 정도(강도)를 결정하는 인자 값은 normal distribution (확률분포) 를 기반으로 선별합니다.
ImageNet 원본 이미지에서 가로, 세로 중 길이가 짧은 쪽을 기준으로 256 pixel(길이)로 만듭니다. 이때, 더 긴쪽의 길이 또한 aspect ratio (가로, 세로 비율)을 유지해주면서 변경해 줍니다.
이렇게 변경된 이미지에서 224x224 만큼 크기로 center crop 해주고, normalization 전처리 작업을 해줍니다.
최종적으로 전처리가 된 이미지를 기반으로 validation을 진행합니다.
2-2. Experiment Results
위에서 baseline으로 설정한 값들을 기준으로 ResNet-50, Inception V3, MobileNet 을 학습시키고 validation 했습니다.
Dataset은 ISLVRC2012 challenge에 사용된 데이터를 이용했습니다.
Inceptoin V3는 본래 입력 사이즈가 299x299이기 때문에, 앞서 언급한 224x224 resize 방식을 299x299 resize 방식으로 변경해 적용했습니다.
아래 테이블은 실제 paper(←reference)에서 제시한 결과들과 자신들이 적용한 baseline을 토대로 얻은 결과값을 비교한 것입니다.
이 후부터 적용할 여러 학습방법론들은 reference가 아닌 baseline과 비교해가면서 성능변화를 살펴볼 예정입니다. (당연히 자신들이 실험하는 환경의 baseline(=대조군)을 기반으로 여러 학습방법론들을 적용해야 유의미한 실험군이 되므로, 대조군과 실험군간에 비교가 유의미해집니다)
3. Efficient Training
→ Accuracy 성능을 떨어뜨리지 않으면서 빠르고 효과적으로 training 시키는 방법을 소개
보통 하드웨어에서 말하는 trade-off는 speed와 accurcay의 관계를 의미합니다.
speed를 키우기 위해서 하는 행위들이 accuracy를 낮추는 행위가 되기도 하기 때문에 서로 trade-off 관계가 성립이 됩니다.
그래서 speed와 accuracy를 모두 취할 수 있는 적절한 지점 (optimal choices) 을 잘 찾아야 하죠.
이 논문에서는 lower numerical precision과 larger batch sizes를 이용하여 model의 accuracy가 떨어지지 않으면서도 좀 더 빠르고 효율적으로 CNN을 training 시키는 방법을 제안하고 있습니다.
3-1. Large batch training
이 글에서는 이미지 하나를 batch size로 잡기보단, 여러 이미지를 batch size로 잡는 mini-batch 전략을 세울 때 얻을 수 있는 장점과 단점을 이야기 하고 있습니다. → 즉, batch size를 키워줄 때 발생하는 장점과 단점을 설명하고 있습니다.
먼저, 장점에 대해서 알아보고 단점을 알아보도록 하겠습니다.
[장점] Large Batch size → Increase parallelism and decrease communication costs
Parallelism과 communication costs에 대한 이해를 위해서는 CNN이 weight를 업데이트할 때 GPU내에서 어떻게 동작하는지 알고 있어야 합니다.
Parallelism과 Multi-GPU
Step1.각각의GPU에딥러닝모델을 복사해서 올린다. → 예를 들어, 3개의GPU가 있고 각각9GB라고 가정하고,3G 크기의 딥러닝 모델이 복사되어 각각의 GPU에 업로드 된다고 하면,현재 각각의GPU (A, B, C)의 용량은6GB의 여유 용량이 있다.
Step2.자신이 잡은batch size (mini-batch)가99라고 한다면,각각의A, B, C GPU에33개씩 이미지 데이터를VRAM(비디오 메모리)에 할당한다. → 만약, 33개의 이미지 용량의 6GB를 넘는다면 GPU memory 에러가 발생한다.
Step3.각각의GPU는 자신들이 할당 받은(해당GPU고유의) 33개의error값에 대한 (평균) loss 값을 계산한다.
Step4. 각각의 GPU에서얻은 loss값을 다시 합산하여 GPU 개수 (여기에서는 3개) 만큼 나누면 mini-bath size 만큼의 데이터에 대한 loss 값이 계산이 된다.
Step5. Mini-batch size loss 값을 각각의 GPU에 전달하면 mini-batch size 이미지들에 대한gradient 값을 갖을 수 있게 된다.
Step6. 이후 같은 gradient 값으로 각각의 GPU에 있는 모델 parameter가 업데이트 되게 된다.
결국, mini-bath size를 크게 잡을 수록 다수의 GPU를 (동시에) 최대한 활용하게 되며, 이를 통해 parallelism을 증가시킨다고 볼 수 있다.
Parallelism과 Single-GPU
Batch size 만큼의 데이터가 GPU에 올라갑니다.
GPU를 활용한다는 것은 그만큼 병렬처리를 잘하기 위함인데, GPU당 이미지 데이터를 하나만cover하는 것 보다, 2개의 이미지 데이터를cover하는 것이GPU를 더 잘 활용한다고 할 수 있죠.
즉, batch size를 크게 잡아줄 수록 그만큼병렬성(parallelism)을증대시킨 것이라고 할 수 있습니다.
Multi-GPU 측면에서 보면, 만약 각각의 GPU에 하나의 이미지만 할당된다고 하면 나중에 각각의 GPU에서 발생한 loss 값들 (=3개의 loss 값들) 을 최종 합산 해야 하는 빈도가 많아집니다. → 또한, 각 GPU에 평균으로 계산된 loss 값들이 전달이 되겠죠.
각 GPU에 평균 loss 값을 전달하는 거리와, 33개의 데이터를 하나의 GPU 안에서 병렬처리 했을 때, 서로의 물리적 거리를 고려한다면 당연히 후자의 경우 communication cost가 적다고 할 수 있습니다.
Single-GPU 측면에서 봤을 때도, update 횟수가 잦아질 수록 communication cost가 커지겠죠. (딥러닝 모델이 GPU에 업로드 되어있다는 것을 상상해보세요! 업데이트가 잦을 수록 gradient 값들이 GPU 내에서 이동하는 횟수도 증가하겠죠?)
[단점] Large batch size → Slow down training progress + convergence rate decrease + degraded validation accuracy
Batch size를 키운다는 것은 speed 면에서 좋을 수 있지만, accuracy 면에서는 좋지 못할 수 있습니다.
"slow down training progress"라는 말은 global minimum loss에 도달하기까지 걸리는 training epoch의 횟수가 크다는 것을 말합니다.
즉, GPU에서 학습하는 물리적인 속도를 의미하는 것이 아니고, optimization 측면에서 봤을 때의 학습속도를 의미합니다.
예를 들어, batch size=1 인경우에는 training epoch=20 이라고 했을 때, batch size=20 으로 늘려주면 training epoch=40 이 되는 개념입니다. (→관련링크)
이러한 근거로 convex problem이라는 용어를 사용했는데, convex problem 관점에서 봤을 때, batch size를 키워주면 convergence rate 이 좋지 않아지는데, 이것이 validation accuracy를 악화시키는 요인이 된다고 합니다.
이 부분은 convex optimization 관점에서 SGD를 이해하고 있어야 하는데, 추후에 convex optimization 정리가 다끝나면 해당 링크를 추가하도록 하겠습니다.
이미 개념을 알고 있으시다면, "DON’T DECAY THE LEARNING RATE, INCREASE THE BATCH SIZE" 논문의 section 2를 참고하시면 될 것 같습니다.
이 논문에서는 앞서 언급한 단점을 커버하는 4가지 heuristic한 방법들을 제시합니다.
Linear scaling learning rate
Learning rate warm-up
Zero gamma
No bias decay
즉, batch size를 키우면서도 accuracy를 악화시키지 않고, training 효율성은 증가시키는 방식들을 제안합니다.
3-1-1. Linear scaling learning rate
→ batch size를 키워줄 때, learning rate을 어떻게 변화시켜주면 좋을지 설명하는 내용
(아래 그림과 같이 봐주시면 좋을 것 같습니다)
Mini-batch방식으로 학습하면, Mini-batch당parameter를updating하게 되는데,첫 번째mini-batch에서 업데이트해서 조정된parameter(weight)값들은 첫 번째mini-batch에 특화되어 있을 가능성이 큽니다.
예를 들어, 아래 그림에서 첫 번째 미니배치 업데이트 수식을 보면 해당 미니배치에 할당된 이미지들을classification한error값을 평균 냅니다.즉,해당 미니배치에서 구성되어 있는 이미지들이problem space가 되었을 것이고,해당problem space에서SGD방식이 진행되었을 것입니다.
하지만,두 번째 미니배치는 또 다른 이미지들의 집합이기 때문에 해당 이미지들을 평균적으로 잘classification하기 위해 학습 할 것입니다.즉, SGD방식은 같으나 첫 번째 미니배치에서의problem space와는 다른problem space에서SGD방식이 진행될 것 입니다.
만약, mini-batch size가 커진다면 즉, 극단적으로 모든 이미지를 하나의 mini-bath size로 잡는다면 epoch당 학습하는 problem space는 매번 동일할 것입니다. → 배치size가 커지면 커질 수록mini-batch간의error값들이 서로 차이가 많이 안날 것이고 이에 따라 우측과 같은 표현을 할 수 있게 됩니다 → "Increasing batch size does notchange the expectation of the SGD but reduces its variance"
다른 관점에서 보면, batch size가 커질 수록 많은 데이터를 sampling 하기 때문에 결국 데이터 평균에 수렴한다는 중심극한정리 관점에서도 해석해 볼 수 있을 듯 합니다.
일반적으로 batch size가 커질 수록 안전하게 학습이 됩니다. 안전하다는 말을 수학적으로 풀어 설명하려면 위에서 언급한 것처럼 convex optimization 관점에서 설명해야 하는데, 너무 길어질 듯하여 생략하도록 하겠습니다.
개인적으로는 batch size를 크게 잡아주면 problem space(loss landscape)가 좀 더 global minimum을 찾기 쉽게 smooth해지는게 아닌가 싶습니다. (← 주관적인 해석이라 그냥 넘어가셔도 좋을 듯 합니다)
결국 안정화된 problem space 에서는 learning rate을 크게 잡아줘도 올바른 방향으로 학습을 할거라 생각합니다. (←이 부분도 주관적인 해석이니 넘어가셔도 좋습니다)
"Accurate, large minibatch SGD: training imagenet in 1 hour." 논문에서는 경험적으로 batch size가 증가하면, linear하게 learning rate도 증가시켜주는게 좋다고 합니다.
"Deep residual learning for image recognition" 논문에서는 batch size 256 일 때, learning rate 값을 0.1로 설정했고, 256 batch size 보다 크면 learning rate를 0.1보다 증가시켜주고, 256 batch size보다 작으면 learning rate를 0.1보다 감소시켜주는것이 좋다고 합니다.
결과적으로 이야기하면, batch size를 키워주면 GPU를 최대한 활용할 수 있어 speed는 빨라집니다. 하지만, accuracy 성능이 크게 떨어질 수 있는데, learning rate을 linear하게 키워준다면 그나마 accuracy 성능이 감소하는 것을 상쇄해줄 수 있다는 것이 이 논문에서 주장하는 바 입니다.
3-1-2. Learning rate warmup
초기에는 layer의 가중치 값들이 굉장히 불안정하기 때문에 너무 큰 learning rate를 적용하면 loss값이 지나치게 커저 gradient exploding 할 수 있습니다.
그래서 학습 초기에는 learning rate를 낮게 설정해주고, 특정한 학습 단계에 도달할때 까지는 천천히 learning rate을 증가시켜주는것이 좋다고 합니다.
이 논문에서는 아래와 같이 5 epoch에 해당하는 "m"개의 batch까지는 learning rate을 서서히 증가시켜줍니다.
→ Residual block에 위치한 Batch Normalization layer의 zero gamma 값을 0으로 초기화 시켜주면 초기학습 단계에서 더 적은 layer로 효과적으롤 학습할 수 있음 → Speed도 증가시키면서, accuracy 성능도 악화시키지 않음
위에서 설명한 "All BN layers that sit at the end of a residual block"의 위치는 아래와 같습니다.
첫 training에서는 gamma와 beta 부분이 0으로 설정되어 있기 때문에, block(x)값은 0이 됩니다.
즉, 첫 training 시에는 학습에 관여하지 않게 된다는 말과 같습니다.
결과적으로, 초기에는 "identity ResNet block" 부분이 관여를 하지 않기 때문에 layer 수를 급격히 줄인 상태에서 학습시키는 것과 같은 방식이 됩니다.
개인적으로 봤을 때layer들도 단계별로warm-up시켜학습시킨게아닌가 싶습니다.
아무리residual block으로vanishing gradient문제를 개선시켰다고 하더라도 그 문제를 완전히 해결 한 것이 아닙니다. 즉, vanishing gradient로 인해 초기layer부분에서 학습이 잘 안된 상태에서뒷쪽layer위주로 학습이 됐을 가능성도 있습니다.
그래서, 초기에는 적은 수의layer로 학습시켜 해당하는8개의layer를 안정화 시켰던 것 같습니다.
Gamma 값은 아래와 같이 업데이트 됩니다.
Batch Normalization 관련 설명도 제 블로그에 다루었으나, 최근에 나오는 paper들이 기존 BN 이론을 반박하는 내용들이 많아, 이 부분은 batch normalization 파트를 따로 개설해 정리하도록 하겠습니다.
3-1-4. No bias decay
→ bias, bath normalization's gamma and beta 에는 regularization을 적용하지 않는 것이 좋다
“Highly Scalable Deep Learning Training System with Mixed-Precision(Training ImageNet in Four Minutes)”논문에서 사용된 regularization 방식을 사용했습니다.
Weight에만 regularization을 적용하고, bias나 batch layer에서는 regularization을 적용하지 않았다고 합니다.
bias에도 regularization을 적용하면 모든 파라미터들의 값들이 0으로 수렴한다고 하는데, 이 부분에 대해서는 아직 명확한 이유를 모르겠어서 추후에 더 공부한 후 설명을 하려고 합니다 (뭔가.. 되게 기초적인 내용 같은데;;)
위와 같은 이유 외에 bias에 regularziation을 적용하지 않는 다른 이유를 설명해보겠습니다.
Y=WX+B
Regularization is based on the idea that overfitting on Y is caused by W being "overly specific", so to speak, which usually manifests itself by large values of X's elements.
B merely offsets the relationship and its scale therefore is far less important to this problem. Moreover, in case a large offset is needed for whatever reason, regularizing it will prevent finding the correct relationship.
오히려,이 부분에regularization을 주면,underfitting이 일어날 확률이 더 커질 수 있다고 하니regularization을 적용 할거면weight에 대해서만 적용하는 것이 바람직하다고 설명하고 있습니다(Iangoodfellow저서인Deep Learning책을 보시면 설명이 나온다고 하니 참고하시면 좋을 것 같습니다).
3-1-5. Low-precision training
Votal 관련한 FP16 설명은 아래 글을 참고해주세요.
(↓↓↓FP에 대한 개념과 Volta 아키텍처에서의 Mixed precision 설명 ↓↓↓)
위의 설명은 아래 그림으로 도식화 할 수 있습니다. (FWD: ForWarD, BWD: BackWarD)
간단히 설명하면 연산과정에서 forwarding하는 것과, gradient값을 구하는 과정에는 곱셈연산이 다수 포함되기 때문에 이러한 부분들은 FP16으로 처리하고, updating 시에는 이전 weight에 gradient값을 단순히 더해주기만 하면 되기 때문에 이 때만 FP32를 적용해 low-precision의 단점을 커버했습니다.
"Multiplying a scalar to the loss" 관련 내용은 loss scaling을 말하는 것으로써 자세하 설명하자면 아래와 같습니다.
Weight를 FP16으로 변환시켰을 때, 소수의 weight gradeint 값만 FP16으로 표현이 불가능하여 0값으로 설정된다고 합니다.
하지만, activation gradient값들은 FP16으로 표현될 시 대부분 표현불가능해 진다고 합니다. 즉, activation gradeint 값들이 대부분 0이 되는 것이죠. (아래 Become zero in FP16으로 표현되어 있는 부분이 FP16으로 표현했을 때 activation gradeint 값들 대부분이 0됩니다.)
이 때, loss값을 scalar만큼 곱해주면 당연히 gradient값도 커지게 되집니다.
즉, loss scaling(=multiplying scalar to loss) 을 통해, activation gradeint 값을 조금씩 증가시켜주면
ex) activation gradient = 0.00000000000000000000000000000001 FP16 표현 불가 → by loss scaling, activation gradient = 0.000000000000001 FP16으로 표현 가능
Batch size를 크게 키우면서 low-precision을 적용시킨 결과입니다. 학습은 빠르게 되면서 accuracy 또한 감소되지 않은 것을 볼 수 있습니다.
특히 이러한 결과는 특정모델에 국한된 결과가 아니라 다양한 CNN 모델에서 발견됐기 때문에, 굉장히 유의미한 결과라고 볼 수 있습니다.
3-3. Experiment Results
앞서 batch size를 키워줄 때 적용시켜줄 4가지 heuristic methods(="3-1"에서 언급)와 "3-2"에서 언급한 low-precision을 적용시켰을 때, accurcay의 변화에 대한 결과 입니다.
논문에서는 이 결과에 대해 해석을 내놓고 있기는 한데, 개인적으로는 위와 같은 결과는 큰 의미가 없어보입니다.
통계적으로 이러한 변화를 보려면 random seed 값을 다르게 해준 후, 적어도 30개의 결과 sample을 통해 비교해줘야 통계적 해석이 가능합니다.
여기서는 seed 값을 어떻게 설정해줬는지 설명도 안나와 있는데, 만약 하나의 seed 값만 활용했던거라면, 다른 seed 값을 적용했을 0.xx% 의 차이는 충분히 바뀔 수 있습니다. (random seed에 따라 batch에 포함되는 이미지 순서도 바뀔 수 있으니.... → 참고로 학습하는 이미지 순서도 validation accuracy 결과에 굉장한 영향을 미칠 수 있습니다)
뒤에서 더 이야기 하겠지만, 개인적으로 Zero gamma와 FP16 부분이 흥미로웠는데, FP16은 Volta GPU 아니라 적용 못 시켜봤고, zero gamma 부분은 transfer learning에 맞게 변경시켜 적용시키니 유의미한 결과를 얻기도 했습니다. (→ 맨 뒤에서 간단히 추가 설명하도록 하겠습니다)
4. Model Tweaks
Model tweaks 부분은 단순히 ResNet의 일부 구조를 변경시킨 것이라 특별히 설명할 부분이 없어서, 아래 사이트 링크를 걸어두었습니다.
아래 사이트를 참고하셔도 되고, 충분히 논문의 그림만 보셔도 이해가 수월 하실거라 생각합니다.
개인적으로 Medical imaging transfer learning을 위해 cosine annealing 기법을 적용시켜 봤을때, 큰 효과는 없었습니다. (Warm-up은 약간의 성능향상을 가져오긴 했습니다)
5-2. Labeling smoothing
해당 논문에서 언급하는 label smoothing에 대한 직관적인 개념은 아래와 같습니다.
보통 one-hot encoding labeling을 사용하게 되면 [0, 0, 0, 1, 0, 0, 0] 이런 식으로 실제 정답에 1을 부여하는 식으로 q분포를 설정해줍니다. 그리고, 딥러닝이 예측하는 p분포와 cross entropy 수식을 통해 점점 p분포와 q분포의 gap을 줄여주게 되죠.
하지만 이러한 one-hot encoding 방식에는 직관적으로 봤을 때 여러 문제가 있습니다.
예를 들어, 우리가 아래 이미지 대해서 정답 labeling을 한다고 해보겠습니다.
여러분은 아래 이미지가 고양이다라고 100% 확신할 수 있으신가요?
아래 이미지에는 안경, 책 같은 물체들도 포함되어 있는데 아래 이미지의 제목을 100% 고양이라고 붙이긴 힘들거라고 생각합니다.
결과적으로, 딥러닝 모델에게 "이러한 이미지가 100% 고양이다"라고 하는 것 자체가 잘 못된 학습을 시켜주는게 될 수 도 있습니다. (실제로 "From ImageNet to Image classification" 이라는 논문에서는 ImageNet labeling에 대한 문제점도 제기하고 있죠)
그 외에 다른 측면에서보면, 특정 label에 100%의 확률을 할당하는 건 딥러닝 모델이 해당 label 이미지에 overfitting하게 학습시킬 우려가 있습니다.
위와 같은 이유로 [0, 0, 0, 1, 0, 0] → [0.1, 0.1, 0.1, 0.5, 0.1, 0.1] 와 같이 label smoothing을 적용시켜주어 위와 같은 문제를 피하려고 하고 있습니다.
논문에 있는 labeling smoothing을 적용시키는 q부분은 이해하기 어렵지 않습니다.
하지만, 개인적으로 logPy에서 log와 exponential 함수가 합성함수 형태로 되어 있는 부분과, z에 대한 optimal solution 부분이 이해가 잘 안되어 이 부분에 대한 설명은 추후로 미뤄야 할 것 같습니다. (P분포와 Q분포의 차이를 줄여주는 관점을 또 다른 식으로 표현한 거 같긴한데, KL divergence 관점에서의 수식도 아닌거 같고.. 기본 지식에 대한 이해가 안되어 있는건지, 논문에서 설명이 부족한건지.. ;;)
어떻게 적용하는지는 수식만 따라하면 하겠지만, 해당 수식에 대한 직관적인 이해가 잘 안되고 있어서 나중에 알게 되면 다시 수정하도록 하겠습니다.
하지만, 논문에서 언급한 Labeling smoothing 적용 방법은 어렵지 않으니 논문을 보시면 쉽게 적용하실 수 있으실 겁니다.
5-3. Knowledge distillation
Knowledge Distillation에 대한 부분은 아래 카테고리에서 여러 Knowledge distillation 모델을 다룬 논문들을 게재하고 있으니 참고해주시면 감사하겠습니다.
본래 Knowledge distllation은 Network compression에서 자주 사용되던 개념이었지만, 최근에는 KD를 학습방법론에 이용하기도 하고, 앙상블 관점에서도 응용해서 적용시키기도 하기 때문에 배워두시면 여러 방면에서 도움이 될거라 생각합니다.
ImageNet이 아닌 다른 dataset(=MIT Places 365)으로 test한 결과는 Table7 입니다.
개인적으로 1%이상 차이가 나지 않는 결과들에 대해서는 회의적으로 보는 경향이 있습니다.
Seed를 어떻게 설정해주느냐에 따라서도 결과가 바뀔 수 도 있고, 가끔씩 자신들에게 유리한 실험결과들만 올리는 듯한 느낌을 받기도 하기 때문입니다.
하지만, 실제로 다른 도메인에 trasnfer learning 관점에 맞춰 적절하게 방법을 변경하거나, object detection, segmentation 모델에 적용해보면 큰 achievement를 달성하는 경우도 있기 때문에, 해당 방법론들을 경우에 따라 잘 적용하려는 노력과 연구가 필요하다고 생각합니다.
6. Transfer Learning (for Object detection, Segmentation)
Table8은 bag of tricks를 CNN에 적용한 후, Faster RCNN(object detection model)의 backbone으로 사용했을 때 결과들을 보여주고 있습니다. 최대 대략 4%까지 성능이 향상되는 것을 보면 꾀 유의미한 결과라고 볼 수 있을 듯 합니다.
Table9는 FCN (segmentation model)에 해당 trick들을 적용한 결과입니다. 그래도 1% 이상의 성능향상을 이끄는 것을 보면 유의미한 결과라고 볼 수 있을 듯 합니다.
[개인적인 경험 글]
위에서 언급 한 방법론 들을 medical 연구를 진행할 시 적용시켜 보았습니다 (KD, Mix-up, low precision을 제외).
해당 방법론들 중에서 warm-up 부분과 batch normalization zero gamma 방법들이 성능향상에 기여했습니다.
개인적인 경험에서는 batch normalizatioin에 zero gamma 부분을 적절하게 세팅해주는게 유용할 때가 많았습니다.
예를 들어, X-ray 이미지 domain에 transfer learning을 적용할 시, 이 논문에서 제시된 모든 BN layer에 zero gamma를 적용해주는 것 보다, 뒷 쪽에 conv layer에 위치한 BN layer 중 적절한 위치에 zero gamma 또는 one gamma로 세팅해주는게 유의미한 결과를 가져올 때가 많았습니다 (현재 해당 방법을 COVID-19 X-ray데이터 적용한 논문이 under review 중이라 결과가 나오면 따로 논문을 review하도록 하겠습니다)
Mix-up은 Medical data에 적용시키기가 조심스러운 부분이 있을거라 판단해서 적용하지 않았습니다.
KD 관련 방법론은 올해 GAN과 CNN을 융합할 때 같이 적용해보려고 하고 있습니다.
Low precision or Mixed precision 방법은 GCP 기반으로 volta GPU를 세팅한 후, GCP 베이스로 학습을 시킬 때 적용해보려고 하고 있습니다.
(↓↓↓Bag of Tricks for Image Classification with ~ 관련 Tensorflow 2 코드↓↓↓)
이번 글에서는 아래 논문을 리뷰해보려고 합니다. (아직 2차 검토를 하지 않은 상태라 설명이 비약적이거나 문장이 어색할 수 있습니다.)
※ 덧붙여 제가 medical imaging에 적용한 다른 전처리(or data augmentation) 방식들을 같이 공유하도록 하겠습니다.
ImageNet-Trained CNNs are Biased Towards Texture; Increasing Shape Bias Improves Accuracy And Robustness
Conference: 2019 ICLR
Authors: 영국의 Edinburgh 대학, IMPRS-IS (International Max Planck Research School for Intelligent Systems), 독일의 Tubingen 대학 간의 협동연구
0. Abstract
[요약]
1. Question (노란색 부분)
물체를 인식할 때 어떤 특징을 기반으로 해당 물체를 판별하나? → 즉, "갓난 아이 or 딥러닝 모델"이 해당 물체를 인식하기 위해 어떤 특징을 우선순위로 두고 학습을 하나?
일반적으로 물체를 인식하기 위해 CNN 모델들은 물체의 shape을 기반으로 학습한다고 한다.
하지만 몇몇 연구에서는 image textures를 기반으로 학습한다고 한다.
위와 같은 주장 중에 무엇이 맞는지 판단하기 위해, texture-shape cue conflict 이미지를 기반으로 사람과 CNN 모델들을 정성적으로 평가했습니다.
"texture-shape cue conflict"라는 용어는 abstract 부분만 보면 무엇인지 파악하기 힘듭니다. (abstract만 읽었을 때는 무슨 말인지 몰랐는데, 바로 아래 figure1을 보니까 바로 알겠더군요!)
예를 들어, 아래 그림과 같이 "코끼리 texture로만 이루어져있는 (a) 이미지"에서는 ResNet-50가 코끼리라고 올바르게 분류했고, "texture and shape"이 혼합된 (b) 이미지"에서는 고양이라고 옳게 분류했습니다. 그런데, "texture-shape cue conflict" (c) 이미지 (→ 객체에 특정 texture를 입힌 경우) 에서는 코끼리라고 분류했습니다.
그렇다면, (c) 이미지에서 ResNet-50 모델은 올바르게 분류한 것일까요?
올바르게 분류했다고 하시는 분들은 texture를 근거로 삼았을 것이고, 잘 못 분류했다고 하시는 분들은 shape을 근거로 삼았을 것입니다.
2. 실험방법 (파란색 부분)
위와 같은 질문에 답하기 위해 아래와 같이 실험 세팅을 했습니다.
실험을 위한 CNN 모델로 ResNet-50을 사용했습니다.
Stylized-ImageNet 이미지를 이용해 CNN을 학습시킵니다.
Figure1에서 (c)를 보면 CNN은 texture를 기반으로 분류한다는 사실을 파악할 수 있습니다.
ImageNet에 Style Transfer 기술을 이용하면 실제 객체들의 shape은 유지된 채로 texture만 변경됩니다. (Style Transfer 기술을 뒷 부분에서 더 자세히 설명하도록 하겠습니다)
예를 들어, CNN이 다양한 texture가 적용된 고양이 이미지들 (← 해당 이미지들은 고양이라고 labeling 되어있음) 을 학습하게 되면, texture에 민감하게 반응하지 않을 거라고 추측해볼 수 있습니다. 즉, shape을 중요 특징으로 삼고 classification 할 수 도 있을거라고 추론할 수 있게 되는 것이죠.
사람은 어떤 특징(texture or shape)으로 물체를 판단하는지 알아내기 위해 psychophysical lab에서 96명의 사람들(observers)을 대상으로 psychophysical trail을 했다고 합니다.
3. Result (분홍색 부분)
실험결과 아래와 같은 해석을 내놓았습니다.
Classifcaiton할 때, CNN은 texture를 기반으로 학습하고, 사람들은 shape을 기반으로 학습한다
추가적으로 shape 기반으로 학습을 진행하면 CNN을 기반으로 하고 있는 object detection의 성능이 올라간다고 합니다.
그 이유는 distorted image (왜곡된 이미지들) 또는 shape-based representation image(shape의 특징이 강하게 묻어나는 이미지들) 에 robust(→민감하지 않게)하게 작동하기 때문이라고 합니다. → 즉, 이 부분이 실험을 통해 주장한 또 하나의 해석(analysis)입니다.
1. Introduction
1-1) 첫 번째 문단
→ 기존 연구들에서는 CNN이 shape 특징을 기반으로 하고 있는 가설 소개
Introduction의 시작은 "어떻게 CNN이 object recognition, semantic segmentation에 좋은 성능을 보일 수 있었을까?"라는 질문으로 시작됩니다.
윗 질문에 대한 가장 보편적인 답으로 "CNN은 low-level features (edge=simple shape)에서 좀 더 복잡한 shape으로 결합해 나가기 때문이라고 합니다.
CNN 구조를 보면 첫 번째 layer에 있는 CNN filter들이 edge 정보를, 마지막 layer에 위치한 CNN filter들은 좀 더 abstract한 정보를 추출한다는 뜻으로 이해해도 좋을 것 같습니다.)
High-level units은 CNN의 마지막 layer에 있는 CNN filter들을 이야기 하고 있고, 이러한 high-level units들은 이미지들의 shape을 학습할 것이라고 언급하고 있습니다 (이전에 언급한 complex shape을 shape과 동의어로 쓴 듯 합니다. 굳이 구분하자면 edge=simple shape, shape=complex shape)
첫 번째 문단을 정리하자면 아래와 같습니다.
"기존의 연구들은 CNN이 shape을 기반해서 classification을 하고 있었다"
1-2) 두 번째 문단
→ 첫 번째 문단에서 주장한 가설의 근거가 되는 논문들 나열
앞서 언급한 "기존 연구들은 CNN이 shape을 기반해서 classification 하고 있다"라는 주장의 근거를 뒷 받침해주는 논문들을 소개하고 있습니다 (related work 느낌이네요).
1-3) 세 번째 문단
→ 첫 번째, 두 번째 문단에서 주장한 shape 기반의 classification을 반박하는 texture 기반의 classification 가설 소개
세 번째 문단에서는 앞서 주장한 내용들을 반박하는 근거들이 나옵니다. 즉, CNN 모델이 shape이 아닌 texture를 기반해 classification 한다는 주장입니다.
Gatys (2017) 논문에서는 shape 특징이 거의 없는 객체들도 잘 인식할 수 있다고 언급했습니다 (Thanks to texturised features.
Ballester (2016) 논문에서는 CNN 모델이 sketch한 객체들을 인지하는데 좋지 않은 성능을 보여주고 있다고 언급하고 있습니다. (예를 들어, 아래와 같은 이미지는 스케치로만 그려졌기 때문에 texture 정보가 없다고 할 수 있죠)
Gatys (2015) 논문에서는 texture와 같은 local 정보(=객체기준에서는 texture는 local 정보에 해당합니다) 만 가지고도 충분히 ImageNet 객체를 인식할 수 있다고 주장합니다. → texture representation, gram matrix와 같은 설명을 위해서는 "Texture synthesis using convolutional neural networks" 논문을 전반적으로 이해 해야합니다. 해당 논문은 style-transfer 분야에 중추적인 역할을 하는 논문인기 때문에 style-transfer 카테고리를 따로 만들어 올릴 때 자세히 설명하도록 하겠습니다 (정리된 내용은 있는데 다른 논문들 먼저 정리하고 빠르게 올리도록 할게요!)
Brendel (2019) 논문에서는 receptive field sizes에 제약을 걸어도 좋은 성능을 보인다고 합니다. 해당논문(아래 그림)을 보니 여기서 말하는 receptive fields size란 입력 이미지 크기를 의미하는 듯 했습니다. → 즉, texture 정보만 이용해도 높은 accuracy를 보여준다는 것을 말하고자 한듯 합니다.
결국, 세 번째 문단을 요약하자면 아래와 같습니다.
"기존에 주장한 것(두 번째 문단: shape기반의 CNN 분류)과 달리, CNN은 texture 기반으로 classification 한다. 그리고 이것을 texture hypothesis라 하겠다"
1-4) 네번째 문단
→ 앞서 주장한 대립되는 두 가설중에 어떤것이 맞는지 실험 and 해당 실험 결과가 주는 contribution
앞서 언급한 두 가지 가설 (Shape-base VS Texture base) 중에 어떤 가설이 맞는지 입증하는 건 딥러닝, human vision, neuroscience 분야에서 모두 중요한 일입니다.
이것을 입증하기 위해 사람과 CNN 모델들이 shape biase한지, texture biase 한지 psychophysical 실험을 통해 정성적으로 평가했습니다.
이러한 실험을 위해 style transfer 기술을 사용했습니다.
style transfer를 이용해 texture-shape cue conflict 이미지들을 생성하고, 해당 이미지를 이용해 정성적인 평가에 이용했습니다 (→자세한건 실험 부분에서 설명이 되겠죠?)
이러한 실험은 두 가지 main contribution이 있습니다.
changing biases: 하나는 texture bias의 CNN 모델들을 shape bias로 변경해준 것
discovering emrgent benefits of chanaged biases
shape bias가 가미된 CNN은 왜곡된 이미지들에 더 robust하게 작동된다는 것
classification과 object recognition tasks에 더 뛰어난 성능을 보여줬다는 점
"실험을 통해 shape bias하게 CNN을 training 시킬 수 있었으며, shape bias가 가미된 CNN 모델은 classification, object recognition 성능에 긍정적인 영향을 미쳤다"
2. Method
→ Method에서 앞서 언급한 실험들에 대해 ouline을 잡아 줄 예정 + Extensive details들은 Appendix를 참고 할 것 + 데이터, 코드들은 아래 github 사이트 참고
사람이 shape기반으로 판단하는지, texture 위주로 판단하는지 알아보기 위해서는 사람들을 대상으로 실험해야 합니다.
첫 번째 문단은 사람을 대상을 어떻게 실험을 진행했는지 설명해줍니다.
간단하게 설명하자면 사람과 AlexNet, GoogLeNet, VGG-16, ResNet-50 에게 다양한 사진들을 보여주고, 해당 사진이 무엇인지 classification하는 실험입니다. (→"2-2. dataset" 부분을 보면 더 자세히 이해하실 수 있습니다)
해당 문단만 읽으면 실험이 어떻게 진행 됐는지 모르고, "appendix A.1~A.4" 부분을 보시면 어떻게 Psychophysical experiments 가 진행됐는지 알 수 있습니다. → Appendix 내용까지 다 설명하면 너무 길어질 듯하여 생략했습니다.
2-2) Dataset sets
2-2-1) 첫 번째 문단
→ 이 실험이 6개의 실험으로 구성되어 있는데, 각각의 실험들은 개별적인 dataset을 기반으로 진행
texture bias인지 shape bias인지 테스트 하기 위해 6개의 main 실험들을 진행했습니다.
그 중 5개의 실험은 아래와 같습니다.
앞서 2-1에서 설명한 것처럼 AlexNet, GoogLeNet, VGG-16, ResNet-50, 사람에게 아래 다섯 종류(=5개의 실험)의 이미지들을 보여주고, 어떤 이미지인지 맞추도록 합니다.
2-2-2) 두 번째 문단
→ "shape VS texture"를 입증 할 6번째 실험 소개
6번째 실험을 진행하기 위한 데이터 셋을 생성해야 했습니다.
우선, 4개의 CNN 모델 (AlexNet, GoogLeNet, VGG, ResNet-50) 이 모두 올바르게 분류한 이미지들을 수집했습니다.
16개의 카테고리 마다 80개의 이미지를 선별해 총 1280개 데이터 셋을 구축했습니다.
그리고, 해당 이미지들(=1280개)에 cue conflict를 적용시키기 위해 style transfer를 적용했습니다.
만약, CNN 모델들이 cue conflict가 적용된 이미지들을 잘 못 분류한다면 "shape VS texture" 중에 어느 특징을 기반으로 학습하는지 알려줄 수 있게 됩니다. → 왜냐하면, cue conflict가 적용되기 이전 4개의 CNN 모델에서는 모두 올바르게 분류했기 때문
2-2-3) 세 번째 문단
→ 이 논문에서 주장하는 shape의 정의와 texture의 정의
"2-2-1"을 보면 silhouette 기반의 데이터를 볼 수 있습니다.
이 논문에서는 silhouette을 bounding contour라고 정의했는데 이것이 shape과는 조금 다르다고 합니다.
silhouette보다는 객체의 broader 부분을 shape으로 봐야한다고 언급하고 있습니다.
또한, 어떤 이미지가 texture 기반이라고 말할 때에는 'spatially stationary statistics' 특성을 갖고 있어야 한다고 주장합니다. → "Texture and art with deep neural networks"라는 논문에서 좀 더 수학적으로 texture에 대한 정의를 설명하고 있습니다.
All images with equal Nth-order joint pixel histograms are preattentively indistinguishable for human observers and therefore samples from the same texture.
Ajoint histogramis a multidimensionalhistogramcreated from a set of localpixelfeatures.
즉, 아래 그림처럼 pixel histogram이 유사하게 나온다면 texture가 같다고 정의합니다.
그런데 이 논문에서는 아래 그림처럼 여러 bottle(병)을 기반으로 texture를 변경했습니다. 아래 그림에서 두 번째 이미지를 보면 very local level은 local shape이 될 수 있기 때문에 non-stationary 특성을 갖는다고 할 수 있습니다.
예를 들어, 아래 두 번째 이미지에서 개별 bottle만 비교하면, 서로 texture가 다를 것입니다. 하지만, 여러 bottle을 기준으로 봤을 때는 서로 texture가 비슷할 수 있습니다.
2-3) Dataset sets
앞서 언급한 cue conflict 이미지를 만들기 위해 imageNet에 style transfer 기술을 적용시켜 SIN (Stylized-ImageNet) 데이터 셋을 구축했습니다.
이 논문에서는 style transfer 기술을 적용시키기 위해, AdaIN style transfer 모델을 사용했고, AdaIN을 학습시키기 위해 Kaggle에 있는 "painter by numers"라는 데이터 셋을 활용했습니다.
Training은 SIN 데이터 (made by AdaIN)로 하고, test는 cue conflict 데이터(maybe, made by existing iterative stylization)에서 함으로써, 특정 stylization 기법에 의해 결과가 바뀌지 않는 다는 것을 보여주기 위함
ImageNet에 기존 iterative stylization 기법을 적용하면 너무 오랜 시간이 걸리기 때문
3-1. Texture VS Shape bias in humans and ImageNet-Trained CNNs
→ Figure2, Figure4 기반으로 CNN과 사람이 shape 기반으로 classification 하는지, texture 기반으로 classifcation 하는지 보여줌
3-3-1) 첫 번째 문단
→ Figure2의 결과: Original, Greyscale, Silhouette, Edge 이미지 분류 결과 (CNN VS 사람)
Graysacle은 shape과 texture의 특징을 모두 갖고 있다고 주장합니다.
silhouette에서는 CNN이 사람보다 accuracy가 떨어집니다.
edge에서는 그 차이(=CNN이 사람보다 accuracy가 떨어지는 정도)가 더 심합니다.
이러한 결과는 사람이 texture 정보가 없는 이미지에 더 잘 대응(=잘 classification)하는 것을 보여줍니다.
특히 CNN은 domain shift에 취약한 것으로 드러났습니다.
CNN 입장에서는 학습한 데이터가 natural images입니다.
Texture가 없는 sketch 이미지는 training 때 사용되지 않은 이미지입니다.
즉, sketch 이미지를 inference 할 때는 완전히 다른 domain을 inference한다고 볼 수 있습니다.
3-3-1) 두 번째 문단
→ Figure4의 결과: Texture, Cue conflict 이미지 분류 결과 (CNN VS 사람)
Fig 2를 보면 Texture 베이스의 그림이 있습니다.
사람은 texture 베이스의 이미지만 보고서는 정확히 분류하지 못하고, CNN은 cue conflict (Shape 기반) 이미지를 잘 분류하지 못하는 것을 볼 수 있습니다.
수직라인들은 CNN 모델들과 사람의 16개 모든 카테고리 classification 평균 결과입니다.
좌측에 위치할 수록 shape을 기반으로 classification하고, 우측에 위치할수록 texture에 기반해서 classification 한다고 해석하고 있습니다.
""3-1" 실험 결과를 통해 CNN은 texture bias 하다고 할 수 있습니다"
3-2. Overcoming the texture bias of CNNs
→ Style transfer를 적용시킨 data를 기반으로 학습 시켰을 때, texture 기반의 CNN 모델을 shape 기반의 CNN 모델로 변경할 수 있는지를 보여주는 결과들
3-2-1) 첫 번째 문단
앞선 실험에서 CNN 모델은 texture bias하다고 했습니다.
그래서, 이 논문에서는 CNN이 많은 local texture features을 기반으로 classification 한다고 추론하고 있습니다.
"3.2" 실험에서는 texture bias 성향을 갖은 CNN 모델을 uninformative style( shape base인 듯 합니다) 성향으로 바꾸려는 시도를 했습니다.
이를 위해, ResNet-50을 베이스로 하고, SIN (Stylized-ImageNet) data set을 사용했습니다.
3-2-2) 두 번째 문단
→ Table 1에서 첫 번째 행에 해당하는 결과들 설명
SIN 데이터만으로 training, evaluation한 결과 top-5 79% accuracy를 달성했습니다.
IN 데이터만으로 training, evaluation한 결과 top-5 92.9% accuracy를 달성했습니다.
이러한 차이는 SIN 데이터로 학습된 CNN은 더이상 texture 정보가 predictive하지 않기 때문에 SIN으로만 학습하고 evaluation 하는 것이 더 어려운 task임을 보여줍니다.
You use predictive to describe something such as a test, science, or theory that is concerned with determining what will happen in the future.
SIN feature(including only shape feature)으로 학습된 CNN들은 ImageNet feature (texture feature + other features(=shape feature + etc..) 에도 잘 대응(부합)하지만, ImageNet features들로 학습된 CNN 모델들은 SIN feautre에 부합하지 않은 것으로 보입니다.
결과론적으로 해석하자면 ImageNet features들로 학습한 CNN 모델들은 texture bias하다고 할 수 있습니다.
3-2-3) 세 번째 문단
→ Table 1에서 2,3,4 번째 행에 해당하는 결과들 설명
BagNets을 이용해 local texture features (Fig1에서 (c)이미지) 만 training하고 evaluation 해봤습니다.
"1-3) 세 번째 문단"에서 receptive field에 대해 소개했습니다.
즉, local path image를 receptive field로 갖는 ResNet-50은 학습 시 전체 이미지에서 제한적인 부분만 학습하는 것과 같기 때문에 long-range spatial relationships를 고려하지 않은채 학습하게 됩니다.
이러한 네트워크(BagNet)는 ImageNet에는 높은 성능을 보이지만, SIN데이터에는 좋지 못한 성능을 보입니다.
쉽게 말해 아래 테이블의 결과를 다음과 같이 정리 할 수 있습니다.
IN→SIN (ResNet-50보다 BagNet에서 성능이 더 떨어지는 이유)
ImageNet으로 학습한 CNN 모델은 texture 정보외에 spatial relationship 같은 정보들도 학습하게 됩니다.
SIN 데이터에는 texture 정보가 없는데, 여기에 receptive field크기에 제약까지 걸어버리면 spatial relationship 같은 정보도 잃어버리기 때문에 성능이 더 안 좋아집니다.
결국, SIN data를 만든다는 건 local texture feature 정보도 없앤다는 것과 같기 때문에, local texture feature들이 중요한 요소가 되는 기존 CNN (on ImageNet) 모델들의 성능이 현저히 떨어지게 되는 것입니다.
3-2-4) 네 번째 문단
→ Figure 5 설명하는 문단
Figure 5를 보면, SIN data로 학습된 ResNet-50은 Figure 4와 비교했을 때, 좀 더 shape bias하게 변한 것을 확인할 수 있습니다.
3-3. Robustness and accuracy of shape-based representations
"3-3"에서는 3가지 실험을 진행 했습니다.
이 실험에서 중요한 부분은 SIN, IN data를 다 같이 학습시킨 모델의 성능이 더 좋아질 수 있는지 입니다.
첫 번째 실험은 Classification performance 관점입니다.
SIN+IN을 동시에 학습시킨 후, IN을 다시 fine-tuning 시킨 결과가 기존 IN으로만 학습시간 ResNet(=vanilla ResNet) 모델보다 좋습니다.
두 번째 실험은 Transfer Learning 관점입니다.
CNN 모델은 Object detection 모델의 backbone 역할을 하는데, SIN+IN으로 학습시킨 CNN을 Object detection의 backbone으로 사용하면 object detection 성능이 5%나 향상되는 것을 볼 수 있습니다.
그 이유는 object detection의 성능 지표인 mAP에는 bounding box가 얼마나 fit하게 잡히는지도 포함되는데, 보통 bounding box가 fit하게 잡으려면 객체의 윤곽(=shape) 부분을 잘 포착해야합니다.
그래서, shape feature도 잘 학습한 shape-ResNet 모델을 backbone으로 사용하면 object detection 성능이 큰 폭으로 향상되는 것이라고 주장합니다.
세 번째 실험은 Robustness against distortions 관점입니다.
사람들은 왜곡된 이미지를 classification 할 때 accuracy 결과에 편차가 있습니다. (by box plot)
CNN 모델들은 일정한 accuracy 결과를 보여주는데 (← 아마 모든 seed값을 동일하게 고정했다고 가정한 것이 아닌가 싶습니다), 특히 SIN 데이터로 학습한 CNN 모델은 다양한 noise or distortion에 robust하게 동작하는 것을 확인할 수 있습니다.
ImageNet-C 데이터들은 기존 ImageNet에 다양한 nosie를 섞어서 만든 dataset입니다.
SIN 데이터와 IN 데이터를 동시에 학습시킨 경우 ImageNet-C 데이터셋에서 더 좋은 성능을 보여줍니다. → 즉, noise에 더 robust하다고 할 수 있죠.
결국 SIN 데이터를 함께 학습시킨다는 건, CNN 입장에서 다양한 augmentation이 적용된 데이터들을 학습시키는 것이라고도 볼 수 있습니다.
아래 테이블을 봤을 때 주목할 부분은 SIN+IN을 학습시킨 후 IN 데이터로 fine-tuning 한 것보다, SIN+IN으로만 학습시킨 CNN 모델이 훨씬 더 noise에 robust하다는 것을 확인할 수 있습니다.
4. Conclusion
"Shape-based Representation can be beneficial for recognition tasks."
"Shape-based CNN is the better backbone for Object detection"
"Shape-based training is robust to distortion(noises)"
5. 개인적인 경험 및 생각
아무래도 의료 이미지를 CNN에 적용시킨적이 많아서 아래와 같은 경험 및 생각을 하게 됐습니다.
Super Resolution (SR) 을 전처리 작업으로 사용할 경우
SR을 이용하면 저화질을 고화질로 만들 수 있다.
그럼 texture가 좋아질 수 있고, SR을 통해 생성된 이미지들은 좀 더 textue feature를 갖고 있을 수 있다.
SR이 적용된 이미지를 사용한다면 texture가 정말 중요한 feature로 여겨지는 domain에서는 유용할 수 있다.
하지만, SR이 적용되기 전의 이미지 크기가 CNN의 크기인 224x224를 넘는다면 사용하는것이 무의미하다.
왜냐하면, SR을 적용해 224x224를 448x448로 만들어 준다고 해도, 다시 입력 이미지 크기에 맞게 224x224로 줄여줘야 하기 때문이다. → 즉, texture 변화가 없을 수 있다는 뜻이다.
하지만, 마지막 layer에 GAP (global Average Pooling)을 적절하게 이용해준다면 입력 이미지 크기를 굳이 축소시킬 필요가 없으므로, SR을 전처리 or data augmentation 기법으로 이용해볼 수 있다.
Medical imaging에 적용시킬 경우
의료 이미지에서 texture가 중요한 feature일 수 도 있기 때문에 함부로 SIN+IN 적용된 모델을 사용하는건 위험할 수 있습니다.
하지만, medical imaging에서도 noise 문제가 존재하기 때문에, SIN+IN (without fine-tuning IN data) 데이터로 학습시킨 모델을 이용해 transfer learning을 적용한다면 noise에 robust한 모델을 만들 수 도 있을거라 생각합니다.
모델링을 한다는 것은 정말 멋지고 대단한 일이지만, 지나친 CNN 모델링 연구 또한 문제가 될거라고 생각합니다.
1-1. 방대한 자원과 시간이 필요
CNN을 모델링 하는 것은 오랜 시간을 요구합니다.
즉, 다양한 모델들을 섭렵하기도 해야하고, 자신만의 창의적인 방법을 적용시키면서 독특한 모델을 만들어야 하기 때문이죠.
이러한 독창적인 CNN 모델을 만들었다고 끝이 아닙니다. 왜냐하면 방대한 ImageNet을 통해 해당 CNN 모델을 학습시키는 것도 오랜 시간이 걸리기 때문이죠.
추가적으로, 최적의 Hyper-parameter를 찾는 것도 고려해야 한다면, 모델링 연구는 개인이 하기에 시간/비용적으로 너무 부담이 되는 것도 사실입니다.
아카데믹(학계)에서는 이러한 연구를 할 수 있는 시간이 충분히 주어지겠지만, 산업현장 같은 곳에서는 빠르게 비지니스 모델을 출시해야 하므로 무작정 모델링 연구를 기다려 주는 것도 어렵습니다.
1-2. 다양한 Vision 모델들
2012년 AlexNet의 등장이후 이미지 classifiction, segmentation, detection과 같은 분야에서 대부분 CNN 기반 모델들이 적용되어 왔습니다.
학습 방법론에 대해 관심을 갖게 된것은 2019년부터인데, 그 이유는 ResNet이후 다양하게 나온 CNN 모델들을 사용해도 별반 차이가 나지 않았기 때문입니다. 해당 논문들에서는 ResNet 보다 훨씬 뛰어난 performance를 보여줬으나 실제로 transfer learning을 통해 다른 domain에 적용해봤을 때는 생각만큼 뛰어나 보이지 않았기 때문입니다 (물론 좋은 성능을 보인 모델도 있었으나 평균적으로 ResNet 모델과 차이가 나지 않은 경우가 많았습니다)
하지만 2020년 Transformer의 등장과, 2021년 MLP로만 구성된 모델이 기존 CNN 기반의 모델들의 성능을 뛰어넘는 모습을 보면서 학습 방법론에 관심갖길 잘했다는 생각을 했습니다.
또한, AutoML과 같은 기술이 도입되면서 우리가 적용시키려는 domain에 맞는 모델을 자동적으로 만들어주려는 연구가 진행되는 것을 보면서, 아래와 같은 생각을 했습니다.
"CNN 모델을 이해하는 것은 필수적이지만, 모델링을 연구하는건 연구자로써 수명이 그리 길지 않을 수도 있겠구나"
"차라리 모델에 치우친 연구를 하기보다는 여러 모델에 적용시켜볼 수 있는 학습 방법론에 대해서 연구하는것이 더 실용적이겠다"
2. 여러가지 딥러닝 학습방법론
위와 같은 문제를 않고 여러 딥러닝 학회 논문을 살펴봤습니다.
정말 다양한 학습방법론을 다룬 내용들이 많았습니다.
대충 내용을 정리하면 아래와 같습니다.
CNN을 독특하게 학습시키는 방법
Transfer learning 관점에서 CNN을 학습시키는 방법
Fine tuning을 적절하게 하는 방법
(b) Partial fine-tuning of pre-trained CNN. (c) Complete fine-tuning of pre-trained CNN
사실 위에서 CNN이라고 적시했지만 해당 방법론들은 MLP, Transformer 같은 모델에서도 충분히 적용 가능한 insight를 줄거라고 생각합니다.
과거 딥러닝 모델을 개발하는 것에만 몰두했다면, 최근에는 여러 기술들을 접목해 딥러닝 모델을 효과적으로 학습시키려는 노력을 더 많이 하는듯 보입니다. (물론 딥러닝 모델 개발을 게을리 해서도 안되겠죠)
이번 글에서는 Adversarial Attack이 무엇인지 간단히 설명하고 왜 이러한 분야들을 알고 있어야 하는지 설명해보겠습니다.
1. Adversarial Attack이란?
우선 adversarial attack이 무엇인지 간단히 알아보겠습니다.
딥러닝에서는 일반화 성능을 높이기 위해 여러 Data augmentation 기법을 적용해서 학습을 시키곤 합니다.
가끔 인간도 동물의 각도나 색이 다른 경우 정확히 구분하지 못하기 때문에, 딥러닝 역시 이러한 오류를 범하기 쉽습니다.
그래서, 하나의 클래스를 학습시키기 위해 다양한 각도로 data를 augmentation 시켜 학습시킵니다. (Augmentation 기법에는 각도 뿐만 아니라, 색을 변조시키는 등 다양한 기법들이 존재합니다)
그런데, 아래 그림을 한 번 보도록 하겠습니다. 우선 제일 왼쪽의 이미지와 제일 오른쪽의 이미지가 다르게 보이시나요? 사람들이 봤을 땐 아무리봐도 같은 판다로 보일 거에요. 실제로 왼쪽 이미지에 어떤 noise를 입힌 결과가 오른쪽 이미지라고 해도, 사람눈엔 그저 별반 다를게 없어보이죠.
하지만, 딥러닝 입장에서는 이러한 noise에 민감합니다.
그래서, 아래 그림을 보면 딥러닝이 예측한 왼쪽 이미지의 결과와 오른쪽 이미지의 결과는 전혀 다릅니다.
위 그림의 중간 위치에 있는 어떤 noise 같은 것을 입력 했을 때 전혀 결과가 다르게 나오게 하는 기법을 'Adversarial attack'이라고 합니다. 즉, 딥러닝 모델이 잘 못 예측하도록 공격을 하는 것이죠. (Adversarial attack에 대한 개념은 앞으로 게재될 글에서 설명하도록 하겠습니다)
그렇다면, 이러한 adversarial attack으로 인해 어떤 문제가 발생할 수 있을까요? 여러 답이 있을 수 있겠지만, 여기에서는 미국의 의료 시스템 관점에서 발생할 수 있는 문제들에 대해 알아보도록 하겠습니다.
2. Medical imaging에서의 adversarial attack 사례
아래 논문을 바탕으로 딥러닝 모델이 adversarial attack에 얼마나 취약한지 살펴 보도록 하겠습니다.
미국 병원은 의료소송으로 망하는 경우가 많다고 합니다. 그렇다면, adversarial attack으로 인해 병원이 타격을 받을 수 있는 시나리오를 설명해보겠습니다.
우선, 원격의료 시스템 기반에서 deep learning 모델이 병원에서 사용되고 있다고 가정해보겠습니다.
사용하는 도중에 누군가가 adversarial attack을 시도했고, 이로 인해 딥러닝이 잘 못 된 진단을 하게된다면 분명 의료 소송이 발생할 것입니다. 이런 경우 딥러닝 모델을 제공한 회사에서 보상을 해주어야 할까요? 병원에서 보상을 해주어야 할까요? 이 문제에 대해서 확실하게 답을 할 수는 없지만, 병원 측에서는 이미지 하락을 통한 경제적 타격을 피할 수는 없을 겁니다.
Adversarial attack이 법정에서 사기로 금방 판명 될 수 있다는 보장도 없고, 항상 사각지대가 있기 때문에 deep learning 제품 자체가 adversarial attack에 robustness 하게 만들지 않는 이상 병원에서는 항상 adversarial attack과 관련된 리스크를 안고 갈 수 밖에 없을 것 입니다.
4-2. 의료 사기 (Upcoding)
미국에서 보험 사기는 매해 'hundreds of billions of dollars (천억 달러 → 원화 환산: 110조)의 비용을 유발하고 있고, 2011년에는 $272 billion of dollars (원화 환산 → 300조) 의 비용이 발생했던 것으로 추정된다고 합니다.
의료보험 사기는 large institutions (조직)과 individual actors (ex: physician (전문의))이 주로 일으키는 데, 이들은 자신들의 수익을 증대시키기 위해 의료청구비용을 증가시킨다고 합니다.
미국의 의료는 민영화 시스템이기 때문에 병원에서 비용을 청구하기 때문에, 병원에서 upcoding 하는 경우도 발생합니다. 만약, 자체적으로 adversarial attack을 이용한다면 병의 중증도를 왜곡해 쉽게 upcoding을 할 수 도 있겠죠. (미국 의료시스템과 upcoding에 대한 설명은 아래 글을 참고해주세요!)