概要
- Chainer の DCGAN で、胃カメラ(上部消化管内視鏡)の画像を自動生成しました。
- 内視鏡医のみなさんも本物としか思えないリアルな画像が生成されました。
使用したデータ
エルサルバドルの消化器内科医 Julio Alejandro Murra-Saca さんが、Webサイト El Salvador Atlas of Gastrointestinal Video Endoscopy で4000以上の内視鏡ビデオを公開されています。今回は、そのデータを使用して学習しました。
環境
- Ubuntu 16.04
- GeForce GTX 1070
- Chainer 3.3.0
準備
- 胃カメラのビデオをダウンロードします。
- 正常・胃がん・胃潰瘍など 287 本のビデオダウンロードしました。
-
wget
などのツールは使わずに、一つ一つ手作業でダウンロードしました。
- FFmpeg で 1 秒につき 2 フレームずつ png 形式の画像を切り出します。
- ImageMagick で画像を 32×32 ピクセルに crop & resize します。
- Chainer の examples の DCGAN をそのまま使うためです!
- ファイル数が多すぎると
ls
やmogrify *.png
は動作しなくなるので注意。
- グレイスケールPNGを取り除く。
- Chainerで行列の次元の要素数が合わないというエラーが発生しました。
pnginfo
コマンドでチャンネル数が3以外の画像を検出して、取り除きました。
- 輝度・彩度の分散が少ない画像を取り除く。
- それぞれの画像のピクセルについて輝度と彩度の分散を計算しました。輝度・彩度ともに分散が小さい画像は低品質とみなして除去しました。このやり方がよかったかは不明です。
- 最終的に、約40万枚の画像を学習に使いました。
実装と実行
非エンジニア勢なのでコードを完全に理解してガリガリ編集するのは現実的ではありません。
おとなしくchainer のサンプルコードのDCGANをそのまま実行しました。
学習の様子です。
Chainerで生成した内視鏡画像 pic.twitter.com/ZWbbBbgY3I
— axha (@axha0838) 2018年2月6日
結果
私が画像を見て病名をつけてもよさそうだと感じた所見の一例を示します(あくまで一例です)。正常画像のほか、胃がん・胃潰瘍などの病変画像がうまく生成されていますね。一方で、なんだかよくわからない画像もあります。図には直接示しませんでしたが、生検鉗子のようなものが再現されている画像もありますので、よかったら探してみてください。輝度・彩度による画像選択をしているため、全体的に画像がドラマチックになりすぎている印象もありますね。
そのほか、少ない画像枚数で学習を続けてみたところ、学習が進行しすぎると、generatorが似たような画像ばかり集中的に生成するようになる傾向が出現するようでした。その時々のエポックにおけるdiscriminatorが苦手とする画像なのでしょうか。
おわりに
コンピュータを用いてきれいな胃カメラの画像を自動生成できることを示しました。また症例画像空間を学習させることで、潰瘍、腫瘍など、病変の画像も自動生成させられることがわかりました。
2018年現在、Deep Learning で高精度な画像認識が可能であることが広く知られるようになりました。画像認識を利用して、レントゲン、CT、内視鏡などの画像から病変を検出したり、医師の業務を代行する試みが広く行われています。
けれども実際のところ Deep Learning は、もっと自由な発想で取り組むと、さらに幅広い応用の方法が隠されているのではないでしょうか。
この記事はChainerのサンプルコードを実行したに過ぎません。しかしエンジニアの皆さんが医療について関心を持ってくれたり、医療サイドの皆さんがIT技術について考えるきっかけになると幸いです。