머신러닝 적용사례 제 5장. 머신러닝을 통한 디지털 병리 이미지 분석 자동화

이미징 기술의 발전과 새롭고 효율적인 계산 도구의 가용성으로 인해 디지털 병리학은 연구 진단 환경 모두에서 중심 무대를 차지했습니다. WSI(Whole Slide Imaging) 이러한 변화의 중심에 있어 병리학 슬라이드를 고해상도 이미지로 신속하게 디지털화할 있습니다. 슬라이드를 즉시 공유하고 분석할 있도록 함으로써 WSI 이미 재현성을 개선하고 향상된 교육 원격 병리학 서비스를 가능하게 했습니다. 오늘날 슬라이드 전체를 고해상도로 디지털화하는 작업은 저렴한 가격으로 1 이내에 진행할 있습니다. 결과적으로 점점 많은 의료 생명 과학 단체가 디지털화된 슬라이드의 방대한 카탈로그를 확보하게 되었습니다. 이러한 대규모 데이터 세트는 자동화된 진단 시스템을 머신러닝으로 구축하는 사용할 있습니다. 이러한 시스템은 특정 표현형을 표현하는 슬라이드 또는 세그먼트를 분류하거나 슬라이드에서 정량적 바이오마커를 직접 추출할 있습니다. 머신러닝과 러닝의 힘으로 수천 개의 디지털 슬라이드를 만에 해석할 있습니다. 이것은 암과 전염병을 진단하고 치료하기 위해 병리학 부서, 임상의 연구원의 효율성과 효과를 향상시킬 있는 엄청난 기회를 제공합니다.

 

디지털 병리학 워크플로우의 광범위한 채택을 방해하는 3가지 일반적인 문제

많은 의료 생명 과학 단체에서 전체 슬라이드 이미지에 인공 지능을 적용할 때의 잠재적인 영향을 인식하고 있지만 자동화된 슬라이드 분석 파이프라인을 구현하는 것은 여전히 복잡합니다. 운영 중인 WSI 파이프라인은 낮은 비용으로 높은 처리량의 디지타이저 슬라이드를 일상적으로 처리할 있어야 합니다. 데이터 과학을 지원하는 자동화된 디지털 병리학 워크플로를 구현하는 방해가 되는 3가지 일반적인 문제가 있습니다.

 

1. 느리고 비용이 많이 드는 데이터 수집 엔지니어링 파이프라인: WSI 이미지는 일반적으로 매우 크며(일반적으로 슬라이드당 0.5–2GB) 광범위한 이미지 사전 처리가 필요할 있습니다.

2. 러닝을 테라바이트 단위의 이미지로 확장하는 문제가 있습니다. 수백 개의 WSI 포함된 적당한 크기의 데이터 세트에서 러닝 모델을 학습하는 것은 단일 노드에서 며칠에서 주가 걸릴 있습니다. 이러한 지연은 대규모 데이터 세트에 대한 신속한 실험을 방해합니다. 여러 노드에서 러닝 워크로드를 병렬화하여 대기 시간을 줄일 있지만 이는 일반적인 생물학 데이터 과학자가 활용할 없는 고급 기술입니다.

3. WSI 워크플로의 재현성 보장: 환자 데이터를 기반으로 새로운 통찰력의 경우 결과를 재현할 있는 것이 매우 중요합니다. 현재 솔루션은 대부분 임시변통이며 머신러닝 모델 학습에 사용된 여러 버전의 데이터와 실험을 추적하는 효율적이지 않습니다.

 

글에서는 Databricks 통합 데이터 분석 플랫폼을 사용하여 이러한 문제를 해결하고 WSI 이미지 데이터에 종단간 확장 가능한 러닝 워크플로를 배포하는 방법에 대해 설명합니다. 우리는 슬라이드에서 전이 영역을 식별하는 이미지 분할 모델을 학습하는 워크플로에 중점을 것입니다. 예제에서는 Apache Spark 사용하여 이미지 컬렉션에서 데이터 준비를 병렬화하고, pandas UDF 사용하여 많은 노드에서 사전 학습된 모델(전이 학습) 기반으로 기능을 추출하고, MLflow 사용하여 모델 학습을 재현 가능하게 추적합니다.

 

WSI 대한 종단간 머신러닝

Databricks 플랫폼을 사용하여 WSI 데이터 처리 파이프라인을 가속화하는 방법을 보여주기 위해 Camelyon16 Grand Challenge 데이터 세트를 사용합니다. 이것은 우리의 작업 흐름을 보여주기 위해 유방암 조직에서 얻은 전체 슬라이드 이미지 400(TIFF 형식) 오픈 액세스 데이터 세트입니다. Camelyon16 데이터 세트의 하위 집합은 /databricks-datasets/medimages/camelyon16/(AWS | Azure) 경로에서 직접 액세스할 있습니다. 슬라이드에서 전이가 포함된 영역을 감지하도록 이미지 분류기를 학습시키기 위해 그림 1 같이 다음 단계를 실행합니다.

 

1. 패치 생성: 병리학자가 주석을 추가한 좌표를 사용하여 슬라이드 이미지를 동일한 크기의 패치로 자릅니다. 이미지는 수천 개의 패치를 생성할 있으며 종양 또는 정상으로 레이블이 지정됩니다.

2. 러닝: 사전 학습된 모델로 전이학습을 사용하여 이미지 패치에서 특징을 추출하며, 바이너리 분류기를 학습시키는 Apache Spark 사용하여 종양 정상 패치를 예측합니다.

3. 점수 매기기: 그런 다음 MLflow 기록된 학습된 모델을 사용하여 주어진 슬라이드에 확률 히트맵(probability heat map) 투사합니다.

Human Longevity 방사선 이미지를 사전 처리하는 사용되는 워크플로와 유사하게 Apache Spark 사용하여 슬라이드와 해당 주석을 모두 조작합니다. 모델 학습을 위해 먼저 Keras에서 사전 학습된 InceptionV3 모델을 사용하여 특징을 추출합니다. 이를 위해 pandas UDF 활용하여 특징 추출을 병렬화합니다. 기술에 대한 자세한 내용은 Transfer Learning 위한 특징화(AWS | Azure) 참조하세요. 기술은 InceptionV3에만 국한되지 않으며 다른 사전 학습된 모델에 적용할 있습니다.

 

 

이미지 전처리 ETL

자동 슬라이드 분석 플랫폼과 같은 오픈 소스 도구를 사용하여 병리학자는 WSI 이미지를 매우 높은 해상도로 탐색하고 슬라이드에 주석을 달아 임상적으로 관련된 사이트를 표시할 있습니다. 주석은 사이트 확대/축소 수준과 같은 기타 정보가 포함된 다각형 가장자리의 좌표와 함께 XML 파일로 저장할 있습니다. 실측 슬라이드 세트에서 주석을 사용하는 모델을 학습하려면 이미지당 주석이 있는 영역 목록을 로드하고 영역을 이미지와 결합하고 주석이 달린 영역을 제거해야 합니다. 프로세스를 완료하면 이미지 패치를 머신러닝에 사용할 있습니다.


 

워크플로우는 일반적으로 XML 파일에 저장된 주석을 사용하지만 단순화를 위해 Camelyon16 데이터 세트에 NCRF 분류기를 구축한 Baidu Research 팀에서 만든 사전 처리된 주석을 사용합니다. 이러한 주석은 Apache Spark DataFrame 로드하는 CSV 인코딩 텍스트 파일로 저장됩니다. 다음 노트북 셀에서 종양 정상 패치에 대한 주석을 로드하고 레이블 0 정상 조각에 할당하고 1 종양 조각에 할당합니다. 그런 다음 좌표와 레이블을 단일 DataFrame으로 통합합니다.

많은 SQL 기반 시스템이 기본 제공 작업으로 제한하지만 Apache Spark 사용자 정의 함수(UDF) 대한 풍부한 지원을 제공합니다. UDF 사용하면 Apache Spark DataFrame 데이터에 대해 사용자 지정 Scala, Java, Python 또는 R 함수를 호출할 있습니다. 워크플로우에서는 OpenSlide 라이브러리를 사용하여 이미지에서 지정된 패치를 제거하는 Python UDF 정의합니다. 처리할 WSI 이름, 패치 센터의 X Y 좌표, 패치 레이블을 사용하여 나중에 학습에 사용할 타일을 생성하는 파이썬 함수를 정의합니다.


 

그런 다음 OpenSlide 라이브러리를 사용하여 클라우드 스토리지에서 이미지를 로드하고 지정된 좌표 범위를 분할합니다. OpenSlide 기본적으로 Amazon S3 또는 Azure Data Lake Storage에서 데이터를 읽는 방법을 이해하지 못하지만 DBFS(Databricks File System) FUSE 계층을 통해 OpenSlide 복잡한 코드 변경 없이 이러한 Blob 저장소에 저장된 데이터에 직접 액세스할 있습니다. 마지막으로 우리 함수는 DBFS FUSE 계층을 사용하여 패치를 다시 작성합니다.

명령이 Databricks 데이터 세트의 Camelyon16 데이터 세트에서 ~174,000개의 패치를 생성하는 10분이 걸립니다. 명령이 완료되면 패치를 백업하고 노트북에 인라인으로 직접 표시할 있습니다.

 

전이 학습 MLflow 사용한 종양/정상 병리 분류기 학습

이전 단계에서 패치 관련 메타데이터를 생성하고 클라우드 스토리지를 사용하여 생성된 이미지 타일을 저장했습니다. 이제 슬라이드의 부분에 종양 전이가 있는지 여부를 예측하기 위해 바이너리 분류기를 학습할 준비가 되었습니다. 이를 위해 사전 학습된 심층 신경망을 사용하여 패치에서 기능을 추출하기 위해 전이 학습을 사용한 다음 분류 작업에 sparkml 사용할 것입니다. 기술은 많은 이미지 처리 응용 프로그램에서 처음부터 학습하는 것보다 성능이 좋은 경우가 많습니다. Keras 사전 학습된 가중치를 사용하여 InceptionV3 아키텍처부터 시작하겠습니다.

Apache Spark DataFrames 내장된 이미지 스키마를 제공하며 모든 패치를 DataFrame 직접 로드할 있습니다. 그런 다음 Pandas UDF 사용하여 Keras 사용하는 InceptionV3 기반 기능으로 이미지를 변환합니다. 이미지를 특징화한 후에는 spark.ml 사용하여 패치의 특징과 레이블 간의 로지스틱 회귀를 맞춥니다. 나중에 제공하기 위해 모델에 액세스할 있도록 MLflow 로지스틱 회귀 모델을 기록합니다.

Databricks에서 ML 워크플로를 실행할 사용자는 관리형 MLflow 활용할 있습니다. 노트북을 실행할 때마다 그리고 모든 교육 라운드에서 MLflow 매개변수, 메트릭 지정된 아티팩트를 자동으로 기록합니다. 또한 나중에 데이터의 레이블을 예측하는 사용할 있는 학습된 모델을 저장합니다. MLflow 활용하여 Databricks에서 ML 워크플로의 전체 주기를 관리하는 방법에 대한 자세한 내용은 문서 참조하세요.


 

1 워크플로의 여러 부분에 소요된 시간을 보여줍니다. ~170K 샘플에 대한 모델 교육은 87% 정확도로 25 미만이 소요됩니다. 실제로는 많은 패치가 있을 있으므로 분류에 심층 신경망을 사용하면 정확도가 크게 향상될 있습니다. 이러한 경우 분산 학습 기술을 사용하여 교육 프로세스를 확장할 있습니다. Databricks 플랫폼에서 HorovodRunner 도구 키트를 패키지로 만들었습니다. 도구 키트는 ML 코드를 약간만 수정하여 대규모 클러스터에 교육 작업을 배포합니다. 블로그 게시물은 Databricks에서 ML 워크플로를 확장하는 방법에 대한 훌륭한 배경 지식을 제공합니다.

 

추론

분류기를 학습했으므로 분류기를 사용하여 슬라이드에 전이 확률의 히트맵을 투영합니다. 이를 위해 먼저 슬라이드의 관심 세그먼트에 그리드를 적용한 다음 예측에 사용할 있는 Spark DataFrame 데이터를 가져오기 위해 학습 프로세스와 유사한 패치를 생성합니다. 그런 다음 MLflow 사용하여 학습된 모델을 로드합니다. 학습된 모델은 예측을 계산하는 DataFrame 대한 변환으로 적용할 있습니다. 이미지를 재구성하기 위해 파이썬의 PIL 라이브러리를 사용합니다. PIL 라이브러리는 전이 사이트를 포함할 확률에 따라 타일 색상을 수정하고 모든 타일을 함께 패치합니다. 아래 그림 4 종양 세그먼트 하나에 대한 확률을 예측한 결과를 보여줍니다. 빨간색의 밀도는 슬라이드에서 높은 전이 가능성을 나타냅니다.


네피리티
No Comments

Sorry, the comment form is closed at this time.