Code Monkey home page Code Monkey logo

dementia_analysis's Introduction

Dementia_Analysis

INDEX


  1. 프로젝트 개요

    1.1 주제

    1.2 주제 선정의 배경

    1.3 본 프로젝트의 활용 방안 제시

  2. 프로젝트 팀 구성 및 역할

  3. 프로젝트 수행 및 절차 및 방법


1. 프로젝트 개요

1-1. 주제


노인 아들 치매 사진 이미지 출처

고령화 시대의 의료 불균형 해소를 위한 치매 진단 파이프라인 구축

퇴행성 질환인 치매 관련 AI 기술의 필요성을 탐색하고 비정형, 정형 데이터를 통해 치매의 위험 인자를 탐색, 예측, 판단 할 수 있는 모델을 개발한다.

  • 라이프로그 데이터 : 웨어러블 기기를 통해 수집한 정형 데이터로 치매 위험 인자를 판별하고 M.L / D.L 모델을 통해 경도 인지 장애 단계를 조기에 예측한다.
  • 비정형 데이터(MRI) : 영상 이미지 데이터를 통해 치매를 판단한다.

1-2. 주제 선정의 배경


👵🏼  치매 유병률 증가와 가속화되는 의료 불균형

  • 고령화 : 고령화에 따른 치매 유병률은 기하급수적으로 늘어나는데, 의료 불균형은 가속화 되고 있다. 의료인력 부족 문제가 지방에서는 이미 발생하고 있으며, 이런 추세라면 의료 공백 문제가 더욱 심화될 것이다.
  • 의료산업 : 의료 인력을 도울 수 있고 효율성을 향상시키는 'AI(인공지능)'를 활용한 의료기술 산업은 성장성이 높고 낮음을 떠나서 '반드시 성장해야 하는 분야'라고 생각한다. 실제로 구글이나 애플, 아마존과 같은 글로벌 선도기업들도 관련 분야에 엄청난 투자를 쏟고 있다.
치매 환자 유병률 및 빈도수

출처 : 보건복지부지정 노인성치매 일산연구센터

🏥  의료분야에서의 AI모델 활용?

  • 조기진단 및 예측 : 알츠하이머와 같은 질병은 사실 MRI 상으로 판별하기 쉽다. 하지만 치료법이 없는 이런 질병은 발병 후 발견하면 큰 의미가 없다. 조기에 예측하는 것이 무엇보다 중요하다.
치매 조기진단의 중요성

"AI 활용한 치매치료 기술, 고령화 시대에 가장 필요한 솔루션"

  • 정확도, 시간 단축 : MRI, PET 등의 분석을 통한 질병 유무 판별은 많은 시간이 소요되는 과정이다. M.L / D.L 모델은 이런 과정을 단축하고 정확도 면에서도 더 우수하다.

1-3. 본 프로젝트의 활용 방안 제시


  • 라이프 로그 데이터를 통해 치매 예측 모델 개발
  • 라이프 로그 데이터로 예측 후 직접 만든 MRI 분류 모델로 검증

💡 효용성

  1. 병원 밖에서 수집 가능한 데이터를 가지고 진단 모델을 만듦으로써 지역 사회에서도 의료 서비스를 이용 할 수 있다.
  2. 생활하며 수집되는 데이터를 활용한 모델로써, 더욱 많은 데이터를 쉽게 수집할 수 있으며 금전적인 부담이 없다.
  3. AI 기술을 활용해 부족한 영상의학과 및 신경과 등 불균형한 의료 인력에서 오는 부담을 줄일 수 있다.

💡 제한점

  1. 치매란 인지 기능 및 다양한 의학적 근거를 통해 진단되어야 하기에 완벽한 조기 진단을 보기 위해선 다양한 전문 의료 인력이 필요하다.
  2. 라이프로그 데이터에서는 치매 환자의 표본이 부족한 문제점을 가지고 있으며 치매의 증상은 생활 수준의 변화 뿐이 아니라 다양한 변화를 가지고 오기에 다양한 변수를 수집해 모델링하여 더욱 정확도 높은 예측 결과를 제공해야 한다.
  3. 웨어러블 기기의 보편화가 이루어지지 않는다면 조기진단 모델 적용이 어렵다.
  4. 신뢰도가 높은 웨어러블 기기를 활용해야 하며, 수집 시 사용한 웨어러블 기기의 신뢰도에 따라 모델링의 결과가 달라질 수 있다.

2. 프로젝트 팀 구성 및 역할

이름 역할 Github
김민기 라이프로그 데이터 및 이미지 데이터 분석 결과를 활용한 대시보드 제작 @BDDKID
최용현 라이프로그 데이터 분석 및 머신러닝 및 딥러닝을 활용한 예측 모델 개발 @yonghyeun
김지민 두개골 없앤 MRI를 학습한 모델에 OASIS2데이터 적용 @kjmn1105
김희묵 CANNY로 MR외곽선을 학습한 모델에 OASIS2데이터 적용 @2mook2
오정현 데이터 증강을 통해 일반화한 학습한 모델에 OASIS2데이터 적용 @Ojung-ii
최유현 OASIS-2 demographics 데이터로 치매 예측에 유의미한 변수 탐색 @yu-hyun2

3. 프로젝트 수행 및 절차 및 방법

라이프로그 데이터 모델링

모델명 설명
LogisticRegression 로지스틱 회귀분석은 데이터 집합의 관측된 개별 결과가 양성 또는 음성인 두 가지 결과 중 하나일 때, 독립 변수와 종속 변수 간의 관계를 모델링하는 데 사용됩니다.
DecisionTreeClassifier 의사결정나무 분류기는 입력 변수에 대한 결정 규칙을 학습하고, 이를 사용하여 관측 결과의 클래스를 예측하는 데 사용됩니다.
SVC SVM은 고차원 공간에서 선형 및 비선형 분류, 회귀 및 이상치 탐지 문제를 해결하는 데 사용되는 강력한 분류 알고리즘입니다.
KNeighborsClassifier KNN 분류기는 새로운 관측값의 클래스를 예측할 때 가장 가까운 이웃 데이터의 클래스를 사용하는 분류 알고리즘입니다.
RandomForestClassifier 랜덤 포레스트는 여러 개의 의사결정나무를 생성하고 그들의 예측을 조합하여 보다 정확한 예측을 수행하는 데 사용됩니다.
XGBClassifier XGBoost는 Gradient Boosting 알고리즘을 기반으로 하며, 빠른 속도와 높은 예측 정확도를 제공하는 데 사용됩니다.
LGBMClassifier LightGBM은 Gradient Boosting 알고리즘을 기반으로 하며, 대규모 데이터 집합에서 빠른 학습 및 높은 예측 정확도를 제공하는 데 사용됩니다.
Catboost Catboost는 Gradient Boosting 알고리즘을 기반으로 하며, 범주형 변수를 처리하는 데 있어서 다른 Gradient Boosting 라이브러리와 비교하여 보다 뛰어난 예측 성능을 제공하는 데 사용됩니다.
DNN Deep Neural Network는 여러 층으로 구성된 인공 신경망 모델로, 이미지, 음성, 텍스트 등 다양한 데이터 유형의 예측 및 분류에 사용됩니다.

MRI 이미지 데이터

모델 설명
CNN CNN은 Convolutional Neural Network의 약자로, 이미지와 같은 고차원 데이터를 처리하기 위한 인공 신경망의 한 종류입니다. 이미지 분류, 객체 검출, 분할 등 다양한 이미지 처리 작업에서 사용됩니다.
Canny Canny Edge Detection은 이미지에서 에지(Edge)를 검출하는 알고리즘 중 하나입니다. 이미지의 밝기 변화가 큰 지점을 찾아서 에지로 인식합니다.
Contour Contour는 이미지에서 최외곽의 경계선 위치를 검출하고, 그 위에 검은색 선을 덮어 씌워 두개골을 지우는 방식입니다.
Augmentation Augmentation은 데이터 증강 기술로, 기존 데이터에 다양한 변형을 적용하여 데이터셋을 보강합니다. 예를 들어 이미지에서는 회전, 크기 조정, 반전 등의 변형을 적용하여 데이터를 다양하게 만들어 모델의 성능을 향상시킵니다.

dementia_analysis's People

Contributors

yonghyeun avatar 2mook2 avatar yu-hyun2 avatar bddkid avatar kjmn1105 avatar ojung-ii avatar

Stargazers

Kun-Woo avatar  avatar  avatar  avatar  avatar Thinking seo avatar

Watchers

 avatar

dementia_analysis's Issues

04/19 예상 서론

04/19 예상 서론

✅ 예상 서론 참고자료

치매 조기발견의 중요성
치매센터장 인터뷰 기사
-> 조기 진단이 중요! -> 웨어러블 장비를 통한 로그데이터 축적과 분석으로 치매 예측

( 타겟층은 30~60대, 웨어러블 장비 주사용층이자 조기치매와 치매 위험연령층이기 때문)
의료마이데이터
치매 분석의 필요성
치매 분석의 필요성

✅ 다음 회의

평가지표에 대한 시각화
EDA 시각화 스킬 캐글(주황색 프로필)에서 찾아보면서 많이 사용해 보자! - 모델비교 시각화 필사도 괜찮을듯
깃헙 협업 시도

노션 페이지가 어떻게 올라가나 테스트

정형팀

  • 라이프로그 데이터에서 비치매군, 경도인지장애, 중증 치매 진단 기준

    Untitled

라이프로그 데이터 분석 파이프라인

  • 자료조사

  • 배경수립

  • 데이터수집

  • 전처리 및 탐색

  • 활동, 수면 내역 데이터 전처리 후 merge 하여 train , test set 으로 깃허브에 저장 완료

  • 통계적 검증

    • 치매 내역 별 독립 변수에 대한 cross table 생성

      • 활동내역 cross table

        Untitled

      • 수면내역 cross table

        Untitled

    • ANOVA test 시행으로 종속 변수 별 유의미한 차이를 보이는 독립 변수 찾기

      • 활동내역 cross table + anova test

        Untitled

        💡 **INSIGHT**
        1. 세 그룹간 유의미한 차이가 있던 변수는 다음과 같았습니다.
        • 하루 휴식 시간
        • 활동 목표 달성 점수
        • 활동 점수
        • 저강도 운동 시간
        1. 비 치매군 (CN) 과 경도 인지 장애군(MCI)의 독립 변수간의 차이는 크게 나지 않았습니다. 위 4가지의 변수들은 치매군(Dem) 와 다른 환자 군간 차이가 유의미하게 나타났습니다.

        MCI 군과 Dem 군을 합쳐 하나의 치매 군으로 보고 T-test 검정을 시행한다면 유의미한 차이가 나는 변수들은 달라질 것 같습니다.

        두 변수를 합쳐야 할지 말아야 할지 고민을 해봐야겠습니다.

      • 수면내역 cross table + anova test

        Untitled

        💡 **INSIGHT**
        1. 세 그룹간 유의미한 차이가 있던 변수는 다음과 같았습니다.
        • 가벼운 수면 시간
        • 수면 잠복 점수
        • 수면 중간점 시간
        • 수면 시간
        • 수면 잠복 시간
        • 뒤척임 비율
        • 수면 시기 점수
        • 수면 시간
        • 깊은 수면 점수
        • 깬 시간
        1. 수면 양상 데이터에서는 활동 내역 데이터와 다르게 세 그룹간의 차이가 나타났습니다.
          대부분 부정적인 양상은 Dem → MCI → CN 군, 긍정적인 양상은 CN →MCI → Dem 순으로 나타났습니다.

        하지만 anova test 에서는 각 그룹 간의 차이가 있다 정도만 알 수 있을 뿐 제대로 된 통계 검정을 위해서는 다른 절차가 필요 할 것입니다.

    • ANOVA test 로 찾은 유의미한 변수 간 분포 차이 시각화

      • 활동 내역 분포

        577e2a41-04d7-40eb-893b-6520d11448ec.png

      • 활동 내역 Bar Plot

        c9de3ff8-3583-4cab-9099-5c96f1472c12.png

        💡 **INSIGHT**

        치매군 환자들이 비 치매군경도 인지 장애군에 비해 휴식 시간이 많았고, 하루 활동 점수 및 저강도 운동 시간이 매우 낮았습니다.

        비 치매군경도 인지 장애군간의 평균적인 차이는 보이지 않습니다.

      • 수면 내역 분포

        1eb9b78c-6746-4ce1-8691-4ca9b8765110.png

      • 수면 내역 Bar Plot

        그래프의 형태는 시각화가 끝난 후 더 바꿔봅시다. 색상이 너무 구리네요

        그래프의 형태는 시각화가 끝난 후 더 바꿔봅시다. 색상이 너무 구리네요

        💡 **INSIGHT

        치매군 환자**가 비 치매군경도 인지 장애군에 비해 수면의 양과 관련된 요소들이 높았습니다.

        ****하지만 수면의 질과 연관된 변수들에 있어서는 (깊은 수면, 수면 점수 등) 비 치매군에 비해 치매군 환자경도 인지 장애군이 ****낮은 양상을 보였습니다. 그 중 치매군 환자가 가장 낮았습니다.

    • 차원축소를 통한 데이터간 패턴 찾기

      • 모든 독립변수로 시행한 PCA

      • PCA 결과

        2차원

        fa03dee4-81a0-4909-a9ee-dc74528d58c9.png

        3차원

        c395f522-18cd-45d2-85eb-c841f731d7c5.png

        💡 **INSIGHT**
        1. 비 치매군경도 인지 장애 간 데이터가 패턴이 유사하게 보이는 것만 같습니다.가끔 두 클래스끼리 밀집된 지역이 있기도 하지만 대부분의 영역을 살펴 보았을 때 각 클래스 간 밀집되어 있는 모습을 볼 수 있습니다.
        2. 치매군은 이상치처럼 멀리 나와있는 경우가 많습니다. 중앙에 분포 된 두 개의 치매 군을 제외하고 말입니다.
      • ANOVA test 로 유의미한 변수만을 가지고 시행한 PCA 결과

      • PCA 결과

        💡 **ANOVA test 시 유의미했던 변수**

        ['activity_rest', 'activity_score_meet_daily_targets', 'activity_score', 'activity_low', 'sleep_light', 'sleep_score_latency', 'sleep_midpoint_time', 'sleep_duration', 'sleep_onset_latency', 'sleep_restless', 'sleep_score_alignment', 'sleep_total', 'sleep_score_deep', 'sleep_awake’]

        2차원

        378cbc81-06a5-4bba-bd98-64c3bc4e0c3e.png

        3차원

        e80ad654-bd0e-4629-90d0-dfcdd66ca497.png

        💡 **INSIGHT**
        1. 비 치매군경도 인지 장애 간의 데이터 패턴의 차이가 조금 더 명확하게 드러나는 것 같습니다. 이 전 PCA 결과와 비교해보았을 때에 비해 비 치매군경도 인지 장애군의 거리가 조금 더 멀어졌습니다.
        2. 치매군은 변수 선택 전에 비해 더욱 눈에 띄게 이상치처럼 나와 있는 모습을 볼 수 있습니다.
      • 모든 독립 변수로 시행한 PCA과 ANOVA test로 유의미한 변수만 선택한 PCA 비교

        98092f18-9f1a-48e8-a317-2f3a505801af.png

        full_pca.gif

        f5d78b86-5dcf-48e5-a703-0b5be224961b.png

        anova_pca.gif

    • 상관 관계를 보이는 독립 변수 찾기

      • 활동내역 상관관계 heatmap

        aca848a2-ca7d-48d4-ad4d-f2284ae4218a.png

        💡 **INSIGHT**

        대부분의 독립 변수간 상관관계를 보이고 있는 경우가 많습니다. (activity non waer 제외)

        이는 같은 내용을 표현하는 평가 지표들이 중복되어 나타남에 나타나는 현상 같습니다.
        현재 데이터에서는 활동내역을 시간으로 평가하거나 , MET 로 평가하거나, score 로 평가 하고 있습니다.

        또한 긍정과 부정을 모두 표현하는 변수들이 존재함에 따라 상관관계가 -0.9 이하로 나타나는 경우도 잦습니다. 예를 들어 하루 활동량과 하루 비활동량과 같은 변수를 뜻합니다.

        적절한 feature enginearing 이 필요해보입니다.

      • 수면상태 상관관계 heatmap

        13658663-1b6c-45e7-ab3d-3263b52c9b2f.png

        💡 **INSIGHT**

        활동 내역 데이터와 다르게 상관관계가 강한 데이터들이 많지 않습니다.

        0.8 이상의 매우 강한 상관 관계를 보이는 변수를 살펴보면

        1. 기상시간과 수면 효율성이 -0.9 로 매우 강한 음의 상관관계를 보입니다.
        2. 수면 안정성과 수면 중 뒤척임 점수가 -0.9로 매우 강한 음의 상관 관계를 보입니다.
        3. 수면 점수와 수면 중 뒤척임 정도가 -0.8로 매우 강한 음의 상관 관계를 보입니다.
        4. 가벼운 수면 시간과 수면 중간점 시간이 0.8 로 매우 강한 양의 상관 관계를 보입니다.

        수면과 관련된 독립 변수들간에서도 독립 변수의 조합으로 이뤄진 변수들이 많습니다.
        이 또한 feature engiearing 의 필요성이 느껴집니다.

  • 모델링

    • 적합한 평가 지표 선정하기
    • 머신러닝
      • 화이트박스 모델
        • 로지스틱 회귀분석
        • 의사결정나무
      • 블랙박스 모델
        • Random Forest
        • XGB,LGBM,CATBOOST
    • 딥러닝
      • DNN
    • 대시보드 구축
      • 모델 별 ROC curve 를 통해 적합한 모델 찾기
      • 적합한 모델의 confusion matrix 를 통해 모델 성능 확인

04/27 데이터 준비 문제 및 프로젝트 방향 회의

오전 회의 내용

⭐ 신청한 데이터가 오기 전에 각자 수행할 진행 과정에 대한 공부 & 공유할 예정

✅ OASIS 데이터 관련 이슈

OASIS에서 데이터가 오지 않고 있음 - 데이터를 받지 못하면 OASIS3, 4데이터로는 프로젝트를 진행할 수 없음

OASIS1, 2
[OASIS Brains - Open Access Series of Imaging Studies]

How to Edit, Filter, and Join Data Tables
[XNAT Documentation: How to Edit, Filter, and Join Data Tables]

OASIS 3, 4 수령시 참고 깃허브
[GitHub - NrgXnat/oasis-scripts: Example download scripts for the OASIS3 project]

✅ 프로젝트 방향 의견

  • [Backend.AI] 공유 폴더를 통해 진행

치매 위험 환자 추천시스템

  • 치매 위험 환자의 기준치보다 낮은 컬럼을 널값으로 처리
  • 널값을 기준치 이상으로 올리기 위한 솔루션을 제공(아마도? 사용자기반)
    ( ex. 운동량 부족! -> 운동이 필요합니다 정도까지만)
  • 자세한 데일리 솔루션은 추후에 생각(자세한 데일리 솔루션 : 1km 걸으세요 등)

Streamlit 활용으로 데이터 업로드 > 예측 결과 보여주기

  • 정형데이터, 음성데이터, MR 데이터를 업로드해서 받으면
  • 기존에 학습된 모델을 기반으로 뇌질환 위험도 분석결과 보여주도록
  • 가장 간단한 정보부터 해서 1단계에서 위험도가 높으면 2, 3단계도 진행 추천

프로젝트의 필요성을 데이터를 통해 제안 - README에 작성할 예정

  • 통계청 데이터를 활용해 의료비 지출의 증가량 및 예측
  • 텍스트 네트워크 분석을 통해 치매 관련 관심도를 시각화

오후 회의 내용

✅ 스토리텔링

치매 유병률이 늘어나고 있고 치매 관련 의료비 지출 늘어나고 노인 인구도 늘어나는데 지역간의 의료 인원 불균형이 심하다, 치매를 라이프로그를 사용해 예측하는 모델을 만들고 더 정확한 예측과 의료 불균형 해소에 도움이 되기 위한 비정형 데이터로 분석해 보기로 했다.

1차 병원에서 웨어러블 데이터로 분석하고 결과가 좋지 않으면 2차 병원에서 MRI 정밀 검진을 추천한다~

웨어러블 라이프로그 데이터를 모델링 해보고 결과가 괜찮다 하면 라이프로그 쪽으로 포커싱
결과가 좋지 않으면 방향을 틀자 ~

🤔 시도해 볼 것! 해마체, 대뇌피질, 뇌의 불균형성 → 수치화 → 정형데이터로 변환 → 파생변수 생성

segmentation 과 UNet

출처: https://youtu.be/n_FDGMr4MxE

  1. Segmentation 이란?

image

Single object → Classification + Localization
Multiple objects → Object Detection 으로 여러 객체에 대해 Classification + Localization 작업
→ Instance Segmentation 으로 bbox 가 아닌 픽셀 단위로 작업

image

Semantic Segmentation 은 이미지 전체에서 클래스를 분류하는 것이 아닌, 각 픽셀마다 클래스를 분류하는 것이 특징

image

image

각 픽셀마다 원-핫 인코딩 형식으로 클래스를 분류하는 모습

image

Semantic Segmentation 의 장단점

  1. U-Net

image

일반적인 분류 task 에서는 해상도가 계속 줄어들어서 마지막에는 클래스의 개수와 같은 dimension 을 갖도록 만드는 것이 일반적

image

Semantic Segmentation 분야에서는 단순히 분류 결과를 구하는 것이 아니라 입력 이미지와 같은 해상도를 가지는 출력 이미지가 나와야 하기 때문에 조금 다른 구조를 사용

image
입력과 출력의 해상도가 같을 수 있도록 합니다.

image

rU-Net 구조에 대해 이해하기 위해 Convolution 연산의 종류 알아보기

image

수축 경로
572 * 572 이미지를 받아주고 기본적으로 흑백 사진이므로 채널 사이즈는 1
kernel 사이즈가 64인 convolution layer 를 사용해서 결과적으로 570 * 570 * 64 출력 tensor 을 얻을 수 있다.
→ : convolution 을 통해 넓이와 높이는 조금씩 줄고 채널 수는 증가
↓ : maxpooling 을 이용해 해상도를 절반씩 감소
위 과정을 반복해서 32*32 크기까지 해상도를 압축

확장 경로
up-conv 를 통해서 해상도를 2배로 증가, convolution layer 를 거치며 채널 사이즈 감소

다만 특이한 점은 U-Net 구조에서는 수축 경로에서 사용했던 feature map 을 그대로 확장 경로에서도 사용될 수 있도록 해서(흰색 부분) 보다 좋은 출력 결과를 얻을 수 있다. 또 U-Net 은 image segmentation 을 위해서 사용되는 네트워크이기 때문에 별도의 FC layer 가 필요하지 않다.

image

수축 경로만 확인해 보면 일반적은 분류 모델과 동일한 것을 확인할 수 있다. 따라서 U-Net 기반의 Segmentation 모델을 만들 때는 사전에 잘 학습되어있는 다른 분류 모델을 그냥 encoder 형태로 사용하는 경우도 많다.

image

앞 부분의 layer 에서 추출되었던 feature 에 대한 정보들을 뒷 부분에서 그대로 사용할 수 있다는 점에서 보다 학습 난이도가 낮아지고 좋은 결과를 얻을 수 있다. 이것은 일종의 Res-Net 에 사용되는 Residual Connectrion 과 유사하다고 볼 수 있다.

image

U-Net 구조 특징 때문에 일부러 입력을 조금 더 크게 넣는다.

image

cross entropy 와 같은데 추가 가중치 함수를 사용하는 이유는 배경 레이블과의 명확한 분리를 위해서 사용

[라이프로그_활동] 교차검증 시 accuracy 값이 하나의 값으로 수렴하는 문제 발생

params = {'DROPOUT_RATE':0.4,
        'START_NODE':32,
        'HIDDEN_NODE':16,
        'LAYERS':5}

optimizers = {'loss':'BinaryCrossentropy',
        'optimizer':'adam',
        'metrics':'accuracy'}

REPEATE = 10

fig, ax = plt.subplots(ncols = 5, nrows = 2, figsize = (20,10))
ax = ax.flatten()

for num in range(REPEATE):
        x_train, x_test,y_train,y_test = train_test_split(X,Y,test_size = 0.2, random_state = 42 + num,
                                                                stratify = Y)
        
        model = DNN(**params)
        model.compile(**optimizers)
        
        history = model.fit(x_train,y_train,
                        validation_data = (x_test,y_test),
                        epochs = 9999,
                        callbacks = [early_stopping],
                        verbose = 0)
        ax[num].plot(history.history['accuracy'], label = 'train_accuracy', color = 'orange')
        ax[num].plot(history.history['val_accuracy'], label = 'val_accuracy', color = 'blue')  
        
        ax[0].set_ylabel('accuracy')
        ax[5].set_ylabel('accuracy')
        ax[num].legend(loc = 'lower right')
        score = round(model.evaluate(x_test,y_test,verbose = 0)[-1],8)
        ax[num].set_title(f'{num} FOLD SET :{score}',fontsize = 10)
        

b9dbabd1-1b6d-4cc7-80f1-88ecdbf9a035

해당 코드에서 교차검증 시 테스트 데이터가 바뀜에도 불구하고 대부분의 accuracy 값이 비슷한 값에 수렴하는 문제 발생

random_state 값을 계속 바꿔주고 있는데 잘 바뀌지 않나?

04/30 라이프로그 데이터 분석 파이프라인

✅ 라이프로그 데이터 분석 파이프라인

  • 자료조사

  • 배경수립

  • 데이터수집

  • 전처리 및 탐색

  • 활동, 수면 내역 데이터 전처리 후 merge 하여 train , test set 으로 깃허브에 저장 완료

  • 통계적 검증

    • ANOVA test 시행으로 종속 변수 별 유의미한 차이를 보이는 독립 변수 찾기
      • 활동내역 cross table + anova test

        image

        💡 **INSIGHT**
        1. 세 그룹간 유의미한 차이가 있던 변수는 다음과 같았습니다.
        • 하루 휴식 시간
        • 활동 목표 달성 점수
        • 활동 점수
        • 저강도 운동 시간
        1. 비 치매군 (CN) 과 경도 인지 장애군(MCI)의 독립 변수간의 차이는 크게 나지 않았습니다. 위 4가지의 변수들은 치매군(Dem) 와 다른 환자 군간 차이가 유의미하게 나타났습니다.

        MCI 군과 Dem 군을 합쳐 하나의 치매 군으로 보고 T-test 검정을 시행한다면 유의미한 차이가 나는 변수들은 달라질 것 같습니다.

        두 변수를 합쳐야 할지 말아야 할지 고민을 해봐야겠습니다.

      • 수면내역 cross table + anova test

    image

          <aside>
          💡 **INSIGHT**
          
          1. 세 그룹간 유의미한 차이가 있던 변수는 다음과 같았습니다.
          
          - 가벼운 수면 시간
          - 수면 잠복 점수
          - 수면 중간점 시간
          - 수면 시간 
          - 수면 잠복 시간 
          - 뒤척임 비율
          - 수면 시기 점수 
          - 수면 시간 
          - 깊은 수면 점수 
          - 깬 시간
          
          2. 수면 양상 데이터에서는 활동 내역 데이터와 다르게 세 그룹간의 차이가 나타났습니다.
          대부분 부정적인 양상은 Dem → MCI → CN 군, 긍정적인 양상은 CN →MCI → Dem 순으로 나타났습니다. 
          
           하지만 anova test 에서는 각 그룹 간의 차이가 있다 정도만 알 수 있을 뿐 제대로 된 통계 검정을 위해서는 다른 절차가 필요 할 것입니다.
          
          </aside>
    
    • ANOVA test 로 찾은 유의미한 변수 간 분포 차이 시각화

      • 활동 내역 분포

      577e2a41-04d7-40eb-893b-6520d11448ec

      • 활동 내역 Bar Plot

      dc5ed125-b019-411a-ac69-a6539996d449

        <aside>
        💡 **INSIGHT**
        
         **치매군 환자**들이 **비 치매군**과 **경도 인지 장애군**에 비해 휴식 시간이 많았고, 하루 활동 점수 및 저강도 운동 시간이 매우 낮았습니다.
        
         **비 치매군**과 **경도 인지 장애군**간의 평균적인 차이는 보이지 않습니다.
        
        </aside>
      
      • 수면 내역 분포

      90a4747c-3046-49fc-87b4-fdae3b30de45

      • 수면 내역 Bar Plot

        ![그래프의 형태는 시각화가 끝난 후 더 바꿔봅시다. 색상이 너무 구리네요 ]

      08c46df1-d2b8-4320-9681-f90fec4447e2

        그래프의 형태는 시각화가 끝난 후 더 바꿔봅시다. 색상이 너무 구리네요 
        
        <aside>
        💡 **INSIGHT
        
        치매군 환자**가 **비 치매군**과 **경도 인지 장애군**에 비해 수면의 양과 관련된 요소들이 높았습니다. 
        
        ****하지만 수면의 질과 연관된 변수들에 있어서는 (깊은 수면, 수면 점수 등) **비 치매군**에 비해 **치매군 환자**와 **경도 인지 장애군**이 ****낮은 양상을 보였습니다. 그 중 **치매군 환자**가 가장 낮았습니다.
        
        </aside>
      
    • 차원축소를 통한 데이터간 패턴 찾기

      • 모든 독립변수로 시행한 PCA

      • PCA 결과

        2차원

      4fbd1d12-39cb-4b8c-8eee-9b0baf8d9334

        ### 3차원
      

      466d060b-1092-4c9d-a562-16990f0a56e2

        <aside>
        💡 **INSIGHT**
        
        1. **비 치매군**과 **경도 인지 장애** 간 데이터가 패턴이 유사하게 보이는 것만 같습니다.가끔 두 클래스끼리 밀집된 지역이 있기도 하지만 대부분의 영역을 살펴 보았을 때 각 클래스 간 밀집되어 있는 모습을 볼 수 있습니다.
        2. **치매군**은 이상치처럼 멀리 나와있는 경우가 많습니다. 중앙에 분포 된 두 개의 치매 군을 제외하고 말입니다.
        
        </aside>
      
      • ANOVA test 로 유의미한 변수만을 가지고 시행한 PCA 결과

      • PCA 결과

        💡 **ANOVA test 시 유의미했던 변수**

        ['activity_rest', 'activity_score_meet_daily_targets', 'activity_score', 'activity_low', 'sleep_light', 'sleep_score_latency', 'sleep_midpoint_time', 'sleep_duration', 'sleep_onset_latency', 'sleep_restless', 'sleep_score_alignment', 'sleep_total', 'sleep_score_deep', 'sleep_awake’]

        2차원

      218780ee-b8ab-4d9c-83b4-c22aa3b28d01

        ### 3차원
      

      14a0d170-8c99-41c2-82cd-bfcd0588fa76

        <aside>
        💡 **INSIGHT**
        
        1. **비 치매군**과 **경도 인지 장애** 간의 데이터 패턴의 차이가 조금 더 명확하게 드러나는 것 같습니다. 이 전 PCA 결과와 비교해보았을 때에 비해 **비 치매군**과 **경도 인지 장애군**의 거리가 조금 더 멀어졌습니다.
        2. **치매군**은 변수 선택 전에 비해 더욱 눈에 띄게 이상치처럼 나와 있는 모습을 볼 수 있습니다.
        
        </aside>
      
    • 상관 관계를 보이는 독립 변수 찾기

      • 활동내역 상관관계 heatmap

      742068c7-c3ed-4061-bb76-1596337ab22f

        <aside>
        💡 **INSIGHT**
        
        대부분의 독립 변수간 상관관계를 보이고 있는 경우가 많습니다. (activity non waer 제외)
        
         이는 같은 내용을 표현하는 평가 지표들이 중복되어 나타남에 나타나는 현상 같습니다.
        현재 데이터에서는 활동내역을 시간으로 평가하거나 , MET 로 평가하거나, score 로 평가 하고 있습니다. 
        
         또한 긍정과 부정을 모두 표현하는 변수들이 존재함에 따라 상관관계가 -0.9 이하로 나타나는 경우도 잦습니다. 예를 들어 하루 활동량과 하루 비활동량과 같은 변수를 뜻합니다.
        
         적절한 feature enginearing 이 필요해보입니다.
        
        </aside>
      
      • 수면상태 상관관계 heatmap

      b0c69908-4e2b-415b-b75a-3d2168be362a

        <aside>
        💡 **INSIGHT**
        
        활동 내역 데이터와 다르게 상관관계가 강한 데이터들이 많지 않습니다.
        
        0.8 이상의 매우 강한 상관 관계를 보이는 변수를 살펴보면 
        1. 기상시간과 수면 효율성이 -0.9 로 매우 강한 음의 상관관계를 보입니다.
        2. 수면 안정성과 수면 중 뒤척임 점수가 -0.9로 매우 강한 음의 상관 관계를 보입니다.
        3. 수면 점수와 수면 중 뒤척임 정도가 -0.8로 매우 강한 음의 상관 관계를 보입니다.
        4. 가벼운 수면 시간과 수면 중간점 시간이 0.8 로 매우 강한 양의 상관 관계를 보입니다.
        
        수면과 관련된 독립 변수들간에서도 독립 변수의 조합으로 이뤄진 변수들이 많습니다.
        이 또한 feature engiearing 의 필요성이 느껴집니다.
        
        </aside>
      
  • 모델링

    • 적합한 평가 지표 선정하기
    • 머신러닝
      • 화이트박스 모델
        • 로지스틱 회귀분석
        • 의사결정나무
      • 블랙박스 모델
        • Random Forest
        • XGB,LGBM,CATBOOST
    • 딥러닝
      • DNN
    • 대시보드 구축
      • 모델 별 ROC curve 를 통해 적합한 모델 찾기
      • 적합한 모델의 confusion matrix 를 통해 모델 성능 확인

04/24 프로젝트 방향 회의

04/24 프로젝트 방향 회의

✅ 데이터 상황

민 용) 음성 데이터 - 아직 확정 전(더 찾아볼 예정)
https://www.kaggle.com/datasets/ruslankl/early-biomarkers-of-parkinsons-disease?select=dataset.csv

정 지 희 현) MRI 데이터 - 데이터 신청 중
https://www.oasis-brains.org/#data
해마, 대뇌피질 팀으로 나눠서 훈련하면 어떨까

✅ 참고사항

Github README - 팀원의 역할, 수행 내용, 데이터셋 설명, 프로젝트 설명 작성 예정
참고하면 좋을 논문
https://direct.mit.edu/jocn/article/22/12/2677/4983/Open-Access-Series-of-Imaging-Studies-Longitudinal

✅ 다음 회의

04/26 22시 데이터 상황 보고

04/28 주말 계획

Issue

  • OASIS 3, 4 데이터 못 받았음 (다시 제출했으니 확인해 달라고 메일 보냈음. plz)

⭐정형 데이터 팀

  • Interactive한 시각화를 위한 pyecharts라이브러리 공부
    • 활용방안 : 아노바 테스트를 통해 얻은 유의미한 변수들을 한눈에 볼 수 있도록 시각화를 진행할 예정

⭐비정형 데이터 팀

  • balloon이나 nucleus 샘플 데이터로 Mask RCNN 필사하면서 적용 전 공부

캐글 링크

  1. 데이터의 mask 활용해서 모델 돌려보기(선택)
  2. 데이터의 원본 이미지를 mask를 제외하고 모델을 돌려보기
  3. Mask R CNN을 적용하고 모델을 돌려보기

segmentation 발전 과정

출처: 유튜브링크

Segmentation 이란?

  • Object Detection → bbox 단위
  • Image Segmentation → bbox 안의 실제 영역까지 찾음

Segmentation 의 발전

  1. R-CNN : 여기서 R : Region

    • 주요 객체들을 bbox 로 표현하여 정확히 식별하는 게 목표

    image

    bbox 로 객체 탐지 → 정사각형 모양으로 warp (그 당시 imagenet 이 정사각형 모양의 이미지를 사용했기 때문에) → CNN

  2. Fast R-CNN

    • ROI(Region of Interest) 풀링을 통해 한 이미지의 subregion에 대한 forward pass 값을 공유 → R-CNN의 단점인 느린 속도를 빠른 속도로 개선
    • R-CNN은 CNN 모델로 image feature를 추출, SVM 모델로 분류, Regressor 모델로 bounding box를 맞추는 작업으로 분류되어 있지만, Fast R-CNN은 하나의 모델로 동작

    image

    Fast R-CNN은 하나의 모델로 동작 : Top layer에 softmax layer 를 둬서 CNN 결과를 class 로 출력 + Box regression layer 를 softmax laye r에 평행하게 두어 bounding box 좌표를 출력

  3. Faster R-CNN

    • Fast R-CNN은 가능성 있는 다양한 bounding box들, 즉 ROI를 생성하는 과정인 selective search가 느려 region proposer에서 병목이 발생
    • 이미지 분류(classification)의 첫 단계인 CNN의 forward pass를 통해 얻어진 feature들을 기반으로 영역을 제안

    image

    CNN 결과를 selective search 알고리즘 대신 region proposal에 이용

    • k개의 일반적인 비율을 지닌 anchor box를 이용하여 하나의 bounding box 및 score를 이미지의 위치별로 출력

    image

  4. Mask R-CNN

    • Pixel 레벨의 세그멘테이션
    • RolPool에서 선택된 feature map이 원래 이미지 영역으로 약간 잘못된 정렬이 발생한 부분을 RolAlign을 통해 조정하여 정확하게 정렬
    • Mask R-CNN은 Mask가 생성되면, Faster R-CNN으로 생성된 classification과 bounding box들을 합쳐 정확한 세그멘테이션 가능

U-Net 기반 세그멘테이션

  • biomedical 이미지를 segmentation 하는데 U-Net 모델 탄생
  • U-Net이라 불리는 인코더(다운샘플링)와 디코더(업샘플링)를 포함한 구조는 정교한 픽셀 단위의 segmentation이 요구되는 biomedical image segmentation task의 핵심 요소
  • Encoder-decoder 구조 또한 semantic segmentation을 위한 CNN 구조로 자주 활용
  • Encoder 부분에서는 점진적으로 spatial dimension을 줄여가면서 고차원의 semantic 정보를 convolution filter가 추출해낼 수 있게 함
  • Decoder 부분에서는 encoder에서 spatial dimension 축소로 인해 손실된 spatial 정보를 점진적으로 복원하여 보다 정교한 boundary segmentation을 완성
  • U-Net은 기본적인 encoder-decoder 구조와 달리 Spatial 정보를 복원하는 과정에서 이전 encoder feature map 중 동일한 크기를 지닌 feature map을 가져 와 prior로 활용함으로써 더 정확한 boundary segmentation이 가능하게 함

05/01 비정형팀 예상 프로세스

✅ 비정형팀 프로세스

기존 OASIS-2 데이터셋의 정보만 가지고 분석해보기. ➡️ 어떻게 해야할지 감 잡기

  • OASIS-1 처럼 정형데이터만으로 ➡️ demographic data
  • OASIS-2 노트북 참고해서 딥러닝으로 (필사) ➡️ image data

해마체를 분석하는 모델을 만든다.

  • U-net 을 이용한 semantic segmentation
  • 다른 데이터셋으로 해마체의 면적을 특정할 수 있도록 훈련시킨다.

OASIS-2 데이터셋을 이 모델에 적용한다.

  • 새로운 feature를 뽑아낸다.
  • 1에서 했던 결과와 어떻게 달라지는지 비교한다.

04/29 현업자 피드백

목표 수립

의료 불균형과 치매 증가 간의 차이로 인한 사회적 어려움을 예방하는 솔루션 제공이라는 점으로 이해했습니다. 이 주제를 위해 사전 배경의 중요성과, 사후 서비스 (결과물)에 대한 부분에 대해 충분히 통일감을 느낄 수 있었어요.

(+) 주제를 선정하기 위한 논리적 흐름과 사용 데이터가 잘 매칭되어있음
(+) 데이터가 잘 활용될 분야로 '의료'를 선택했다는 점이 프로젝트 취지와 잘 부합함

추가 피드백 : 최종 결과물이 어떻게 나올지 가장 기대가 되는 프로젝트입니다.


방법 설계

이 서비스를 구축하기 위해 정성적, 정량적 기반으로 나누어 개진한다는 점은 명료해서 좋았어요. 한편 실질적인 적용을 한다면 이라는 보다 현실적인 가정을 고려하면 의학적, 통계적 지식과 검증 방식이 본 진행에서보다 더욱 심도가 있어야 하겠으나, 그럼에도 불구하고 시간과 취지를 고려할 때 통계적 검증(ANOVA, PCA)과 모델링(CNN) 기반으로 접근하려는 점에서 본 스코프 상 충분히 적절했다고 판단되네요. 한편 방법 설계에 있어 현재 본인팀의 수준과 현실적인 제약을 얼마나 현실적으로 자각하는가도 중요한 지점 중 하나라고 생각되는데요, 해당 데이터를 입수하기 어려운 개인 정보 데이터라는 점을 잘 인지하신 것 같아 충분한 조사와 제고가 있었던 것 같습니다. 앞으로 진행에 있어 이 결과가 완벽한 해결점을 제시하는 솔루션을 지향하기보단, 어떤 지점에서 충분히 효용성이 있고, 어떤 지점에서 제한점이 있는지가 잘 구분된 결과물이 되었으면 해요.

(+) 비정형 데이터를 가공하기 위한 방법과 이미지 처리에 적합한 알고리즘을 잘 선정함
(+) 이미지를 해마체 / 뇌피질 / 불균형성의 피쳐로 가공하는 과정이 매우 잘 되어있음
(+) 치매 관련 인자를 찾기 위해 데이터 크롤링텍스트 분석하는 방법은 창의력 있는 발상

💡 완벽한 해결점을 제시하는 솔루션 보다는
어떤 지점에서 충분히 효용성이 있고 어떤 지점에서 제한점이 있는지 잘 구분된 결과물


일정 관리

본 예상 결과물을 구성하기 위한 타임라인은 어떻게 되는지는 빠져있는 것 같아요. 예를 들면 제가 예상하는 전체적인 프로그레스는 다음과 같을텐데요, 아래 각 스텝별로 예상 소요일정스텝별 역할 담당자가 한 표로 구성되었으면 해요. 그리고 이 전체적인 일정과 진행을 관리하는 프로젝트 매니저도 역할로써 구분되었으면 합니다. [자료 조사 > 배경 수립 > 방법 설계 > 예상 결과물 프로토타이핑 > 데이터 수집 > 전처리 및 탐색 > 통계적 검증 > 모델링 > 데이터 인프라 구축 > 대시보드 구축 > 회고] 프로젝트에서 가장 중요한 것을 한가지만 말하자면, 바로 일정입니다. 가시화된 일정이 없다면, 아무리 좋은 아이디어, 주제, 방법론, 결과물이 있더라도 소구되기 어려워요. 데이터 분석이 중요한건 문제 해결의 수단이라는 측면에서 전문성의 깊이이지만, 프로젝트 매니저의 중요성은 우리가 해결해야할 주제들이 데이터 분석만으로는 해결하기 어려울 때, 여러 배경과 전문성을 갖고 있는 구성원들을 위한 통합된 관리와 폭넓은 이해도로 해결할 수 있기 때문이에요. WBS에 대해 간단한 안내 및 링크 공유드리오니 참고 해주세요.
WBS 기초: 이 간단한 자료는 WBS의 기본 개념과 작성 방법에 대해 설명하고 있습니다. 이 자료를 읽으면 WBS의 목적과 이점, 그리고 실제 WBS를 작성하는 방법에 대한 이해를 얻을 수 있습니다. 웹사이트: https://www.workbreakdownstructure.com/

(-) 일정에 대한 부분이 명시되어있지 않음
(+) 팀원들이 모두 같은 업무를 하는 것이 아니라 모델링/시각화 역할이 나뉘어있다는 부분은 잘한 점

💡 프로젝트 매니저: 일정과 진행 관리, 각 스텝별 역할 담당자, 각 스텝별 예상 소요일정
[자료 조사 > 배경 수립 > 방법 설계 > 예상 결과물 프로토타이핑 > 데이터 수집 > 전처리 및 탐색 > 통계적 검증 > 모델링 > 데이터 인프라 구축 > 대시보드 구축 > 회고]
****프로젝트에서 가장 중요한 건 ‘일정’


자료 준비

주제 구성에 있어,배경에 소개된 리서치 자료와 기사 수 배치 적절했어요. 더불어 데이터에 대한 설명 또한 링크 잘 연결해서 적정했습니다. 전체적으로 계획서 내 '자료 구성'은 평이했으나, 바꾸어 말하면 특별하진 않았어요. 시각 자료와, 자료 구조에 대한 전달의 경우 사실 실제 최종 제출물 보다 계획서에서 더 위력적으로 발휘하게 돼요. 왜냐하면 이목을 끌고, 관심을 유도하기 위해 더 압축적으로 설득할 수 있어야하기 때문이에요. 계획서가 평이했다는 점에서 잘못되거나 부족한 부분은 없지만, 기존 템플릿을 재구성한다고 가정해볼 때 어떻게 하면 보다 압축하고, 매력적으로 구성될 계획서가 될지 고민해보면 좋을 것 같습니다. 답이 없는 열린 주제일 수 있지만 이 전달되는 자료가 발표자의 부담을 경감시키는것을 너머 촉매해주는 역할이 되기 때문이에요.

(-) 주제 선정을 위한 배경 작성 중 구글/애플 투자한다라는 부분에 출처가 같이 있으면 좋을 듯 (+출처나 기사 넣었으면 좋을 듯) 완료
(+) 사용할 딥러닝 모델에 대한 간단한 설명을 작성함

추가 피드백 : 각종 이미지와 도표를 추가했는데, 이미지와 도표에는 해당 그래프에 대한 설명을 추가하여 해석을 넣는 것이 좋습니다

💡 계획서 내 ‘자료 구성’ 압축적이고 설득력 있게! → 시각 자료, 자료 구조


전달력

발표자 분께서는 내용의 전달 측면에서, 배경, 주제, 방법, 결과물에 대해 핵심을 위주로 잘 전달하셨어요. 특히 언어적으로 전달할 지점과 비언어적으로 판단해야할 지점에 대해 강약 조절이 좋았습니다. 이러한 모습은 계획서의 내용을 그대로 읊지 않았다는 점과 전달될 각 섹션에 대해 간결한 요약을 통해 개진했다는 점에서 충분히 체화한 듯한 인상을 주셨어요. 이로 인해 발표 시 전달에 대한 단백함이 물씬 느껴졌어요. 한편 전달 시 목소리와 속도, 내용에 대해 청자가 이해하기 쉽게 길지 않고, 적절했다는 점에서도 훌륭했어요. 조금 더 피드백드리면, 파이널 멘트로써 아주 간결한 형태로 1~2문장 요약으로 정리해주면서 진행에 대한 자신감이나, 구성원의 감사함을 약간 담아 마무리 한다면 더욱 좋을 것 같네요.

(+) 발표 중간에 톤을 변경하며, 듣는 사람의 시선을 이끄는 스킬 좋았음

💡 파이널 멘트 1~2문장 요약으로 정리하면서 진행에 대한 자신감이나 구성원의 감사함을 약간 담아 마무리!

[streamlit] MRI 치매 분류 모델

image

  1. streamlit 에서 랜덤한 뇌 MRI 사진을 넣어 진단을 받기 위해서는 사전 학습된 모델이 필요
    → callback 에 checkpoint 로 모델을 저장 후, 불러오는 방식으로 해결!

  2. 로컬이 아닌 배포용 url 주소를 만들기 위해서 1번에서 저장한 모델과 .py 파일을 git 에 올려야 함. 그러나 model 을 저장한 파일이 133mb 로최대 25mb 제한이 있는 github 는 사용 불가
    → google drive api 시도해 보았으나 실패, ngrok 도전해 볼 계획

05/09 최종 발표 피드백

👀 피드백 전 간단한 질문

  1. 대학원생 있습니까?
    학부생입니다.
  2. 진행 얼마나 걸렸나요?
    7~10일 정도 걸린 것 같습니다.
  3. 프로젝트 하루에 얼마나?
    일어나서 잘 때까지 계속 함께 했습니다.

👍🏻 좋은 점

  1. 주제 선정
    • 주제 선정에 대해 진정성이 느껴져서 크게 인상을 받았습니다.
    • 가볍지 않은 주제를 끌고 가기에 의학적 지식과 코딩을 기반으로 한 개발적 지식을 분석화해 뽑아내는 것이 짧은 시간 안에 적용하기 쉽지 않았을 것 같은데 너무 멋집니다.
  2. 프로젝트 가치
    • 라이프로그를 웨어러블기기 측정 데이터로 분석을 많이 하는데 보통 예방 측면에서 사업적 가치가 높습니다. 퍼스널 단위에서 좋을 것 같습니다.
    • 프로젝트 수행에 대한 진지함과 가치를 높게 평가합니다. → 어려운 주제이기에 더더욱
    • 개인 데이터가 비용 뿐만 아니라 얻는 데에 소요되는 시간과 절차가 까다롭기 때문에 쉽지 않았을 것 같습니다.

🤔 궁금한 점

  1. 발표 둘이 나눠서 한 이유
    • 원래 모두가 본인의 파트를 발표하려 했으나 시간상 프로젝트별로 둘이 나눠서 하기로 했습니다.
  2. 왜 모델 퍼포먼스와 과정에 대해 심도있게 피칭하며 진행했는지, 어떻게 앙상블 퍼포먼스에 대해 하나하나 분석했는지
    • 모델 퍼포먼스에 대해 더 객관적으로 설명할 수 있게 하도록 노력했습니다.

👎🏻 나쁜 점

  1. 목표했던 취지랑 과정 밸런스가 맞지 않다.
    • 객관적으로는 잘 했음 근데 제공 받는 사람에 대해 고려를 하지 않은 것 같다.
    • 이 프로젝트가 팀끼리 중간 공유를 하는 목표면 디테일적인 부분을 말하는 좋은 발표가 될 수 있음. 그러나 세일즈하는 목표, 최종 의사결정 목표로 하면 실패할 가능성이 높음
    • 세일즈나 최종 의사결정에서는 타켓을 이해시키고 설득해야하는데, 디테일적이나 전문적인 부분은 적절치 못함
  2. 타겟을 잘못 잡은 것 같다.
    • 타겟을 잘 고려해야 함
    • 퍼포먼스, 성능(f1-micro 같은)에 치중하지 말고 타겟에게 설명할 수 있는 내용이었으면 좋았을 것

🙋🏻 우리가 질문한 내용

Q. 성능이 낮은 부분에 대해 발표에서 보여줘야하나에 대한 고민이 많았습니다.

A. 성능이 낮아도 억지로 거품내거나 평가절하할 필요 없다. 어차피 뽀록난다..!
담백하게 말하고 결정을 맡겨라!

💡 **부족한 점 피드백 요약** 프로젝트 초점이 모델의 성능을 보여주는 것에 맞춰져 있는 것 같다. 모델을 제공받는 사람에게 초점을 두면 더 좋을 것 같다. 타겟을 정하면 좋다. 예를 들어 우리 가족들에게 제공을 한다면 가족들이 이해하기 쉽게 전달을 해야 할 것인데 너무 개발자의 입장에서만 발표가 이루어진 것 같다. 타겟이 이해할 수 있도록 타겟에게 설명할 수 있는 내용이었으면 더 좋았을 것 같다.

04/29 주말 개인 진행 상황

정형팀

라이프로그 활동내역 모델

  • 라이프로그 활동내역 데이터 Threshold 조정

    발상의 전환을 해보자

    의료계에서는 무엇인가를 진단 할 때 되게 엄격한 threshold 를 가지고 예측한다.

    예를 들어 어떤 환자가 암일 확률이 20~30 %만 넘더라도 정밀 검사를 해보자며 이야기 한다.

    라이프로그를 활용한 조기 진단 또한 같은 잣대로 들이대야 하는 것이 아닐까? 경도 인지 장애일 확률이 n% 만 넘더라도 정밀 검사를 해봐야 한다고 해야 하도록 말이다.

    이를 해결 하기 위해 두 가지 방법이 있을 것으로 생각된다 .

    1. 각 클래스 별 예측 probablity 를 확인해보고 적절한 threshold를 찾아보자
    2. class weight를 조정하여 진단하고 싶은 것에 더욱 중점을 주는 것

    조기진단에 중요한 것은 해당 환자가 비 치매 군인지를 아는 것보다 경도 인지 장애임을 찾아내는 것이 중요한 것이니까.

    해당 모델의 민감도를 비 치매 군을 얼마나 예측을 잘 했느냐로 보지 말고 얼마나 경도 인지 장애와 치매군 환자를 잘 예측했느냐에 중점을 둬보자

    예상 가설 : 실제 클래스가 MCI,Dem 인 경우의 예측 probability가 실제 클래스가 CN 인 경우의 예측 probability보다 높을 것이다. 그러니 실제 클래스가 MCI,Dem일 때 예측한 probability 이상이면 MCI 혹은 Dem 으로 예측하자

    for num,model in enumerate(model_list): # 각 Fold set 별 예측값을 살펴보기 위한 코드 
    
    train = x_test_list[num]
    real = y_test_list[num]
    
    probs = model.predict(train,verbose = 0)
    
    mci_freq = real.value_counts().values[1]
    dem_freq = real.value_counts().values[2]
    
    correct_prob_dict = {'MCI_prob':0, 'Dem_prob':0}  
    wrong_prob_dict = {'MCI_prob':0, 'Dem_prob':0}
    
    for i,prob in enumerate(probs):
        
        if real.iloc[i] == 'MCI':
            correct_prob_dict['MCI_prob'] += prob[1] / mci_freq
            
        if real.iloc[i] == 'CN':
            wrong_prob_dict['MCI_prob'] += prob[1] / mci_freq
        
        if real.iloc[i] == 'Dem':
            correct_prob_dict['Dem_prob'] += prob[2] / dem_freq
        if real.iloc[i] == 'CN':
            wrong_prob_dict['Dem_prob'] += prob[2]/ dem_freq            
            
    print(f'{num} 번 째 실제값의 평균 prob :', correct_prob_dict)        
    print(f'{num} 번 째 오류값의 평균 prob :', wrong_prob_dict)        
    print('\\n')
    

    0 번 째 실제값의 평균 prob : {'MCI_prob': 0.6940202182158828, 'Dem_prob': 0.15522673726081848}
    0 번 째 오류값의 평균 prob : {'MCI_prob': 0.7301999715467296, 'Dem_prob': 2.1413284856826236}
    
    1 번 째 실제값의 평균 prob : {'MCI_prob': 0.05764982135345539, 'Dem_prob': 0.31480705738067627}
    1 번 째 오류값의 평균 prob : {'MCI_prob': 0.10565984218070902, 'Dem_prob': 3.5708497166633606}
    
    2 번 째 실제값의 평균 prob : {'MCI_prob': 0.05833928473293782, 'Dem_prob': 0.22328846901655197}
    2 번 째 오류값의 평균 prob : {'MCI_prob': 0.10751151479780673, 'Dem_prob': 2.449357308447361}
    
    3 번 째 실제값의 평균 prob : {'MCI_prob': 0.05456427019089462, 'Dem_prob': 0.3761567771434784}
    3 번 째 오류값의 평균 prob : {'MCI_prob': 0.09998648706823589, 'Dem_prob': 4.139225646853447}
    
    4 번 째 실제값의 평균 prob : {'MCI_prob': 0.08015276864171028, 'Dem_prob': 0.3086085021495819}
    4 번 째 오류값의 평균 prob : {'MCI_prob': 0.14634082093834877, 'Dem_prob': 3.3849948197603226}
    
    5 번 째 실제값의 평균 prob : {'MCI_prob': 0.059440001534918935, 'Dem_prob': 0.3313561826944351}
    5 번 째 오류값의 평균 prob : {'MCI_prob': 0.10912818927317858, 'Dem_prob': 3.6482928693294525}
    
    6 번 째 실제값의 평균 prob : {'MCI_prob': 0.12311247751737633, 'Dem_prob': 0.35929466784000397}
    6 번 째 오류값의 평균 prob : {'MCI_prob': 0.20624305239382232, 'Dem_prob': 3.831600822508335}
    
    7 번 째 실제값의 평균 prob : {'MCI_prob': 0.060507672838866704, 'Dem_prob': 0.3173115402460098}
    7 번 째 오류값의 평균 prob : {'MCI_prob': 0.1109341885894537, 'Dem_prob': 3.4885362684726715}
    
    8 번 째 실제값의 평균 prob : {'MCI_prob': 0.060027250088751316, 'Dem_prob': 0.2499106302857399}
    8 번 째 오류값의 평균 prob : {'MCI_prob': 0.11010245078553756, 'Dem_prob': 2.7577347829937935}
    
    9 번 째 실제값의 평균 prob : {'MCI_prob': 0.08719773404300213, 'Dem_prob': 0.3774719387292862}
    9 번 째 오류값의 평균 prob : {'MCI_prob': 0.15963802300393584, 'Dem_prob': 4.25920595228672}
    

    오히려 정상군을 MCI나 Dem이라고 예측한 확률이 실제 class 가 MCI 나 Dem 인 경우보다 높았다.

    이는 정상적인 상태로 볼 수 없을 것 같다.

    생각해보면 두 가지의 경우의 수가 있는 것 같다.

    1. Feature enginearing을 통해 데이터의 특성을 바꿔보든지
    2. 해당 데이터에서 정상군과 MCI, Dementia 군의 특성의 차이가 명확하지 않던지
  • 혹시 모든 class 를 0으로 예측하는 것이 Gradient Vanishing 문제가 발생한게 아닐까?

    아니다.

    activation function도 최대한 vanishing 문제가 없도록 leaky relu 를 사용했다.

    그리고 각 layer 별의 weight 를 확인해보니 vanishing 이 발생한 경우가 없었다.

    비정형팀

    Mask R CNN은 오래된 모델 → 오래된 모듈을 써서 실습하기 어려움 → 요즘 나온 모델로 시도하자.

    IMAGE SEGMENTATION - 지민님

    segmentation을 하는 모델 종류

    • Semantic Segmentation: 이미지 내의 모든 픽셀에 대해 클래스 레이블을 할당합니다. 즉, 이미지에서 같은 레이블을 가진 영역을 동일한 클래스로 분류하는 것입니다.
    • ~~Instance Segmentation: 이미지 내에서 각 객체의 경계를 정확하게 분할합니다. 클래스 레이블 뿐만 아니라 객체마다 고유한 식별자를 가집니다. 따라서 이미지에서 같은 클래스여도 다른 객체로 분류될 수 있습니다.~~
    U-Net U-Net은 2015년에 발표된 네트워크로, 의료 영상에서 주로 사용됩니다. 이 모델은 Encoder-Decoder 구조를 가지고 있으며, 입력 이미지를 Contracting Path라고 하는 다운샘플링 경로를 통해 축소한 후, Expanding Path라고 하는 업샘플링 경로를 통해 원래 크기로 복원합니다. 이 모델은 주로 의료 영상에서 Segmentation을 위해 사용되며, 높은 정확도를 보입니다.
    FCN FCN은 2015년에 발표된 네트워크로, 이미지 분류에서 사용되는 Convolutional Neural Network (CNN)의 Fully Connected Layer를 제거하여 입력 이미지의 크기에 따라 유연하게 대응할 수 있도록 한 모델입니다. 이 모델은 입력 이미지를 따라갈 수 있도록 한 번의 Forwarding으로 전체 이미지에 대한 Segmentation을 수행할 수 있습니다.
    DeepLab DeepLab은 Google에서 발표한 네트워크로, FCN과 유사한 구조를 가지고 있지만, 더욱 정교한 Segmentation을 수행할 수 있습니다. 이 모델은 Multi-Scale Context를 고려하여 입력 이미지를 다양한 크기로 다운샘플링한 후, Upsampling하여 Segmentation 결과를 얻어냅니다. 이 모델은 Semantic Segmentation 분야에서 좋은 성능을 보입니다.
    PSPNet PSPNet은 2017년에 발표된 네트워크로, Multi-Scale Feature를 고려하여 입력 이미지를 다양한 크기로 다운샘플링한 후, Pyramid Pooling Module을 이용하여 각각의 다운샘플링 결과를 처리한 후, Upsampling하여 Segmentation 결과를 얻어냅니다. 이 모델은 ImageNet과 Cityscapes dataset에서 좋은 성능을 보입니다.
    RefineNet RefineNet은 2016년에 발표된 네트워크로, 입력 이미지를 다양한 크기로 다운샘플링한 후, Residual Convolutional Block과 Multi-Resolution Fusion Module을 이용하여 Segmentation 결과를 Refinement하는 구조를 가지고 있습니다. 이 모델은 다양한 이미지 분야에서 좋은 성능을 보입니다.
    BiSeNet BiSeNet은 2018년에 발표된 네트워크로, 입력 이미지를 다양한 크기로 다운샘플링한 후, Spatial Path와 Context Path를 각각 이용하여 정보를 추출한 후, Feature Fusion Module을 이용하여 다양한 크기의 피처 맵을 결합하여 최종적인 예측을 수행합니다.

    | U-Net | 장점 • 적은 수의 학습 데이터로도 좋은 성능을 발휘 • 이미지 내의 객체 경계를 정확하게 추출 • fully convolutional network 구조를 사용하여 입력 이미지 크기에 따라 자동으로 출력 이미지를 생성

    단점 • 입력 이미지와 출력 이미지의 해상도가 동일해야 하므로, 큰 이미지에 대한 segmentation에는 제한적일 수 있음 • 주로 small-scale segmentation task에 사용되며, 대규모 segmentation task에는 다른 모델들이 더 적합 • 기본적으로 binary segmentation을 수행하기 때문에, multi-class segmentation 문제에는 적용하기 어려움 | | --- | --- | | FCN | 장점 • 기존의 CNN(Convolutional Neural Network)과 달리 Fully Convolutional Network로 구성되어 이미지의 크기에 상관없이 처리 가능 • 따라서 이미지 분류뿐만 아니라 세그멘테이션, 객체 검출 등 다양한 컴퓨터 비전 태스크에 적용 가능 • 이미지 전체에 대한 특성 맵을 얻을 수 있어 더 정확한 분할이 가능

    단점 • 상대적으로 다른 모델에 비해 더 많은 계산이 필요 • 계산량이 많아 속도가 느림 • 이미지 내 작은 객체에 대해서는 정확도가 떨어지는 경우가 있음 | | DeepLab | 장점 • 대규모 데이터셋에서 좋은 성능을 내며, 세분화된 객체 경계를 잘 처리 • Dilated convolution(확장 컨볼루션) 기술을 사용하여 receptive field를 늘리고, 병렬적으로 정보를 처리함으로써 높은 해상도의 세그멘테이션 맵을 생성 • VGG, ResNet, MobileNet 등과 같은 다양한 CNN 아키텍처를 이용하여 모델 구성 가능

    단점 • 모델 구조가 복잡하여 학습에 시간이 많이 걸릴 수 있음 • 모델이 깊어지면, 많은 메모리가 필요 • 일부 객체의 경우 다른 모델보다 정확도가 낮을 수 있음 | | PSPNet | 장점 • Multi-Scale Feature 정보를 캡처하기 위해 Pyramid Pooling Module을 사용하므로, 다른 모델들에 비해 더 좋은 성능을 보일 수 있음 • 빠른 추론 시간을 보일 수 있음

    단점 • 학습 시에 많은 GPU 메모리를 필요로 하기 때문에 하드웨어적인 문제가 발생할 수 있음 • 다른 모델에 비해 느릴 수 있음 | | RefineNet | 장점 • 이미지 분할에서 state-of-the-art 성능을 보여줍니다. • 다양한 입력 해상도에 대해 효과적인 세분화를 수행 • 여러 개의 분기된 residual convolutional neural network를 사용하여 높은 정확도를 보장

    단점 • 다른 모델에 비해 상대적으로 느린 속도 • 복잡성으로 인해 모델 크기가 크고, 더 많은 메모리와 계산 능력을 요구 | | BiSeNet | 장점 • 다양한 크기의 피처 맵을 사용하여 객체 인식에 용이 • 빠른 속도로 이미지 분할을 수행할 수 있음 • 다양한 모양과 크기의 객체를 인식할 수 있음 • 다양한 데이터셋에서 좋은 성능을 보임

    단점 • 일부 다른 모델에 비해 성능을 발휘하려면 더 많은 학습 데이터가 필요할 수 있음. • 또한 RefineNet에 비해 학습 중에 더 많은 GPU 메모리가 필요할 수 있음 |

    세그멘테이션 발전 과정: https://rust-darkness-5aa.notion.site/c9002d90ceb84b9083f23c7d177585eb

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.