Challenge to be addressed
기존 Coronary Artery X-Ray Angiography 이미지 세그멘테이션 모델은 메인 혈관을 과도하게 두껍게 분할하는 한계가 있었다. 관상동맥 질환의 핵심인 협착을 정확히 진단하기 위해서는 혈관의 형태를 실제에 가깝게 매끄럽게 세그멘테이션하는 것이 필요하다. 따라서 혈관의 실제 직경과 형태를 정확히 반영하는 세그멘테이션을 구현하는 것이 해결해야 할 문제이다.
원본 데이터
기존 모델의 검출 결과
학습 라벨링 자체도 두껍게 이루어진 탓에, 세그멘테이션 결과 역시 전반적으로 두꺼운 양상이 나타났다. 완벽한 세그멘테이션은 존재하지 않다고 생각하여, 약 한 달간 다양한 후처리 김법을 검토하였다. 이미지 모폴로지 연산(white-hat, black-hat, 가우시안 등)을 적용한 결과, 일부 이미지에서는 개선 효과가 있었으나, 이러한 알고리즘만으로 전체 데이터에 대한 일반화가 어려웠다.
2025-09-09 작성
Issues Observed
- 학습 데이터 라벨링이 두껍게 되어있다.
- 후처리가 복잡하기 때문에, 효과적인 후처리를 위해서는 세그멘테이션 자체가 정교하게 이루어져야 한다.
2번 문제를 해결하기 위해, AI 학습 과정에서 정답 여부를 판단하는 지표로 주로 Dice Loss를 사용하므로 경계를 줄이는 방안을 고려했으나, 현실적으로 구현하기 어려웠다. 결국 학습 라벨링을 좀 더 정교하게 만들자라는 결론이 나왔다. 그러나 방대한 양의 이미지를 하나하나 직접 라벨링하는 것은 사실상 불가능했다. (학부생이 도와달라고 해서 도와줄 거 같지도 않았다....) 그래서 적은 수의 라벨링 데이터로도 효과적으로 학습을 진행할 수 있는 방법을 고민했다
그러다가 ! 발견된 데이터셋과 논문

An effective vessel segmentation method using SLOA-HGC
Scientific Reports - An effective vessel segmentation method using SLOA-HGC
이 데이터는 망막 혈관 데이터셋으로, 약 20장 정도의 이미지로 구성되어 있었다. 한 개발자가 이 적은 수의 이미지를 잘라서 학습에 활용한 사례를 확인했는데, 적은 수의 데이터로도 꽤 괜찮은 성능을 보여주었다.
그때 든 생각이 내가 직접 라벨링을 하고 이미지를 잘라서 학습을 시키면 Local Feature도 잘 학습할 거 같고 적은 수로도 충분히 될 거 같다는 생각이 들었다. 하지만, Global Feature에 대해서는 어떻게 해야하나 고민하던 중, 학습 과정에서 가이드라인을 제공하는 방법을 떠올렸다. 가이드라인이 없을 경우 모델 입장에서는 어떤 부분을 라벨링 해야하는지에 대한 전역적 특징을 인식하기 어려울 거 같았다. 혈관 센터라인 (=가이드라인)에 대한 알고리즘은 이미 개발된 것으로 알고 있어서 이 방식을 선택하였다.
그리고 친구한테 개인 사비로 라벨링 알바를 맡기고 직접 다시 꼼꼼하게 다시 라벨링 작업을 하였다. (50장)
이해를 돕는 사진 (512 * 512) → (128 * 128 Patches)
한 이미지 당 약 5~8장의 Patches들이 있었다. 그래서 50장 이미지를 Patches로 나누면 약 400장의 이미지로 나눌 수 있었다. 이것도 부족한 데이터지만, 데이터 증강(상하좌우 반전, 회전, 가우시안 블러, 가우시안 노이즈)을 적용하여 학습을 진행하였다.
Version 1 모델의 검출 결과
정답을 수치로 표현할 수 있다면 가장 좋겠지만, 아직은 그 방법을 찾지 못해 육안으로만 비교를 진행했다. 그 결과, 기존 모델보다 협착 부위나 세그멘테이션을 훨씬 잘 찾아내는 것을 확인할 수 있었다. 다만 1번 이미지에서는 협착 부위는 잘 검출했지만 메인 혈관 줄기의 세그멘테이션이 다소 아쉬웠고, 5번 이미지는 마지막 분지 부위의 협착을 너무 넉넉하게 잡았다. 또 6번 이미지는 사실 두 개의 혈관이 존재하는데, 이를 하나의 혈관으로 잘못 디텍팅한 한계가 있었다.
이 문제들을 해결하기 위해서는 간단하다. 라벨링을 더 작업하면 된다. 근데 언제까지 완벽할 때까지 라벨링을 만들 수는 없지 않는가….? 라벨링을 100개까지만 하고 어떻게하면 더 잘 디텍팅할지 생각하다가 전이 학습이 떠올랐다. 고품질 데이터는 많지 않지만, 기존에 확보된 약 1,000장의 학습 데이터가 있었기에 이를 어떻게 활용할 수 있을지 생각했다.
정말 기발한 아이디어라고 생각되어 128×128 해상도로 학습된 가중치를 512×512 이미지 학습 데이터에 파인튜닝(Fine-Tuning)하는 방안을 시도하고자 한다! (대충 GPT가 짜준 모델로 512 * 512 데이터 학습시켰다가 망한걸 안 비밀…)
2025-09-14 작성
원래 계획은 128 * 128 Patches로 학습한 가중치를 Transfer Learning을 이용하여 512 * 512 데이터셋도 학습 시킬 예정이었다. 근데 생각해보니, Fine-Tuning이라는 것이 ‘이미 쌓아둔 데이터를 조금 더 훈련해서 내가 필요한 문제에 맞추는 것’ 아닌가? 순서를 바꿔서 512 * 512 가중치(Low-quality-dataset)를 이용해서 데이터를 쌓아두고 High-quality-dataset을 이용하여 Fine-Tuning하는 것이 더 효율적일 것 같다.
Low-Qaulity-Dataset (Train Data)
색칠된 것을 확인해보면 원래 혈관보다 전반적으로 두껍게 칠해진 것을 확인할 수 있다. 이 방법을 해결하기 위해서는 라벨링을 다시하거나 (절대 안할 것이다) Loss 함수 레벨에서 보정하는 것이 가능하다. Loss 함수 레벨에서 보정하는 것을 목표로 하고 당분간은 512 * 512 모델을 만드는 것에 집중할 예정이다.
128 * 128 학습할 때처럼 학습할 때부터 가이드라인을 주고 예측을 할때도 가이드라인을 준다면 더 좋은 성과가 나올 거 같긴한데… 의사들이 원하는 완전 자동화를 위해서는 가이드라인 없이도 되야하므로 어떻게 해야할지 생각해보려고 한다. 일단은 목표를 가이드라인 없이 완전 자동화 예측을 하려고 한다.
MLops를 위해 MLflow랑 Airflow도 공부해야한다..
손 쉬운 실험 추적과 공유를 위해 폴더 구조를 만들어보았다. 이렇게 나눠서 만들면 나중에 공부할 때도 좋을 거 같다! (Airflow는 아직..)
2025-09-18 작성
모델을 직접 만들어서 트레이닝 싶어보고 싶었지만, 쉽지 않다고 하여 SOTA 모델을 찾는중이다. 그러면서 128 * 128 Patches 학습을 할 때 3 Classes (배경, 메인, 브랜치) 로 학습을 시켰는데, 2 Classes (배경,메인 or 배경, 브랜치)로 학습시켰을 때는 어떤 데이터가 나올지 몰라서 한 번 학습을 시켜보았다.
2 Classes 학습 결과
조금의 희망을 본 거 같다! 기존 3 Classes 예측과 다르게 메인만 예측을 하면, 협착 부분을 더 정교하게 학습하는 것을 알 수 있었다. 협착부분이 너무 작으면 세그멘테이션이 안 이어져 보이는 부분이 있는데 Loss Function을 바꾸거나 모델을 조금만 튜닝한다면 좋은 결과가 나올 거 같다
모델 성능을 높이기 위해 오늘 Loss Function을 바꾸면서 (Dice vs IoU)에 대해 공부하였다. 이 부분은 추후에 정리할 예정이다. 현재는 모델 튜닝을 위해 모델 구조나 Loss Function에 대해서만 바꾸고 있지만, 추후에는 Learning Rate Scheduler나 Optimizer에 대해서도 튜닝을 해볼 예정이다.
갑자기 생각이 난건데, 세그멘테이션 이후 소프트맥스 값을 이용하여 False Positive (잡음, 가짜 혈관)을 줄이는 방법을 생각해봐야겠다.
2025-09-22 작성
학습 데이터가 45장이 추가되어 총 95장(512 * 512)이 되었다. 128 * 128 Patches로 자르면 약 990장정도가 나온다. 새로운 데이터셋으로 학습시킨 결과이다. 눈으로 확인했을 때 정답과 근접한 것도 있지만 1~2px정도 아쉬운 것들이 있다.
센터라인만 정확하게 나온다면, 협착 부분도 정확하게 예측하지만, 센터라인이 흔들렸을 때는 정확한 결과가 나오지 않았다. 이를 해결하기 위해 센터라인에 인위적인 흔들림이나 노이즈를 추가하여 학습 시키는 중이다.
# 센터라인 두께 변경 # 센터라인이 두껍거나 얇게 잡혔을 때 가정 # 사실 이 증강은 필요없을 거 같긴하나, 혹시 몰라서 넣음 def thickness_control_mask(mask, max_shift=2): k = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3)) if random.random() < 0.5: return cv2.dilate(mask, k, iterations=random.randint(1, max_shift)) else: return cv2.erode(mask, k, iterations=random.randint(1, max_shift)) # 센터라인 전체 위치 변경 # 센터라인이 살짝 옆으로 잘못 잡혔을 때 가정 def shift_control_mask(mask, max_shift=2): dx = random.randint(-max_shift, max_shift) dy = random.randint(-max_shift, max_shift) M = np.float32([[1, 0, dx], [0, 1, dy]]) return cv2.warpAffine(mask, M, (mask.shape[1], mask.shape[0]), flags=cv2.INTER_NEAREST, borderValue=0) # 센터라인에 가짜 가지 추가 # 센터라인이 깔끔하게 나오지 않았을 때를 가정 def add_fake_branch_mask(mask, num_points=1, length=5): h, w = mask.shape noisy = mask.copy() for _ in range(num_points): x, y = random.randint(0, w-1), random.randint(0, h-1) angle = random.uniform(0, 2*np.pi) for i in range(length): nx = int(x + i*np.cos(angle)) ny = int(y + i*np.sin(angle)) if 0 <= nx < w and 0 <= ny < h: noisy[ny, nx] = 1 return noisy
흔들린 센터라인을 잡아준 이후에는 Ensemble을 이용해 동일한 데이터로 학습시켰지만, 다르게 학습시킨 모델 3개를 이용해서 softmax 평균을 이용하여 경계를 다시 잡는 방향을 찾거나 다른 방법을 찾아볼 예정이다.
원래 목표는 세그멘테이션만 잘하면 된다고 생각했는데, Angio FFR 기술이 옛날부터 다른 회사에서 출시한 기술이다 보니까, 경쟁력을 갖기 위해서는 완전 자동화가 되야한다고 한다… 그래서 사람이 마우스 클릭 하나로만 원하는 결과를 볼 수 있게끔 결과 워크플로우도 필요할 거 같다.
2025-09-30 작성
기존 128 * 128 Patches 방식이 아닌 512 * 512 이미지로 학습을 진행했을 때 Main 줄기를 좀 더 자세히 세그멘테이션이 되기를 원했었다. GPT가 짜준 모델로는 원하는 정도의 결과가 나오지 않아서 SOTA 모델중 하나인 nnUNet을 사용해보았다.
순서대로 Original Image, Ground Truth, Prediction이다. 기존 128 * 128 Patches의 전략은 Guide Line의 의존성이 높았다. 그래서 512×512 데이터에서는 가이드라인 없이 모델이 스스로 부위(LAD, LCX, RCA)를 구분하며 세그멘테이션하기를 기대했다. 이전 ML 엔지니어도 같은 생각으로 각 부위별 ONNX 모델을 제작했다. 하지만 다시 고민해보니, 부위를 구분하는 역할은 세그멘테이션 모델이 아니라 별도의 AI가 담당하는 것이 더 적절하다고 생각된다. 실제로 512×512로 실험해본 결과, 글로벌 Feature를 제대로 학습하지 못했고, Local Feature 역시 충분히 포착하지 못하는 한계가 있었다. 그래서 2-Step으로 전략을 나누려고 한다.
- 관상동맥 전체 세그멘테이션 및 부위 디텍팅

Dataset for Automatic Region-based Coronary Artery Disease Diagnostics Using X-Ray Angiography Images
Scientific Data - Dataset for Automatic Region-based Coronary Artery Disease Diagnostics Using X-Ray Angiography Images
각 관상동맥 부위와 전체 세그멘테이션이 되어있는 데이터셋이다 (협착 부위 디텍팅 데이터셋도 있음). 처음에는 이 데이터셋을 이용하여 관상동맥 전체 세그멘테이션 미 부위 라벨링을 할 예정이다.
- 세그멘테이션 결과를 활용해 센터라인을 추출, 128×128 패치로 분할하여 다시 정교한 세그멘테이션
이 데이터셋은 내가 직접 제작한 것으로, 이를 활용해 학습을 진행할 예정이다. 모델이 가이드라인을 참고하도록 설계하되, 지나치게 의존하지 않도록 할 계획이다. Step-1에서는 메인줄기만 진행하였지만, Step-2에서는 Main, Branch 2-Classes 예측을 해서 할 예정이다.
계속 어떻게 해야하는지 고민이 되어 잠이 안와 새벽에 글을 쓴다… 모델도 내가 만드는게 아닌 nnUNet을 활용하여 해볼 예정이다.
2025-10-04 작성
회사에서 프론트엔드 개발로 인하여 별로 시간 투자를 하지 못하였다. 추석에 할 일도 없으니 이 문제 해결에만 집중할 예정이다. 자 이제 지금까지 해온 과정들을 설명해보겠다. 2025-09-30에 작성한대로 오픈 데이터셋을 이용하여 데이터를 학습하려고 하였다.
하지만 사진과 같이 부위가 구분되어 있었기 때문에, 내가 원하는 부분만 추출하기 위해서는 각 부위가 무엇을 의미하는지, 그리고 각 클래스가 어떻게 구분되는지 이해가 필요했다.
관상동맥 분절 정의
- RCA 근위부 – 오른쪽 관상동맥의 시작 부분으로, 심장의 중간쯤까지 이어지는 구간.
- RCA 중간부 – 시작 부분 이후부터 심장의 급성 모서리(바깥쪽 끝)까지 이어지는 구간.
- RCA 끝부분(원위부) – 심장의 모서리에서부터, 뒤쪽으로 내려가는 혈관이 갈라지는 지점까지.
- 후하행지 (PDA) – 심장 뒷면의 가운데 줄을 따라 아래로 내려가는 혈관.
- RCA에서 나온 후외측가지 – 오른쪽 관상동맥의 끝부분 근처에서 옆으로 갈라져 나오는 가지.
16a~c – 이 후외측가지에서 나온 첫 번째, 두 번째, 세 번째 가지들.
- 좌주간지 (Left Main) – 왼쪽 관상동맥의 시작 부분으로, 두 갈래(LAD와 LCX)로 나뉘기 전 구간.
- LAD 근위부 – 왼쪽 앞쪽 혈관(LAD)의 시작 부분으로, 첫 번째 작은 가지(중격가지)까지.
- LAD 중간부 – 첫 번째 작은 가지 이후부터, 심장 앞쪽이 꺾이는 지점까지.
- LAD 끝부분(심첨부) – 심장 끝부분(심첨)까지 이어지는 LAD의 마지막 구간.
- 첫 번째 대각지 – LAD의 앞쪽에서 옆으로 갈라져 나오는 첫 번째 가지.
9a – 첫 번째 대각지보다 조금 위쪽에서 추가로 갈라져 나오는 작은 가지.
- 두 번째 대각지 – LAD의 더 아래쪽(심첨 가까이)에서 옆으로 갈라져 나오는 가지.
10a – 같은 부근에서 추가로 갈라지는 작은 가지.
- 좌회선지 근위부 – 좌회선지(왼쪽으로 도는 혈관)의 시작 부분.
- 중간지 – 좌주간지가 세 갈래로 나눠질 때 생기는 세 번째 혈관.
12a~b – 좌회선지에서 옆으로 갈라져 심장의 바깥쪽 둥근 부분으로 향하는 가지들.
- 좌회선지 끝부분(원위부) – 마지막 가지 이후, 심장 뒷부분을 따라 이어지는 구간.
- 좌후외측가지 – 심장의 뒤쪽과 옆면으로 향하는 가지.
14a~b – 이 혈관에서 더 멀리 같은 방향으로 이어지는 작은 가지들.
- 좌후하행지 – 왼쪽 혈관이 우세할 때 나타나는, 심장 뒷면 아래쪽으로 내려가는 가지. (이 경우 오른쪽 혈관의 같은 부분은 없음)
RCA 라벨링 데이터
관상동맥 분절 정의를 봤을 때, ID (Class_id) 1,2,3 번은 RCA 근위부, 중간부, 원위부고 4번은 후하행지(PDA)라는 것을 알 수 있었다. 또한, 20, 21, 22, 23은 후외측가지(PLB)라는 것을 알 수 있었다.
협착 진단시 보통 혈류 공급에 중요한 주혈관 중심으로 이루어진다. 그렇기 때문에 사실 RCA 근위부, 중간부, 원위부, 후하행지만을 고려하기 때문에 그외의 혈관(PLB)는 고려할 필요가 없다.
그렇더라도 학습을 시킬 때 제외할 것은 아니다. 중요한 부위와 덜 중요한 부위를 나눠서 학습시킬 것이기 때문에 이 부분도 학습시킬 예정이다.
LAD 라벨링 데이터
관상동맥 분절 정의를 봤을 때, ID (Class_id) 5번은 Left Main (좌심실로 혈액을 보내는 왼쪽 관상동맥의 시작점 이후 두 갈래로 나눠진다)이다. 보통 LCX랑 LAD랑 같이 있으면 LCX는 밑에 있고 LAD는 위에 있다. 6,7,8은 LAD 근위부, 중간부, 끝부분(심첨부)인 것을 알 수 있다.
9번은 첫 번째 대각지, 10번은 두 번째 대각지, 11번은 추가 분지인 것을 알 수 있다. RCA와 달리 LAD의 대각지는 큰 가지인 것을 알 수 있다. 11번가지는 보통 무시를하고 9번과 10번은 본 줄기만큼 굵거나 영역이 크면 협착 평가에 포함해야한다.
메인줄기, 세부 브랜치 1 (중요할 수 있음), 세부 브랜치 2 (덜 중요함) 총 3개로 나눠서 학습을 진행할 예정이다.
LCX 라벨링 데이터
12번 같은 경우에는 왜 사진에 없나 했는데, 너무 짧고 LM과 겹치는 구간이라 잘 안보인다고 한다. 하지만 메인줄기기 때문에 중요하다. 그리고 항상 보이는 13번은 좌회선지 원위부라고 한다. 14번은 세그멘테이션 구분했을 때 내가 LAD라고 지칭하였지만, 알고보니 LCX 좌후 외측가지라고 한다.
17, 18, 19는 굵은 둔각가지(OM1~3)이다. 굵은 혈관들이 있을 수 있기 때문에 중요하다. 그외 14, 15, 16, 26은 후외측가지 및 보조 분지라고 한다. 협착 평가시 중요한 것이 아니라고 한다.
구분된 Class_ID
id_to_class = { # RCA Main 매우 중요 1: "RCA", 2: "RCA", 3: "RCA", 4: "RCA", # RCA Branch 별로 중요하지 않음 21: "RCA", 22: "RCA", 23: "RCA", 20: "RCA", # LM 매우 중요 5: "LM", # LAD Main 매우 중요 6: "LAD", 7: "LAD", 8: "LAD", # LAD Branch1 두께가 중요하면 중요 9: "LAD", 10: "LAD", # LAD Branch2 별로 중요하지 않음 11: "LAD", # LCX Main 매우 중요 (근위/원위) 12: "LCX", 13: "LCX", # LCX Branch1 둔각가지(OM1~3), 굵으면 중요 17: "LCX", 18: "LCX", 19: "LCX", # LCX Branch2 후외측/보조가지, 대부분 중요하지 않음 14: "LCX", 15: "LCX", 16: "LCX", 24: "LCX", 25: "LCX", }
RCA , LAD는 별 걱정이 없는데, LCX가 좀 까다롭다…
메인 줄기인 13번은 중요하지만 15번 16번은 별로 중요하지 않다고 한다. 하지만, ‘이렇게 길고 두껍게 있을 때는 중요한 것이 아닌가…?’ 라는 생각이 든다. 이거에 관해서 일단은 다 라벨링을 할 것이지만, 어떻게 해야할지 모르겠다. 예전에 말한대로 내가 원하는것은 사용자가 그냥 사용할 데이터만 추가하면 모든지 알아서 분석해주는 프로그램을 만드려고 하기 때문에 사용자 입장에서는 메인 줄기인 13번만 보고 싶어하는게 아니라, 이렇게 15번 16번이 길게 있을 때 둘 다 세그멘테이션되는 것을 원하지 않을까? 라는 생각이 든다.
사실 nnUNet으로 학습을 시켰다. (잘못된 정보로 ㅠㅠ)
nnUNet 학습 결과 (원본 - 정답 - 예측순)
테스트만 하기 위해서 메인과 분지(중요), 분지(안중요)를 나눠서 하지는 않았지만, 결과를 보면 전반적으로 잘 예측한다. 학습 데이터와 평가 데이터를 4:1 비율로 나누어 학습을 진행했다.
결과를 보면 세그멘테이션이 일부 끊겨 있는 구간이 있어, 이를 다시 연결하는 방법도 고민 중이다. 현재는 전반적으로 세그멘테이션이 잘 이루어지고 있지만, 향후 복잡한 협착 부위를 다룰 때는 다를 수 있으므로, 128×128 패치로 학습한 AI를 활용해 보다 정교한 세그멘테이션을 시도할 계획이다.
Stenosis 탐지 모델은 정확도가 약 60 ~ 70%밖에 되지 않아 높일 방법을 찾는중이다.
2025-10-05 작성
nnUNet으로 fold 0~4를 학습한 뒤, 예측 단계에서 앙상블을 적용하였다.
예측 결과 (원본, 내가 학습시킨 모델 예측, 그전 엔지니어 예측 모델)
해결해야 할 문제
- Main과 Branches 분리 - LAD와 RCA는 쉽지만 LCX는 쉽지 않다. 단순히 가장 긴 줄기를 메인으로 보면 안되기 때문에 방법을 찾아봐야할 듯 (가장 어려울 듯)
- Stenosis,128 * 128 Patches 예측
2025-10-08 작성
10월 5일에 작성한 LCX의 Main과 Branches 분리 작업을 하지 못하였다… 생각보다 생각할 것이 많아서 천천히 생각해볼 예정이다.
폴더 구조 및 설명
project_root/ │ ├── vessel_post/ # 혈관별 후처리 로직 담당 │ ├── common_utils.py # 공통 유틸 (스켈레톤, 연결성, 그래프 등) │ ├── lad.py # LAD(전하행지) 혈관 후처리 로직 │ ├── lcx.py # LCX(좌회선지) 혈관 후처리 로직 │ ├── rca.py # RCA(우관상동맥) 혈관 후처리 로직 │ ├── post_manager.py # 혈관별 로직을 통합 관리 (분기/자동 처리) │ └── __init__.py │ ├── xray_angio/ # 입력 데이터 (X-ray 영상) │ ├── inference_util.py # ONNX 모델 로드 및 추론 함수 (공통) ├── patch_inference_utils.py # 128×128 패치 단위 정밀 세그멘테이션 보정용 ├── post_processing.py # 단일 이미지 후처리 실행 스크립트 └── post_processing_folder.py # 폴더 단위 일괄 처리 스크립트 # 프로그램 흐름 요약 입력(X-ray PNG) ↓ [Syntax 모델 예측, 앙상블] → 혈관 구조(메인+브랜치) 분할 ↓ [혈관 후처리] → 각 혈관(LAD/LCX/RCA) 형태 분석 및 Skeleton 추출 ↓ [Patch Refine] → Main Skeleton 주변 128×128 패치 정밀 예측으로 브랜치 보정 ↓ [Stenosis 모델 예측, 앙상블] → 메인 혈관 내 협착(좁아진 부위) 탐지 ↓ 결과 오버레이(초록색 Main + 빨강 Branch + 반투명 보라색 Stenosis) ↓ 출력(PNG 저장)
결과 (LCX부위는 아직 완성되지 않음)
ㄷ자 모양을한 것은 RCA이고, 왼쪽 위에서 오른쪽 아래로 향하는 것은 LAD다.
현재 50장을 테스트 해봤다. 육안으로 Stenosis 예측은 80%정도 맞는 거 같고 Patches는 1~2픽셀이 아쉬운 거 같다… 이제 예측 파이프라인은 완성되었으니 다른 부분들을 수정해야할 거 같다.
해결해야 할 문제
- LCX - Main Branches 분리
- Patches 학습 시 Main과 Stenosis를 함께 학습 시켰는데, 따로따로 학습 후 예측 해보기
- Patches 학습 데이터 수정
- LM과 LAD 혹은 LCX가 끊어져있을 때 잇는 방법 찾기
- RCA 4번 사진처럼 끊어져있을 때 잇는 방법 찾기
- 너무 얇은 혈관은 어떻게 해야할까…?
08
