안녕하세요.

이번 글에서는 2D 이미지로 사용되는 대표적인 영상이미지인 X-ray와 CT에 대해서 알아보도록 하겠습니다.

 

먼저, X-ray, CT에 대해 간단히 알아본 후, 2D 영상 이미지에서 사용되는 전처리 기법에는 어떤 종류들이 있는지 알아보도록 하겠습니다.

 

아래 영상을 미리 한 번 보시면 글을 읽기 수월 하실 거에요!

 

(↓↓의료 이미지, X-ray, CT, MRI에 대한 간단한 설명)

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

 

※Medical Imaging이라는 수업에서는 이러한 기기들의 물리적인 작동 방식에 대해서 설명하고 있으나, 여기에서는 단순히 기계의 작동원리나 어떻게 이미지들이 생성되는지만 간단히 알아보도록 하겠습니다.

 

 

 

 

1. X-ray 이미지 (Feat. Digital detector)

X-ray를 이용해 병변을 분류하는 과정은 아래와 같습니다.

 

1) X-ray generator에서 방사선 발사

2) 발사된 방사선이 Object(사람 또는 다른 객체)에 투과

 

이미지 출처: https://en.wikipedia.org/wiki/X-ray_detector

 

3) 사람 내부 인체 조직에 따라 X-ray detector에 있는 image receptor에 투과되는 방서선 양이 다름

 

이미지 출처: https://slideplayer.com/slide/7432411/

Symptom Color
Black Air
Dark gray Fat
Light gray Soft tissues
ex) Water
White Calcification
ex) bone
Whiter Metal

 

 

 

 

4)  투과된 방사선량에 따른 병변 분류

  • 예를 들어, X-ray를 기반으로 폐렴(pneumonia)을 분류한다고 해보겠습니다.
  • 보통 폐렴같은 경우는 X-ray 장비로도 진단을 합니다.
  • 폐렴이 의심되는 환자를 촬영할 땐, image Receptor를 가슴 쪽에 두고 사진을 찍게 되죠. 보통 이러한 사진을 Chest-Xray라고 합니다.
  • 폐는 사람의 호흡과 관련된 기관입니다. 폐를 구성하는 것 중하나는 폐포(alveoli)인데, 여기에서 혈액과 가스의 교환이 이루어집니다. 

이미지 출처: https://kr.freepik.com/premium-vector/human-respiratory-system-lungs-alveoli-medical-diagram-inside-larynx-nasal-throttle-anatomy-breath-pneumonia-smoke-anatomy-illustration-healthcare-and-medicine-infographic_7289256.htm

 

  • 폐렴(Pneumonia)은 공기 중에 떠다니는 있는 세균, 곰팡이 및 바이러스가 체내에 흡입되고 폐포(pulmonary alveoli)에 안착한 후 염증을 일으키면서 발생합니다. 이 과정을 통해 다양한 호흡기 질환으로 합병증이 나타나고 폐 전체에 염증을 일으켜 심각한 결과를 초래하게 됩니다.

 

이미지 출처: https://www.shutterstock.com/ko/image-vector/pneumonia-concept-background-realistic-illustration-vector-1204624771

 

  • 정상적인 폐포의 내부는 기체로 이뤄진 상태이지만 폐렴으로 인해 손상된 폐포에는 염증이 있어 액체 물질로 가득 차 있습니다.
  • 본래 폐포는 공기(기체) 상태인데, 폐렴으로 인해 액체가 폐포에 가득해지면 X-ray 촬영 시, 아래와 같이 X-ray 이미지가 나오게 됩니다. (왼쪽 이미지: 정상(normal), 오른쪽 이미지: 폐렴(pneumonia))

이미지 출처: https://www.bmj.com/content/370/bmj.m2426

 

 

[Q. X-ray 이미지에서 AP, PA는 무엇을 의미하나요?]

Chest X-ray (CXR)를 찍을 때 찍는 방향에 따라 AP(Anterior-Posterior)PA(Posterior-Anterior)로 나눌 수 있습니다.

이미지 출처: https://www.youtube.com/watch?v=iG0gKrXLnpU

Chest X-ray의 경우 찍는 방향에 따라 나오는 X-ray 이미지 상태가 다릅니다.

보통, AP 방식으로 찍기보다 PA 방식을 찍는데 그 이유는 아래와 같습니다. 

  • AP view: 심장이 확대되어 보이며, 견갑골에 의해 폐야가 많이 가려지며, 횡경(Diaphragm)막이 높이 올라가 있어 폐가 좁게 나타남
  • 따라서 COVID-19 선별진료소와 같이 Chest AP에서 얻은 CXR 이미지는 폐 병변을 보기에는 사실 썩 좋지 않은 경우가 꽤 있다. (Dataset 수집할 때 이러한 부분도 고려하면 좋을 듯)

이미지 출처: https://www.slideshare.net/drvikrampatil/approach-to-chest-xray-and-interpretation

  • 위의 그림을 보면 같은 환자인데 Chest AP에서는 심장 size도 크고 그리고 견갑골에 의해서 폐야도 많이 가려지는 형태고 그 다음에 diaphragm도 많이 올라와 있기 때문에 PA와 비교했을 때 상당히 폐야가 좁고, 굉장히 내부의 vessel도 굉장히 engorgement(폐에서의 염증성 충혈)되어 보이는 경우가 많습니다.
  • 이러한 경우, GGO 병변을 딱히 구분할 수 없거나 잘 안보이는 경우가 생길 수 도 있습니다. → 참고로 GGO는 COVID-19에서 발견되는 주요 소견 중 하나입니다.

 

  • 또한, Chest X-ray는 누워서 찍기보단 서서 찍는 것이 좋습니다. 

이미지 출처: https://slideplayer.com/slide/7432411/

 

  • 아래의 환자는 effusion이 있던 환자인데, chest AP 를 누워서 찍으니까 effusion이 전부 뒤로 깔려서 폐 병변을 보기가 상당히 어렵게 됐습니다. 가끔 chest X-ray 데이터셋을 보면 저런 경우를 종종 볼 수 있는데 이런 경우 effusion이 있는 환자가 누워서 찍은건 아닌지 고려한 후 데이터셋을 제거하는 것이 필요할 듯 보입니다.

 

 

(↓↓↓AP, PA에 대한 자세한 설명은 아래 사이트를 참고해주세요↓↓↓)

https://www.radiologymasterclass.co.uk/tutorials/chest/chest_quality/chest_xray_quality_projection

 

Chest X-ray Quality - Projection

Key points Posterior-Anterior (PA) is the standard projectionPA projection is not always possibleBoth PA and AP views are viewed as if looking at the patient from the frontPA views are of higher quality and more accurately assess heart size than AP imagesI

www.radiologymasterclass.co.uk

 

 

 

 

2. CT 이미지

(↓↓CT 가 탄생한 이유↓)

https://youtu.be/xf1eZAp7Mq8

 

X-ray 이미지는 2D로 볼 수 있는 반면, CT는 X-ray generator(source)가 여러 측면에서 촬영하기 때문에 2D 이미지와, 회전을 통해 얻은 이미지들을 이용 (by interpolation ← 몰라도 될 것 같습니다 ㅎ;;) 해 3D 이미지를 얻기도 합니다.  

 

이미지 출처: https://en.wikipedia.org/wiki/CT_scan

 

아래 gif 이미지에서 보이는바와 같이 CT를 촬영하게 되면 360도 촬영을 하게 됩니다.

이미지 출처: https://gifs.com/gif/history-of-computerized-tomography-ct-scanner-vVe5bq

 

위와 같이 촬영을 하면 아래와 같은 축으로 여러 이미지가 나올 수 있죠.

이미지 출처: https://www.pinterest.co.kr/pin/114490015511169070/

 

위의 이미지에 해당하는 축(axis) 마다 다른 형태의 CT 이미지를 출력하게 됩니다.

이미지 출처: https://www.mathworks.com/matlabcentral/mlc-downloads/downloads/submissions/53745/versions/52/previews/html/examples.html

 

COVID-19 데이터 셋을 보면 대부분 Trans-axial(=Transverse)에 해당 하는 축의 이미지들로 구성되어 있습니다.

이미지 출처: https://www.kaggle.com/kmader/siim-medical-images

 

 

폐 위치 관련한 용어를 잠시 보여드리면 아래와 같습니다.

이미지 출처: https://www.researchgate.net/figure/Schema-of-central-and-peripheral-locations-This-diagram-showed-definition-of-central_fig2_279943115

 

이미지 출처: https://epos.myesr.org/posterimage/esr/ecr2010/104360/mediagallery/298132

 

 

(↓↓↓CT 이미지 읽는 장면 아래 영상에서 3:29~3:38 참고↓↓↓)

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

 

 

아래 사진을보면 정상인, 폐렴, COVID-19 의 폐 CT 사진입니다.

아래 사진을 기반으로 하면 다음과 같이 해부학적으로 병변을 분류할 수 있겠죠.

  • Normal: 깨끗함
  • Pneumonia: 광범위하게 GGO(Ground Glass Opacity)가 퍼져있음
  • COVID-19: peripheral부분에 GGO가 위치하기도 하며, 진행단계에 따라 GGO 정도가 심해지는 consolidation 현상도 볼 수 있습니다.

※ 물론 이것은 아래 사진만 살펴본 예입니다. 실제로 폐렴(pneumonia)은 그 종류가 다양하기 때문에, CT 상에서 보여지는 특징도 굉장히 다양합니다.

이미치 출처: https://www.techscience.com/cmc/v68n1/41834/html

 

 

 

 

3. X-ray, CT 이미지 전처리하기 (Feat. 히스토그램)

전통적으로 사용되는 X-ray 이미지 같은 경우는 앞서 설명한 것처럼 image receptor에 투과된 방사선 양을 토대로 보여지게 됩니다.

 

예전에는 이미지를 필름에 찍어내는 방식을 이용한 X-Ray 검사를 많이 진행했지만,

몇년 전부터는 해당 방사선 양을 직접 전송해 영상화하는 Digital Radiography (DR)을 많이 사용하고 있다고 합니다.

 

 

이미지 출처: http://www.sprawls.org/resources/DIGRAD/module.htm

 

좀 더 구체적으로 설명하자면 아래와 같습니다.

  • receptor는 N×N grid 형태로 있습니다.
  • 각각의 위치는 하나의 pixel이 됩니다.
  • receptor에 exposure된 방사선 양은 analog/digital converter에 의해 픽셀 값을 갖는 digtal image로 변환됩니다.  

이미지 출처: http://www.sprawls.org/resources/DIGRAD/module.htm

 

 

1) Histogram analysis

히스토그램의 여러 어원 중 하나는

'똑바로 선 것'이라는 뜻을 가진 histos에 '그림'을 뜻하는 gram이 합쳐진 합성어라고 합니다.

풀어설명하면 '똑바로 선 막대 그림'이라는 뜻으로 사용되기도 합니다.

 

수학에서 히스토그램은 표로 되어 있는 도수 분포표를 정보 그림으로 나타낸 것입니다.

그렇다면 이미지에서 히스토그램은 무엇을 의미할까요?

 

쉽게 말하자면 이미지 상에 나타난 색상 값들을 도수분포표로 나타낸 것이라고 볼 수 있습니다.

예를 들어, 흑백 이미지에 대한 히스토그램은 아래와 같이 표현 할 수 있습니다.

  • (a) 이미지는 흑백 이기 때문에 X축은 pixel 값 범위 "0~255"로 표현할 수 있습니다.
  • 해당 픽셀 값들이 얼마나 많은지 도수분포표를 통해 나타내면 그것이 이미지 히스토그램입니다.

이미지 출처: https://www.semanticscholar.org/paper/Triad-Histogram-to-Enhance-Chest-X-Ray-Image-Senthilkumar/74557cf53787b0794fb3b6c3207010179abe81d4/figure/0

 

2) X-ray 이미지 전처리(preprocessing) 기법들

2-1) HEQ (Histogram EQualization)

몇몇 “Original(원본)" 이미지는 contrast 가 매우 떨어지는 경우가 있습니다. 

즉, 이미지 픽셀이 0~255에 고르게 퍼져있는 게 아니라, 일부분에 몰려있다는 것을 확인할 수 있죠.

아래 그림을 기준으로 설명하면, "Original" 이미지(→(a) 이미지)에 "Histogram Equalization“ 기법을 적용시킬(→(c) 이미지) 때, 이미지의 contrast 가 증가한 것을 확인할 수 있습니다.

 

"Histogram equalization (HEQ) is a digital image processing technique used for contrast enhancement across a number of modalities in radiology."

HEQ에 대한 수식은 아래와 같습니다.

수식에 대한 직관적인 설명은 여기링크를 참고해주세요! 

 

 

(↓↓↓HEQ Open CV 함수↓↓↓)

https://docs.opencv.org/3.4/d4/d1b/tutorial_histogram_equalization.html

 

OpenCV: Histogram Equalization

Prev Tutorial: Affine Transformations Next Tutorial: Histogram Calculation Goal In this tutorial you will learn: What an image histogram is and why it is useful To equalize histograms of images by using the OpenCV function cv::equalizeHist Theory What is a

docs.opencv.org

 

(↓↓↓HEQ pytorch 함수↓↓↓)

https://pytorch.org/vision/stable/transforms.html

 

torchvision.transforms — Torchvision master documentation

torchvision.transforms Transforms are common image transformations. They can be chained together using Compose. Additionally, there is the torchvision.transforms.functional module. Functional transforms give fine-grained control over the transformations. T

pytorch.org

 

 

2-2) AHE (Adaptive Histogram Equalization)

2-3) N-CLAHE (Contrast Limited Adaptive Histogram Equalization)

 

AHE와 N-CLAHE에 대한 설명은 아래 블로그를 참고하시는게 도움이 되실 것 같아, 따로 설명은 하지 않고 관련 링크를 걸어두도록 하겠습니다.

 

https://3months.tistory.com/407

 

Adaptive Histogram Equalization 이란 무엇인가?

Adaptive Histogram Equalization 이란 무엇인가? Adaptive Histogram Equalization (AHE) 이란 이미지 전처리 기법으로 이미지의 contrast 를 늘리는 방법이다. Histogram Equalization (HE) 방법을 조금 더 개..

3months.tistory.com

 

(↓↓↓ Open CV에서 N-CLAHE 사용 예제↓↓↓)

https://docs.opencv.org/master/d5/daf/tutorial_py_histogram_equalization.html

 

OpenCV: Histograms - 2: Histogram Equalization

Goal In this section, We will learn the concepts of histogram equalization and use it to improve the contrast of our images. Theory Consider an image whose pixel values are confined to some specific range of values only. For eg, brighter image will have al

docs.opencv.org

 

 

이미지 출처: https://www.semanticscholar.org/paper/Triad-Histogram-to-Enhance-Chest-X-Ray-Image-Senthilkumar/74557cf53787b0794fb3b6c3207010179abe81d4

 

 

위의 전처리 방식 외에 Contrast, brightness 등 여러 다른 방식들도 같이 사용될 수 있다는 점 알아두세요!

CT 이미지 또한 X-ray 선을 이용한 것이 때문에 X-ray와 비슷한 전처리 기법이 사용된다는 것을 알아두시면 좋을 것 같습니다~

 

 

 

[전처리를 배우고 딥러닝에 적용해본 후기]

위와 같은 전처리 기법을 딥러닝에 적용했을 때, 유의미하게 CNN 성능이 개선되는 것을 확인할 수 있었습니다.

 

다음 글에서 설명하겠지만, 전처리한 이미지를 segmentation 같은 모델에 적용했을 때 눈에 띄게 향상되는 모습들을 빈번하게 살펴볼 수 있었습니다. 

 

딥러닝 모델 자체에 대한 연구도 중요하지만, 의료 이미지를 다루는 영역에서는 전처리 영역에 대한 테크닉을 적절히 구사할 줄 알아야 한다고 생각했습니다. 즉, 전처리를 적절하게 구사해야 딥러닝 모델의 성능향상을 이끌 수 있을거라 생각합니다.

 

(↓↓↓아래 글에 제가 적용했던 사례들이 있으니 확인해보셔도 좋을 것 같습니다↓↓↓)

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

 

 

 

지금까지 간단하게 X-ray, CT 이미지들과 관련 전처리 기법들을 알아봤습니다.

다음 글에서는 MRI, PET, 초음파, 내시경에서 얻어지는 medical imaging들을 알아보도록 하겠습니다~

 

안녕하세요.

이전 글에서는 COVID-19 관련 기본적인 전처리 기법들에 대해서 알아봤습니다.

 

이번 글에서는 제가 개인적으로 필요하다고 생각했던 전처리 기법에 대해 설명하려고 합니다. 

 

참고로 첨부된 이미지들은 Kaggle에서 제공하는 public dataset 입니다

 

 

1. 딥러닝을 위한 X-ray, CT 데이터 정리 필요성

1-1. X-ray

  • 먼저 X-ray 사진들을 보면 대부분 오른쪽 상단 또는 왼쪽 상단에 text 글씨들이 써져 있는 것을 확인할 수 있습니다.
  • 또한, X-ray 촬영시 부착되는 tube들도 보입니다.
  • 이러한 요소들은 사실 artifact에 해당하기 때문에 CNN 모델을 제대로 training 또는 evaluation 하는데 방해가 될 수 있습니다. (데이터가 적다면 해당 artifact가 중요한 특징으로 학습 될 수 도 있기 때문이죠)

  • 실제로 COVID-19을 분류할 때, 어떤 특징을 기반으로 분류하는지 grad-CAM을 통해 알아보면 엉뚱한 artifact를 기반으로 잡는 경우도 볼 수 있습니다. (물론 논문들에 나온 사진들은 보면 대부분 정확히 특징들을 잡아낸 사진들을 figure로 사용하는데, 실제 여러 이미지들을 grad-cam에 적용해보면 아닌 겨우도 많습니다) 

이미지 출처: https://peerj.com/articles/cs-551/
이미지 출처: https://www.medrxiv.org/content/10.1101/2021.02.06.21251271v1.full

 

  • 그런데, 경험상 아이러니 한 부분은 이와 같이 잘 못 특징을 기반으로 분류한다고 하더라도, 실제로는 분류정확도가 꽤 높게 나온다는 것 입니다.
  • 그렇다면, artifact 같은건 상관하지 않고 딥러닝을 그냥 사용하면 될까요? 여기서 한 번 생각해봐야 할 부분이 있습니다.

 

"딥러닝이 올바른 결과를 도출했다고 하더라도 결과에 대한 근거가 잘 못됐을 때,

우리는 딥러닝을 신뢰한다고 할 수 있는가?"

 

"과정이 올바르지 않은데 결과를 신뢰할 수 있는가?"

 

"우리는 딥러닝을 추론과정이 필요없는 주술 같은 존재로 인식해야 하는가?"

 

 

  • 물론 데이터가 많다면 학습과정에서 해당 artifact 가 중요한 특징이 아니라고 학습하겠지만, 제 생각에는 근본적으로 이러한 부분들은 최대한 제거를 해주고 딥러닝 모델을 적용 해야 하지 않나 싶습니다.
  • 예를 들면, 적어도 아래와 같이 lung segmentation을 한 영역에서만 evaluation이 진행되야 하지 않나 싶습니다.

 

이미지 출처: https://www.researchgate.net/figure/Example-lung-segmentations-for-MC-CXRs-Note-the-over-segmentation-in-the-apices-The-CXR_fig6_257599582

 

 

1-2. CT

(↓↓↓CT 및 CT 이미지 배경지식 참고↓↓↓)

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

 

2-1. 2D 영상의료(medical imaging) 이미지란? (Feat. X-ray, CT, 전처리)

안녕하세요. 이번 글에서는 2D 이미지로 사용되는 대표적인 영상이미지인 X-ray와 CT에 대해서 알아보도록 하겠습니다. 먼저, X-ray, CT에 대해 간단히 알아본 후, 2D 영상 이미지에서 사용되는 전처

89douner.tistory.com

 

Chest-CT 경우에는 아래 segmentation 된 부분을 제외한 모든 부위가 artifact라고 보시면 됩니다. 다른 말로하면, 폐(lung) 영역이 아니기 때문에 관심영역 (RoI: Region of Interest)이 아니라고 할 수 있죠.

이미지 출처: https://www.kaggle.com/andrewmvd/covid19-ct-scans

 

Chest-CT의 경우는 Chest X-ray보다 상대적으로 특징 위치를 잘 찾아내지만,

사실 RoI를 제외 한 부분들은 학습될 필요가 없지 않나 싶습니다.

 

물론 CNN 학습을 하면, 해당 모델이 RoI 아닌 영역은 중요 특징이 아니라다라고 학습할 수 있겠죠.

하지만, COVID-19 같이 신종바이러스 케이스인 경우는 데이터 수가 많지 않기 때문에,

만약 COVID-19 이미지들 중에서 우연히 RoI 아닌 영역에서 공통된 artifact들 존재했다면, 

해당 artifact를 중요한 feature라고 학습할 여지가 있습니다.

 

그래서 CXR(Chest-XRay, CT) 등 사실 RoI가 아닌 부위를 training시키고, evaluation 하는 것보다

RoI에 제한적으로 training 및 evaluation을 적용시키는게 합리적인 선택이 아닌가 싶습니다. 

 

개인적으로 "COVID-19 Infected Lung Computed Tomography Segmentation and Supervised Classification Approach"라는 논문에서 제시한 방식의 segmentation 전처리 방식이 COVID-19 진단을 위한 전처리로써 reasonable 하지 않나 싶습니다.

 

 

https://www.techscience.com/cmc/v68n1/41834

(↓↓↓ 위 이미지에 대한 논문↓↓↓)

https://www.techscience.com/cmc/v68n1/41834

 

COVID-19 Infected Lung Computed Tomography Segmentation and Supervised Classification Approach

COVID-19 Infected Lung Computed Tomography Segmentation and Supervised Classification Approach Aqib Ali1,2, Wali Khan Mashwani3, Samreen Naeem2, Muhammad Irfan Uddin4, Wiyada Kumam5, Poom Kumam6,7,*, Hussam Alrabaiah8,9, Farrukh Jamal10, Christophe Chesnea

www.techscience.com

 

 

2. 딥러닝을 이용한 X-ray lung detection and segmentation

 

위와 같은 생각으로 X-ray 데이터에 lung segmentation을 적용해 봤습니다.

 

2-1. Lung detection

먼저, segmentation을 적용하는 대신, detection을 먼저 한 후, 학습을 시키면 어떻게 될지 궁금했습니다.

 

예를 들어 아래와 같이 lung 부분만 detection 해주면 최대한 artifact들을 제거할 수 있을거라 판단했습니다.

 

 

우선 detection을 위한 모델로 YOLO V4를 이용했습니다.

(예전에 치매관련 연구를 했을 때 여러 모델 (Google에서 제공하는 SSD, Faster RCNN 등 + DarkNet 기반 YOLO v2모델) 을 사용해봤는데, 성능이 비슷했습니다. 그래서, 우선 빠르게 테스트 할 수 있는 YOLO V4를 적용해서 학습시켜봤습니다)

 

데이터 셋은 당시 팀원끼리 라벨링을 했습니다.

당시, 얼마큼의 학습 데이터가 필요한지 알아보고 싶어 다양한 학습데이터 수를 구성해서 테스트 해봤습니다.  

 

 

 

아래 그림은, 100개의 데이터로 트레이닝 시킨 모델로 lung detection을 적용시켜 artifact를 제거시킨 이미지 데이터들을 보여줍니다.

 

 

이러한 데이터들(for training dataset, validation dataset)을 기반으로 CNN 분류 (Normal VS Pneumonia VS COVID-19) 를 시도해봤습니다.

 

결과적인 부분을 말씀드리자면, Normal, Pneumonia에서는 분류결과가 큰 차이가 나지 않는데, 오히려 데이터 갯수가 적은 COVID-19 분류 결과가 눈에 띄게 좋게 나왔습니다. 데이터 수가 적으면 적을 수록 안좋아지는게 심해졌는데, 이것을 보고 detection을 통해 전처리 된 이미지는 학습시 overfitting을 유발 할 수 도 있겠다라고 잠정결론을 내렸습니다.

 

(segmentation 전처리된 데이터 셋만으로 학습시킬 때도 위와 같은 현상을 확인 할 수 있었습니다)

 

 

2-2. Lung segmentation

위와 같이 CNN 결과가 좋지 않게 나왔지만, 그럼에도 불구하고 추후연구에서 lung segmentation이 반드시 쓰일거라고 판단했습니다 (Segmenation된 이미지를 기반으로 다른 딥러닝 분류기법들을 사용해볼 수 있으니까요. 분류가 아니더라도 특징 위치를 정확히 찾아주기 위해서는 lung segmentation 기법이 필수적이라 생각하고 있습니다.)

 

그래서, 앞서 적용했던 detection 모델을 잘 이용하면 segmentation 성능은 높여줄 수 있지 않을까? 생각했습니다.

 

예를 들어, 그냥 segmentation 모델을 CXR 데이터에 적용시키는 것보다, 아래와 같이 object detection 모델을 이용해 crop 한 후, 해당 부위만을 segmentation 하는 것이 더 좋은 성능을 이끌어 낼거라 판단했습니다.

 

 

우선 segmentation을 위한 모델 후보군을 아래와 같이 선정했고 테스트해본 결과,

Unet+Varational code 모델이 더 좋았어서, 해당 모델을 사용하기로 했습니다.

 

Unet+Varational code 모델 논문 제목 → "Lung segmentation from chest X-rays using variational data imputation"

이미지 출처: https://deepai.org/publication/lung-segmentation-from-chest-x-rays-using-variational-data-imputation

 

아래 그림에서 왼쪽 사진을 보면 실제 COVID-19 데이터로 주어진 원본 이미지 입니다. (실제 public dataset들을 보니까 "이런 것도 데이터로 쓰나..."싶은 것들이 엄청 많긴 하더라구요;;;)

 

결과만 보셔도 원본이미지에 segmentation을 적용시킨 것보다 detection 전처리를 거친 데이터셋에 segmentation을 적용시키는 것이 훨씬 좋았다는걸 볼 수 있었습니다.

 

 

그외, detection으로 전처리된 이미지를 기반으로 추가실험을 진행했는데요.

해당 데이터에 기존 X-ray 전처리 기법을 적용시키면 segmentation 성능이 더 좋아진다는걸 확인할 수 있었습니다.

 

 

이러한 과정을 통해 들었던 생각은 다음과 같습니다.

  • Segmentation 모델을 자체개발하는 것도 의미가 있습니다. 사실, 학계에서는 독창적이고 이론이 탄탄한 연구가 굉장히 중요하니까요.
  • 하지만, segmentation, CNN 모델 또는 다른 모든 분야의 연구영역을 들여다보면, 베이스가 되는 모델이 나오고 난 후 진행되는 모델링 연구들에서 급격한 성능 향상을 기대하는 것이 힘든 경우가 많습니다 (물론 그렇다고 모델링 연구를 게을리 하자는건 아닙니다)
  • 산업현장에서는 학계의 potential을 믿고 투자를 하지만, 산업현장에서는 즉시 모델 성능을 급격하게 향상시킬 다양한 방법들이 필요한 경우가 많습니다.
  • 그렇기 때문에 딥러닝 학계에서도 다양한 전처리 관련 연구를 동시에 진행하면, 산업계로부터 좋은 반응을 얻지 않을까 라는 생각도 해봤습니다. 

 

 

 

지금까지 딥러닝 모델을 기반으로 한 CXR 전처리 기법들에 대해서 알아봤습니다.

다음 글에서는 본격적으로 COVID-19 연구를 위해 어떤 기법들이 적용됐는지 말씀드리도록 하겠습니다.

COVID-19에 적용한 기본적인 전처리들은 아래 글에서 언급한

Contrast, Brightness, N-CLAHE 등을 사용했습니다.

 

해당 내용은 아래 글을 참고해주세요!

 

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

 

2-1. 2D 영상의료(medical imaging) 이미지란? (Feat. X-ray, CT, 전처리)

안녕하세요. 이번 글에서는 2D 이미지로 사용되는 대표적인 영상이미지인 X-ray와 CT에 대해서 알아보도록 하겠습니다. 먼저, X-ray, CT에 대해 간단히 알아본 후, 2D 영상 이미지에서 사용되는 전처

89douner.tistory.com

 

안녕하세요

지난글에 이어 이번에도 의료 인공지능에서 사용하는 대표적인 지표들에 대해 소개하려고 합니다.

 

(↓↓↓지난 글 확인↓↓↓)

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

 

1. 의료 인공지능에서 사용하는 대표적인 지표들 (1) - TP, FP, TN, FN, and Confusion matrix

안녕하세요 이번에는 의료 인공지능에서 사용하는 대표적인 지표들에 대해서 소개하려고 합니다. 사실 머신러닝을 공부하신 분들이나, 의학통계를 공부하신 분들은 다들 알고 있을 개념이지만

89douner.tistory.com

 

이미지 출처:  https://www.thelancet.com/journals/landig/article/PIIS2589-7500(20)30199-0/fulltext

 

이전 글에서 설명했던 예시를 기반으로 글을 작성하도록 하겠습니다. 예시를 요약하면 아래와 같습니다.

  • COVID-19를 분류하는 딥러닝 모델
  • Positive class: COVID-19
  • Negative classes: Pneumonia, Normal

 

※ 이전에 작성해둔 PPT로 설명하는게 좋다고 판단하여, 해당 PPT 슬라이드를 이미지로 올렸습니다.

 

 

1. Specificity = Selectivity = TNR(True Negative Rate))

Specificity 지표가 낮다는건 TN에 비해 FP 비율이 높다는 것을 의미합니다.

FP가 높다는 건 실제 음성환자를 양성이라고 오진하는 경우가 많다는 것인데,

이러한 비율이 높다면 환자가 불필요한 비용을 지불한 사례가 많았다고 볼 수 있습니다.

이러한 문제가 생긴다면 의료소송이 많아질 수 도 있겠네요.

 

만약 아래 논문에서 나온 specificity 값이 좋은 수치라고 가정해보겠습니다. 

그렇다면 이 논문에서 제시한 딥러닝 모델을 하용해야 할까요?

 

결과부터 말씀드리면, 아직까진 섣불리 사용하긴 어렵습니다.

 

왜 일까요? 

예를 들어 보겠습니다.

  • 암을 진단하는 병원의 기계가 너무 구식이면 최신 기계에 비해 다양한 암을 발견해내기 힘듭니다.
  • A라는 병원이 정말 오래된 구식 기계를 사용한다고 가정해 보겠습니다.
  • 해당 병원의 경우 진료를 받으로 온 사람 대부분을 음성이라고 판단할 것 입니다.
  • 즉, 음성(=Negative)이라고 판단 할 확률이 높기 때문에 FP는 줄어들게 되겠죠. 
  • 극단적인 예를 들어, 구식 기계가 모두 음성이라고 판정 했다고 한다면 FP 0이 됩니다. 왜냐하면, 양성(Positive)으로 진단한 case가 없기 때문이죠. 

 

 

 

2. Sensitivity = Recall = TPR(True Positive Rate))

감염관련 질병을 다룰 때는 sensitivity가 굉장히 중요한 지표가 될 수 있습니다.

현재 COVID-19을 진단하는 RT-PCR 진단방식을 기준으로 왜 sensitivity가 중요한 지표가 되는지 설명해보도록 하겠습니다.

  1. RT-PCR의 문제점을 지적하는 부분중 하나는 낮은 sensitivity 성능 지표입니다.
  2. Sensitivity(=TP/(TP+FN))가 낮다는 것은 FN(False Negative)가 높다는 것을 의미합니다.
  3. False Negative가 의미하는 바는 실제 COVID-19 환자에게 음성이라고 (=COVID-19이 아니라고) 진단한 케이스인데, 감염학에 있어서 FN이 높다는 것은 굉장한 문제가 됩니다.
  4. 왜냐하면, 실제 COVID-19 환자가 안심하고 여러 사람을 접촉하면서 바이러스를 전파시킬 확률이 매우 높기 때문이죠. 
  5. RT-PCR에서 대상을 FN으로 판별하는 경우는 아래와 같습니다.
    • 이전에 음성으로 반단했지만 반복검사 끝에 양성으로 바뀐 경우

 

만약 아래 논문에서 나온 specificity 값이 준수하다고 해보겠습니다. 

그렇다면 sensitivity 지표를 준수하게 기록한 딥러닝 모델을 사용하면 될까요?

결과부터 말씀드리면, 이 모델 역시 섣불리 사용하긴 어렵습니다.

 

왜 일까요? 

예를 들어 보겠습니다.

  • 암환자를 진단할 때, 성급하거나 겁이 많은 의사는 아주 조금의 징후만 보여도 암인 것 같다고 할 것 입니다.
  • 즉, 양성이라고 판단 할 확률이 높기 때문에 FN은 줄어들게 되겠죠. 
  • 극단적인 예를 들어, 성급한 의사가 모두 양성이라고 판정 했다고 한다면 FN 0이 됩니다. 왜냐하면, 음성(Negative)으로 진단한 case가 없기 때문이죠. 

 

  • 이런 경우, TPR은 1에 가까워지지만 FNR은 반대로 매우 낮아집니다.
  • 음성인 사람도 다 암이라고 하니까 음성으로 진단한 case가 없어지기 때문이죠.

 

 

3. Fall-out = FPR(False Positive Rate)

FPR 지표 역시 예를 들어 설명해 보겠습니다.

  • 암환자를 진단할 때, 성급하거나 겁이 많은 의사는 아주 조금의 징후만 보여도 암인 것 같다고 할 것 입니다.
  • 즉, 양성이라고 판단 할 확률이 높기 때문에 TN은 줄어들게 되겠죠. 
  • 극단적인 예를 들어, 성급한 의사가 모두 양성이라고 판정 했다고 한다면 TN 0이 됩니다. 왜냐하면, 음성(Negative)으로 진단한 case가 없기 때문이죠. 

만약 FPR, TPR의 수치가 동시에 높을 경우 우리는 아래와 같은 예측을 해볼 수 있습니다.

 

"FPR과 TPR 수치가 높을 경우 분류모델(or 의사)이 모든 대상을 양성으로 판단했을 가능성도 있었겠구나"

 

그렇다면, FPR과 TPR이 차이에는 무엇이 있을까요?

  • FPR: 실제 음성인 대상자들 중에 양성이라고 오진할 확률
  • TPR: 실제 양성인 대상자들을 (양성이라고) 정확히 진단할 확률

 

(↓↓↓참고 사이트↓↓↓)

https://newsight.tistory.com/53

 

ROC curve, ROC_AUC, PR_AUC, 민감도, 특이도

ROC curve (Receiver Operating Characteristic curve) : FPR과 TPR을 각각 x,y축으로 놓은 그래프. ROC curve는 X,Y가 둘다 [0,1]의 범위이고, (0,0) 에서 (1,1)을 잇는 곡선이다. - ROC 커브는 그 면적이 1에..

newsight.tistory.com

 

 

 

4. ROC Curve and AUC

어떤 분류모델을 적용했을 때, FPR, TPR이라는 지표가 아무리 좋게 나왔다고 하더라도, 해당 분류모델을 좋다고 말할 수 없다고 한다면 왜 FPR, TPR을 배울까요?

 

결론부터 말씀드리면, FPR, TPR 각각의 지표를 통해 얻을 수 있는 정보보다, FPR, TPR 지표간의 관계를 파악함으로써 얻을 수 있는 정보가 굉장히 유의미하기 때문입니다.

 

예를 통해 알아보도록 하죠. (아래 예는 binary classification을 기준으로 설명하고 있는데, multi-classificaiton 관점에서 보시면 "정상=음성(관심없는 질병+정상)"으로 간주하고 이해하시면 될 것 같습니다)

 

  • 실험을 통해서 실제 정상인 사람들의 기준치와 암인 사람들의 기준치를 조사해보니 아래그림과 같은 분포를 얻었다고 가정하겠습니다 (즉, 정상인 사람들은 기준치 -1을 평균으로 표준편차가 있었고, 암인 환자들은 기준치 1을 평균으로 표준편차가 있었다고 가정하겠습니다).
  • X축은 기준치를 뜻합니다. , X축을 기준으로 특정 값 이하는 음성(-), 특정 값 이상은 양성(+)으로 판정하게 되는데, 아래 같은 경우는 기준치 값을 0으로 설정했습니다.

이미지 출처: https://angeloyeo.github.io/2020/08/05/ROC.html

  • 위의 분포에서 TP, FP, TN, FN을 표현하면 아래그림과 같습니다.

  • False positive 부분을 설명하자면 다음과 같습니다.
    • 실제 healthy 한 사람들이 있다고 가정해봅시다.
    • 대부분의 healthy 한 사람들은 질병인지 아닌지 측정했을 때 대부분 해당 집단의 평균 값을 갖게 됩니다 (by 중심극한 정리).
    • 하지만, healthy(=음성)한 사람 중에서도 소수는 그날 컨디션이 좋지 않아 질병 진단시 기준치 이상으로 나와 양성으로 판정되는 경우가 있을 수 있습니다. 
    • 보통 False에 해당하는 면적(false negative, false positive)가 적다면 해당 분류모델은 성능이 뛰어나다고 할 수 있겠죠.

 

  • 그런데 저 기준치가 되는 값을 변경해주면 어떻게 될까요? (아래의 그림의 경우 't')

이미지 출처: https://www.researchgate.net/figure/A-visualization-of-how-changing-the-threshold-changes-the-TP-TN-FP-and-FN-values_fig5_327148996

 

  • 어떤 의사가 그냥 기준치(X; threshold)를 -5로 설정하고, 그 이상이면 전부 암환자라고 분류하세요라고 해버린다면 positive 케이스가 많아지기 때문에 TPR, FPR 모두 높게 나옵니다.

이미지 출처: https://angeloyeo.github.io/2020/08/05/ROC.html

 

  • 반대로, 어떤 의사가 그냥 기준치(X; threshold)를 5라고 설정하고, 그 이상이면 전부 암환자라고 분류하세요라고 해버린다면 negative 케이스가 많아지기 때문에 TPR, FPR 모두 낮게 나옵니다.

  • 즉, TPR과 FPR이 기준치 값에 따라 비례적인 관계를 갖는다는 점을 알 수 있습니다.

 

결국 비례적인 관계를 갖는 TPRFPR을 기반으로, 그래프를 그릴 수 있게됩니다.

그리고, 이러한 그래프를 통해 의미있는 분석을 할 수 있게 되죠.

이 때 그려지는 그래프가 ROC 커브입니다

 

 

[ROC Curve]

기준치 값을 어떻게 설정하느냐에 따라서 아래와 같이 ROC Curve가 형성되게 됩니다.

아래의 그림을 보면 그래프가 비선형성을 더 강하게 띌 수록 분류기 성능이 더 좋다고 볼 수 있겠죠?

 

보통은 비선형성의 강도라고 표현하기 보다 해당 그래프 아래의 면적이 더 커지는 경우 분류기 성능이 더 좋다고 이야기 하는데, 해당 면적을 Area Under Curve (AUC) 라고 부르고 있습니다. 

 

 

[ROC Curve]

  • x, y 축 범위는 항상: [0,1]
  • ROC curve 아래 면적: AUC (Area Under Curve; AUROC)
  • AUC(면적)가 큰 게 더 좋은 성능을 나타냄
  • AUC 면적이 1에 가까울 수록 좋은 성능
    • 면적이 1에 가까운 ROC curve를 보일 수록 양성음성을 분류하는 모델이 더 성능이 좋다는 것을 알 수 있다

 

 

 

또한, 결국 기준치 값(=threshold; 아래 그림의 ③)이 높을 수록 TPR, FPR이 모두 낮게 나오고, threshold가 낮을 수록 TPR, FPR이 높게 나오는걸 알 수 있습니다.

 

이미지 출처: https://angeloyeo.github.io/2020/08/05/ROC.html

 

이미지 출처: https://angeloyeo.github.io/2020/08/05/ROC.html

 

요약해서 말하자면, ROC커브는 TPR FPR관계를 그래프로 표현하여, 어떤 지점을 기준으로 잡을 지 결정하기 쉽게 시각화 한 것이라고 볼 수 있습니다

 

그럼 이제 아래와 같이 논문에서 제시되는 성능지표를 파악하고 분석할 수 있으시겠죠?

이미지 출처:  https://www.thelancet.com/journals/landig/article/PIIS2589-7500(20)30199-0/fulltext

 

 

 

 

(↓↓↓ROC Curve에 대한 내용 참고 사이트↓↓↓)

https://angeloyeo.github.io/2020/08/05/ROC.html

 

ROC curve - 공돌이의 수학정리노트

 

angeloyeo.github.io

 

(↓↓↓ROC Curve에 대한 내용 참고 사이트↓↓↓)

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

 

 

(↓↓↓ROC Curve 추천 영상↓↓↓)

https://www.youtube.com/watch?v=4jRBRDbJemM 

 

 

5. PPV (Positive Predictive Value)

 

마지막으로 PPV라는 지표를 알아보고 마무리 하도록 하겠습니다.

 

PPV는 Precision, 정밀도라는 용어와 동의어로 사용됩니다.

아래 식을 보시면 "분류모델이 양성 환자라고 판별한 대상들 중에서 실제 양성환자를 선별할 확률"을 의미합니다.

 

양성판별 관점에서는 PPV 하나 만으로도 유용한 지표가 될 수 있기 때문에, 다양한 곳에서 아래 지표를 사용합니다.

 

 

 

이외 F1 score 같은 개념도 사용이 되는데 이러한 개념들은 이미 다룬바가 있기 때문에 굳이 설명은 하지 않도록 하겠습니다. (혹시 필요하시다면 아래 영상을 참고해주세요!)

 

https://www.youtube.com/watch?v=8DbC39cvvis 

 

안녕하세요

이번에는 의료 인공지능에서 사용하는 대표적인 지표들에 대해서 소개하려고 합니다.

 

사실 머신러닝을 공부하신 분들이나, 의학통계를 공부하신 분들은 다들 알고 있을 개념이지만, 의료 인공지능을 처음 접하시는 분들을 위해 몇몇 지표들을 알기 쉽게 설명 하려고 합니다.

 

의학논문을 보시거나, 딥러닝을 의료분야에 적용하면 아래와 같은 지표들을 확인하실 수 있으실 겁니다.

 

 

이미지 출처:  https://www.thelancet.com/journals/landig/article/PIIS2589-7500(20)30199-0/fulltext

 

 그럼 지금부터 의료 인공지능에서 사용되는 대표적인 성과지표들을 하나씩 차례대로 알아보도록 하겠습니다.

 

(이 카테고리는 질병을 다루는 의료관련 내용이기 때문에 관련 예시도 질병을 위주로 다루도록 하겠습니다.)

 

 

 

 

1. Positive, Negative, True, False

1-1. Positive and Negataive = Prediction

 

“If the condition is a disease, "positive" means "diseased" and "negative" means "healthy“

  • 질병 감염 여부를 알기 위해 병원체(=병의 원인이 되는 본체) 검사를 시행했을 때 피검체(=검사를 받는 주체)의 병원체가 기준치보다 높을 때를 ‘양성(positive)’, 기준보다 낮을 때를 ‘음성(negative)’이라고 합니다
  • 예를들어, COVID19 확인여부를 판별하는 기준이 되는 온도가 37도 라고 했을 때, 37도 이상은 기준치보다 이상("+"="positive")이기 때문에 COVID-19 질병에 걸렸다고 할 수 있으므로 positive(+, 양성)이라고 부릅니다. 반대로, 37도 이하 기준치보다 아래("-"="negative")이기 때문에, COVID-19 질병에 걸리지 않았다고 할 수 있으므로 negative(-, 음성)라고 정의합니다.

 

  • 여기서 조금 유의해서 봐야할 부분이 있는데, 우리가 어떤 기준치라는 것에 절대적인 신뢰를 갖고 있으면 안된다는 점입니다.
  • 예를 들어, A라는 사람의 온도를 측정한 결과 37도 이상이 나와 COVID-19이라고 분류했는데, 실제로 COVID-19 화나자가 아니였을 수 있습니다. 
  • 또 다른 예를 들면, 시골에 어떤 기계를 이용해 암이라고 판정했는데, 실제로 큰 병원에서 사람 몸을 해부해보거나 암인지 아닌지를 판정하는 여러 검사를 통해 봤을 때 암이 아닐 수 있습니다.
  • 이 때, 생각해 볼 수 있는 부분은 두 가지 입니다. 
    • 기준치가 잘 못 됐다.
    • A라는 사람이 outlier(특이치)이다.  

 

  • 드라마에서 의사가 환자에게 "안타깝지만, 양성 판정이 나왔습니다"라고 말했을 때, 환자가 눈물을 보이는 이유는 해당 의사의 말을 100% 믿었기 때문이죠. 이 의사의 말을 100% 믿었다는건, 의사가 진단을 위해 적용했던 모든 기준치들을 신뢰했다는 말이 됩니다. 하지만, 낙후된 진단 기법을 사용한다거나 사용하고 있는 진단 기법의 성능이 좋지 못하다면 오진을 할 가능성이 있습니다. 
  • 이러한 이야기를 하는 이유는 우리가 어떤 대상을 positive라고 판정했다고 하더라도 잘 못 진단을 했을 수 있다는 것을 알려드리기 위해서 입니다.
  • 그렇기 때문에, Positive, Negative은 어떤 병의 진위 여부를 결정 짓는 요소가 아니라, 무언가를 “예측(prediction) 또는 분류(classification)”할 때 사용되는 용어로써 인식해야 하는 것이죠.

 

  • 보통 질병이 맞는지 아닌지를 판정하기 때문에, binary classification을 한다고 볼 수 있는데, 좀 더 다양한 classes(병의 중증도 정도; ex: A 클래스=치매초기, B 클래스=치매중기, C 클래스=치매말기)에 대해서는 어떻게 양성, 음성 조건을 정해 줄 수 있을까요?
  • 이 경우에는 내가 알아보려고 하는 특정 질병이 condition(조건)이 되며, 해당 condition에 부합하는 질병이라고 판정한 경우에는 (해당 질병 관점에서) positive 라고 하고, 나머지를 모두 negative라고 하게 됩니다.
  • 예를 들어, 치매초기에 관심이 있다고 했을 때, 치매초기라고 진단하는 경우에만 양성(positive)이라고 하고, 치매중기, 치매말기라고 진단하는 경우에는 negative(음성)판단을 했다고 볼 수 있는 것이죠.

 

1-2. True and False = Answer

  • 우리가 무언가를 예측했다면 그 예측(positive or negative)이 틀렸다면 False, 맞았다면 True라고 합니다.
  • 예를 들어, 양성판정을 받은 사람이 실제로 양성이거나, 음성판정을 받은 사람이 실제로 음성이라면 True라고 합니다.
  • 이렇게, true인 경우가 많아지면 예측(prediction) 확률이 높아지기 때문에 예측모델(or 의사)의 신뢰성이 굉장히 높아지겠죠.
  • 그런데, 이렇게 true인지 false인지 판별하기 위해서는 정답지(Answer)가 필요합니다.
  • 현실에서는 정답지를 아는 사람은 신 뿐입니다.
  • 현실에서 정답지를 미리 알고 있었다면 굳이 positive, negative 라는 개념이 만들어질 필요도 없었겠죠. 
  • 하지만, true, false를 판단하기 위해서는 여전히 정답지(answer)가 필요합니다. 그렇다면, 이러한 정답지는 어떻게 만들 수 있을까요?

 

1-3. AI 모델

  • 의료 인공지능 분야에서는 의사들이 신의 역할을 대신합니다.
  • 즉, 앞서 "1-2"에서 언급한 정답지는 저명한 의사들 논의하여 만들게 되죠. 예를 들어, 의료 이미지 같은 경우, X-ray에 있는 특징들을 보고 여러 영상의학과 의사들이 모여 의논하고 소견을 밝힌 후, 해당 병변을 진단하게 되는데, 의료 인공지능 분야에서는 이러한 진단결과를 정답으로 간주합니다 (물론 이 과정에서 잘 못된 진단을 할 수 도 있겠지만, 저명한 의사들이 라벨링 했기 때문에 정답일거다라는 믿음이 전제가 되어 있는거죠)
  • 그렇다면 누군가는 positive, negative를 판단하는 존재가 있어야 하겠죠?
  • 의료 인공지능 분야에서는 양성, 음성을 판단하는 다양한 예측 모델들이 이 역할을 하고 있습니다.
  • 그래서, 우리가 연구해서 어떤 인공지능 예측 모델을 만들면, 예측을 정말 잘하는지 의사들이 라벨링한 데이터들을 기반으로 판단하게 됩니다. 만약, true인 경우가 많으면 당연히 해당 연구가 가치있는 연구로써 인정 받을 수 있게되겠죠? 

이미지 출처: https://medium.com/intro-to-artificial-intelligence/simple-image-classification-using-deep-learning-deep-learning-series-2-5e5b89e97926

  • 딥러닝을 예로 들면 우리가 자동차를 구분해주는 것에 관심이 있다고 했을 때, 앞서 언급한 condition이 자동차가 됩니다. → Positive={CAR}. Negative={TRUCK, …, BICYCLE}
  • 위의 그림에서는 딥러닝이 자동차라고 분류했기 때문에 positive 판정을 내렸다고 할 수 있습니다.
  • 실제 입력 데이터가 CAR라는 것을 알고 있다고 했을 때, 예측과 실제 값을 비교한 결과 옳게 예측했으므로 이 경우는 true라고 할 수 있습니다. 다시 말해, 판단한 prediction 클래스와 실제 정답에 해당하는 클래스가 일치하면 true라고 하는데, 이러한 case가 많으면 해당 모델을 신뢰하게 되는 것이죠.

 

 

 

 

 

2. TP(True Positive), FP(False Positive), TN(True Negative), FN(False Negative), and Confusion matrix

지금까지 의료 인공지능 관점에서 positive, negative, true, false를 살펴봤으니, 이러한 지표들을 조합하면 어떠한 분석들을 할 수 있게되는지 알아보도록 하겠습니다.

 

내가 관심있는 질병이 COVID-19이라는 가정하에서 설명해보도록 하겠습니다

 

 

2-1. TP: True Positive

  • True Positive는 양성(관심있는 질병=positive)으로 진단했고 실제 결과도 관심있는 질병(=positive)이었을(=true) 경우를 뜻합니다
  • 아래와 같은 질문을 통해 TP의 여부를 확인해 볼 수 있습니다.
    • Q1. 딥러닝이 COVID 19(condition)으로 판단했는가? → If YES, then POSITIVE
    • Q2. 딥러닝이 positive라고 분류 했을 때, labeled data class(실제정답)도 positive class인가? → If YES, then TRUE

이미지 출처: https://www.cs.tau.ac.il/~wolf/papers/SPIE15chest.pdf

 

 

 

2-2. FP: False Positive

  • False Positive는 양성(관심있는 질병=positive)으로 진단했지만 실제 결과가 관심있는 질병(=positive)이 아닌(=false) 경우를 뜻합니다
  • 아래와 같은 질문을 통해 FP의 여부를 확인해 볼 수 있습니다.
    • Q1. 딥러닝이 COVID 19(condition)으로 판단했는가? → If YES, then POSITIVE
    • Q2. 딥러닝이 positive라고 분류 했을 때, labeled data class(실제정답)도 positive class인가? → If NO, then FALSE
  • 아래 그림을 기준으로 설명하면, prediction은 covid-19으로 했지만, labeled data가 covid-19이 아닌 모든 class(normal, pneumonia, ..)인 경우에는 false positive가 됩니다.

이미지 출처: https://www.cs.tau.ac.il/~wolf/papers/SPIE15chest.pdf

 

 

 

2-3. TN: True Negative

  • True Negative는 음성(관심없는 질병=negative)으로 진단했고, 실제 결과도 관심없는(=negative) 질병(or 정상)인(=true) 경우를 뜻합니다.
  • 아래와 같은 질문을 통해 TN의 여부를 확인해 볼 수 있습니다.
    • Q1. 딥러닝이 COVID 19(condition)으로 판단했는가? → If NO, then NEGATIVE
    • Q2. 딥러닝이 negative라고 분류 했을 때, labeled data class(실제정답)도 negative class인가? → If YES, then TRUE
  • 이때 중요한건 음성으로 판정한 경우(=COVID19이라고 예측하지 않은 모든 경우)에는 prediction 결과와 labeled data가 굳이 일치하지 않아도 TRUE가 될 수 있다는 사실입니다. 
    • 예를들어, prediction 결과가 pneumonia(=negative)라고 했을 때, labeleld data Normal이어도 True Negative에 속하게 됩니다.

 

 

2-4. FN: False Negative

  • False Negative는 음성(관심없는 질병=negative)으로 진단했지만, 실제 결과는 관심있는(=positive) 질병인(=true) 경우를 뜻합니다.
  • 아래와 같은 질문을 통해 FN의 여부를 확인해 볼 수 있습니다.
    • Q1. 딥러닝이 COVID 19(condition)으로 판단했는가? → If NO, then NEGATIVE
    • Q2. 딥러닝이 negative라고 분류 했을 때, labeled data class(실제정답)도 negative class인가? → If NO, then FALSE

 

 

2-5. Confusion Matrix

  • 위에서 설명한 TP, TN, FP, FN 개념을 하나의 matrix로 볼 수 있는데, 이것을 confusion matrix라고 합니다.
  • X축에 위치한 것들이 예측 모델이 prediction한 결과들을 보여줍니다.
    • 예를 들어, 관심있는 질병인 COVID-19은 3번 째 위치에 있는데, 해당 X축 위치에 있는 y축 요소들 ((3,1), (3,2), (3,3))은 모두 positive라고 보시면 됩니다. 그 외의 값들은 모두 negative가 되겠죠.
  • TP의 경우에는 대각성분 ((1,1), (2,2), (3,3))에 위치해 있다고 볼 수 있습니다. 
  • 그 외의 지표들을 표시하면 아래와 같습니다.

이미지 출처:  https://arxiv.org/pdf/2003.09871.pdf

 

 

 

이제부터는 confusion matrirx나 아래의 지표들이 나오면 어떻게 해석해야할지 아시겠죠?

이미지 출처:  https://www.thelancet.com/journals/landig/article/PIIS2589-7500(20)30199-0/fulltext
이미지 출처:  https://www.thelancet.com/journals/landig/article/PIIS2589-7500(20)30199-0/fulltext

 

 

 

다음 글에서는 이 글의 연장선이 되는 추가적인 성능지표들에 대해서 알아보도록 하겠습니다!

      • Sensitivity = Recall = TPR(Ture Positive Rate)
      • Specificity = Selectivity = TNR(True Negative Rate)
      • FPR = False Positive Rate
      • Relationship between TPR and FPR

안녕하세요.

이번 글에서는 COVID-19이 갖는 영상학적 특징을 설명하는 유용한 사이트를 알려드리려고 합니다.

 

해당 내용을 따로 정리하긴 하였으나, 영상학적 자료는 라이센스 관련 여부가 확실하지 않아 링크만 걸어 두었습니다.

 

혹시 정리된 자료가 필요하신 분은 (비밀)댓글에 메일주소를 남겨주세요!

 

 

 

 

 

(↓↓↓코로나에 대한 영상학적 소견↓↓↓)

https://www.youtube.com/watch?v=nE0Zb6C-kzg 

 

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

 

 

https://www.youtube.com/watch?v=YCX-ffofa8I 

 

 

https://www.youtube.com/watch?v=8ZKjo4KcF50 

 

안녕하세요.

이번 글에서는 왜 COVID-19을 영상학적으로 판단할 필요가 있는지 알아보려고 합니다.

 

먼저, COVID-19이 무엇인지 간단하게 알아보고, 왜 COVID-19을 CT, X-ray 같은 영상이미지에서 찾게 되는지 알아보도록 하겠습니다.

 

 

 

1. COVID-19이 무엇인가요?

2020년 2월 11일 세계보건기구(WHO)는 2019년에 발생한 코로나바이러스 감염증 (Coronavirus disease) 에 대한 공싱명칭으로 COVID-19을 사용하기 시작했습니다. 

 

대부분의 의학논문에서는 Severe Acute Respiratory Syndrome-Coronavirus-2(SARS-CoV-2) 라는 용어를 사용하기도 하는데, SARS-CoV-2와 COVID-19은 동의어라고 보시면 됩니다. SARS-CoV-2라는 용어가 의학적으로 좀 더 직관적인 의미를 나타내기 때문에 종종 논문에서 COVID-19 대신 SARS-CoV-2라는 용어를 사용하기도 합니다. 

 

Severe Acute Respiratory Syndrome-Coronavirus-2 라는 용어는 "코로나 바이러스를 통해 발생하는 급성 호흡 증후군"을 함축적으로 표현한 단어입니다. 그런데 용어를 자세히 보면 Coronavirus-2라는 명칭이 붙었죠? 왜 그럴까요?

 

 

사실 코로나 바이러스는 굉장히 오래전부터 있어 왔습니다. 코로나바이러스는 기원전 8000년경부터 존재했던 오래된 감기 바이러스의 일종입니다. 하지만 이러한 바이러스가 문제가되지 않았던 이유는 해당 바이러스가 같은 종들 사이에서만 전파가 되었기 때문이죠. 예를 들어, 사람들과 사람들 사이에서 전파되는 코로나 바이러스는 인체에 치명적인 영향을 미치진 않았습니다.  

 

이미지 출처: https://www.freepik.com/free-photos-vectors/virus

 

하지만, 코로나 바이러스가 문제되기 시작한건 동물에게 있던 코로나 바이러스가 사람에게 전파되면서 부터 입니다.

 

동물과 동물간에 코로나 바이러스가 전파될 때는 보통 숙주와 중간숙주가 존재하게 됩니다. 예를 들어, 박쥐가 어떤 특정한 코로나 바이러스를 생산해낸 숙주(Natural host)라고 했을 때, 숙주로부터 해당 바이러스가 다른 동물에게 전파됩니다. 이렇게 숙주로 부터 감염된 동물을 중간숙주(Intermediate host)라고 합니다. 그리고, 중간숙주에 있던 코로나바이러스가 유전자 변이를 일으키면서 인간에게 전파됩니다. (아! 참고로 현재(2021.06)까지는 COVID-19의 중간숙주가 무엇인지 명확히 규명되진 않았습니다.)

 

이미지 출처: https://europepmc.org/article/MED/30531947

 

 

앞서 언급했듯이 중간숙주가 보유하고 있는 코로나 바이러스가 유전자 변이를 일으켜 사람에게 전파되는데, 이 때 변이된 코로나 바이러스는 인간의 호흡기관에 굉장한 타격을 줍니다. 여러 호흡기관에서 다양한 증상이 발견되지만 보통은 가슴 부위에 위치한 폐(lung) 기능에 심각한 타격을 입혀 폐 질환으로 야기시킵니다. 이때, 폐나 다른 부위가 심하게 손상되면 호흡에 문제가 생기면서 사망까지 이를 수 있게 하는데, 이러한 개념들을 함축하여 '급성 호흡 증후군 (Severe Acute Respiratory Syndrome)'이라고 합니다.  

 

 

이러한 급성 호흡 증후군을 유발하는 바이러스가 코로나기 때문에 코로나바이러스를 의학적으로 "Severe Acute Respiratory Syndrome-Coronavirus-2"라고 명명하게 됩니다. Coronavirus-2라고 명칭이 붙은것을보면 Coronavirus-1도 있었겠죠?

 

Coronavirus-1 버전의 급성 호흡 증후군은 2002년에 발생한 사스(SARS)입니다. SARS는 SARS-CoV라고 표현되기도 하는데 풀어쓰면 "Severe Acute Respiratory Syndrome Coronavirus"가 됩니다. 또한, 2012년 발생한 메르스(MERS-Cov)도 "Middle East Respiratory Syndrome Coronavirus"라는 뜻으로 중동에서 발견된 코로나 바이러스라는 의미를 지니고 있습니다 (이때 중간숙주가 낙타였죠). 이러한 코로나 바이러스는 동물에게서부터 인간으로 옮겨간 후, 사람들끼리 해당 바이러스를 전파시기게 됩니다 (최근에는 이러한 바이러스가 변이를 일이키며 활동한다고 하죠). 지금까지 말한 코로나 바이러스에 대한 개념을 정리하면 아래와 같습니다.

 

  • 동물에게서 발생한 코로나 바이러스가 인간에게 넘어가면 문제가 된다.
  • 보통 폐 기능에 타격을 입해 호흡관련 문제를 일으키기 때문에 "호흡 증후군(Respiratory Syndrome)"이라는 명칭이 붙는다.
  • 해당 바이러스는 2002년에 보고되었고, 최근 2020년부터 인류에 엄청난 피해를 주고 있다.
    • 사스(SARS): 2002년 보고된 SARS-CoV() 코로나 바이러스로 인해 발생한 증상으로 이름을 붙였다.
    • 메르스(MERS): 2012 MERS-CoV() 중동에서 발견돼서 Middle East라고 이름을 붙였다.
    • 코로나(COVID 19): 2019 SARS-CoV2(COVID-19) 발생연도에 의해 이름이 붙여졌다.

 

(↓↓↓코로나란 무엇인가?↓↓↓)

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

 

 

 

 

 

2. 왜 COVID-19을 영상학적으로 판별하려고 하나요?

현재 COVID-19을 판별하는 보편적인 방식(Golden standard)은 Reverse-Transcription Polymerase Chain Reaction (RT-PCR)입니다. RT-PCR은 사람들의 DNA를 채취해 코로나 바이러스 확진 유무를 판별합니다. 많은 국가들이 이러한 진단방식을 채택하고 있지만, 이러한 진단방식에도 분명 단점이 존재하죠. 

 

이미지 출처: https://www.freepik.com/free-vector/how-pcr-test-works_8511053.htm

 

(↓↓↓RT-PCR 진단 프로세스↓↓↓)

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

 

 

2-1) 첫 번째 문제는 정확도입니다.

  1. RT-PCR의 문제점을 지적하는 부분중 하나는 낮은 sensitivity 성능 지표입니다.
  2. Sensitivity(=TP/(TP+FN))가 낮다는 것은 FN(False Negative)가 높다는 것을 의미합니다.
  3. False Negative가 의미하는 바는 실제 COVID-19 환자에게 음성이라고 (=COVID-19이 아니라고) 진단한 케이스인데, 감염질병에 있어서 FN이 높다는 것은 굉장한 문제가 됩니다.
  4. 왜냐하면, 실제 COVID-19 환자가 안심하고 여러 사람을 접촉하면서 바이러스를 전파시킬 확률이 매우 높기 때문이죠. 
  5. RT-PCR에서 대상을 FN으로 판별하는 경우는 아래와 같습니다.
    • 이전에 음성으로 반단했지만 반복검사 끝에 양성으로 바뀐 경우
  6. 이러한 환자들 중 몇몇은 이미 CT를 통해 이상소견을 발견하기도 했다고 합니다. 

 

(↓↓↓FN 외에 다른 성능지표가 궁금하시다면↓↓↓)

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

 

1. 의료 인공지능에서 사용하는 대표적인 지표들 (1) - TP, FP, TN, FN, and Confusion matrix

안녕하세요 이번에는 의료 인공지능에서 사용하는 대표적인 지표들에 대해서 소개하려고 합니다. 사실 머신러닝을 공부하신 분들이나, 의학통계를 공부하신 분들은 다들 알고 있을 개념이지만

89douner.tistory.com

 

(↓↓↓자가검사키트의 문제점↓↓↓)

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

 

(↓↓↓CT기반 COVID-19 판독↓↓↓)

https://www.youtube.com/watch?v=VQ-IwfsMstI 

[정확성에 대한 개인적인 견해]

의료영상 데이터를 기반으로 한 딥러닝 COVID-19 진단 모델 논문들을 읽어보면 대부분 RT-PCR의 낮은 성능지표(sensitivity)를 문제삼고 있습니다. 즉, 딥러닝 모델은 sensitivity 지표 뿐만 아니라 다른 지표들에서도 기존 RT-PCR 보다 성능이 좋다는 점을 주장하고 있습니다.

 

하지만, 딥러닝 모델을 기반으로 COVID-19을 분류 해보니 정확성이 높다고 이야기 하기에는 좀 더 검증해봐야 할 부분이 있다고 보였습니다. 예를 들면 아래와 같은 것들입니다.

  1. X-ray, CT 이미지 상태에 문제는 없는지 (ex: 해당 이미지에 너무 많은 artifact가 있는건 아닌지)
  2. Internal validation과 external validation이 제대로 구축된 상태에서 진행이 된건지
  3. 딥러닝 모델이 결과적으로 옳게 분류했으나, 타당한 소견으로 분류를 한건지

이러한 부분들은 딥러닝 관련 연구 부분을 설명할 때 더 자세히 언급하도록 하겠습니다.

 

 

 

2-2) 두 번째 문제는 진단을 위해 소요되는 시간입니다.

  1. 보건복지부에 따르면 RT-PCR은 진단시 2일 정도 되는 시간이 필요하다고 규정하고 있습니다.
  2. 최근에는, 실시간(realtime) RT-PCR 방식 또는 자가검사키트를 이용해 빠르게 확진결과를 알아볼 수 있다고 하는데, 실제 관련 논문들을 보면 정확도에 심각한 문제가 발생하는 경우가 있습니다. 즉, 시간의 장점을 취한대신 정확성을 조금 포기 한거라고 볼 수 있는데, 만약 정확성이 많이 떨어진다고 한다면 해당 진단방식을 이용하는건 문제가 될 수 있습니다.

 

[시간에 대한 개인적인 견해]

 X-ray, CT 기반의 딥러닝 모델을 이용해야 한다는 논문들을 보면 RT-PCR보다 빠른 진단을 할 수 있다는 점을 강조합니다.

 

하지만, 이 부분은 상황별로 분리해서 봐야 한다고 생각합니다. 예를 들어, 사람 한명을 기준으로 봤을 때는 당연히 X-ray, CT를 기반으로 판독하는게 시간이 빠르겠죠. 하지만, X-ray, CT 촬영은 장비의 수가 제한적이기 때문에, 환자가 늘어나면 촬영 시간이 굉장히 길어질 것입니다. 즉, 진료대상이 만명이 된다고하면 RT-PCR 방식이 더 빠르다고 할 수 있겠죠. 

 

(↓↓↓영상학적 진단 방식이 시간적인 측면에서 문제가 될 수 있는 경우↓↓↓)

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

 

또한, 딥러닝 모델을 사용한다는 측면에서 보면, 당연히 컴퓨터가 빠르게 진단해주기 때문에 시간을 절약할 것이다라고 볼 수 있습니다. 하지만, 보통 딥러닝 모델은 의사들의 진단을 보조해주는 보조진단 도구 (CAD: Computer Aided Diagnosis)로 활용되기 때문에  RT-PCR에 비해 진단시간이 짧다고 볼 순 없습니다. 즉, 최종 결정은 의사가 하기 때문에, 기존의 의사들의 진단 속도를 높여줄 수는 있을지 몰라도, RT-PCR 보다 빠른 진단을 할 수 있다고 주장하는 것은 현실적으로 모순이 될 수 있습니다. 

 

만약, 딥러닝 모델로 진단했을 때, 정상일 확률이 낮은 경우에만 의사들이 해당 데이터를 진단하게 해준다면 진단시간을 획기적으로 줄일 수 있겠죠. 즉, 방대한 양의 데이터를 초기 스크리닝 또는 필터링을 해줌으로써 진단속도를 높일 수 있습니다. (실제 이러한 스크리닝 기법은 google healthcare에서 발표한 "A deep learning system for differential diagnosis of skin diseases"와 같은 논문에서도 도움이 될거라고 언급하고 있죠)

 

결국 의료영상 데이터를 기반으로 COVID-19를 분류한다는 논문을 작성할 때, 기존 RT-PCR 보다 빠르기 때문이라고 하는 주장할 때는 좀 더 구체적인 상황을 가정해야하지 않나 싶습니다. 

 

 

 

2-3) 세 번째 문제는 RT-PCR을 사용하기 위해서는 많은 비용을 요구합니다.

  1. Nature에 실린 "The explosion of new coronavirus tests that could help to end the pandemic"논문 중 일부를 인용하자면, RP-PCR 진단 키트를 생산하기 위한 설비(facilities)를 갖추는 건 상당한 비용을 요구한다고 합니다. 기존에 이러한 연구가 활발히 진행되는 선진국들은 기본적인 설비가 이미 갖춰져 있었겠지만, 그렇지 않은 나라에서 이러한 설비를 설치하고 모든 국민에게 제공한다는 것은 경제적으로 큰 부담이 됩니다. 
  2. 또한, RT-PCR을 진단하기 위해서는 잘 훈련된 인적자원들이 필요합니다. 진단 과정에서는 "환자의 DNA를 검출 → 해당 DNA를 운반 → 도착한 DNA 정보 분석"과 같은 과정이 포함됩니다. 진료소에 배치되어 있는 인원들, 환자의 DNA 정보를 운반하는 인원들, 해당 데이터를 분석하는 인원들은 모두 잘 훈련된 사람이어야 합니다. 이러한 인원들의 인건비나 진단과정에서 발생하는 간접비용(운반비용, 진료소에 있는 의료진 방호복 등)은 RT-PCR 진단 프로세스가 상당한 비용을 요구한다는 것을 보여줍니다
  3. 최근에는 진단비용이 CT 촬영비용과 비슷하게 나온다는 견해가 있어서 진단비용까지 부담이 되고 있습니다.

https://www.youtube.com/watch?v=-lcdWy3VPOs

 

[비용과 관련한 개인적인 견해]

사실 설비와 관련된 문제를 따지면 CT, X-ray 같은 촬영장비를 설비비용도 적지 않다는 것을 알 수 있습니다. 만약, 이러한 장비를 설치해야 한다면 막대한 비용이 들기 때문에 "RT-PCR이 비용이 많이 들어서 영상이미지 기반의 진단을 해야한다"고 이야기하는 것은 모순이 될 수 있습니다.

 

 그렇기 때문에, 몇 가지 상황을 가정하고 이야기를 하는 것이 더 맞다고 생각합니다. 예를 들어, 이미 CT 같은 장비들은 대학병원에 구비가 되어 있는 상태이고, 지역근처의 2차병원에서도 구비가 되어 있습니다. X-ray 같은 장비들은 동네병원에서도 구비가 되어 있죠. 그래서, 기존 장비들을 재활용할 수 있기 때문에 새로운 시설을 만들 필요가 없을 수 있죠. 또한, 영상의학적 보조진단 software 프로그램을 사용하게 되면 진단 프로세스가 "환자 X-ray or CT 촬영 → software 프로그램 → 진단"과 같이 진행되기 때문에 중간 과정을 획기적으로 줄여줄 수 있다는 장점이 있을 겁니다. 이러한 부분들을 통해 COVID-19을 진단하는데 발생하는 총 비용이 RT-PCR보다 적다는 자료가 있다면, 영상학적 진단을 사용해야 하는 경제적인 이유가 될 수 있겠죠.

 

 

 

2-4) 네 번째 문제는 불안전성 입니다.

  1. 선별 진료소 의료진들의 코로나 감염사례가 증가하고 있습니다. RT-PCR 진단 방식을 위해서는 환자와 대면을 해야하기 때문에 의료진들이 위험에 노출 될 수 밖에 없습니다.
  2. 사실 방호복을 입고 진료를 한다고 하지만, 업무가 과중되거나 갑자기 처리해야 할 일이 많아지면 정신이 없기 때문에 자신도 모르게 마스크를 내릴 수 도 있습니다. 한 여름에는 더욱 심하겠죠.
  3. 결국, 비대면으로 실내에서 진단할 수 있는 방법을 생각하지 않을 수 있습니다. 

 

[안정성과 관련한 개인적인 생각]

 개인적으로는 "영상의료 기반의 딥러닝 기술을 사용해야 한다"는 주장을 하려고 했을 때, 안정성과 정확성에 대한 이유가 이러한 주장을 가장 잘 뒷받침해줄 수 있는 근거가 아닌가 싶습니다. 

 

 

 

COVID-19을 진단할 때 RT-PCR를 대체할 수 있는 방식으로 영상학적인 진단기술이 주목받고 있지만, 앞서 개인적인 견해에서 밝혔듯이 문제점 또한 존재 합니다.

 

하지만, 이러한 문제점들이 개선 된다면 영상학적 진단 방식은 더욱 주목을 받을거라 생각합니다. 그리고, 딥러닝이나 그 외 인공지능 기술들이 이러한 단점을 빠르게 개선시켜줄 것이라 기대하고 있습니다.

 

다음글에서는 딥러닝 기반 COVID-19 연구를 설명하기 전에 실제 영상학과에서는 어떤 기준으로 COVID-19을 진단하는지 알아보도록 하겠습니다!

 

 

 

 

 

 

 

 

 

안녕하세요.

제가 "Medical AI research"라는 카테고리를 개설한 이유는 크게 세 가지 입니다.

 

 

1. 의료인공지능 지표소개

연구논문을 읽으실 때 중요하게 보시는 부분 중 하나가 실험결과라고 생각합니다. 

보통 실험결과 부분은 기존 모델들과 자신이 제안한 모델을 비교하는 테이블 형태로 제시가 됩니다.

이때 연구자들은 실험결과 지표를 보면서 제안한 모델에 대해서 분석(analysis)을 합니다.

 

기존 의료분야에서는 보통 통계적 기법을 적용하여 실험결과를 제시하지만, 의료인공지능 분야에서는 머신러닝, 딥러닝, 컴퓨터비젼 등에서 사용하는 분야들의 지표들이 소개가 됩니다. 또한, 기본적인 통계적 기법외에도 casual inference에서 사용하는 지표들이 유의미하게 사용되는 경우도 있습니다. 

 

보통 전통적인 연구 분야에서 사용되는 지표가 정해져 있는 반면에, 의료인공지능 분야같은 곳에서는 굉장히 다양한 학문들이 융합되기 때문에 사용되는 지표 또한 다양합니다. 물론, 이미 다 알고 있으실 만한 지표들일 수 있겠지만, 최대한 메디컬 분야에 맞는 예시를 기반으로 설명을 하는것이 필요하다고 생각했습니다.

  1.  

이미지 출처: https://www.youtube.com/watch?v=4jRBRDbJemM

 

 

 

2. 경험 및 느낀점 공유

두 번째 이유는 제가 리딩했던 연구들에 대한 경험들과 해당 연구들을 진행하면서 느꼈던 점들을 공유하기 위해서 입니다.

 

1) 경험

물론, 현재 훌륭한 연구원 분들께서는 이미 cutting edge (state-of-the art) 연구를 진행하고 있으시기 때문에, 큰 도움이 되지 못하는 글이 될거라 생각합니다.

 

하지만, 딥러닝이라는 것이 연구해야될 분야가 굉장히 다양함에도 불구하고, 연구개발에 굉장한 시간을 요구하기 때문에 다양한 시도를 하는것이 제한적일 때가 많습니다. 그래서 혹시나 제가 했던 연구가 방법론 적인 측면에서 도움이 될 수 도 있겠다고 생각했습니다. 또한, 기존 연구자들 뿐만 아니라 다른 분야에 있으신 분들도 의료분야로 커리어 전환을 하실 때, 도움이 될 수 있을 것 같다는 것 같다는 생각에 제가 경험했던 내용들을 자료화해 공유하려고 합니다.

 

예를 들면 아래와 같은 것들 입니다.

  • 딥러닝 학회에서 제시한 batch normalization 초기화 곤련 방법론을 medical에 적용했을 때, 이렇게 저렇게 변경시켜서 적용했더니 성능 향상이 있더라~
  • 딥러닝 학회에서 제시한 방법들은 scratch training 방식인데, medical 영역에 transfer learning 에 맞춰 적용하려니까 어떤건 효과가 있었고 어떤건 효과가 없더라~
  • 의료분야에서 흔히 있는 class imbalance 문제를 해결하기 위해 어떠한 evaluation 방식을 쓰면 좋더라~
  • 의료계에서는 external validation을 거쳐야 해당 모델이 다른 의료기기에서 발생한 데이터들에게도 잘 적용된다고 판단하더라~
  • 기타 등등....

 

2) 느낀점

굉장히 저명한 학회의 논문들은 훌륭한 editor들의 검수를 통해 나온 논문들이겠지만, 개인적으로 읽었을 때는 실험결과의 타당성에 대해 의문을 가진적이 많았습니다. 또한, 내가 하고 있는 연구에서는 어떠한 점을 보완해야 하며, 이것이 현실세계에 적용가능하게 하기 위해서는 어떠한 노력이 필요한지 공유하는 것이 좋을 것이라 생각했습니다. 

 

예를 들면, 아래와 같은 것들입니다.

  • EX1) 기존 논문을 분석했는데, 실험결과가 엄청 좋게 나왔다. 그런데, 다른 연구들과 비교해보니까 이건 데이터 편성을 잘 못한 것 같더라~
  • EX2) 신종바이러스에서는 어떠한 지표들을 좀 더 집중적으로 보는 것이 좋은 것 같더라~
  • EX3) CT, X-ray 이미지 분류 연구들의 문제점은 분류결과에만 치중한다는 점인 것 같다. 그래서, CNN 모델이 왜 이러한 진단을 내리게 됐는지를 밝히는 것이 더 실증적인 연구일 것 같다~
  • EX4) 어떤 논문은 기본적으로 임상학적인 정보가 결여되어 있기 때문에 실험결과 자체를 신뢰하기 어려운 것 같더라~

 

 

 

3. 디지털 공간에서의 나의 존재 구축

마지막 이유는 지금까지 내가 했던 연구들을 명확하게 정리하여 다른 사람들에게 나를 알리기 위함입니다.

물론 많은 분들이 훌륭한 커리어를 쌓으면서 CV를 만들고 있으실 겁니다.

 

물리적인 공간에서 서로 디스커션을 하고 연구를 진행하면서 엄청난 성과들을 만들고 있으시는 분들을 보면 항상 감탄만하게 됩니다. "나는 언제쯤 저정도의 위치까지 도달할 수 있을까?"라는 생각을 하게 만들죠.

 

그래서, 개인적인 노력의 일환으로 블로그를 개설했습니다. 블로그에 내가 정리한 내용을 게재하면, 나중에 혼동되는 개념에 대해서 쉽게 찾아 볼 수 있을 뿐만아니라, 내가 부족한게 무엇인지, 어떠한 부분을 잘 못 이해하고 있는지를 다른 사람들로부터 쉽게 파악할 수 있었습니다.

 

최근에 유튜브의 성장과 의료인공지능, 4차 산업 등 여러 이슈들을 살펴보면서 어떤 공통점이 있을까하고 생각하던 도중, 내가 쓴 블로그를 통해 내 스스로가 도움을 받는 모습을 보면서 아래와 같은 생각을 하게 됐습니다.

 

 

이미지 출처: https://ko.depositphotos.com/stock-photos/digital-world.html

 

"물리적 공간에서의 내가 블로그라는 디지털 공간에서의 나로부터 수 많은 도움을 받고 있는 것 같다."

 

"이제는 나라는 존재를, 물리적 공간에 국한시키면 안되겠구나. 디지털 공간에서도 나의 존재를 만들어야 겠다!"

 

 

 

 

 

물리적 공간에서의 나는 활동시간이 제한적이지만, 디지털 세계에서 존재하는 나는 활동시간이 무제한이었습니다. 즉, 디지털 세계에서는 나라는 존재를 24시간 PR 하고 있는 것이죠.

 

 

그래서, 내가 했던 개별 연구들을 디지털 공간에다가 알리게되면 이것이 어떠한 형태로 나에게 도움을 주게 될지 궁금했기 때문에 해당 카테고리를 개설했습니다.

 

 

 

앞으로 여러 글들을 게재하고 관련 이슈들에 대해 피드백 또는 조언을 주시면 감사하겠습니다!

 

 

현재 다른 페이지에 작성하고 있습니다.

6월 11일 안으로 작성이 완료되는대로 글을 옮겨적도록 하겠습니다.

안녕하세요.

이번 글에서는 아래 논문을 리뷰해보도록 하겠습니다.(아직 2차 검토를 하지 않은 상태라 설명이 비약적이거나 문장이 어색할 수 있습니다.)

 

※덧 분여 제가 medical image에서 tranasfer learning을 적용했을 때 유효했던 방법론들도 공유하도록 하겠습니다.

 

 

"Bag of Tricks for Image Classification with Convolutional Neural Networks"

 

Conference: 2019 CVPR

Authors: Amazon Web Servies

 

https://openaccess.thecvf.com/content_CVPR_2019/papers/He_Bag_of_Tricks_for_Image_Classification_with_Convolutional_Neural_Networks_CVPR_2019_paper.pdf

 

 

 

 

 

0. Abstract 

  • 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%까지 향상시켰습니다. 

 

(↓↓↓CNN 관련 내용 정리한 카테고리↓↓↓)

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

 

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

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

89douner.tistory.com

 

 

 

 

 

 

1-2. 두 번째 문단

→ 모델링 위주의 CNN 연구도 중요하지만, CNN 학습 방법론들도 중요하다고 언급

  • 앞서 언급한 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 의 성능도 향상시켰습니다.
    • 왜냐하면 CNN이 backbone network 역할을 하기 때문입니다.

 

(↓↓↓CNN과 object detection 관계가 궁금하시다면↓↓↓)

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

 

3. Object Detection과 CNN의 관계

안녕하세요~ 이번글에서는 Object Detection과 CNN의 관계에 대해서 알아보도록 할거에요. CNN분야가 발전하면서 classification 영역에 엄청난 영향을 미친것처럼 동시에 Object detection 영역에도 굉장한 영

89douner.tistory.com

 

 

 

 

1-5. 다섯 번째 문단

→ 이 논문에서 앞으로 어떤 순서로 내용을 전개할지 언급

  • 이 논문은 다른 논문들 처럼 related work, method, experiment, result 순서를 따르지 않고 있습니다.
  • Section 2에서는 실험을 위한 기본적인 세팅들을 설명합니다. → 대조군(control group) 역할을 하는 모델을 설명한다고 볼 수 있겠네요. 
  • 이 논문에서는 크게 세 가지 방향(목적)을 갖는 개별 실험들 (Section3, 4, 5) 이 존재합니다.
    • Section 3: 몇몇 tricks들이 hardware 관점에서 효과적인 것을 보여주기 위한 실험들
    • Section 4: ResNet 모델의 구조를 약간 수정하면서 성능 효과를 꾀한 실험들
    • Section 5: 4가지 training procedure refinements를 적용해 성능 효과를 꾀한 실험들
  • 마지막 Section 6에서는 앞서 적용한 기술들로 성능 향상이 된 CNN이 transfer learning, object detection, segmentation에서 얼마만큼 좋은 영향을 끼쳤는지 볼 수 있습니다.

https://github.com/dmlc/gluon-cv

 

dmlc/gluon-cv

Gluon CV Toolkit. Contribute to dmlc/gluon-cv development by creating an account on GitHub.

github.com

 

 

 

2. Training Procedures

→ 여러 학습 방법론을 적용시키기 위한 baseline 모델이 있어야 한다. 여기서는 이러한 baseline 모델을 어떻게 training시키고, validation 했는지 설명한다. 

  • 이 논문에서는 아래와 같은 Batch 전략을 따르기로 했습니다.
    • Mini Batch 전략
    • b개수 만큼의 이미지를 하나의 batch로 설정 → 이 때, 뽑히는 이미지들은 uniformly distribution에 기반한 확률로 선별됩니다. (비복원 추출로 선별되는 듯 합니다)
    • K번의 epoch을 거치고 나면 학습을 종료합니다.

 

이미지 출처: https://m.blog.naver.com/qbxlvnf11/221449297033

 

(↓↓↓ Mini-Batch 관련 설명 ↓↓↓)

https://89douner.tistory.com/43?category=868069 

 

9. Mini-Batch (데이터가 많은 경우에는 학습을 어떻게 시키나요?)

Q. 굉장히 많은 데이터를 학습시키려고 한다면 어떻게 학습시켜야 하나요? 데이터 하나하나 단계적으로 학습시켜야 하나요? 안녕하세요~ 이번시간에도 DNN(Deep Neural Network) 모델을 좀 더 효율적

89douner.tistory.com

 

 

 

 

2-1. Baseline Training Procedure

  • 실험을 위해 ResNet을 baseline CNN 모델로 선정했습니다.
  • 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 (확률분포) 를 기반으로 선별합니다.

(↓↓↓PCA augmentation에 대한 설명은 아래 글을 참고하세요!↓↓↓)

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

 

6. AlexNet

안녕하세요~ 이제부터는 CNN이 발전해왔던 과정을 여러 모델을 통해 알려드릴까해요. 그래서 이번장에서는 그 첫 번째 모델이라 할 수 있는 AlexNet에 대해서 소개시켜드릴려고 합니다! AlexNet의 논

89douner.tistory.com

 

https://github.com/koshian2/PCAColorAugmentation

 

koshian2/PCAColorAugmentation

PCA Color Augmentation in TensorFlow/Keras. Contribute to koshian2/PCAColorAugmentation development by creating an account on GitHub.

github.com

 

 

Step6: 이 부분은 normalization 전처리 기법인데, 해당 기법에 대한 자세한 설명은 아래 글을 참고해주세요!

 

https://89douner.tistory.com/42?category=868069 

 

8. 데이터 전처리 (Data Preprocessing and Normalization)

Q. DNN을 학습시키기 전에 왜 데이터를 전처리해주어야 하나요? 안녕하세요~ 이번시간에는 DNN 모델이 학습을 효율적으로 하기위해 필요한 정규(Noramlization; 정규화) 대해서 알아보도록 할거에요~

89douner.tistory.com

 

 

 

※ 여기서는 실제 논문에서 기재된 문단 순서를 조금 변경했습니다 (개인적으로 training 관련 내용들을 다 적어주고, validation을 언급해주는게 좋다고 봐서....) 

 

  • 가중치 초기화: Xavier → [-a, a] 범위에서 uniform sampling
  • Batch norm layer의 hyper-parameter인 값들을 다음과 같이 설정 (gamma=1, beta=0)
    • 이 부분은 "3.1 Large-bath training"에서 "Zero \(\gamma\)를 설명할 때 더 자세히 말씀드리겠습니다.
  • Optimizer: Nesterove Accelerated Gradient (NAG) descent
  • Epoch: 120
  • batch size: 256
  • Learning rate: 0.1
    • 30, 60, 90번째 epoch에 도달할 때마다 10을 나눠줌
      • epoch=30→0.01, epoch=60→0.001, epoch=90→0.0001
  • GPU: 8 NVIDIA V100 GPUs

(↓↓↓Volta가 궁금하시다면↓↓↓)

https://89douner.tistory.com/159?category=913897 

 

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

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

89douner.tistory.com

 

 

 

  • Validation 할 때는 아래와 같은 방식으로 진행합니다.
    • 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)을 증대시킨 것이라고 할 수 있습니다.

 

(↓↓GPU 내부동작 살펴보기↓)

https://89douner.tistory.com/157?category=913897 

 

2.내장그래픽과 외장그래픽 그리고 GPU 병목현상(feat. Multi-GPU)

안녕하세요~ 이번글에서는 내장그래픽과 외장그래픽에 대해서 알아보면서 그래픽카드의 내부구조 동작 방식에 대해 간단히 알아보도록 할거에요. 그리고 딥러닝을 돌리시다보면 CUDA memory alloca

89douner.tistory.com

 

  • Communication cost와 GPU
    • 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를 참고하시면 될 것 같습니다.

 

(↓↓↓현재까지 정리되어 있는 convex optimization 내용들 ↓↓↓)

https://89douner.tistory.com/category/%EB%94%A5%EB%9F%AC%EB%8B%9D%EC%88%98%ED%95%99/Convex%20Optimization 

 

'딥러닝수학/Convex Optimization' 카테고리의 글 목록

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

89douner.tistory.com

 

 

[Four heuristic methods]

  • 이 논문에서는 앞서 언급한 단점을 커버하는 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 not change 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해지는게 아닌가 싶습니다. (← 주관적인 해석이라 그냥 넘어가셔도 좋을 듯 합니다)

이미지 출처: https://arxiv.org/abs/1712.09913

 

  • 결국 안정화된 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을 서서히 증가시켜줍니다.

 

 

(↓↓↓Warm-up 관련 github code↓↓↓)

https://github.com/ildoonet/pytorch-gradual-warmup-lr

 

ildoonet/pytorch-gradual-warmup-lr

Gradually-Warmup Learning Rate Scheduler for PyTorch - ildoonet/pytorch-gradual-warmup-lr

github.com

 

 

 

 

3-1-3. Zero gamma

→ 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.

https://stackoverflow.com/questions/12578336/why-is-the-bias-term-not-regularized-in-ridge-regression

 

Why is the bias term not regularized in ridge regression?

In most of classifications (e.g. logistic / linear regression) the bias term is ignored while regularizing. Will we get better classification if we don't regularize the bias term?

stackoverflow.com

  • 결론적으로 말하자면, bias batch normalization gamma, beta overfitting에 기여도가 낮습니다.
  • 오히려, 이 부분에 regularization을 주면, underfitting이 일어날 확률이 더 커질 수 있다고 하니 regularization을 적용 할거면 weight에 대해서만 적용하는 것이 바람직하다고 설명하고 있습니다 (Ian goodfellow 저서인 Deep Learning 책을 보시면 설명이 나온다고 하니 참고하시면 좋을 것 같습니다).

 

 

 

3-1-5. Low-precision training

 

  • Votal 관련한 FP16 설명은 아래 글을 참고해주세요.

(↓↓↓FP에 대한 개념과 Volta 아키텍처에서의 Mixed precision 설명 ↓↓↓)

https://89douner.tistory.com/159?category=913897 

 

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

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

89douner.tistory.com

 

 

  • 위의 설명은 아래 그림으로 도식화 할 수 있습니다. (FWD: ForWarD, BWD: BackWarD)
  • 간단히 설명하면 연산과정에서 forwarding하는 것과, gradient값을 구하는 과정에는 곱셈연산이 다수 포함되기 때문에 이러한 부분들은 FP16으로 처리하고, updating 시에는 이전 weight에 gradient값을 단순히 더해주기만 하면 되기 때문에 이 때만 FP32를 적용해 low-precision의 단점을 커버했습니다.

이미지 출처: https://arxiv.org/pdf/1710.03740.pdf

 

 

  • "Multiplying a scalar to the loss" 관련 내용은 loss scaling을 말하는 것으로써 자세하 설명하자면 아래와 같습니다.
  • Weight를 FP16으로 변환시켰을 때, 소수의 weight gradeint 값만 FP16으로 표현이 불가능하여 0값으로 설정된다고 합니다.

이미지 출처: https://arxiv.org/pdf/1710.03740.pdf

 

  • 하지만, 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으로 표현 가능

이미지 출처: https://nvlabs.github.io/eccv2020-mixed-precision-tutorial/files/dusan_stosic-training-neural-networks-with-tensor-cores.pdf

 

 

(↓↓↓loss sacling 참고할만한 사이트↓↓↓)

https://hoya012.github.io/blog/Mixed-Precision-Training/

 

Mixed-Precision Training of Deep Neural Networks

NVIDIA Developer Blog 글을 바탕으로 Deep Neural Network를 Mixed-Precision으로 학습시키는 과정을 글로 작성하였습니다.

hoya012.github.io

 

(↓↓↓Mixed precision and loss scaling 참고할만한 사이트↓↓↓)

https://nvlabs.github.io/eccv2020-mixed-precision-tutorial/files/dusan_stosic-training-neural-networks-with-tensor-cores.pdf

 

 

  • 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의 일부 구조를 변경시킨 것이라 특별히 설명할 부분이 없어서, 아래 사이트 링크를 걸어두었습니다.
  • 아래 사이트를 참고하셔도 되고, 충분히 논문의 그림만 보셔도 이해가 수월 하실거라 생각합니다.

https://phil-baek.tistory.com/entry/CNN-%EA%BF%80%ED%8C%81-Bag-of-Tricks-for-Image-Classification-with-Convolutional-Neural-Networks-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0

 

CNN 꿀팁 모음 (Bag of Tricks for Image Classification with Convolutional Neural Networks) 논문 리뷰

논문 제목 : Bag of Tricks for Image Classification with Convolutional Neural Networks 오늘은 Bag of Tricks for Image Classification with Convolutional Neural Networks에 대해 리뷰를 해볼까..

phil-baek.tistory.com

 

  • 만약, 해당 논문에 제시된 모델 중에 사용해보고 싶으신 모델이 있으시다면 아래 사이트에서 ResNet 부분을 참고하시고, pre-trained model을 이용하면 될 것 같습니다 (MXNET 기반입니다. Pytorch 버전은 추후에 추가할거라고 하네요)

https://cv.gluon.ai/model_zoo/classification.html#id239

 

Classification — gluoncv 0.11.0 documentation

 

cv.gluon.ai

 

 

 

 

 

 

 

 

5. Training Refinements

  • 앞서 배운내용을 잠시 정리하면 다음과 같습니다.
    • Section3: batch size를 키워주어 학습을 빠르게 진행하되 accuracy를 악화시키지 않는 방법들 소개
    • Section4: ResNet의 모델을 조금씩 바꿔주면서 accuracy를 향상
  • 이번 section5에서는 4가지 학습 방법론 (training refinements) 을 소개하면서 accuracy를 향상시키는 방법에 대해서 설명해보겠습니다. 

 

 

5-1. Cosine Learning Rate Decay

  • 앞서 특정 batch 까지는 learning rate warm-up 적용시킨다고 언급했습니다.
  • learning rate warm-up 이후에는 learning rate decay를 하게 됩니다.
  • 아래 그리처럼 epoch 마다 특정 learning rate 값을 설정해주면 step decay가 되고, batch마다 꾸준히 cosine annealing function을 이용해 learning rate 값을 줄여주면 cosine decay가 됩니다.
  • 이 논문에서는 처음 warm-up 단계에서의 batch 동안에는 이 함수가 적용되지 않기 때문에 실제 t값은 아래의 범위를 갖습니다.
    • t > total_number_of_batches_for_warm_up

 

(↓↓↓ Cosine learning rate 관련 github코드↓↓↓)

https://github.com/katsura-jp/pytorch-cosine-annealing-with-warmup

 

katsura-jp/pytorch-cosine-annealing-with-warmup

Contribute to katsura-jp/pytorch-cosine-annealing-with-warmup development by creating an account on GitHub.

github.com

 

(↓↓↓ Cosine learning rate 관련 pytorch코드↓↓↓)

https://pytorch.org/docs/stable/optim.html

 

torch.optim — PyTorch 1.8.1 documentation

torch.optim torch.optim is a package implementing various optimization algorithms. Most commonly used methods are already supported, and the interface is general enough, so that more sophisticated ones can be also easily integrated in the future. How to us

pytorch.org

  • 개인적으로 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을 적용시켜주어 위와 같은 문제를 피하려고 하고 있습니다. 

이미지 출처: https://all-free-download.com/free-photos/beautiful-cat-images.html

  • 논문에 있는 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를 학습방법론에 이용하기도 하고, 앙상블 관점에서도 응용해서 적용시키기도 하기 때문에 배워두시면 여러 방면에서 도움이 될거라 생각합니다.

https://89douner.tistory.com/category/Network%20Compression%20for%20AI/Knowledge%20Distillation

 

'Network Compression for AI/Knowledge Distillation' 카테고리의 글 목록

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

89douner.tistory.com

 

 

5-4. Mix-up training

  • Mix-up에 관한 설명은 "MixMatch; A Holistic Approach to Semi-Supervised Learning" 논문을 리뷰한 곳에서 자세히 설명되어 있으니, 아래 링크를 참고해주시면 감사하겠습니다. 

(↓↓↓MixMatch 논문에서 Mix-up 개념 설명↓↓↓)

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

 

1.MixMatch; A Holistic Approach to Semi-Supervised Learning

현재 다른 페이지에 작성하고 있습니다. 6월 11일 안으로 작성이 완료되는대로 글을 옮겨적도록 하겠습니다.

89douner.tistory.com

 

 

 

  • 지금까지의 언급한 내용을 다양한 CNN 모델에 적용한 결과가 Table 6입니다.
  • 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% 이상의 성능향상을 이끄는 것을 보면 유의미한 결과라고 볼 수 있을 듯 합니다.

 

 

 

 

[개인적인 경험 글]

  1. 위에서 언급 한 방법론 들을 medical 연구를 진행할 시 적용시켜 보았습니다 (KD, Mix-up, low precision을 제외).
  2. 해당 방법론들 중에서 warm-up 부분과 batch normalization zero gamma 방법들이 성능향상에 기여했습니다.
  3. 개인적인 경험에서는 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하도록 하겠습니다)
  4. Mix-up은 Medical data에 적용시키기가 조심스러운 부분이 있을거라 판단해서 적용하지 않았습니다.
  5. KD 관련 방법론은 올해 GAN과 CNN을 융합할 때 같이 적용해보려고 하고 있습니다.
  6. Low precision or Mixed precision 방법은 GCP 기반으로 volta GPU를 세팅한 후, GCP 베이스로 학습을 시킬 때 적용해보려고 하고 있습니다.

 

 

(↓↓↓Bag of Tricks for Image Classification with ~ 관련 Tensorflow 2 코드↓↓↓)

https://www.dlology.com/blog/bag-of-tricks-for-image-classification-with-convolutional-neural-networks-in-keras/

 

Bag of Tricks for Image Classification with Convolutional Neural Networks in Keras | DLology

Posted by: Chengwei 2 years, 6 months ago (Comments) This tutorial shows you how to implement some tricks for image classification task in Keras API as illustrated in paper https://arxiv.org/abs/1812.01187v2. Those tricks work on various CNN models like

www.dlology.com

 

 

 

지금까지 읽어주셔서 감사합니다!  

 

+ Recent posts