| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- precision #정밀도 #민감도 #sensitivity #특이도 #specifisity #F1 score #dice score #confusion matrix #recall #PR-AUC #ROC-AUC #PR curve #ROC curve #NPV #PPV
- genetic epidemiology
- parrec
- paper review
- nlp
- Surgical video analysis
- deep learning #segmentation #sementic #pytorch #UNETR #transformer #UNET #3D #3D medical image
- 확산강조영상
- nfiti
- non-parametric model
- parer review
- 모수적 모델
- words encoding
- decorater
- 데코레이터
- 파이썬
- MICCAI
- 확산텐서영상
- 코드오류
- 비모수적 모델
- tabular
- MRI
- Phase recognition
- 유전역학
- PYTHON
- TeCNO
- parametric model
- TabNet
- nibabel
- monai
- Today
- Total
목록전체 글 (45)
KimbgAI
참 오랜만에 하는 논문 리뷰네요ㅎㅎ TabNet은 Google Cloud AI팀에서 2021년 AAAI에 발표한 모델로 고성능, 고해석성을 가지고 있는 딥러닝 모델. 표 형식 데이터(tabular data)에 강점을 가지고 있는 모델임. 관련 논문은 아래 링크 참고!https://arxiv.org/pdf/1908.07442 TabNet은 tabular data를 학습하기 위한 새로운 딥러닝 아키텍처 (오른쪽 그림)순차적인 어텐션 구조를 바탕으로 해석력과 효율적인 학습을 가능하게 하고, 더불어 자기지도학습 방법을 적용해서 성능을 향상시킬 수 도있음. 텝넷은 Feature Transformer 블럭과 Attention Transformer 블럭으로 구성되어있고, 이러한 구조가 여러 개의 스텝을 통해 반..
본 리뷰는 아래 유투브 링크에 실린 이진원 님의 페이퍼 리뷰를 바탕으로 개인적으로 공부하기 위해 제작되었습니다.https://www.youtube.com/watch?v=mtUa3AAxPNQ&t=1463s 레즈넷의 저자인 카이밍허가 1저자로 참여한 논문FAIR에서 2021년 11월에 발표함. 논문에서 말하고자하는 것은 아래 이미지가 전부임이미지에 마스크를 씌워놓고 이를 복원하는 과정에서 모델을 사전학습하겠다는 것. 인트로던션딥러닝 모델의 capablility와 capacity가 커짐으로써 백만장 정도의 이미지는 쉽게 오버피팅이 되기 때문에 더 많은 데이터가 필요로 하게 됨. NLP 쪽에서는 이를 self-supervised pretraining 방법을 통해 다루었음.그래서 GPT나 BERT같은 모델들이..
생존분석을 공부하다가 '파라메트릭' 모형, '비파라메트릭' 모형과 같은 개념이 등장했다.단순하게 parameter가 있는 모델이겠니~, 학습이 되는 모델이구나~ 생각하고 넘겼으나, 그것과는 다른 개념이었다. 결론부터 말하자면,'데이터가 특정 분포를 따른다는 가정의 유무'로 나뉜다.즉, 어떤 모델이 데이터가 특정 분포를 따른다는 가정이 있다면 parametric model, 아니면 non-parametric model이다. 예를들면,선형 회귀 모델에서 우리는 데이터가 '선형 관계'를 가진다고 가정하고, 기울기와 절편이라는 두개의 파라미터를 추정한다.이는 모형의 구조가 고정되어 있고, 소수의 파라미터로 그 분포를 정의하는 것이다.이는 정규분포, 포아송분포, 이항분포 등의 형태를 가정할 수 있음!다른 모델..
이 논문은 수술 영상의 phase를 recognition을 하기 위한 연구로 2020년에 MICCAI에 기재됐다. https://link.springer.com/chapter/10.1007/978-3-030-59716-0_33 개인적으로 surgical video analysis 중 phase recognition 연구의 milestone으로 생각한다. 비교적 적용하기 간단하고 이해도 어렵지 않기 때문이다. Introduction 본 연구는 복강경 수술 비디오를 분석하여, 해당 프레임이 전체 수술 phase 중 어느 phase에 해당하는지 분류하는 연구를 진행함. Surgical workflow analysis는 환자의 안전을 증진하고, 수술 에러를 줄이고, 수술실에서 의사소통을 최적화하는데 도움을 줄 ..
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding Devlin, Jacob, et al. "Bert: Pre-training of deep bidirectional transformers for language understanding." arXiv preprint arXiv:1810.04805 (2018). 2018년에 구글에서 발표된 너무나도 유명하고 NLP 공부할때 milestone이 되는 모델이다. 시작해보자. 개요 언어모델을 개발할때 양질의 pre-trained word representation을 사용하는 것은 매우 중요함. 왜? 좋은 word representation은 down-stream tas..
이 내용은 유투브 허민석님의 자료를 공부하며 정리하기 위해 작성된 내용임을 밝힙니다. https://www.youtube.com/@TheEasyoung bag of words 란? 단어는 머신러닝 모델에 입력으로 사용하기 위해 숫자로 변환되어야함. 이를 위한 다양한 방법들이 있는데, 그 중 가장 기초적인 것이 바로 bag of words 라는 것으로 굉장히 심플하다. 전체 데이터셋에서 나타나는 모든 단어 기반으로 임의의 문장을 원핫인코딩(one-hot encoding)하여 나타낸 것. 가령, 아래와 같이 나타내는 것이다. 전체 데이터셋에서 나타나는 각각의 유니크한 문자들을 나열하고, 어떤 문장을 이루는 단어들이 해당 문장에 몇번 나타났는지 표기하는 것이다. 이로써 다른 문장들과의 유사성도 계산할 수 있다..
도무지 이해가 안가는 경우였다. monia의 DiceMetric를 사용하던 중 y에 label을 넣고 y_pred에 model의 output을 넣는데 계산이 이상하게 나왔던 것. 더 이상했던 것은 y에 model의 output을 넣고, y_pred에 label을 넣으니 제대로 작동하더라는 것이다. 두 눈을 의심하고 코드를 뜯어봐도 결과는 마찬가지였다. 기존에는 동일한 코드로 잘만 사용했었는데 말이다. 해결한 결과부터 말하면, 1. output을 argmax 해야했음 2. 이제서야 문제가 밝혀는 까닭은 기존에 사용했던 monai 버전과 달라서 그랬던 것. (기존에는 1.0.0 사용, 현재는 1.3.0 사용) 현상을 살펴보면.. 각각 target, output, scratch 을 시각화면 아래와 같다. im..
파이썬으로 ParRec 파일을 nifti 파일로 변환하는 코드 import nibabel as nib par_path = '/data/2030/BrainMRI/Dataset/Sample/DTI_sample.PAR' nifti_path = '/data/2030/BrainMRI/Dataset/Sample/DTI_sample.nii.gz' img = nib.load(par_path) nifti = nib.Nifti1Image(img.dataobj, img.affine, header=img.header) nifti.set_data_dtype('
오랜만에 포스팅이네요. 그간 하루하루 일에 치이다보니 글을 쓸 여력없었는데, 다시 열심히 포스팅을 할까 합니다. 작년 5월이 마지막 포스팅이었는데, 그동안 경험하고 저를 성장시킨 내용들을 하나하나씩 정리해야겠습니다. 포스팅은 하지 않았지만, 제가 작성했던 내용을 보기 위해 종종 들어오긴 했거든요. 과거의 저에게 도움을 받을 일이 생각보다 많더랍니다. 그럴때마다 다시 포스팅을 시작해야겠다고 다짐하고서는, 이제야 글을 쓰게 되네요. 별볼일 없는 내용임에도, 생각보다 많은 분들이 찾아주셔서 감사하고 신기하더라구요. 2024년 올해 목표는 애드센스로 수익 창출! (작년에도 같은 목표였다는..) 그러면 좋겠지만, 달성하지 못하더라도 공부하고 익힌 내용들을 꾸준히 정리해나가는 것을 진정한 목표로 삼습니다. 그럼 올..
2년 전인가.. 개인용 딥러닝 서버를 구축했을때 4TB 정도면 넉넉히 잘 쓸줄 알았는데, 1년 정도 쓰니 중간중간 관리를 안해주면 금방 찰 것 같았다.. 근데 최근에 데이터를 무진장 많이 받을 일이 있어서 도저히 4테라로는 감당이 안돼서 8테라를 추가로 구입했음! 아무튼 연결하는 방법은 아래 순서와 같다. 1. 당연하겠지만 먼저 물리적으로 HDD를 컴퓨터에 연결 - 전원을 끄고 연결하기를 추천.. 2. 컴퓨터를 켜고 디스크가 감지되었는지 확인해야함. - 아래 명령어를 통해 확인할 수 있고, sudo fdisk -l'/dev/sdX' 와 같은 형식으로 표시된다. 3. (옵션사항) 파티셔닝 단계파티셔닝은 안해도 된다. ChatGPT의 파티셔닝 설명 " 파티셔닝은 하드 디스크를 논리적인 섹션으로 나누는 작업입..
git으로 코드를 공유하기 위해, 누군가 private repository를 만들어 나를 초대했다. 나의 local에 저 repository를 연결하여 사용하는 법을 알아보자 그냥 $git clone [해당 repository 주소] 를 하면 될줄알았지만,, 당연히 안된다. 왜냐하면 git서버에서 내가 누군지 모르는데 private repository에 접근이 가능할리가! 이를 해결하기 위한 순서는 대충 아래와 같다. 1. git 접속을 위한 SSH key 만들기 2. clone 1. git 접속을 위한 SSH key 만들기 깃허브에 가서 setting에 들어가고, SSH and GPG keys에 들어가면, SSH keys를 등록하는 곳이 나온다. 앞서 SSH key를 생성해야하는데, https://it..
어떤 이미지 안에 object 별로 annotation이 된 segmentation mask를 받았는데, 어떤 색상들로 구성되어 있는지 모를때.. 확인이 필요했다. 예를 들면, Pascal VOC 데이터셋 같은 경우는 색상별 어떤 클래스인지 나와있지만 그렇지 않은 경우에는 클래스가 몇개가 있고, 어떤 색상으로 되어있는지 확인이 필요하다. 간단하게 확인할 수 있는데, from PIL import Image import matplotlib.pyplot as plt path = '/data/2030/BileDuct/TestImage/mask/10.png' # 이미지 열기 image = Image.open(path) plt.imshow(image) (위 이미지는 간 수술 영상에서 담관을 annotation한 m..
클래스에서 매서드를 통해 속성의 값을 가져오거나 저장하는 경우가 있습니다. 예를들면, 아래와 같습니다. class Person: def __init__(self, a, b): self.name = a self.age = b person = Person("John", 20) print(person.age) person.age = person.age + 1 print(person.age) 20 21 Person 클래스의 인스턴스를 생성 후에, 필드 값을 읽거나 쓰는 것은 매우 자유롭습니다. 하지만 이렇게 되면 해당 데이터는 외부로부터 무방비 상태에 놓이게 됩니다. 이러한 상황에서 데이터를 접근을 관리할 수 있게 @property를 사용할 수 있습니다. class Person: def __init__(self..
데코레이터란? 파이썬은 데코레이터(decorator)라는 기능은 제공하는데, 함수(매서드) 클래스를 장식하는 도구를 뜻합니다. 데코레이터는 함수를 수정하지 않은 상태에서 추가 기능을 구현할 때 사용합니다. 보통 데코레이터는 프로그램의 버그를 찾는 디버깅, 함수의 성능 측정, 함수 실행 전에 데이터 확인 등에 활용합니다. 예를 들어, 함수의 시작과 끝을 출력하고 싶다면 다음과 같이 함수 시작과 끝 부분에 print()를 넣어주면 됩니다. def trace(func): # 호출할 함수를 매개변수로 받음 def wrapper(): # 호출할 함수를 감싸는 함수 print(func.__name__, '함수 시작') # __name__으로 함수 이름 출력 func() # 매개변수로 받은 함수를 호출 print(f..
확산강조영상(Diffusion weighted image, DWI)은 인체 내 물분자들의 자기 확산(self-diffusion) 정도를 정량화 함으로서 생체 조직의 생리학적 특성과 이상 유무를 판단하는 자기공명영상 기법의 한 종류이다. 생체 내 물분자의 움직임은 세포막 등에 의해 제약을 받는데, 이를 제한 확산(restricted-diffusion)이라고 한다. 확산이란 용액 내 용매 분자가 농도 경사에 의해 농도가 높은 곳에서 낮은 곳으로 이동하는 현상이다. 그러나 농도 경사가 없는 순수한 물에서도 물분자 자체가 가진 역학적 에너지에 의해 불규칙하게 움직이게 되는데, 이런 현상을 브라운운동 이라고한다. 물분자의 확산은 세포 밀도나 혐수성 세포막의 밀도가 높으면서 세포 외 공간의 왜곡이 심한 악성 조직에..
분류 지표에는 Sensitivity, Precision, Specifisity, PPV, NPV 등.. 여러가지가 있습니다. 모델의 결과를 무엇에 중점을 두고 볼 것인가에 따라 다른 평가 지표를 사용해야하기 때문입니다. 하지만 늘 헷갈리고, 어렴풋이 알고있지만 이게 무엇을 의미하는지 제대로 이해하려면 멈칫하게 되는.. 그래서 한번 정리하고자 했습니다. 위 그림의 혼동행렬은 주의해서 봐야합니다. 어떤 곳에서는 True class와 Predicted class의 행렬이 뒤바뀌어있는 경우도 있습니다. 실제로 sklearn의 confusion matrix의 결과는 위 그림과는 반대로 행렬이 전치되어 나타납니다. 먼저 민감도. 민감도는 sensitivity, recall 으로도 불립니다. 실제 True 중에서 옳..
UNETR(UNEt TRansformers)은 그 이름처럼 UNet 형태의 아키텍쳐이고, encoding 부분을 transformer 구조로 대체하여 feature map을 추출하는 것이 특징입니다. 본 내용은 UNETR 를 pytorch로 구현하는 것을 정리하였습니다. 핵심적인 부분인 ViT 구현을 아래 블로그(제 블로그 ㅎㅎ;;)를 참고하시면 더 자세하게 볼 수 있습니다. https://kimbg.tistory.com/31 [ML] ViT(20.10); Vision Transformer 코드 구현 및 설명 with pytorchAN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE https://arxiv.org/pdf/2..
augmentation은 적은 데이터를 가지고도 데이터 풍부한 표현을 학습할 수 있는 장점이 있습니다. 그 중에서도 3D augmentation은 일반적인 2D augmentation과는 다른 특징들이 있는데, 이 글에서는 그와 관련된 내용을 담고 있습니다. monai, TorchIO 등 3D augmentation을 위한 라이브러리들이 몇몇 있지만, 여기서는 monai 기반 augmentation 적용 방법을 소개합니다. 본 내용은 아래 내용을 첨삭하여 작성했습니다. https://colab.research.google.com/github/Project-MONAI/tutorials/blob/main/modules/3d_image_transforms.ipynb 3d_image_transforms.ipyn..
AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE https://arxiv.org/pdf/2010.11929.pdf vit 논문에 관련한 양질의 리뷰는 상당히 많아서, 코드 구현에 관한 설명만 정리하고자 했습니다. 그래도 중요한 특징을 잡고 가자면, 1. 데이터가 많으면 많을수록 성능이 높아진다는 것. - ImageNet dataset과 같은 Mid-size으로 학습했을때, ResNet보다 성능이 좋지 않았지만, JFT-300M dataset으로 학습할 경우, ResNet보다 좋은 성능 달성함 - 이는 기존 CNN 계열의 모델보다 saturation이 덜 일어난다는 반증. - 하지만 일반적으로, 큰 데이터셋은 많이 없기때..
Dice는 특이하게 loss function으로도 쓰이지만, metric으로도 사용된다. (그 이유는 segmentation이라는 task의 특수성 때문인데, pixel별로 class를 예측하기 때문에 metric score의 변화가 상당히 연속적이라 대부분의 구간에서 미분값이 유의미하기 때문이다.) (classification task에서 accuracy를 가지고 loss function으로 사용하지 않는 이유와 반대로 비슷하게 생각하면 된다.) 한편, 보통 Dice loss 는 1 - dice metric 으로 정의된다. 보시다시피 F1 score와 같다. 민감도(sensitivity)와 정밀도(precision)의 조화평균이다. monai에서 dice loss와 score를 편하게 계산할 수 있다...