Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[PyCon KR 2018][Lunit] 파이썬으로 암을 찾아보자: 데이터로 만드는 의학 이야기

216 views

Published on

엔지니어가 의학에 기여할 수 있을까요?
루닛은 기계학습을 통해 이를 가능하게 하고 있습니다. 기계학습과 의학적 진단은 본질적으로 분류와 예측이라는 같은 목표를 가지고 있기 때문입니다. 하지만 의사가 믿고 사용할 만한 수준의 모델을 개발하는 데는 여러가지 현실적인 어려움이 있었습니다.
이번 발표에서는 지난 4년간 루닛이 집중해온 '의료 영상'에서 암을 정확하게 검출해내는 일에 대해서 소개하고 이 과정에서 파이썬이 주었던 도움에 대해서 이야기하고자 합니다.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

[PyCon KR 2018][Lunit] 파이썬으로 암을 찾아보자: 데이터로 만드는 의학 이야기

  1. 1. 파이썬으로 암을 찾아보자 데이터로 만드는 의학 이야기 백승욱 apaek@lunit.io
  2. 2. 소개 백승욱 2002년 – C++/Win32 개발 시작 2009년 – 파이썬 영접 (Django) 2010년 – 멀티미디어 프로세서 설계 연구실 2012년 – 딥러닝 영접 (cuda-convnet) 2013년 – Lunit 창업
  3. 3. PERFECTING INTELLIGENCE TRANSFORMING MEDICINE
  4. 4. 딥러닝으로 의료영상을 분석해서 암을 정확하게 찾는 일을 하고 있습니다.
  5. 5. ILSVRC 2015 사물인식 분야 세계 5위 CB Insights ‘AI 100’ 2017 선정 NVIDIA Inception Award 2017 선정 Alibaba Cloud Startup Challenge 2017 수상 Top-tier 의료 학회 (RSNA / USCAP) 발표 9건 Mammography DREAM Challenge 세계 5위 Tumor Proliferation Assessment Challenge 세계 1위 Camelyon Challenge 2017 세계 1위
  6. 6. 220억원 투자 유치
  7. 7. 출처: 강북힘찬병원
  8. 8. 73.5% 전체 폐암 중 흉부 엑스선 검사에서 발견된 비율 출처: The National Lung Screening Trial Research Team. Results of Initial Low-Dose Computed Tomographic Screening for Lung Cancer. The New England journal of medicine. 2013;368(21):1980-1991. doi:10.1056/NEJMoa1209120.
  9. 9. 괜찮아요 10만명 중에 50명도 안걸림 출처: 국가암정보센터
  10. 10. 그런데 만일 혹시 설마 내가 저 50명중 하나라면?
  11. 11. 유방암 검사도 완벽하지 않아요
  12. 12. 의사가 믿고 진단에 참고할 수 있는 인공지능을 만들자
  13. 13. 의사에게 실제로 도움을 주기 위해서는 적당한 수준의 정확도로는 부족
  14. 14. 압도적인 정확도 99.99999%
  15. 15. 과연 가능한 일일까?
  16. 16. 명확한 목표와 데이터가 있다면 해볼만 하다
  17. 17. 사람이 아니라 데이터로부터 특징을 배우는 딥러닝이라면 해볼만 하다
  18. 18. 일반적인 접근 이미지 준비 마스크 생성 패치/마스크 기반 검출기 학습
  19. 19. 데이터 자체의 신뢰도 한계 사람의 한계가 80점이라면 그로부터 배운 기계의 한계도 그만큼
  20. 20. 정확한 데이터는 병원 안에 있다 너무 당연한가
  21. 21. Chest X-ray Positive Chest X-ray Negative Chest x-ray Negative, but CT Positive
  22. 22. 딥러닝의 장점이자 단점 어떻게든 학습해 낸다
  23. 23. 먼저 분류를 한 다음 어디를 보고 분류를 했는지 시각화하자
  24. 24. 우리의 접근 “Weakly-supervised Learning” … K@1x1 Conv Global Pooling 폐암이 있다/없다 Typical Conv Layers Class-level Feature Activation Maps
  25. 25. 우리의 접근 “Weakly-supervised Learning” … + =
  26. 26. 과연 될까? 안될거야 아마
  27. 27. 된다! 된다! 루닛 모델의 출력 의사의 판독 SPIE Medical Imaging 2016 27 February - 3 March 2016 @ San Diego, California, USA
  28. 28. 가설 검증이 되었으니 극한까지 달려보자!
  29. 29. Architecture / Loss function / Learning algorithm Aggressive Data Augmentation Partial Human Annotation Ensemble Physician-driven Model Selection
  30. 30. 98% 92% 84% 73% 50% 60% 70% 80% 90% 100% D C B A ROC AUC 98% 91% 87% 73% 50% 60% 70% 80% 90% 100% D C B A ROC AUC Chest X-ray Mammography A : Low volume, Moderate quality algorithm, Low quality data B : High volume, Moderate quality algorithm, Low quality data C : High volume, Lunit’s high quality algorithm, Low quality data D : High volume, Lunit’s high quality algorithm, High quality data A B C D
  31. 31. 세계는 넓고 경쟁은 치열하며 시간은 부족하다
  32. 32. 효율적인 학습 = 더 많은 실험 = 더 좋은 성능 = WINNER WINNER
  33. 33. 어떻게 하면 GPU가 단 1초 쉬지 않게 할 수 있을까?
  34. 34. Pre-processing Image Files Net Outputs Labels Inputs CPU Phase
  35. 35. Pre-processing Image Files CPU Phase 1. Image loading 2. Intensity normalization 3. Contrast jittering 4. Brightness jittering 5. Scale jittering 6. Aspect ratio jittering 7. Image resizing 8. Input batch generation
  36. 36. Pre-processing Image Files Net Outputs Labels Inputs GPU Phase
  37. 37. 단순하게 구현하면…
  38. 38. CPU GPU CPU GPU
  39. 39. CPU GPU CPU GPU CPU GPU CPU GPU CPU GPU CPU GPU CPU GPU
  40. 40. Multi-process pre-processing Image Files Net Outputs Labels Inputs Labels Inputs Labels Inputs Labels Inputs ⋯ Queue
  41. 41. 의료영상 = 대용량 Dataset ImageNet Chest X-ray File format JPEG 8bit PNG (converted from DCM) Average file size 110KB 1,690KB = 1.69MB Size of 128 images 28,078KB = 28MB 432,662KB = 432MB 128 images reading time (cv2.imread on SSD) 0.26s 4.03s
  42. 42. 1. Loading images with cv2.imread from SSD 2. Intensity normalization with in-place operations 3. Contrast jittering with in-place operations 4. Brightness jittering with in-place operations 5. Scale jittering 6. Aspect ratio jittering 7. Image resizing with cv2.resize 8. Input batch generation CPU 시간을 줄이자
  43. 43. 믿고 쓰는 OpenCV
  44. 44. 믿고 쓰는 OpenCV
  45. 45. NumPy의 in-place operation With in-place operation Without in-place operation
  46. 46. 24 CPU Processes + Queuing
  47. 47. 회사가 성장하니 요구사항과 모델의 복잡도가 늘어난다
  48. 48. 어떻게 하면 여러 모델들을 효율적으로 개발/통합할 수 있을까?
  49. 49. Tissue Model Segmentation Structure Model Detection Cell Model Detection
  50. 50. Structure Model (Trained by Engineer B) Image Segmentation Network ... Segmentation Result Tissue Model (Trained by Engineer A) Image Detection Network Detection Result Cell Model (Trained by Engineer C) Image Detection Network Detection Result ... ... Integrated Results
  51. 51. Tissue Structure Conv3 Conv1 Conv2 Conv1 Conv2 Conv1 name conflicts Conv2 name conflicts
  52. 52. Tissue Structure tissue/ Conv3 tissue/Conv1 tissue/ Conv2 structure/Conv1 structure/Conv2 일단 충돌은 피했으나…
  53. 53. Tissue Structure tissue/ Conv3 tissue/Conv1 tissue/ Conv2 structure/Conv1 structure/Conv2 Conv3 Conv1 Conv2 Tissue Model Checkpoint Conv1 Conv2 Structure Model Checkpoint Not matched Not matched Not matched Not matched Not matched
  54. 54. Tissue Structure tissue/Conv3 tissue/Conv1 tissue/Conv2 structure/Conv1 structure/Conv2 Conv3 Conv1 Conv2 Tissue Model Checkpoint Conv1 Conv2 Structure Model Checkpoint
  55. 55. Tissue Structure tissue/Conv3 tissue/Conv1 tissue/Conv2 structure/Conv1 structure/Conv2 Integrated Results
  56. 56. 파이썬과 함께 해온 지난 4년
  57. 57. 드디어 제품을 판매할 수 있게 되었습니다!
  58. 58. 앞으로 할 일이 정말 많습니다
  59. 59. 의료 진단의 본질 환자의 상태를 정확하게 분류하고 예후를 예측하는 것
  60. 60. 함께 의학을 혁신해 봅시다
  61. 61. 함께 의학을 혁신할 분들을 모십니다! Homepage: https://www.lunit.io Tech blog: https://blog.lunit.io Recruit email: apply@lunit.io

×