안녕하세요.

이번 글에서는 dicom 파일을 딥러닝 학습에 맞게 변환시켜주기 위해 조정해주는 전처리 기법에 대해서 알려드리려고 합니다.

 

 

 

1. DICOM 파일의 bit depth (Feat. Hounsfield unit)

한 이미지를 구성하고 있는 pixel 값의 범위는 기본적으로 0~255입니다.  \(0\sim2^8\)의 범위를 갖고 있기 때문에 8bit depth를 갖고 할 수 있습니다.

 

(↓↓↓bit depth (or color depth; 색 깊이)에 대한 설명은 아래 글을 참고해 주세요↓↓↓)

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

 

3-1. DICOM 파일이란? (Feat. Definition, PACS, digital image 습득과정)

안녕하세요. 이번 글에서는 의료 영상(Medical imaging)에서 사용하는 DICOM 파일이 어떻게 생겨났는지, 어떻게 이용되고 있는지 알아보도록 하겠습니다. 또한 DICOM이라는 것이 digital image이기 때문에,

89douner.tistory.com

 

<그림 출처: https://ai.stanford.edu/~syyeung/cvweb/tutorial1.html>

 

 

하지만, dicom 파일을 구성하고 있는 pixel은 0~255의 범위만 갖고 있는 것이 아니라, "-x ~ +x" 와 같이 범위가 마이너스부터 시작 되는 경우도 있고, bit depth가 12bit, 16bit로 구성되어 있는 것도 많습니다. 

 

예를 들어, CT에는 hounsfield unit (HU)이라는 것이 있습니다. X-ray 또는 CT 촬영 원리는 사람에게 방사선을 쏴서 방사능 투과율에 따라 detector 부분이 다르게 보이는 것입니다.  

 

 

 

결국 투과율에 따라 detector에 입력되는 값들이 다를 텐데, hounsfield라는 사람은 HU라는 단위를 통해 물체를 구분했습니다. HU 단위는 물을 기준으로 하고 뼈는 400~1000 HU 사이의 값을 갖고, 공기는 -1000의 값을 갖는다고 정의했습니다. 값이 작을 수록 검은색을 띄며, 값이 클 수록 흰색을 띕니다 (gray scale과 비슷하죠) 

 

<그림 출처: https://www.researchgate.net/figure/The-Hounsfield-scale-of-CT-numbers_fig2_306033192>

 

<그림 출처: https://www.researchgate.net/figure/Hounsfield-scale-table_tbl1_327863426>

 

<그림 출처: https://processing.org/tutorials/color>

 

 

실제로 dicom 파일 하나를 가져와서  max, min 값을 뿌려보면 아래와 같이 나옵니다.

(Note. DICOM 파일에서 추출한 pixel 값들이 완전히 HU 값을 표현한다고 볼 순 없습니다. 그 이유에 대해서는 다음 글의 "CT 전처리 관련 글"에서 'slope intercept equation' 부분에서 설명하도록 하겠습니다) 

 

 

2. DICOM 파일 전처리

앞서 DICOM 파일의 bit depth (color depth)와 실제 이미지 bit depth는 다르다고 언급했습니다.

딥러닝 모델에 들어가는 값은 보통 bit depth를 기반으로 하기 때문에, 이에 맞게 바꾸어 주어야 합니다. 즉, 12bit depth였다면, 0~255 range를 갖는 8bit depth로 변경시켜주어야 하는 것이죠.

 

8bit depth로 변경해주는 방법은 아래와 같습니다.

 

  1. 12bit depth 값들을 모두 0~1 사이로 normalization 해주기
  2. 0~1 사이로 normalization 해준 값들에 255를 곱해주어 이미지에 맞는 8bit depth로 변경해주기

 

 

(↓↓↓Normalization 공식↓↓↓)

<그림 출처: https://python.plainenglish.io/how-to-de-normalize-and-de-standardize-data-in-python-b4600cf9ee6>

 

 

 

 

이렇게 바꿔준 값들은 이미지로 저장시키거나 numpy로 저장시킵니다.

그리고, albumentation 같은 곳에서 load하기 쉽게 formatting을 해주죠.

 

(↓↓↓ albumentation 관련 글↓↓↓)

https://89douner.tistory.com/312?category=1001221 

 

1-2. Data Load (Feat. Albumentations)

안녕하세요. 이번 글에서는 Albumentations라는 패키지를 이용하여 데이터를 로드하는 방법에 대해서 설명하도록 하겠습니다. https://github.com/albumentations-team/albumentations GitHub - albumentations-te..

89douner.tistory.com

 

 

 

지금까지 DICOM 파일 전처리 관련된 설명이었습니다.

감사합니다~

안녕하세요.

이번 글에서는 contrastive learning에 대해서 설명하도록 하겠습니다.

 

Contrast라는 용어를 정의하면 아래와 같습니다.

 

"A contrast is a great difference between two or more things which is clear when you compare them."

 

그렇다면, contrastive learning이라는 것은 대상들의 차이를 좀 더 명확하게 보여줄 수 있도록 학습 한다는 뜻이 되겠죠?

 

'대상들의 차이'라는 말에서 중점적으로 봐야 할 것은 '차이'라는 용어입니다. 보통 어떤 '기준'으로 인해 '차이'가 발생합니다. 

 

예를 들어, 어떤 이미지들이 서로 유사하다고 판단하게 하기 위해서는 어떤 기준들이 적용되어야 할까요? 즉, 어떤 '기준'을 적용하면 이미지들이 비슷한지, 비슷하지 않은지에 대한 '차이'를 만들어 낼 수 있을까요?

 

고양이라는 이미지가 있다고 가정해보겠습니다. 고양이 이미지에 augmentation을 주게 되도 그 이미지는 고양이 일 것입니다. 즉, 원본 고양이 이미지와 augmentation이 적용된 고양이 이미지서로 유사(=positive pair)하다고 할 수 있죠.

 

 

누군가(제3자)가 augmented image에 굳이 'similar'라고 labeling 해줄 필요 없이 input data 자기 자신(self)에 의해 파생된 라벨링(supervised ex: augmented image) 데이터로 학습(learning)하기 때문에 self-supervlsed learning이라고 할 수 있습니다.   

 

"하지만 'similar' 정의는 어떤 기준을 삼느냐에 따라 굉장히 달라 질 수 있습니다."

 

물론, similar를 찾는 방법도 굉장히 다양하겠죠. 지금부터 이에 대해서 천천히 알아보도록 하겠습니다.

 

 

 

 

 

1. Similarity learning 

앞서 언급한 내용 중에 가장 핵심적이고 자주 등장하는 용어가 'similar'입니다. 그렇다면, contrastive learning과 similarity learning은 어떤 관계가 있을까요? 먼저, similarity learning정의부터 살펴보겠습니다.

 

"Similarity learning is closely related to regression and classification, but the goal is to learn a similarity function that measures how similar or related two objects are."

 

결국, contrastive learningsimilarity learning 모두 다 어떤 객체들에 대한 유사도와 관련이 있다는걸 알 수 있습니다.

 

<그림 출처: https://www.youtube.com/watch?v=OkcS4qE4Zsg>

 

 

좀 더 similarity learning을 알아볼까요?

먼저, similarity learning의 3가지 종류들에 대해서 알아보도록 하겠습니다.

 

(↓↓참고 자료↓)

https://en.wikipedia.org/wiki/Similarity_learning

 

Similarity learning - Wikipedia

Similarity learning is an area of supervised machine learning in artificial intelligence. It is closely related to regression and classification, but the goal is to learn a similarity function that measures how similar or related two objects are. It has ap

en.wikipedia.org

 

 

1-1. Regression similarity learning

 

      • 두 객체(ex: 이미지)간의 유사도를 알고 있다는 전제하에 supervised learning 학습을 시키는 것
      • 유사도는 어떤 기준(pre-defined)에 의해 설정되는데, 이 기준에 의해 모델이 학습됨
        • 위의 y유사도를 나타내 주는 → 즉, 유사도가 높으면 y 값이 높게 설정 됨
      • 앞서 설정한 유사도에 따라 모델이 학습되면, 학습된 모델에 test 데이터인 두 객체(ex:이미지)가 입력 될 때 pre-defined 기준에 따라 유사도를 결정
        • Ex) 강아지 이미지 데이터들 간에는 모두 강한 유사도를 주고강아지 이미지 데이터와 고양이 이미지 데이터들의 유사도는 굉장히 낮은 값으로 설정해주어 학습 시키면학습 한 모델은 강아지 이미지들끼리에 대해서 높은 유사도 값을 regression할 것 입니다.
    • 하지만이러한 유사도(y)를 미리 알고 어떻게 할당해줄 것인지는 굉장히 어려운 문제

 

 

 

1-2. Classification similarity learning

 

[앞선 "Regression similarity learning" 방식과 다른 점]

  • Regression: y∈R
    • 유사도(=y) 값의 범위는 실수 (ex: 0~1) → 유사도의 정도를 파악할 수 있음
    • 이때, R값의 범위를 어떻게 설정하고, 어떤 y값을 해줘야 하는지 어려움 (soften label 개념정도로 봐도 될 듯)
  • Classification: y{0,1}
    • 두 객체가 유사한지 아닌지만 알려주기 때문에 입력으로 들어오는 두 객체(ex:이미지)가 어느 정도로 유사한지는 알 수 없음

 

 

 

1-3. Ranking similarity learning

[앞선 두 가지 방식("regression or classification similarity learning")과 다른 점]

  • 앞선 두 가지 방식과 다른 부분은 "세 가지 입력 데이터 (triplets of objects)"를 필요로 한다는 점입니다.
  • 일반적인 데이터 "x"와 "x와 유사한 x+", "x와 유사하지 않은 x-" 데이터가 입력으로 들어갑니다.
  • 이런식으로 유사한 데이터들 간의 유사도와 유사하지 않은 데이터들 간의 유사도 차이를 위와 같이 설정하여 학습하게 됩니다. 

 

결국 contrastive learning과 similarity learning 모두 데이터들 간의 similarity를 알아내는 것이 목적입니다. 

 

"Contrastive learning is an approach to formulate the task of finding similar and dissimilar things for an ML model."

 

"The main idea of contrastive learning is to learn representations such that similar samples stay close to each other, while dissimilar ones are far apart."

 

<이미지 출처 논문: Deep Metric Learning via Lifted Structured Feature Embedding>

 

 

"Similarity learning is closely related to distance metric learning." 

 

데이터들끼리 유사도가 높다는 것을 거리(distance)관점에서 해석해볼 수 도 있습니다. 예를 들어, 유사한 데이터 끼리는 거리가 가깝다는 식으로 해석해 볼 수 있는 것이죠. 그래서, similarity learning, contrastive learning을 배우다 보면 distance metric learning이라는 용어가 자주 등장합니다. 

 

 

 

 

 

2. (Distance) Metric learning

유사도판단하는데 있어서는 굉장히 다양한 기준이 적용될 수 있습니다.  유사도 판단하는 한 가지 방법은 거리관점에서 해석하는 것입니다. 

 

보통 거리라는 개념을 단순히 점과 점 사이의 최단 거리로만 이해하는 경우가 있지만, 거리를 측정하는 방식에는 다양한 방법이 존재 합니다. 즉, "거리"라는 개념을 어떻게 해석하느냐가 굉장히 중요한 문제라고 볼 수 있습니다.

 

결국, 두 객체간의 거리를 측정할 수 있는 방법이 다양하기 때문에 두 객체간의 유사도를 적용할 수 있는 기준이 다양하다고 할 수 있습니다.

 

"Similarity learning is closely related to distance metric learning. Metric learning is the task of learning a distance function over objects."

 

 

위의 정의에 따라 metric learning객체간의 거리를 학습하는 방법들에 대해 연구하는 분야라고 할 수 있습니다.

 

그렇다면, metric이라는 개념부터 정의해볼까요? 

 

"A Metric is a function that quantifies a “distance” between every pair of elements in a set, thus inducing a measure of similarity."

 

 

객체(데이터)들 간의 거리(or 유사도)를 수량화 하는 방법여러가지가 있습니다. (결국, 우리가 배우는 contrastive learning 기법에서도 아래와 같은 metric들 중에 어느 것을 사용하느냐에 따라 다양한 연구가 진행 될 수 있겠죠.)

 

<그림 출처:  https://slazebni.cs.illinois.edu/spring17/lec09_similarity.pdf>

 

 

Metric learning에서 중요한 개념은 '거리'입니다. 그렇기 때문에, metric learning에서 정의한 4가지 속성도 '거리'의 속성을 그대로 반영하고 있죠.

 

"A metric or distance function must obey four axioms"

 

  1. Non-negativity: f(x,y)≥0
    • x, y 두 데이터 간의 거리는 음수가 될 수 없다.
  2. Identity of Discernible: f(x,y)=0 <=> x=y
    • x, y 두 데이터 간의 거리가 0이라면, x와 y 데이터는 동일하다.
  3. Symmetry: f(x,y) = f(y,x)
    • "x,y" 간의 거리나, "y,x" 간의 거리는 같다 
  4. Triangle Inequality: f(x,z)≤f(x,y)+f(y,z)
    • "x,z"간의 거리는 "x,y" 간의 거리와 "y,z"간의 거리를 합한 것보다 클 수 없다.

 

 

 

2-1. Metric  of Two types

거리를 측정하는 metric 방식에도 크게 두 가지 종류가 있습니다.

 

  1. Pre-defined Metrics
    • 단순히 데이터들을 정의 된 metric 공식에 입력하고 '거리' 값을 도출하여 유사도 비교 
  2. Learned metrics
    • 데이터들로 부터 추정할 수 있는 다른 지표들을 metric 공식에 적용하여 '거리' 값을 도출 

 

<그림 출처: https://slazebni.cs.illinois.edu/spring17/lec09_similarity.pdf>

 

 

'Learned metrics' 방식의 대표주자라고 할 수 있는 것은 딥러닝을 이용한 deep metric learning 방식입니다. 그럼 지금부터 deep metric learning에 대해 좀 더 알아보도록 하겠습니다.

 

 

 

2-2. Deep Metric Learning (Feat. Contrastive loss)

객체(데이터)들이 만약 고차원이라면 서로 간의 유사도비교하는건 굉장히 어려운 문제가 될 수 있습니다.

 

예를 들어, 의미적으로 가깝다고 생각되는 고차원 공간에서의 두 샘플(A,B)간의 실제 Euclidean distance는 먼 경우가 많습니다.그 이유는 “curse of dimension”으로 인해 의미 있는 manifold를 찾지 못했기 때문이죠. 

 

[추후에 Auto-Encoder 관련 글이 완성되면 manifold에 대한 보충 설명 글로써 링크를 걸어두도록 하겠습니다]

 

<그림 출처:  https://slidetodoc.com/image-manifolds-a-a-efros-16-721-learningbased/>

 

 

실제 Euclidean distance는 manifold 상에서 구해야 하기 때문에, manifold를 잘 찾는 것이 두 데이터간 유의미한 similarity를 구하는데 결정적인 역할을 할 수 있겠죠.

 

<그림 출처:  https://slidetodoc.com/image-manifolds-a-a-efros-16-721-learningbased/>

 

 

결국, 유의미한 manifold를 찾기 위해서는 dimension reduction 방식이 필요한데, 그것이 오늘날 자주 사용되는 deep neural network이죠.  

 

<그림 출처: http://daddynkidsmakers.blogspot.com/2021/05/>

 

 

결국, 특정 metric(ex: Euclidean distance)을 기준으로 한 유사도를 찾기 위해 deep learning model의 parameter들이 학습된다면, 이는 해당 meteric을 찾기 위한 manifold를 찾는 과정이라고 볼 수 있고, 이 과정 자체가 "estimated from the data"를 의미하기 때문에, learned metrics라고 볼 수 있는 것입니다.

<그림 출처:  https://tyami.github.io/deep%20learning/Siamese-neural-networks/>

 

다시 말해, deep metric learning이란 deep neural network를 이용하여 적절한 manifold를 찾아 metric learning을 연구하는 분야라고 정리할 수 있습니다. 

 

 

UIUC 대학의 SVETLANA LAZEBNIK 교수similarity learning ppt자료를 살펴보면 deep neural network를 이용하여 metric learening을 하는 것을 확인해 볼 수 있습니다.

 

<그림 출처:  https://slazebni.cs.illinois.edu/spring17/lec09_similarity.pdf>

 

 

[deep metric learning의 예시]

먼저, 유사한 이미지를 한 쌍으로 한 positive pair 끼리는 Euclidian Loss가 최소화가 되도록 학습 시키면, deep neural network는 고차원 원본 데이터 positive pair끼리 거리가 가깝도록 low dimension으로 dimension reduction(or embedding) 할 것입니다. 즉, positive pair끼리는 Euclidian loss가 최소화 되게 parameter들이 학습된 것인데, 이것을 원본 데이터로 부터 추정(estimation)되었다고 볼 수 있기 때문에 learned metric이라고 한 것이죠.

 

 

또한, negative pair 끼리는 Euclidan distance 값이 커지도록 설정해줄 수 있습니다. 아래 수식을 보면, margin (m) 이라는 개념이 도입되는데, margin은 negative pair간의 최소한의 거리를 의미합니다. 예를 들어, 우리는 loss 값이 최소가 되기를 바라는데, negative pair (xn, xq) 의 거리가 m 보다 작다면 계속해서 loss 값을 생성해낼 것 입니다.  그런데, 만약 학습을 통해 negative pair 간의 거리가 m 보다 크게 되면 loss 값을 0으로 수렴시킬 수 있게되죠. 

 

 

 

위에서 언급한 두 수식을 결합한 loss를 contrastive loss라고 합니다.

 

 

쉽게, contrastive loss를 통해 학습을 한다는 것은 두 데이터가 negative pair일 때, margin 이상의 거리를 갖게 하도록 학습하는 것과 동일하다고 할 수 있습니다.

<그림 출처: https://pizpaz.github.io/paper/ml/Ranked-List-Loss-for-Deep-Metric-Learning/>

 

 

Pytorch에서는 negative pair 뿐만 아니라, positive pair에 대한 margin 값도 설정해놓고 있습니다. (참고로 아래 LpDistance는 Euclidean distance를 의미합니다)

 

<그림 출처: https://www.semanticscholar.org/paper/The-General-Pair-based-Weighting-Loss-for-Deep-Liu-Cheng/6c55bcc205b24c7aaf39680d71716e598a3cc536>

 

(↓↓↓ Pytorch metric learning loss ↓↓↓)

https://kevinmusgrave.github.io/pytorch-metric-learning/losses/#contrastiveloss

 

Losses - PyTorch Metric Learning

Losses All loss functions are used as follows: from pytorch_metric_learning import losses loss_func = losses.SomeLoss() loss = loss_func(embeddings, labels) # in your training for-loop Or if you are using a loss in conjunction with a miner: from pytorch_me

kevinmusgrave.github.io

 

 

참고로, margin이라는 개념이용하게 되면 경우에 따라 negative pairs의 관계를 크게 3가지로 나눌 수 있습니다.

  • d: distance를 구하는 함수
  • a: positive, negative pair의 기준이 되는 데이터
  • Hard Negative Mining: positive pair에 해당하는 margin 안에 negative sample이 포함되어 있는 경우
  • Semi-Hard Negative Mining: positive pair margin 범위 안에 속하진 않지만, negative pair margin 범위 안에도 속하지 않는 경우
  • Easy Negative Mining: negative pair margin 범위에 속하는 경우

<그림 출처: https://www.mdpi.com/2073-8994/11/9/1066/htm>

 

 

 

 

결국, contrastive loss를 이용하여 deep metric learning을 하게 되면 아래 그림 같이, 유사한 데이터들끼리 clustering이 될 것 입니다.

<그림 출처: https://www.sciencedirect.com/science/article/abs/pii/S0925231219306800>

 

 

사실, contrastive loss라는 용어와 개념은 "Dimensionality Reduction by Learning an Invariant Mapping"이라는 논문에서 기원했습니다. 아래 논문의 저자로 우리가 익히 알고 있는 'Yann LeCun' 교수님도 있으시네요.

 

“Contrastive loss (Chopra et al. 2005) is one of the earliest training objectives used for deep metric learning in a contrastive fashion.”

 

 

 

앞서, 소개한 contrastive loss는 contrastive learning의 한 종류입니다.

 

즉, contrastive learning 이라는 것은 데이터들 간의 특정한 기준에 의해 유사도를 측정하는 방식인데, contrastive loss는 positive pair와 negative pair 간의 유사도를 Euclidean distance 또는 cosine similairty를 이용해 측정하여, positive pair 끼리는 가깝게, negative pair 끼리는 멀게 하도록 하는 deep metric learning (or learned metric) 이라고 정리할 수 있습니다.

 

(참고로, contrastive learning을 굳이 deep neural network로 하지 않아도 되지만, deep neural network의 강력한 효용성 때문에 deep neural network를 기반으로한 deep metric learning 방식인 contrastive learning을 하려고 하는 것이 죠.)

 

Positive pair 끼리는 가깝게, negative pair 끼리는 멀게 하도록 하는 deep metric learning (or learned metric) 기반의 contrastive learning 종류는 굉장히 다양합니다. 즉, 유사도측정하는 방식 다양하죠. 예를 들어, infoNCEmutual information이라는 개념기반으로 유사도를 측정합니다. (Triplet loss는 이미 similarity learning에서 간단히 설명한 바 있습니다).  (Mutual information 관련 설명은 다음 글에서 하도록 하겠습니다).

 

 

 

지금까지의 설명을 기반으로 봤을 때 deep metric learning 기반의 contrastive learning이라는 분야를 다룰 때 중요하게 다루어야 하는 개념 두 가지가 있습니다.

 

  1. Similarity Measure (Metric)
    • Contrastive learning은 positive pair 끼리는 가깝게, negative pair 끼리는 멀게 하도록 해주는 것이 목적입니다.
    • 이 때, positive pair라는 것을 상징하는 유사도 값의 종류는 굉장히 다양합니다.
      • ex1) Euclidean distance → Contrastive loss
      • ex2) Mutual information → infoNCE
  2. Dimension Reduction (deep neural network; Nonlinear dimension reduction)
    • Contrastive learning 즉, 데이터들 간의 유사도를 비교하는데 있어서 굳이 deep neural network를 사용할 필요는 없습니다.
    • 하지만, 고차원 데이터들 간의 유사도를 비교하는 것은 쉬운일이 아닙니다.
    • 그래서, 유사도 기준에 알맞도록 고차원 데이터를 저차원으로 dimension reduction 하는 방법이 중요합니다.
    • Deep neural network는 이미지와 같은 고차원 데이터를 저차원 feature로 embedding 할 수 있는 강력한 dimension reduction 기능을 갖고 있습니다. 

(↓↓↓ 딥러닝 외 nonlinear dimensionality reduction 방식 ↓↓↓)

 

 

 

개인적으로는, contrastive learning연구하기 위해서는 두 가지 key word 인, "Metric learning", "Deep Neural Network"에 초점을 맞추는게 중요하다고 생각합니다.

 

 

 

지금까지 Contrasitve learning에 대해 간단히 정리해봤습니다.

이번 contrastive learning에서는 유사도 Euclidean distance를 기준으로 한 contrasitve loss를 소개했습니다.

 

다음 글에서는 contrastive learning 중에 mutual information을 유사도의 기준으로 삼은 다양한 loss에 대해 소개해 보도록하겠습니다. 

 

감사합니다. 

 

 

 

[Reference site]

https://lilianweng.github.io/lil-log/2021/05/31/contrastive-representation-learning.html#contrastive-loss

 

Contrastive Representation Learning

The main idea of contrastive learning is to learn representations such that similar samples stay close to each other, while dissimilar ones are far apart. Contrastive learning can be applied to both supervised and unsupervised data and has been shown to ac

lilianweng.github.io

 

https://slazebni.cs.illinois.edu/spring17/lec09_similarity.pdf

 

 

'Self-Supervised Learning > Contrastive learning (2018~)' 카테고리의 다른 글

1. Mutual information  (0) 2021.10.04

+ Recent posts