医療現場のCT画像から手術対象の臓器などをVR/MR用にSD立体化した事例において、ディープラーニングの技術はどのように選択され、活用されたのか。実際に取り組んだ手順で説明し、今後の展望についても紹介する。
ご注意:本記事は、@IT/Deep Insider編集部(デジタルアドバンテージ社)が「www.buildinsider.net」というサイトから、内容を改変することなく、そのまま「@IT」へと転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
本稿では、筆者自身の会社「Holoeyes」で手掛けている医療向けVR/MRサービスで、「どのようにディープラーニング(Deep Learning)を活用しているか」を機械学習エンジニア向けに説明する。その説明に入る前に、会社と医療向けVR/MRサービスの内容について簡単に紹介しておこう。
「XR*1を通じて医療のデジタルトランスフォーメーションを加速させる」をモットーに2016年に設立、手術の支援、医療教育にVR/MR/ARのアプリを提供している。
*1 VR/MR/ARなどの総称。
手術は「見えない」との戦いという側面を持っている。例えば肝臓の癌(がん)の手術のときは、腫瘍の周りにマージンを取って切る必要がある。しかし腫瘍そのものは、患者の体の中で露出させてしまうとがん細胞が体の中に飛び散って癌が転移する可能性があるので、決して手術中には見ることはできず、医師が血管の走行などを目印にして推測をしている。
また現在の手術は低侵襲治療化*2が進んでおり、例えば腹腔鏡*3の手術もしばしば行われていて、患者のダメージは減る方向に変わってきている。一方で、腹部に入れたカメラを通じてのみ術野が見えるだけなので、全体が見えない中での手術となり、術者の負担は大きくなってきている。
*2 侵襲(しんしゅう)とは、医学において「生体を傷つけること」を意味する。低侵襲治療化とは、「生体をなるべき傷つけないように治療するようになっている」ということ。
*3 腹腔鏡(ふくくうきょう)とは、体表の皮膚に小さな穴を開けて、そこから腹腔内に挿入する内視鏡器具(=カメラなどで構成される細長い形状の器具)、もしくはその手術技術のこと。メスでお腹を切り開く開腹術よりも患者の負担が少ない。
手術をする前には、腫瘍の位置や血管、神経、骨などの組織の立体的な構造を把握する必要がある。この目的のために、CTスキャン画像を見るDICOMビューアーを用いて*4、同時に複数の方向でスライスしたCT画像を複数の2Dウィンドウに表示をする方法や、ボリュームレンダリング*5/ポリゴンで3Dを構築する手法を用いて、いずれも2Dモニターからの表示情報を基に頭の中で3次元の構造をイメージしているのが、現在の状況である。
*4 DICOM(ダイコム)とは、「Digital Imaging and COmmunications in Medicine」の略で、医療用のデジタル画像機器間の通信プロトコルを定義した標準規格。DICOMビューアーは、その規格に基づく画像を見るための機器。
*5 ボリュームレンダリングとは、撮影されたCT画像から3Dを構築して2Dウィンドウにレンダリング(表示)すること。
一方、手術中では、左右別のステレオカメラ*6映像を専用の偏向レンズの眼鏡で見ることにより奥行き感を持たせられる3D腹腔鏡も活用されており、「一度、3D腹腔鏡に慣れると、通常の腹腔鏡には戻れない」といった医師もいるほど活用されている。奥行き感があると、血管などの組織が奥行き方向に並んだとしても容易に判断がつく。また、外科手術ロボットのダビンチも3Dカメラを採用していて直感的な操作感をもたらしている。
*6 ステレオカメラとは、左右別々の方向から映像を撮影することにより、奥行き情報を記録できるカメラのこと。
手術中に使うステレオカメラ映像は、リアルタイムで術野を見ることができるが、DICOMビューアーと違い、全体の構造をふかんしてみたり、特定の血管の3次元構造を追いかけて見たりすることはできない。また、患者の中にカメラがあるので、カメラの動きに制限があり、術野が見える角度には制限がある。
VRアプリを使うと、DICOMビューアーのように自由な角度から直感的な操作でデータを見ることができ、3D腹腔鏡のように立体感をもってデータを見ることができることから(図1)、注目されている。VRでは3Dポリゴンモデルの中に入り込んで没入して見ることができる。まるで自分が小さくなって腹腔鏡のカメラの先になって患者のデータの中に入って周囲を見渡すことができるのである。
具体的には、肝臓の中に入って血管の立体構造を把握したりできる。また、脳の中の血管に入って、自分がカテーテル(=細い管の医療器具)の先端になって血管を進んでいって、動脈瘤(どうみゃくりゅう)まで到達して、その中を見ることができる(図2)。
背骨のモデルを実際のサイズで表示させて、あたかもそこに背骨があるかのように見ることができる(図3)。2Dの画面ではマウスの操作が必要だが、見たい部分に顔を向けるだけで見ることができ、覗き込む、歩くという実世界で物を見るときと同じ動作で見ることができるのである。
弊社がVR/AR/MRのアプリを作る場合には、主にCTスキャンの画像から作っている。ここで簡単にCTスキャン画像について解説する。
CTスキャンの画像は、CT値というX線をどれだけ吸収したかの値が記録されている。それぞれの物性のCT値は以下である。
物性 | CT値 |
---|---|
空気 | -1000 |
脂肪組織 | -100 |
水 | 0 |
軟部組織 | 50〜100 |
骨/石灰化した部分 | 100〜1000 |
金属 | 2000〜4000 |
表1 各物性のCT値(=水に対する相対値) |
単純CTでは血管が映らないが、造影剤というX線を吸収する液体を点滴して撮影すると、血管の中の血がX線を吸収するので血管を撮影できる。造影剤を静脈から点滴すると、造影剤は静脈から心臓に戻り、肺に行ってから動脈から全身に送られて、最終的には腎臓で血液から分離されて尿として体の外に排出される。
液体を点滴してから撮影をするタイミングで、静脈、臓器全体、動脈と映るものが違ってくる。DICOMにコメントされた点滴されてからの撮影時間や映っているパターンを基に人間が診断や治療に必要な部分を目で見分けている。
CTスキャンの画像は、いわば加工前の素材であり、撮影した断面の中の全ての臓器や骨、血管が白く映っていたり、組織が灰色に映っていたり、肺の内部の空洞の部分が黒に映っていたりする。
この画像の特徴から、術式に合わせて、見たい部分やVR化のために立体にしたい部分のみを取り出す。これには、例えば骨や臓器や血管を、CT値の違いや形状の違いから、別々のセグメント(図5)に分割していくことになる。しかも、それぞれのCT画像シーケンスの中の画像を1枚ずつ処理しながら、必要な部分だけを切り出す必要があるのだ。
対象が画像であること、3Dが画像のシーケンスになっていて、シーケンス内の前後の画像には関係性があること、扱う画像の量が多いこと、「人間の見た目」では分類は可能であること、過去に分類をしたデータがある程度あること、DICOMビューアーというCT画像を扱うソフトウェアは数多く存在して、それで分類がされてきたこと(分類の手法と方法が確立していること)、先行研究があり、参照できる論文が多数存在すること。こういったことから、「ディープラーニングをベースとして機械学習の手法で、セグメンテーションが自動化できるのではないか」と考えた。
現在でも数千万するような高額なソフトには、画像処理ベースで臓器や血管の領域抽出の機能があるが、対象とする臓器も限られていて、自動抽出の対象となっていない部位もある。
ディープラーニングをベースとして安価にCT画像のセグメンテーションを提供できるのであれば、そこにはビジネスチャンスがあり、1つの臓器で確立した手法を、他の臓器や血管、骨、歯と顎の骨などのセグメンテーションに展開できる可能性があり、さらにビジネスが広がると弊社では考えている。
まずは、“Deep Learning Segmentation”とキーワードを入れてWeb検索をしてみると、脳のMRI画像から腫瘍の部分をセグメンテーションするコンテストを発見した。コンテストの判定は、DICE係数という係数で判定されている、DICEに関する詳しい定義はこちらを参照。
DICEによる判定結果を見てみると、人間が行ったセグメンテーションに90%近い結果を出していた。
さらにWeb検索で調べていると、医療画像のセグメンテーションコンテストをWeb上で多数行っているサイト(次のリンク先)の存在を知り、一気に論文にアクセスがしやすくなった。
以下、いくつかのセグメンテーションのコンテストを紹介する。
データセットが提供されておりアクセスが可能であること、ソースコードがGitHubなどで公開されていて計算の再現性があること、コンテスト上のスコアが良いことなどをポイントに置いて、論文のサーベイを実施した。
調査を開始してみると、医療画像を扱うディープラーニングの特徴も見えてきた。例えば肝臓のセグメンテーションの場合だと、コンテストで提供されているデータセットは1つの画像が320×320ピクセルの画像で、それが20枚セットになったシーケンスになっている。そのデータセットが50提供されているのだが、これではディープラーニングで扱う教師データとしては非常に少ない。
現状は、解剖を理解している医師が、DICOMビューアーを使って一枚一枚目で見て肝臓の周りの境界をマウスなどでなぞってROI(Region of interest:注目画像領域)として肝臓の領域をくくり出す作業をしている。ROI部分を1000、その他の部分を-1000などのCT値に操作する処理をすることで肝臓の形にマスクしたシーケンスのDICOMデータを生成する作業が必要である。これだと、1つのシーケンスの教師データを作るのも、それなりの手間がかかってしまう。
医療の画像は、Google画像検索をかけてサンプル画像をスクリプトで一気に大量取得する、ということができない分野なのである。医療の画像に対するディープラーニングは、「いかに信頼性のある教師データであるか」かつ、「ディープラーニングにおける教師データとしては少ない数のデータから、いかに良い学習結果を得るか」というのがポイントとなってくる領域なのである。
ということで、医療画像データのディープラーニングには、データ拡張が必須となってくる。例えば下記のリンク先には、いくつかのデータ拡張の手法を比較している論文がある。
こちらの論文を見ると、シアー(sheer:平行四辺形状に変形させる)の成績が良い。実際の人体の特性である「柔らかさ」を考えると、弾性を考慮した変形が理にかなっているようである。また、脳や肺のような左右対称の器官であれば、左右をフリップする(flip:左右反転させる)という手法を採用している論文もある。
弊社の共同創業者の杉本が、外科手術ロボット、ダビンチによる前立腺の摘出の手術の助手を務めていることもあり、先に述べた前立腺のセグメンテーションのコンテストに応募されていて、ソースコードも公開されている。その論文(下記リンク先)をターゲットにして、実装を進めていった。
こちらの論文では、2種類の手法を使ってデータ拡張をしている。
一つは、B-Spline変換(滑らかな曲線への変換)を用いて、弾性を考慮した変形を画像に施すデータ拡張。
もう一つは、ランダムに選択したデータセット内の、別のデータのヒストグラムに合わせるように、元のデータからヒストグラムを変化させるような「ヒストグラムマッチング」と呼ばれる処理を画像に施すデータ拡張をしている。ヒストグラムマッチングの画像処理に関しては、下記リンク先の記事の写真を見るとイメージがしやすい。
次に、上記のターゲット論文で紹介されているDNN(ディープ・ニューラル・ネットワーク)を構成するV-Netの概要を説明する。
通常の画像をターゲットとしたCNN(畳み込みニューラルネットワーク)では、2Dのフィルターを使うが、CT画像は画像のシーケンスを3次元のボリュームデータとして扱うので、フィルターも3Dのフィルターを使用し、活性化の関数や、サンプリングに関しても3次元に拡張されていて、3次元の形状の特徴を学習できるように工夫されている。
差分を学習させることにより、特徴を学習させることに、ターゲットを置いている。この方法は、CT/MRI画像が通常の画像とは違って「色」という概念が無いため、また人間が近傍のピクセルの変化を認識して境界を認識しているのと同じように差分で学習するので、医療画像を扱うにはマッチしていると考えられる。
具体的には、128×128×64サイズの入力を5×5×5の方向性を変えた16種類のフィルターを使って畳み込み(convolution)を行い、抽出できる特徴を増やしてチャンネル数を増やしつつ、それぞれのチャンネルにフィルター処理後にPReLUを活性化関数に使う処理を繰り返し、特徴の抽出度合いを高めている。さらにチャンネル数を倍に増やした後に、次のレイヤーにデータを伝える時に2×2×2でダウンサンプリングをしているが、これがプーリング(pooling)の代わりになっている。
レイヤーが深くなるごとにチャンネル数を 1 → 16 → 32 → 64 → 128 → 256 と増やしながらダウンサンプリングしていき、ボリューム(Volume)のサイズを 128×128×64 → 64×64×32 → 16×16×8 → 8×8×4 と減らしている。また、一度チャンネル数を増やした後、3次元的な特徴を引き出しながら元の画像のサイズになるまで、畳み込みを繰り返してアップサンプリングをしながら、チャンネルを統合して解像度を上げている。このあたりは、上で示した論文の「ネットワークのダイアグラム」を見ていただきたい。
ネットワークの最終段階ではSoftMaxレイヤーで、教師データのCT画像がある前面のボリュームデータからの可能性のデータと、CT画像の後ろ側にあるボリュームデータからの可能性のデータを出力して、それを判定に使っている。
医療画像では、対象とする解剖部分が、画像全体の中では比較的小さい領域となっていることがしばしばある。このため、学習プロセスの中で損失(loss)関数の極小値付近に収まってしまうことがよくあり、そうなると後ろ側にバイアスが掛かる傾向が出てくる。つまり、実際の臓器よりも大き目に領域を学習してしまう傾向があった。
従来手法では、前側に重めのウェイトを掛けて評価をすることにより、この傾向を打ち消していた。今回の手法では、評価関数にDICE関数ではなく、DICE関数のgradient(勾配)を使うことにより、前側にウェイトを掛けることなく良い結果を得られた。
まずはコンテストのデータ&公開されているソースで環境構築をしてそのまま動かしてみたのが、こちらの結果。学習データは骨盤付近のMRIのデータ。
元の論文の対象データはMRIのデータであったが、画像を読み込む部分に修正を加えてCTスキャンのDICOMデータも読み込めるようにして、肝臓のCTスキャン画像のデータ別のコンテストのデータセットで学習させて肝臓のセグメンテーションを行ったところ、良好な結果が出た。
3次元のボリュームデータということで、MRIのデータをターゲットにした論文と同じ手法が、CTスキャンのデータを使って肝臓という別の部位でも対応できることが確認できた。このことから、V-Netは広く医療画像のセグメンテーションに使えると考えている。
論文で公開されているコードから計算の幅を大きくして計算ステップを少なくするなど、学習パラメーターのチューニングにトライをしてみたりしたが、学習率(learning rate)は上がらず、現在は論文の値をそのまま使うことにしている。結局、効果は上がらなかったが、この手の検証も必要だと考えている。
業務に使うとなると、マルチGPUが使いたいのと、全てのコードがPythonの方が扱いやすいので、CaffeからChainerに移植をした。Chainerに移植したプログラム上でも同じ結果が出ることを確認したので、現状はChainerをベースに開発を行っている。Chainerに移植した結果、Caffeよりも2倍速いという結果も出ている。
VRのポリゴンを作る際には、冒頭で述べたように臓器の外形の他、血管も重要である。しかし、血管の走行は複雑で、しかも手動でセグメンテーションをしたデータが存在しないし、それをやるには手間がかかりすぎる。
血管は造影剤でCTに映っているし、血管の分岐は、基本的に木のように、ある程度の方向性を持って分岐が広がっている。肝臓や腎臓に入る血管は、医師が見ると見当が付くなどの理由により、ルールベースの画像処理である程度は可能と判断し、現在、画像処理による血管の追跡のプログラムも作成中である。
例えば肝臓であれば、消化管から来る静脈により、消化管で消化した栄養分を集めて肝臓に送られ、肝臓が栄養分を貯めるための入り口となる。肝臓の血管は、そうやって下方向から肝臓に入ってくる門脈に加え、下大静脈から上方向から入ってくる肝静脈、大動脈から下方向から入ってくる肝動脈の3つに分けられる。それぞれ造影剤が血管にいるタイミングが異なり、撮影のタイミングにより、どの血管が映っているかが異なってくる。
現在、弊社では、医師が肝臓や腎臓の外形の教師データを作成し、それぞれの血管の抽出などをソフト自動機能により行っている。それで足りない部分は、医師の目で判断してオリジナルの教師データを作成している。
さらに、既存の医師が使っているツールやワークフローを活用するために、PACCSという病院内でDICOMを扱うネットワークで使われるDICOMサーバーを構築し、医師は通常の業務で使うようなDICOMビューアーからセグメンテーションした情報を、DICOMサーバーにアップロードしてもらうようなワークフローを組んでいる。ディープラーニングの学習プログラムは、DICOMサーバーにアクセスをして新しい教師データが来たら追加で学習を走らせるプログラムを構築中である。
今後はさらに別の部位のセグメンテーションにもトライしていく。
一つは骨と血管のセグメンテーションである。こちらは弊社で開発をしている「背骨へのインプラントを行うためにMRを活用したガイドアプリ」(図6)のために必要とされている。背骨が骨折や、年齢を経て曲がってしまって直立して歩けなくなった患者さんに、背骨にネジを打ち込んで、ネジをロッドでつないで背骨を支える術式がある。この術式においては、背骨に沿うように大動脈から分かれた血管が背骨を取り囲んで走っているので、「これを分かりやすくMRアプリの中で表示したい」というニーズがあり、これに答えていく。
他には、顎の骨と歯根のセグメンテーションにもトライをしていく。歯根の形は複雑であり、「歯根の形をVRやMRで見たい」という歯科医のニーズがある。
医療画像で「機械学習」というと、「医者の代わりに診断」という話題が先行しているが、弊社は、手術の支援や教育、また手術に関するコミュニケーションという分野をターゲットにしているので、「いかに手術の対象となる臓器や血管、腫瘍の部分を分かりやすくVRやMRアプリ化するか」というのがテーマになっており、それを自動化するためにディープラーニングを使った機械学習やルールベースの画像処理を活用している。
他の分野でも同様であるが、論文のサーベイから複数の手法を検討して現状を把握し、その中から1つの手法を実際に動かしてさらにそれに改良を加えて実用化していった。さらにそこに医療の専門家である医師の知見や、通常の病院で使われている仕組みを、教師データ作成のワークフローに組み込んでいる。医師も「機械学習」という新しい領域に興味を持ってモチベーション高くプロジェクトに参加し、エンジニアの側も「医療」という新しいフィールドに医師という専門家とやりとりをしながらコードを書いていくという、両者が興味ドリブンでプロジェクトが進んでいる。
Copyright© Digital Advantage Corp. All Rights Reserved.