Doby's Lab

U-Net 기반 아키텍처를 활용한 울혈성 심부전 환자 폐부종 진단 방법론 연구 본문

AI Projects/Project Description

U-Net 기반 아키텍처를 활용한 울혈성 심부전 환자 폐부종 진단 방법론 연구

도비(Doby) 2024. 4. 7. 19:13

✅ Intro

오랜만에 블로그 글을 적는 거 같습니다. 이 프로젝트가 끝난 건 거의 한 달이 다 되어가지만, 지금도 하고 있는 프로젝트가 있고, 중간고사도 얼마 남지 않았습니다. 그래서, 이번 프로젝트를 통해 겪었던 경험들과 떠오른 생각들이 잊힐 수도 있을 거 같아 시간을 내어 적어보고자 합니다.

 

또한, 앞으로의 프로젝트를 블로그에 적는 것에 대해서는 방향을 바꿔야 한다고 생각했습니다. 지금까지는 프로젝트의 내용들을 전부 시작부터 끝까지 적어왔습니다. 하지만, 앞으로 제가 할 프로젝트들은 깃허브나 논문으로 다 아카이브가 될 것이기 때문에 다시 한번 블로그에 처음부터 끝까지 적는 건 부담스럽기 때문입니다. 결론적으로, 이런 유형의 프로젝트 관련 글들에는 깃허브나 논문의 링크를 걸어서 순수한 회고의 특성을 가지는 글들을 적을 것입니다.


✅ Github & Paper

📄 Github

https://github.com/drawcodeboy/U-Net-Based-CHF-Pul.Edema-Diagnostic-Model

 

GitHub - drawcodeboy/U-Net-Based-CHF-Pul.Edema-Diagnostic-Model: JKIICE Acceptance Paper

JKIICE Acceptance Paper. Contribute to drawcodeboy/U-Net-Based-CHF-Pul.Edema-Diagnostic-Model development by creating an account on GitHub.

github.com

📄 Paper

https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE11758380

 

U-Net 기반 아키텍처를 활용한 울혈성 심부전 환자 폐부종 진단 방법론 연구 | DBpia

권다운 | 한국정보통신학회논문지 | 2024.04

www.dbpia.co.kr


✅ Motivation, OMS

이 프로젝트를 해야겠다고 생각했던 건 작년 여름 첫 다이브 활동이 끝나갈 때쯤이었습니다. 이 활동을 통해서 앞으로 방향에 대해서 명확한 비전이 생겼었죠. 하지만, 명확한 비전과 다르게 활동이 끝나는 시점에서 저는 복학을 했었고, 새로운 불안을 마주했습니다. '그 길을 갈 수 있느냐, 냉정한 시점에서 나의 학벌과 학점으로는 나를 받아줄 곳이 없지 않느냐'라는 생각을 한 2~3개월 했던 거 같습니다. 그래서 활동이 끝나고도 서울에 가서 멘토님께 상담을 받고 왔어요.

 

하지만, 이 생각조차 몇 개월 간 지속되는 건 지치기만 했습니다. 명확한 해결 방법이 없었어요. 스스로 어떻게 마음가짐을 가지냐가 중요했겠죠. 그래서 그 생각이 꼬리를 물고 물어 이런 생각에 도달했습니다. '어쨌거나 내가 가고자 하는 곳은 연구를 하는 곳이고, 연구의 시작부터 끝까지 내가 전부 다 혼자 해본다면, 나는 할 수 있는 사람일 수도 있겠구나.' 

 

결론적으로, 그런 프로젝트를 해본다면, 자신감을 얻지 않을까 했습니다. 한 편으로는 이 일들을 더 사랑하길 바랬습니다. 중간고사가 끝남과 동시에 계획을 세웠고, 이를 OMS(One-Man Show)라는 이름의 프로젝트로 지어둔 것도 작년 11월쯤이네요. (매번 오글거리긴 하지만, 재밌잖아요)


✅ PyTorch 공부

중간고사가 끝나고, 위의 생각들과 함께 PyTorch를 공부하기 시작했습니다. 이전엔 Tensorflow를 한 번 사용해 보는 것 말고는 딥러닝을 다루어본 적이 없었어요. 딥러닝 라이브러리는 항상 언젠가는 꼭 자유자재로 핸들링할 수 있는 기술이어야 한다고 생각했습니다. 한국어 공식 홈페이지에 튜토리얼이 잘 정리가 되어 있기 때문에 이를 통해 2주 동안 속성으로 공부했습니다.

 

그리고, PyTorch를 통해 U-Net을 구현했었습니다. U-Net에 대해서는 이전에 많이 들어왔어서 꼭 한 번 공부를 해보고 싶은 아키텍처였기 때문이에요. 추후 프로젝트에서도 U-Net을 기반으로 한 프로젝트를 하면 좋겠다고 생각했어요.


✅ Ideation

다시 기말고사 기간이 되면서, 학교 공부에 집중을 했습니다. 하지만, 중간중간에 필요한 아이디어들은 전부 노션에 기록해 두었었어요. 어떤 데이터셋들을 쓸 것인지, 어떤 아이디어로 프로젝트를 구성할 것인지를 적어둔 기억이 나요.

 

특히, 이때 프로젝트의 기반이 되는 논문을 읽었습니다. TSBTS라는 네트워크를 제안한 논문인데, 뇌종양의 3가지 부분을 Segmentation한 논문이었습니다.

 

Exploring Task Structure for Brain Tumor Segmentation From Multi-Modality MR Images

Brain tumor segmentation, which aims at segmenting the whole tumor area, enhancing tumor core area, and tumor core area from each input multi-modality bio-imaging data, has received considerable attention from both academia and industry. However, the exist

ieeexplore.ieee.org

 

네트워크의 구조가 '의료진의 진단 과정'에 매우 집중되어 있었고, 이를 멀티모달을 통해서 구현한 모델이었습니다. 그래서, 이 논문의 키워드인 '의료진의 진단 과정'에 주목하여, 프로젝트를 구성해 보았습니다. (개인적으로 이 논문의 팬이라면 이상하지만, 읽었을 때 '와 대박이다'라는 감탄을 많이 했었어요.)

 

사용한 데이터셋은 3가지 데이터셋을 사용했습니다. 정확히 말하면, 한 데이터셋이 있고, 나머지 두 데이터셋은 이를 확장한 데이터셋이었습니다.

 

1) 흉부 엑스레이 이미지 데이터셋, MIMIC-CXR-JPG

2) 폐 영역 Segmentation 데이터셋, Chest X-ray Dataset with Lung Segmentation v1.0.0

3) 폐부종 중증도 데이터셋, Pulmonary Edema Severity Grades on Based on MIMIC-CXR v1.0.1

 

이러한 종류의 데이터셋을 토대로 '폐 관련 질환이라면, 폐 영역에 당연히 집중이 되어있어야 하는 게 아닐까? 의료진들도 그걸 중심적으로 진단하지 않을까?'라는 아이디어로 프로젝트 구성을 확정했습니다.


✅ 프로젝트 및 실험, 파트 1

그리고, 한 해가 새로 시작되면서 1월 15일에 계절학기도 끝을 냈습니다. 며칠 쉬고 프로젝트를 해야겠다고 생각했어요. 왜냐하면, 그전까지 복학을 한 이래로 쉰 적이 없었습니다. 너무 힘들다고 생각했습니다. 또, 연초에는 개인적인 사정들이 많았습니다. 하지만, 시험기간에 떠오른 아이디어들이 정말 더 좋은 성능을 낼 수 있는 아이디어일지 걱정이 많이 됐습니다. 그래서 계절학기가 끝난 다음 날에 본가에 가있었지만, 바로 작업을 시작했습니다.

 

우선, 아이디어가 제일 걱정이었기 때문에 프로젝트를 두 파트로 나누어서 진행했습니다. 첫 파트는 Segmentation, 두 번째 파트는 Classification으로 나누었고, Classification을 먼저 작업하면서 아이디어가 통하는지 봤습니다. Segmentation을 통한 Classification 실험 3가지, 그렇지 않은 Classifcation 실험 2가지를 진행했었고, 다행히 제가 생각한 메서드가 더 성능이 좋아서 프로젝트를 이어나갔습니다. 이 과정에서 회고 부분에서도 다시 언급을 하겠지만, 코드와 관련해서 너무나 부족하다고 느낀 부분들이 있었습니다.

 

이때, 5가지 각 실험들을 100 epochs로 학습을 했었습니다. 전 아직 연구실이 없다 보니 동아리방 GPU에 의존을 하며, 실험을 했었는데요. 한 실험 당 거의 12시간씩 걸렸었습니다. 그 과정에서 잘못 실험한 적들도 있었기 때문에 학습을 하는 기간 동안에는 동방에 살았습니다.


✅ 프로젝트 및 실험, 파트 2

메서드가 통하고 난 후, Segmentation 실험에서는 부담이 좀 줄었습니다. 그리고, 이 실험에서는 꼭 이 프로젝트에서 사용한 U-Net, SA U-Net, U-Net++ 아키텍처들을 구현해서 사용해보고자 했습니다. Classification에서는 DenseNet과 VGG를 사용했고, 이 둘은 pre-train 때문에 구현을 하지는 않았습니다. 또한, U-Net 아키텍처에 조금 더 집중을 하려 했던 것도 있고요.

 

물론, R2 U-Net이라는 아키텍처도 구현해서 사용하려 했으나 성능이 3가지 아키텍처와 별개로 너무 안 좋았습니다. 오픈 소스도 마찬가지였고요.


✅ 논문 작성

원래 초기 계획은 다이브에서 했던 경험 그대로를 혼자 해보려 했던 것이었기 때문에 학술대회를 생각했습니다. 프로젝트 중후반부쯤에 왔을 때 춘계 학술대회를 찾아보았습니다. 하지만, 그때 당시에 개최를 준비하는 곳은 없었고, 한 군데가 있었지만 2월 말에 접수를 시작해서 4월 말에 결과가 나왔기 때문에 너무 늦다고 판단했습니다. 개강 전에는 끝내고 싶었거든요.

 

그래서, 살짝 미친 척하고 저널에 국문지로 내봐야겠다고 생각했습니다. 아무래도 더 어려운 난이도이기 때문에 저의 메서드가 확실히 성능이 좋은 것임을 말하기 위해서 Classification 실험을 한 가지 더 진행했습니다. 원래는 DenseNet만 사용했지만, 이때 VGG를 통해서 똑같은 실험을 진행했습니다.

 

논문을 쓰기 시작하면서 많이 힘들어했던 기억이 납니다. 지금까지 봐오던 논문들이 다 영어이기 때문에 한국 논문은 어떻게 써야 하는지 그 결을 잡아가기가 힘들었습니다. 이것도 학회마다 다른 거 같기도 하고요. 또한, 어디까지 써야 하고, 어디까지는 안 써야 하는지를 구분하는 것도 어려웠습니다. 하지만, 무엇보다 제일 힘들었던 건 부담감입니다. 프로젝트가 다 끝나가면서 논문의 통과 여부를 결정짓는 논문 작성이 사실 많이 부담이 되었습니다. 떨어지면 했던 것들이 다 무산되는 것이라 생각을 했던 거 같아요. 물론, 당연히 떨어진다 한들 다른 학회에 써보거나 학술대회에 나가는 것도 있겠지만, 그때 당시에는 시간상의 이유로 다른 곳을 쳐다보기가 어려웠습니다. 한 번에 이 학회에 통과될 수 있어야 한다는 강박이 있었어요.

 

어쨌든 잘 작성해서 투고를 했습니다. 아이러니하게도 투고를 한 날이 어제 끝난 두 번째 다이브의 OT 이틀 후였습니다.


✅ 투고 후, 그리고 수정 후 게재

프로젝트의 상황이 안 좋았던 건 사실 투고를 하고 난 후가 제일 심했습니다. 제가 투고한 논문이 연휴, 담당자의 퇴사 등 여러 이유로 접수도 많이 늦어지면서 1차 심사가 나오기 전까지 정말 많은 생각을 했습니다. 정말 별의별 생각을 하면서 필요 이상으로 걱정을 많이 했습니다. 사실 애초에 걱정이라는 것도 안 했으면 좋았을 텐데 말이에요.

 

그래서 결과도 만약 수정 후 게재가 나오면, 이건 기적일 거라고 생각했습니다. 무조건 떨어지라고 되뇌었었거든요. 하지만, 투고를 하고 한 달이 지나 개강 후, 3월 중에 메일이 하나 왔습니다. '아래 논문의 심사 결과 '수정 후 게재'로 판정되었습니다.' 이 메일을 받았을 때 저는 수업 중이었고, 정적 속에서 '어...?'가 육성으로 나왔습니다.

 

하지만, 기쁜 것도 잠시 심사평을 봤을 때, '아 이제 시작인가...'라는 생각을 했습니다. 한 분의 심사평이 꽤 무겁게 다가왔습니다. 그래도 마음을 다잡고, '오히려 내 논문을 더 멋지게 만들어주시려고 그런 거다. 감사하게 생각해야 한다'라고 마음먹으며, 추가적인 실험들도 하고, 많이 수정해서 논문을 다시 제출했습니다. 실제로 제가 부족했던 부분 들인 만큼 많이 배웠습니다.


✅ 게재 가 판정이 났을 때

모든 작업이 끝나고, 얼마 지나지 않아 '게재 가 판정'이 났습니다. 이 때는 기분이 너무 이상했어요. 프로젝트를 시작할 때 당시에는 이 순간을 너무 기대했고, 안 올 거라 생각했기 때문에 정말 기쁠 줄 알았습니다. 잠깐 기쁘긴 했지만, 바로 아쉬움이 들었어요. 찝찝함이 있기도 했고요. 이렇게 OMS는 막을 내렸습니다. 너무 좋은 순간일 줄 알았지만, 고민의 깊이만 더 깊어졌네요. 그래도 잘 끝냈습니다.


✅ 회고 파트 1, 마인드

암튼 잘 끝난 만큼 이제는 또 성장해야 할 부분들이 명확히 보였습니다. 첫 번째는 저의 마인드입니다. 불안을 해소하려고 한 프로젝트인데 그 끝이 성취감이 아닌 다시 불안이라는 것은 저의 마인드에 명확하게 문제가 있습니다. 늘 프로젝트를 하거나 다른 일을 할 때도 결론 중심적이었던 사람이었습니다. 세상의 모든 일들이 99%의 과정과 1%의 결론으로 이루어지는 것인데 저는 99%의 시간 동안 1%만 보고 달렸었죠. 심지어 그 1%는 제가 통제할 수 있는 영역이 아닙니다. 결과보다는 과정에 주목해야 한다는 것은 이전부터 알고 있었습니다. 늘 어떤 프로젝트가 끝날 때마다 이건 고쳐야 할 점이라 생각하기도 했고, 이제는 정말 결과에 대해서 마음을 떠야 합니다. 제가 할 수 있는 최선을 다 하고, 또 다른 재밌는 걸 찾아야죠.

 

또한, 이번 프로젝트도 스스로에게 증명을 해주고 싶었던 프로젝트였기 때문에 이제는 증명도 그만했으면 좋겠습니다. 더 이상 증명을 할 이유가 없습니다. 이와 관련해서 제가 좋아하는 인터뷰에서도 그런 말이 나온 적이 있어요. 

 

"증명이라는 건 패기 있을 때 했었던 거 같고
지금 증명이라는 걸 하기 위해서
저한테 주어진 시간과 에너지를 쏟기에는 너무 비효율적인 것 같아요
제가 가고자 하는 비전을 실현했을 때 자연스럽게 이루어지는 거거든요
근데 그 증명이라는 게 내 성과를 이루는 것보다 우선순위가 돼버리면
증명을 하다가 길을 잃어버리거든요 증명을 하려고 애쓰다가
자연스럽게 내가 이 원하고자 하는 일을 성취하면
누구든지 인정을 해주기 마련이거든요
그러니까 먼저 골에 도달하면 돼요
내가 잘 달리는 모습을 보여주는 것보다 내가 먼저 도착했다는 걸 알면
사람들은 자연스럽게 인정해 줄 거라고 생각해요"

(출처: https://www.youtube.com/watch?v=BEzFDBqhxFo 12:40부터)

 

실제로 위 말처럼 항상 무언가 끝나면, '난 뭐가 되고 싶었을까'를 계속 리마인드 하려고 합니다. 이번 OMS도 더욱 그랬던 거 같아요. 그래서 좀 즐겼으면 합니다. 내가 재밌어 보이는 거, 큰 부담을 안 가지는 거, 실패해도 그게 별 영향이 없을 거란 거, 그래도 최선을 다 할 것, 그걸 좀 스스로 알아줬으면 합니다.

 

정말 과정이 중요하다는 것, 이제는 그래야 한다는 것 이게 이번 프로젝트의 가장 큰 교훈인 거 같아요.

 

또한, 1차 심사를 하면서 너무 걱정을 했기 때문에 그래도 그 순간 조금이나마 건강하게 생각을 할 수 있었던 건 '만약 논문이 떨어지면, 내 연구가 세상에 의미 있는 연구는 아니구나'를 계속 되뇌던 게 도움이 되었던 거 같습니다. 전 앞으로 실패할 일도 많으니까요. 그냥 최선을 다하고 즐깁시다.


✅ 회고 파트 2, 기술

이번 프로젝트를 하면서 알게 모르게 기술적으로도 많이 성장했습니다. 지금은 당연해 보이는 것들이기에 끝나고 나서는 성장을 한 부분보다는 새로운 부족한 점들이 보였습니다. 

 

파이썬 스크립트의 활용입니다. 저의 깃허브에서 프로젝트를 보면, 전부 다 셀 형태의 코드(주피터)를 많이 사용했습니다. 모든 걸 다 주피터를 활용했죠. 하지만, 프로젝트를 하면서 여러 깃허브들도 탐색하고, 어제 끝난 다이브 활동 중에도 여러 소스들을 볼 일들이 엄청 많았습니다. 저의 작업물과 이들의 차이점은 파이썬 스크립트, 패키지, 모듈 형태를 적극적으로 사용한다는 것입니다.

 

실제로 OMS의 모든 실험은 각 실험마다 새로운 노트북을 통해서 실험했습니다. 코드의 별 차이가 없었음에도 불구하고, 약 15개의 노트북 파일들이 넘쳐납니다. argparse라는 라이브러리를 일찍 알고, 이러한 코드 폼들이 보편적이라는 것을 알았다면, 거의 모든 파일들이 파이썬 스크립트 형태였을 겁니다. 물론, 주피터가 나쁘다는 것은 아닙니다. 빠르게 무언가를 확인할 때, 혹은 데이터 분석을 잠깐 해야 할 때는 아직 주피터가 편한 거 같습니다.

 

그래서 이제는 .ipynb가 아닌 .py를 적극적으로 활용해야 합니다. 이런 부분과 관련해서 프로젝트의 성격을 띄는 무언가를 잠깐 준비했지만, 일정들이 계획과 많이 달라질 거 같아서 시간 날 때, 할 수 있으면 해야겠습니다.

 

두 번째는 관련 연구 탐색 및 정리입니다. 이번 논문은 단순히 아이디어 하나에서 시작되어 진행된 프로젝트라 이 부분이 많이 부족했습니다. 이와 비슷한 연구 사례들은 어떻게 탐색해야 하는지 그 궤를 찾기가 어렵습니다. 어느 시점에서 진행되어야 하고, 그걸 통해서 말하고자 하는 것은 무엇이어야 하는지 말입니다. 이런 부분은 앞으로 논문을 많이 읽으면서 감을 찾아가야 합니다.

 

마지막으로, 논문 읽는 시간이 빨랐으면 합니다. 다르게 표현하면, 다양한 논문들을 많이 읽었으면 합니다. 이건 많은 노력이 필요할 거 같습니다. 빠르게 읽지 못하는 큰 요인은 영어의 부재라고 생각합니다. 모르는 영단어를 해석만 하지 말고, 제 것으로 만들어야 이 능력을 가질 수 있을 거 같습니다. 또한, 이 능력이 갖춰졌다고 상상했을 때, 정말 모든 일들이 재밌지 않을까를 기대합니다. 흥미로운 기술들이 있으면, 바로 써보고 싶거든요!


✅ Outro

이제 진짜 Outro입니다. OMS를 이제는 좀 보내줘야죠. 물론 이번 달에 논문이 출판되기에 완전히 떠나보내지는 못 하겠습니다. 4~5개월 동안 이 단어에 정이 많이 들기도 했고, 제가 SNS에 많이 올린 것 때문에 많은 사람들이 OMS를 언급해주기도 했거든요. 재밌었습니다.

 

원래 회고를 중간고사가 끝나면 쓰려고 했습니다. 그 사이에 일들이 많아서 못 쓰겠거니 했지만, 지금도 많은 일들을 하고 있어서 많은 생각들이 스쳐가기 때문에 지금 당장 써두지 않으면, 이 기억들이 다르게 기억되거나 잊힐 수도 있겠다는 생각이 들어 빨리 썼습니다.

 

그 많은 일들에 대해서도 언젠간 기록을 할 것이고, 부담을 갖지 않았으면 합니다. 시험기간이지만, 어쩔 수 없어요. 해야죠.

 

그리고, OMS2도 자연스럽게 생각을 해봤습니다. 언젠가는 하겠지만, 그때는 완전한 혼자만의 OMS는 아닐 겁니다. 그러고 싶지도 않고요. 또 하나의 큰 교훈은 '연구는 혼자 하는 게 아니다'였으니까요.

 

말이 너무 길었습니다. 너무 정들었고, 가끔은 저를 괴롭히기도 한 프로젝트라서 하고 싶은 말들이 너무 많았습니다. 실제로 프로젝트 중에 얻은 교훈들은 회고에 써야겠다 하고 노트에 적어두기도 했었답니다.

 

이번 달 말에 논문이 출판되면, 링크를 걸기 위해 수정하러 오겠습니다. 축하해준 사람들도 너무 많았습니다. 다시 한번, 너무 감사합니다. 고마워요!

 

OMS 끝! 고생했다!