エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

胸部X線画像のAI診断エンジンを作ってみる

はじめまして、AIラボ所長兼エンジニアリンググループAI・機械学習チーム所属の高木です。 キャリアのスタートはエンジニアだったのですが、今では9割くらいの時間はビジネス開発に使っています。 今回は合間の時間でやっているエンジニア的な側面でAIラボで何をやっているのかを書いてみることにしました。

AIラボの紹介

AIラボは、臨床現場へのAIの社会実装を実現することを目的にした組織です。 社会実装が目的なので、ビジネスの研究開発とプロダクトの研究開発の両方をやっています。 今回はAIラボの取り組みの一つとして、胸部X線画像のAI診断エンジンを作ってみたので紹介します。

概要

2017年9月にアメリ国立衛生研究所(以下NIH)から約11万枚の胸部X線画像データセットが公開されました。 データセットこちらに公開されています。 このデータセットには14の疾患のラベルがついています。 今回はこのデータセットを用いてAI診断エンジンを作ってみました。 また今回のデータセットではデータ作成をしたNIHが使った訓練とテストのデータ分割方法が公開されていますので同じ条件で精度比較することができます。 ただし次に紹介する論文では必ずしも公式の分割方法を使った性能評価を行なっていない状況です。

先行研究の紹介

(1) ChestX-ray8: Hospital-scale Chest X-ray Database and Benchmarks on Weakly-Supervised Classification and Localization of Common Thorax Diseases

今回のデータセットの作成と開発したエンジンの性能を評価したNIHの論文です。 Resnet50の転移学習をベースに実装されています。 プーリング層と損失関数で一部独自の工夫がなされています。

(2) CheXNet: Radiologist-Level Pneumonia Detection on Chest X-Rays with Deep Learning

Stanford大学のAndrew NGのグループの論文です。 DenseNet121のファインチューニングをベースに実装がされています。 損失関数に関してはNIHの論文と同様に各クラスのデータ数の偏りを補正する工夫が使われています。 また独自に肺炎のデータを収集し、肺炎の検出精度の評価も行なっています。 本論文では公式データ分割ではなく、訓練とテストで患者間の重なりがないpatient-wise分割を採用しています。

(3) Thoracic Disease Identification and Localization with Limited Supervision

GoogleのFei Fei Liのグループの論文です。 Resnet50の転移学習をベースにして実装がされています。 今回のデータセットには11万枚の一部に病変のアノテーションデータがついているので アノテーションデータも活用できるようにResnetの後段に追加のネットワークを入れているのが特徴です。 本論文では公式データ分割ではなく、訓練とテストで患者間の重なりがないpatient-wise分割を採用しています。

(4) Learning to diagnose from scratch by exploiting dependencies among labels

アメリカの医療画像AIスタートアップのenliticの論文です。 こちらは転移学習を行わず、スクラッチでdensenetを学習しているのが特徴です。 転移学習を行わないので512 x 512という大きな画像サイズで学習をしています。 これは縮小によって小さな病変が潰れてしまうことを防いでいます。 本論文では公式データ分割ではなく、完全ランダム分割を使用しています。また3月に出た論文で別の方法で公式分割を行なった論文も出ています。

(5) Diagnose like a Radiologist: Attention Guided Convolutional Neural Network for Thorax Disease Classification

北京交通大学の研究グループの論文です。 こちらはDenseNet121の転移学習をベースに、画像全体での分類と画像全体での分類から得られたclass activation mappingで反応した部分を拡大した画像をもう一度転移学習を行い、全体と部分の両方で分類する手法を取っています。 単純に言うと細部に関するアテンションを見ていることになります。 こちらのデータ分割方法は明示的に書いてはいませんが、おそらく患者間の重なりを考慮せず完全ランダムに訓練とテストを分割しているものと思われます。

(6) Learning to recognize Abnormalities in Chest X-Rays with Location-Aware Dense Networks

医療機器メーカーのシーメンスの研究グループの論文です。 本論文もDenseNet121の転移学習をベースに実装をしています。 画像の縮小を高解像度で行うために転移学習の前に2段のCNNを入れて高解像度の縮小を実現するネットワークを入れているのが特徴です。 本論文ではNIHの公式のデータ分割とpatient-wise分割の両方を実行しています。

(7) Comparison of Deep Learning Approaches for Multi-Label Chest X-Ray Classification

医療機器メーカーのフィリップスの研究員が共著で入っている論文です。 Resnet50をフルスクラッチで実装し、画像サイズを418 x 418にしているのが特徴です。 また画像以外の患者情報も使って手法の比較をしています。 本論文では公式データ分割ではなく、訓練とテストで患者間の重なりがないpatient-wise分割を採用しています。

実装方針

今回の問題を着手し始めた時にtensorflowにまだdensenet121がなかったなどの開発環境の諸条件を考慮して、転移学習を用いないフルスクラッチで構築することにしました。 試行錯誤の末、最終的なモデルは次のような要素を含むチューニングを行ないました。

  1. DenseNetをベースにInceptionを入れたネットワーク
  2. 512 x 512の大きな画像サイズを使用
  3. 画像サイズが大きく、開発環境のメモリが少ないため、Batch Renormalizationを導入
  4. 活性化関数はSWISHを使用
  5. 学習係数は一定期間で減衰するように設定
  6. dilated CNNを使ってメモリを削減

などいくつかのチューニングを行いました。

実験方法

今回は公式のデータ分割、patient-wise分割、ランダム分割の3種類を行いました。 マシン環境はAWS p3.xlargeを使用して学習を行った。

結果

4,5の論文の精度には残念ながら勝てませんでした。 6の論文の精度には勝ったり負けたりですが、若干向こうの方が上です。 f:id:yuzo-takagi:20180726175258p:plain

Class activation mappingで確認してみる

日本放射線技術学会画像部会のデータセットを使って肺腫瘤(nodule)に関してclass activation mappingを見ました。

オリジナル画像

f:id:yuzo-takagi:20180726190656p:plain:w300

病変の場所

f:id:yuzo-takagi:20180726190730p:plain:w300

Class activation mapping

f:id:yuzo-takagi:20180726190803p:plain:w300

なんとなくそれっぽくなっているようです

今後の展開

m3 AIラボでは医療画像の診断補助AIプラットフォームを作ることを発表しました。 今後、各疾患のAIエンジンやプラットフォーム開発などを進めていく予定です。 また希少疾患の発見につながるAIシステムを開発する完全内製プロジェクトもいくつか進んでいます。 臨床現場で使われるAIを開発したい方はぜひm3エンジニアリンググループをご検討ください。 興味のある方は以下のフォームで募集しています

jobs.m3.com