프로젝트 개요
목록 | 내용 |
---|---|
프로젝트명 | 소아 왼손 X-ray 기반 골연령 예측 및 성장 예측 시스템 |
개발기간 | 2021년 10월 - 2021년 11월 (1개월) |
역할 | 팀리더 |
기여도 | 40% (설계 및 전처리 중심) |
핵심 과제
성장기 아동 왼손 X-ray를 활용하여 골 연령을 예측하는 모델을 개발한다.
핵심 성과 지표
지표 | 달성값 | 측정 방법 |
---|---|---|
MAP@0.5 | 0.991 | YOLOv5 객체 탐지. 관절 7개 부위 탐지 |
MAE | 4.7개월 | 전문의 판단 대비 평균 4.7개월 차이 |
실용성 | GUI개발 | PyQt5기반 완전 독립 실행 GUI 개발 |
기술 스택 및 아키텍처
핵심 기술 스택
Detection : YOLOv5s # (13개 골 관절 탐지)
Regression : TJNet # (VGG16 + Gender Embedding)
Processing : OpenCV 4.5+ # (전처리 파이프라인)
Framework : PyTorch 1.11.0 # (딥러닝 백엔드)
Medical : LMS 방법 # (성장 예측 알고리즘)
Validation : Bland-Altman # (의학적 검증)
UI : PyQt5 # (데스크톱 GUI)
Visualization: Matplotlib # (성장 그래프)
Report : openpyxl # (Excel 보고서)
Deployment : Pyinstaller # (.exe 독립 실행)
시스템 아키텍처
graph TD A[Image] subgraph Preprocessing B[Remove Background] B --> C[Bone Segmentation] C --> D[Make Mask] end subgraph Model E[YOLO Inference<br/>TW3 7 ROI] E --> F[TJ-Net] F --> G[Bland-Altman] end subgraph Service Preprocessing --> Model H[LMS 18th Hight] --> I[Graph] F --> H I --> J[Make Report] end A --> Service
주요 기술적 도전과 해결책
1. 복잡한 X-ray 영상 전처리 파이프라인 최적화
- 목표: 다양한 촬영 조건에 대해서 배경 노이즈, 손 위치 변화가 있더라도 동일한 ROI 추출힐 수 있도록 전처리
- 제약: 의료 영상 특성항 높은 정확도가 요구. 뼈 구조의 명확한 구분이 필요
문제 해결 과정
체계적 파이프라인 설계
- Bitwise를 통해 마스크 생성 및 배경 제거
- 손목 중간과 손목이 시작되는 지점을 x,y로 설정. 선형회귀선을 통해 각도 조정
angle = math.atan2(h - 0, int(model.predict([[h]])) - int(model.predict([[0]])))*180/math.pi M = cv2.getRotationMatrix2D((w/2,h/2), angle-90, 1) rotate = cv2.warpAffine(before_rot_img, M, (w, h))
- 밝기 조정 및 모폴로지 적용
- CLAHE 기반 대비 개선
clahe = cv2.createCLAHE(clipLimit=1.0, tileGridSize=(3,3))
성과
각 단계별 기능 자동화를 통해 처리시간 40% 단축
2. TW3 기법 기반 정확한 골관절 탐지 및 TJNet 모델 활용
- 목표: 의학적 표준화된 TW3기법의 7개 골관절을 정확히 탐지하고 각각의 성숙도 평가
- 제약: 손목과 손가락 20개 핵심 관절 중 7개를 정확히 탐지, 추출
문제 해결 과정
TW3표준 적용
- 의학 문헌 기반 정확한 관절 분류 체계 구축
- 직접 소아 나이, 성별별 데이터를 선택, 직접 Annotation
YOLOV5 학습 및 활용
- 7개 ROI Annotation 데이터를 활용, 학습하고 검증
{ image: 621, batch_size: 2, epochs: 230 }
- TJ-Net 학습 및 활용
- 기존 TJ-Net과는 달리 Input layer에 7개 ROI를 삽입하고 학습.
- 이후 TJ-Net 특징으로 Gender layer에 성별 데이터를 추가하여 모델 학습 진행
{ train_data: 865 validation_data: 371, batch_size: 4, epoch: 18 (early stopping) }
성과
YOLO mAP@0.5 0.991달성 TJ-Net MAE 4.7개월 달성
3. LMS 방법 기반 18세 예상 신장 예측
- 목표 질병 관리청 소아 청소년 성장도표를 활용하여 18세 예측 신장을 제공하는 서비스 개발
문제 해결 과정
- LMS방법론 구현
- L,M,S 매개변수 활용 현재 신장의 분위수를 계산, 18세 신장 예측
def Height_prediction ( gender, BA, current_H ) :
import pandas as pd
lms_df = pd.read_csv('/content/drive/MyDrive/2차 프로젝트 원본 데이터/growth/height_df.csv')
month_age = round(BA * 12)
if gender == 1:
lms_index = month_age - 36
L_18, M_18, S_18 = lms_df.iloc[191,2], lms_df.iloc[191,3], lms_df.iloc[191,4]
elif gender == 0:
lms_index = month_age - 36
L_18, M_18, S_18 = lms_df.iloc[383,2], lms_df.iloc[383,3], lms_df.iloc[383,4]
L,M,S = lms_df.iloc[lms_index,2], lms_df.iloc[lms_index,3],lms_df.iloc[lms_index,4]
x = current_H
Z = (((x/M)**L)-1)/(L*S)
Z = round(Z,4)
pred_height = M_18 * (1 + (L_18 * S_18 * Z)) ** (1 / L_18)
pred_height = round(pred_height, 1)
return pred_heigh
- 종합 분석 시스템
- 골연령 차이에 따른 성장 잠재력 분석
- 시각적 표현을 통해 서비스 제공
비즈니스 임팩트 및 확장성
- 저작권 등록
- 등록번호: C-2021-048147
- 저작물명: 손목과 손가락 관절을 이용한 소아/청소년의 뼈 나이 예측 프로그램
- 등록기관: 한국 저작권 위원회
- 창작일: 2021년 10월 18일
- 등록일: 2021년 11월 17일
- 공동저작자: 총 6명 (본인포함 5명 + 지도교수)