본문 바로가기

Deep Learning

TF 버전 별 재현성 잡는 방법 정리 이전 글에 정리한 것처럼 재현성 잡힌 결과를 얻고 싶다면 Tensorflow-Determinism을 다운받아 사용해주면 된다. UpSampling의 Interpolation 이슈만 제외하고 나머지는 거의 다 재현성이 잡혀서 원하는 결과를 얻을 수 있다. TF 1.14.0 버전을 사용하던 나는 1년 동안 아무 문제 없이 잘 사용하고 있었는데... 최근 들어서 또 다시 재현성의 늪에 빠지게 됐다. TF 2.1 이상은 tf-deteminism이 지원을 안 하네..? 말 그대로다. 회사 서버 업데이트를 하게 돼서 TF 2.5 버전을 사용하게 됐는데 tf-determinism이 해당 버전은 지원 안 한다는 에러 문구가 뜨더라. 그러면서 TF 2.8부터는 tf-determinism을 따로 설치할 필요 없이 간단한 .. 더보기
Self-evolving vision transformer for chest X-ray diagnosis through knowledge distillation (2022, Nature Communications) 의료 영역에서 주로 사용되는 모델 학습 방식은 지도학습(supervised learning)이다. CXR을 Radiologist가 판독한 결과를 해당 CXR의 정답 데이터(Label)로 학습에 사용한다. 직관적이고 간단한 학습 방법이면서도 모델의 성능 또한 좋게 나와서 의료 영역 뿐만 아니라 여러 영역에서 사용되는 학습 방법이다. 문제는 지도학습 방식에 꼭 필요한 고품질의 Label을 확보하는 과정이 어렵고 비용도 많이 든다는 것이다. CXR 촬영을 루틴으로 진행하는 건강검진센터만 놓고 생각해봐도 하루에 발생되는 CXR의 양은 쏟아지는 수준이다. 이러한 Large-scale CXR Datset의 모든 판독문을 분석해서 Labelling을 진행하는 것이 가장 이상적이겠지만, 기업 입장에서는 비용효율적인 측.. 더보기
헷갈리는 Dice와 IoU 개념, 내가 정리해 봄ㅋ Dice Score와 IoU Score는 Segmentation Task를 진행하면 흔하게 접하게 되는 개념이다. 'Prediction과 Ground-Truth가 얼마나 겹치느냐'를 평가하는 데에 쓰인다. 사실 IoU는 Object Detection에서만 사용되는 개념으로 알고 있었는데 Segmentation에서도 사용된다는 건 이번에 제대로 알게 됐다. 그래서!! 공부한 김에 정리해두고자 한다. 이번 글에서 다룰 내용은 아래와 같다. Dice와 IoU의 정의와 차이점 Score를 Loss로 사용할 때 어떤 차이가 있는지 추가로 알아둘 점 1. Dice와 IoU의 정의와 차이점 Dice와 IoU, 더 정확하게는 Dice Score와 IoU Score는 모두 모델이 GT와 얼마나 유사한 결과를 내놓는지를 .. 더보기
Loss weight, Class weight, Sample weight 케라스로 모델을 설계한 다음, 학습시키는 과정에서 적용할 수 있는 weight의 종류는 크게 3개이다. Loss weight model.compile( )에서 "loss_weights" 파라미터를 통해 넣어줄 수 있다. 모델에 2개 이상의 loss functin이 걸리는 경우 사용할 수 있는 파라미터이다. (EX) model.compile(optimizer='adam', loss=['binary_crossentropy', 'mse'], loss_weights=[2, 1]) Class weight 클래스 불균형을 해결하기 위한 방법으로 샘플 수가 상대적으로 적은 Class 쪽에 가중치를 부여하는 방식이 있다. model.fit( )이나 model.fit_generator( )의 "class_weight" .. 더보기
Probability Calibration 개념 정리 의료 AI 영역에서 일을 하다보면 의사로부터 "인공지능 모델의 출력값이 정확히 무엇을 의미하는 건가요? 0.7이라는 숫자는 환자가 실제로 질병을 갖고 있을 확률이라는 뜻인가요?"와 같은 맥락의 질문을 되게 많이 듣게 된다. 솔직히 그런 질문을 처음 들었을 때는 '어..? 나도 모르겠는데??...'하는 생각이 제일 먼저 들었다. 출력값에 thr 걸어줘서 단순히 True or False로만 생각해봤지 출력값 그 자체가 갖는 의미에 대해서는 깊게 생각해본적이 없었다. 그래서 이것 저것 검색하다보니 Probability Calibration이라는 개념을 접하게 됐다. 연구가 엄청 활발한 분야는 아닌 것 같은데 Medical Imaging 영역에서는 꼭 필요한 개념이라 차근차근 공부하며 정리해나가고자 한다. Pr.. 더보기
How to get reproducible results with Keras (or Tensorflow) ? You can use Tensorflow-Determinism. Check this Link. Line 5 and 6 are important to set reprocibility of Keras. import os import random import numpy as np import tensorflow as tf from tfdeterminism import patch patch() random_seed = 7 os.environ["PYTHONHASHSEED"] = "0" os.environ['TF_DETERMINISTIC_OPS'] = '1' os.environ['TF_CUDNN_DETERMINISTIC'] = '1' np.random.seed(random_seed) random.seed(rando.. 더보기
Generative Adversarial Network (GAN) 설계 시 고려할 부분 GAN은 Generator와 Discriminator가 서로 경쟁하며 학습이 진행되는 network 구조라서 어느 하나의 성능이 낮으면 한 쪽으로 훅 치우치는 경향이 있다. Optimizer와 Learning rate에 따른 성능 차이도 꽤 심하게 나타난다. GAN에서 개인적으로 가장 곤란한 게 성능이 안 나와서 train loss든 train accuracy든 들여다봐도 뭐가 문제인지 해석하기 어렵다는 점이다. 이럴 땐 우선 Discriminator의 복잡도를 올려보자. 더보기
(5) Domain-Adversarial training of Neural Networks (DANN) Keras Code Review Domain Adaptation의 한 부류인 Latent Feature Space Trasnformation에 대한 다섯번째 정리 글이다. 이번 글에서는 Domain-Adversarial training of Neural Networks 논문를 Keras로 직접 구현한 코드 리뷰 시간을 갖고자 한다. 이전에 혼자서 CycleGAN 구현했던 코드를 바탕으로 여러 Github 참고하면서 작업을 진행했다. 먼저 이전 글에서 설명했던 그림을 다시 봐보면서 구현 시 고려해야할 점들을 짚어보자. Inputa Data를 Source와 Target으로 구성하면서 어떻게 Task Classifier는 Source만으로 학습하게 만들지?? 어떻게 하면 Generator가 Domain 특성은 뭉개면서 Task에는 좋은 Fe.. 더보기