主要内容

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

blockedImageおよび深層学習を使用した,大きな多重解像度イメージの分類

この例では,Inception-v3深層ニューラルネットワークを使用して,メモリに収まらない多重解像度のスライドガラス標本全体のイメージ(WSI)を分類する方法を説明します。

乳癌を診断するための唯一の決定的な方法は,生体組織検査または外科手術において収集した組織サンプルの検査です。サンプルは,組織内の構造のコントラストを高めるために,一般にヘマトキシリンとエオシン(圆))による染色で処理されます。従来から,病理学者は,スライドガラスに載せた組織を顕微鏡で検査して,腫瘍組織を検出しています。病理学者はスライド全体を大きな倍率で入念に検査しなければならないため,診断には時間がかかります。さらに,病理学者が小さい腫瘍を見落とす場合があります。深層学習の手法は,腫瘍組織の検出の自動化により,検出時間の短縮と小さい腫瘍の検出率向上を目的としています。

腫瘍分類のための深層学習の手法は,組織を載せたスライド全体を撮像してデジタル化するデジタル病理学に依存しています。結果として得られるWSIは非常に高解像度です。WSIは,イメージの表示,ナビゲーション,処理を容易にするために,多重解像度ファイルに頻繁に格納されます。

WSIでは,イメージイメージ体をメモリ読み込むことができため,読み取りが困难であり,アウトオブコアののイメージ手。blockedImageオブジェクトを使用すると,このタイプの大きな多重解像度イメージを格納および処理できます。blockedImageDatastoreオブジェクトを使用すると,blockedImageオブジェクトからデータのバッチを抽出できます。

この例では,blockedImageblockedImageDatastoreを使用して,深層学習ネットワークに学習させ,非常に大きな多重解像度イメージ内の腫瘍を分類する方法を説明します。この例では,分類結果を,局所的な組織が腫瘍性である確率を示すヒートマップとして表示します。腫瘍領域の位置推定により,病理学者は特定の領域を調査して,イメージ内の任意サイズの腫瘍を迅速に識別できます。

学習データのダウンロード

この例ではCamelyon16チャレンジのWSIを使用します[1]。このこのチャレンジのデータにははリンパ节ののしたソースによるリンパ节ののがて计计リンパ节个含まれて计おりリンパ节含まれておりおりい个の习习イメージとと个のテストイメージににといいのテストイメージにかれかれいいのテストイメージにかれかれい.wsiは,11レベルのピラミッドピラミッド构造をもつストリップ形式ののファイルファイル格式さています。

学習データセットは,正常なリンパ節の159個のWSIと,腫瘍組織と正常組織を含むリンパ節の111個のWSIで構成されています。通常,腫瘍組織の割合は正常組織に比べるとごくわずかです。腫瘍イメージには病変境界のグラウンドトゥルース座標が付属しています。

各学習ファイルのサイズは約2 GBです。学習データセットをダウンロードしない場合やネットワークに学習させない場合は,この例のネットワークの学習またはダウンロードの节に进んでください。

学習データセットを格納するディレクトリを作成します。

trainingImageDir = fullfile (tempdir,“Camelyon16”“培训”);如果~存在(trainingImageDir“dir”mkdir (trainingImageDir);mkdir (fullfile (trainingImageDir,“正常”));mkdir (fullfile (trainingImageDir,“肿瘤”));mkdir (fullfile (trainingImageDir,“lesion_annotations”));结束trainNormalDataDir = fullfile (trainingImageDir,“正常”);traintumordatadir = fullfile(Strafticalimagedir,“肿瘤”);trainTumorAnnotationDir = fullfile (trainingImageDir,“lesion_annotations”);

学習データをダウンロードするには,Camelyon17のWebサイトに移動し,最初の[CAMELYON16数据集]リンクをクリックします。“培训”ディレクトリを開き,以下の手順に従います。

  • “lesion_annotations.zip”ファイルをダウンロードします。参数trainTumorAnnotationDirで指定されたディレクトリにファイルを解凍します。

  • “正常”ディレクトリを开放ます。参数trainNormalDataDirで指定されたディレクトリにイメージをダウンロードします。

  • “肿瘤”ディレクトリを開きます。変数trainTumorDataDirで指定されたディレクトリにイメージをダウンロードします。

学習イメージの数を指定します。正常組織の学習イメージの1つ‘normal_144.tifには,blockedImageオブジェクトで読み取ることができないメタデータが含まれているので注意してください。158年この例では,残りの個の学習ファイルを使用します。

numNormalFiles = 158;numTumorFiles = 111;

学习データデータ可催化

学習データをより深く理解するために,1つの学習イメージを表示します。最も細かい解像度でイメージ全体をメモリに読み込むことはできないため,imshowなどなど通讯のイメージ关联数目は使使ませんませ。blockedImageオブジェクトを使用します。

肿疡の学习イメージからblockedImageオブジェクトを作成します。

tumorfilename = fullfile(traintumordatadir,“tumor_001.tif”);tumorImage = blockedImage (tumorFileName);

各解像度レベルでblockedImageの次元を検査します。レベル1には最も多くのピクセルが含まれており,これは最も細かい解像度レベルです。レベル10は,含まれているピクセルの数が最も少なく,最も粗い解像度レベルです。縦横比には一貫性がありません。これは,レベル間で,広がるワールド領域が異なることを示します。

CleomsizeInfo =表((1:长度(Tumorimage.size))',......tumorImage.Size (: 1),......tumorImage.Size (:, 2),......tumorimage.size(:,1)./ tumorimage.size(:,2),......'variablenames',[“解决水平”“图像宽度”“图像高度”“宽高比”])
levelSizeInfo =11×4表图像宽度图像分辨率水平高纵横比  ________________ ___________ ____________ ____________ 1 2.2118 e + 05 97792 2.2618 49152 2.25 1.1059 e + 05年3 55296 24576 2.25 27648 12288 13824 6144 2.25 7168 2.25 3072 2.3333 1577 2.3333 3629 0.43455 8 3584 1536 9 2048 1024 2 1024 512 2 11 512 512 1

関数bigimageshowを使使し,粗い解像度レベルでblockedImageを表示します。bigimageshowオブジェクトのハンドルを返します。このハンドルを使用して表示を調整できます。このイメージには、空の白色の領域が多数含まれています。この組織は、イメージのごく一部のみを占めています。

h = bigimageshow (tumorImage,'distanceLevel'8);

最も細かい解像度レベルに対して水平方向と垂直方向の空間範囲を設定して,イメージの一部分を拡大します。この解像度レベルは非常に粗いため,イメージは不鮮明に見えます。

xlim((29471、29763));ylim((117450、118110));

详细を确认するに,解像度レベルをより细かいレベル変更します。

H.ResolutionLevel = 1;

マスクの作成

関心領域(ROI)のみを処理して,計算量を減らすことができます。マスクを使用してROIを定義します。マスクは,真的ピクセルが投资回报率表すイメージイメージ。

計算量をさらに減らすには,ブロック単位で処理する代わりに,全体をメモリ内で処理できる粗い解像度レベルのマスクを作成します。粗い解像度レベルの空間参照が,より細かい解像度レベルの空間参照に一致する場合,粗いレベルの位置は,細かいレベルの位置に対応します。この場合,粗いマスクを使用して,より細かいレベルで処理するブロックを選択できます。詳細については,大きなイメージの空間参照の設定マスクを使用した大きなイメージの効率的な処理を参照してください。

マスク例で,粗く,メモリに解像レベル使使は,粗く,メモリは。blockedImageオブジェクトは,各レベルのピクセル数に基づいて,最も細かいレベルから最も粗いレベルの順に多重解像度イメージ内のレベルを自動的に並べ替えることに注意してください。いくつかのCamelyon16イメージファイルには,中間解像度のマスクが含まれています。この例では,イメージデータの7番目のレベルを判定して読み取る際,このマスクを無視します。

resolutionLevel = 7;

正常イメージのマスクの作成

正常イメージは,投资回报率さは组织でで构组织の色はい背景色との色は背景の异なるのでのでので异なるのでのでので値ので异なる异なる异なるのでしきい値値处をしのしきいしきい値値しをしてのでしきいしきいししをしてセグメントセグメントしししををセグメントセグメントしし使ををセグメントセグメントししををセグメントセグメントししし作战します.L *A * B *色空间はのの色分享にですですイメージをl * a * b *色空间に変换して,a *チャネルにしきい値値をを,组织组织を作物

補助関数createMaskForNormalTissueを使用することにより,色のしきい値処理を使用してマスクを作成できます。この補助関数は,この例にサポートファイルとして添付されています。

この補助関数は,正常組織の各学習イメージに対して以下の操作を実行します。

  • tifイメージファイルからblockedImageオブジェクトを作成します。

  • イメージメタデータから,すべての解像度レベルの空間参照を設定します。

  • 粗い粗い解像度レベルレベルのを取得しし

  • 粗いイメージをl * a * b *色空间にし,a *チャネルを抽出し。

  • 黒と白のピクセルの間の級内分散を最小にする大津法を使用してイメージをしきい値処理することにより,バイナリイメージを作成します。

  • マスクから単一解像度のblockedImageオブジェクトを作品成し,入力イメージの空间参照と一致するようにの空间参照を设定します。

  • マスクのblockedImageをメモリに書き込みます。このblockedImageオブジェクトのみがメモリ内にあります。逻辑マスクイメージに対応する個々のイメージブロックは,一時ディレクトリにあります。ディレクトリへの書き込みにより,カスタムの空間参照は維持されます。そのため,正常イメージとそれらに対応するマスクイメージの空間参照が同じであることが保証されます。

trainNormalMaskDir = fullfile (trainNormalDataDir, (“normal_mask_level”num2str (resolutionLevel)]);createMaskForNormalTissue (trainNormalDataDir trainNormalMaskDir resolutionLevel)

正常イメージイメージとマスクがどちらも上にあるので,blockedImageオブジェクトを作成し,補助関数createblockedimageandmaskArrays.を使用してそれらのデータを管理します。この関数は正常イメージからblockedImageオブジェクトの配列を作物成,正常マスクイメージから対応するblockedImageオブジェクトオブジェクト配列を作用成し。このこの关键,この例にサポートファイル添付さています。

[normalImages, normalMasks] = createBlockedImageAndMaskArrays (trainNormalDataDir trainNormalMaskDir);

サンプルの正常イメージとマスクを選択します。マスクの空間ワールド範囲が、最も細かい解像度レベルのイメージの範囲に一致することを確認します。空間ワールド範囲はWorldStartプロパティと世隔プロパティによって指定されます。

idx = 2;[normalImages (idx)。WorldStartnormalImages(idx).WorldEnd]
ans =11×610.5×0 0 0.0000 2.2118 0.9779 0.0000 0 0 0 0 0.0000 0.0000 2.2118 0.9830 0.0000 2.2118 0.9830 0.0000 0 0 0.0000 2.2118 0.9830 0.0000 0 0 0 0 0.0000 0.0000 2.2118 0.9830 0.0000 2.2938 0.9830 0.0000 0.0000 0.0000 0.0000 2.2118 0.9779 0.0000 0 0 0.0000 2.2938 0.9830 0.0000 0 0 0 0 0.0000 0.0000 2.6214 1.3107 0.0000 2.6214 1.3107 0.0000⋮
[normalMasks (idx)。WorldStartnormalMasks(idx).WorldEnd]
ans =1×40 0 221184 97792

マスクに正しい投资回报率と空间参照参照れていることを确认ますしますますますます。关联bigimageshowを使用してサンプルイメージを表示します。この表示を含む座標軸を取得します。

figure hnnormal = bigimageshow(normalImages(idx));hNormalAxes = hNormal.Parent;

表示されたblockedImageの上に新しい座標軸を作成します。新しい座標軸で,部分的に透明な対応するマスクイメージを表示します。このマスクは,正常組織を含む領域を強調表示します。

hMaskAxes =轴;hMask = bigimageshow (normalMasks (idx),“父”hMaskAxes,......“插值”“最近的”“AlphaData”,0.5);hmaskaxes.visible =“关闭”

イメージの座標軸とマスクの座標軸をリンクさせます。ズームやパンを行うと,両方の座標軸がまったく同じように更新されます。

linkaxes ([hNormalAxes hMaskAxes]);

水平方向と垂直の空空间范囲して,イメージの一分钟をししますますに重なり重なり重なりますますます重なり重なり重なり重なり

xlim(80000年[45000]);ylim(165000年[130000]);

肿疡肿疡イメージのマスク作作作者

腫瘍イメージの場合,ROIは腫瘍組織で構成されています。腫瘍組織の色は正常組織の色と似ているため,色のセグメンテーション手法を使用できません。代わりに,腫瘍イメージに付属している病変境界のグラウンドトゥルース座標を使用してROIを作成します。

補助関数createMaskForTumorTissueを使用すると,ROIを使用してマスクを作成できます。この補助関数は、この例にサポート ファイルとして添付されています。

この補助関数は,腫瘍組織の各学習イメージに対して以下の操作を実行します。

  • tifイメージファイルからblockedImageオブジェクトを作成します。

  • イメージメタデータから空間参照を設定します。

  • XMLファイルファイル内のの対応する病変注釈を,注釈注釈多次(多边形オブジェクト)に変換します。

  • 各イメージブロックごとに,多角形データを使用して対応するブロックのマスクを作成します。腫瘍領域を含むイメージの中に,正常領域が含まれている可能性があります。正常組織の注釈を使用して,それらの領域を除外します。

  • 粗い解像度レベルで,出力用の逻辑マスクblockedImage关节作物成し。关联setBlockを使用してブロック単位でマスクイメージを書き込みます。

  • マスクblockedImageオブジェクトをメモリ内のディレクトリに書き込みます。このblockedImageオブジェクトのみがメモリ内にあります。逻辑マスクイメージに対応する個々のイメージブロックは,一時ディレクトリにあります。ディレクトリへの書き込みにより,カスタムの空間参照は維持されます。そのため,腫瘍イメージとそれらに対応するマスクイメージの空間参照が同じであることが保証されます。

trainTumorMaskDir = fullfile (trainTumorDataDir, (“tumor_mask_level”num2str (resolutionLevel)]);createMaskForTumorTissue (trainTumorDataDir trainTumorAnnotationDir,......trainTumorMaskDir resolutionLevel);

腫瘍イメージとマスクがどちらもディスク上にあるので,blockedImageオブジェクトを作成し,補助関数createblockedimageandmaskArrays.を使用してそれらのデータを管理します。この関数は腫瘍イメージからblockedImageオブジェクトの配列を作成し,腫瘍マスクイメージから対応するblockedImageオブジェクトオブジェクト配列を作用成し。このこの关键,この例にサポートファイル添付さています。

[tumorImages, tumorMasks] = createBlockedImageAndMaskArrays (trainTumorDataDir trainTumorMaskDir);

サンプルサンプルの肿疡イメージとマスクを选択ししマスクマスクの解像ワールド范囲がの范囲解像度レベルのイメージ范囲に致するすることしし空し空しますますしますますますますますますしますますますますますますますますl.XWorldLimitsプロパティとYWorldLimitsプロパティによって指定されます。

idx = 5;[tumorImages (idx)。WorldStarttumorImages(idx).WorldEnd]
ans =11×610.5×0 0 0.0000 2.1965 0.9779 0.0000 0 0 0 0 0.0000 0.0000 2.2016 0.9830 0.0000 2.2118 0.9830 0.0000 0 0 0.0000 2.2118 0.9830 0.0000 0 0 0 0 0.0000 0.0000 2.2118 0.9830 0.0000 2.2938 0.9830 0.0000 0.0000 0.0000 0.0000 2.1965 0.9779 0.0000 0 0 0.0000 2.2938 0.9830 0.0000 0 0 0 0 0.0000 0.0000 2.6214 1.3107 0.0000 2.6214 1.3107 0.0000⋮
[Tumormasks(IDX).worldstart Tumormasks(IDX).worldend]
ans =1×40 0 219648 97792

マスクに正しい投资回报率と空间参照参照れていることを确认ますしますますますます。关联bigimageshowを使用してサンプルイメージを表示します。この表示を含む座標軸を取得します。

图肿瘤= bigimageshow(tumorImages(idx));hTumorAxes = hTumor.Parent;

表示されたblockedImageの上に新しい座標軸を作成します。新しい座標軸で,部分的に透明な対応するマスクイメージを表示します。このマスクは,正常組織を含む領域を強調表示します。

hMaskAxes =轴;hmask = bigimageshow(tumormasks(Idx),“父”hMaskAxes,......“插值”“最近的”“AlphaData”,0.5);hmaskaxes.visible =“关闭”

イメージの座標軸とマスクの座標軸をリンクさせます。ズームやパンを行うと,両方の座標軸がまったく同じように更新されます。

Linkaxes([htumoraxes,hmaskakes]);

水平方向と垂直方向の空間範囲を設定して,イメージの一部分を拡大します。マスクは腫瘍組織に適切に重なります。

xlim(65000年[45000]);ylim(150000年[130000]);

学習と検証のための,ブロックされたイメージのデータストアの作成

blockedImageオブジェクトから学習データのパッチを抽出するには,blockedImageDatastoreを使用します。このデータストアは、単一解像度レベルのblockedImageデータのパッチを読み取ります。

生の学習パッチの色の不均衡とクラスの不均衡によって,ネットワークにバイアスが生じる可能性があります。色の不均衡は,組織の色の染色が一様でないことに起因します。色の不均衡は,データ内の腫瘍組織と正常組織の量が等しくないことに起因します。これらの不均衡を修正するには,データストアを前処理して拡張します。

この例では,ネットワークに学習させるための腫瘍パッチと正常パッチを抽出するblockedImageDatastoreを作成する方法を説明します。また,データストアを前処理および拡張して,ネットワークに生じるバイアスを避ける方法も説明します。

読み取る正常組織パッチの場所の選択

正常イメージと対応するマスクを2つのセットにランダムに分割します。検証セットには,ランダムに選択された2つのイメージと対応するマスクが格納されています。学習セットには,残りのイメージとマスクが格納されています。

normalValnIdx = randi(numNormalFiles,[1 2]); / /输入numalvalnidxnormalTrainIdx = setdiff (1: numNormalFiles, normalValnIdx);

blockedImageDatastoreは重なりや隙間がない状態でパッチを抽出します。そのため,膨大な量の学習パッチが生成されます。パッチのサブセットを指定することによって,学習データの量を減らすことができます。関数selectBlockLocationsを使用してパッチの座標を指定します。名前と値の引数BlockOffsetsを使用して,サンプリングされた学習パッチ間に隙間を追加します。パッチサイズより大きいオフセットを指定します。比較的一様なパッチでネットワークに学習させるために,包含しきい値を既定値の0.5より大きくします。

patchsize = [299,299,3];RimalStrideFactor = 10;blsnormaldata = selectblocklocations(normalimimages(normaltrainidx),......“BlockSize”,patchsize(1:2),“BlockOffsets”patchSize (1:2) * normalStrideFactor,......“面具”normalMasks (normalTrainIdx),“包括察勒斯德”, 0.75,“ExcludeIncompleteBlocks”,真正的);

読み取る検証パッチの場所を選択します。検証イメージは数が少ないため,パッチ間に隙間を追加する必要はありません。

blsNormalDataVal = selectBlockLocations (normalImages (normalValnIdx),......“BlockSize”,patchsize(1:2),......“面具”,普通阵列(普通valnidx),“包括察勒斯德”, 0.75,“ExcludeIncompleteBlocks”,真正的);

正常イメージのデータストアの作成

それぞれ学習と検証で使用するために,最も細かい解像度レベルの正常イメージからイメージパッチを読み取るデータストアdsNormalDatadsnormaldataval.を作成します。名前と値のペアの引数BlockLocations.を使用してパッチの座標を指定します。

dsNormalData = blockedImageDatastore (normalImages (normalTrainIdx),......“BlockLocationSet”, blsNormalData);dsNormalDataVal = blockedImageDatastore (normalImages (normalValnIdx),......“BlockLocationSet”, blsNormalDataVal);

正常部分の学習イメージを含むデータストアからパッチをプレビューします。

imagesToPreview = 0 ([patchSize 10],'uint8');n = 1:10 IM =读取(dsnormaldata);变化物质(:::,:,n)= im {1};结束图蒙太奇(imagesToPreview,“大小”(2 - 5),“BorderSize”10,“写成BackgroundColor”“k”);

标题(“正常组织训练片”

読み取る腫瘍組織パッチの場所の選択

腫瘍イメージと対応するマスクを2つのセットにランダムに分割します。検証セットには,ランダムに選択された2つのイメージと対応するマスクが格納されています。学習セットには,残りのイメージとマスクが格納されています。

tumorValIdx = randi(numTumorFiles,[1 2]);tumorTrainIdx = setdiff (1: numTumorFiles, tumorValIdx);

関数selectBlockLocationsを使用して,読み取るパッチの座標を指定します。腫瘍組織は正常組織よりもスパースに分布しているため,通常組織よりも小さいブロックオフセットを指定してサンプリング密度を大きくします。少ない数の学習イメージを使用して学習させる場合,ブロックオフセットをさらに減らして学習セットのサイズを増やすことが必要な場合があることに注意してください。

tumorStrideFactor = 3;blsTumorData = selectBlockLocations (tumorImages (tumorTrainIdx),......“BlockSize”,patchsize(1:2),“BlockOffsets”patchSize (1:2) * tumorStrideFactor,......“面具”,tumormasks(tumortrainidx),“包括察勒斯德”, 0.75,“ExcludeIncompleteBlocks”,真正的);

読み取る検証パッチの場所を選択します。検証イメージは数が少ないため,パッチ間に隙間を追加する必要はありません。

blsTumorDataVal = selectBlockLocations (tumorImages (tumorValIdx),......“BlockSize”,patchsize(1:2),......“面具”tumorMasks (tumorValIdx),“包括察勒斯德”, 0.75,“ExcludeIncompleteBlocks”,真正的);

腫瘍イメージのデータストアの作成

学習用の腫瘍イメージとマスクからblockedImageDatastoreを作成します。データストアdstumordata.およびdsTumorDataValは,それぞれ学习と検证でするに,最も细かい解像度レベル肿疡イメージイメージパッチを読み取ります。

dstumordata = blockedimagedataStore(Tumorimages(Tumortrainidx),......“BlockLocationSet”, blsTumorData);dsTumorDataVal = blockedImageDatastore (tumorImages (tumorValIdx),......“BlockLocationSet”, blsTumorDataVal);

腫瘍の学習イメージを含むデータストアからパッチをプレビューします。

imagesToPreview = 0 ([patchSize 10],'uint8');n = 1:10 im = read(dsTumorData);变化物质(:::,:,n)= im {1};结束蒙太奇(imagesToPreview“大小”(2 - 5),“BorderSize”10,“写成BackgroundColor”“k”);标题(“肿瘤组织训练片”

色の正規化と学習データの拡張

データセットは異なるソースから入手されており,また,同じ色で組織を染色しても染色のされ方はイメージごとに異なるため,学習イメージごとに色の分布は異なります。ネットワークのバイアスを避けるために,追加の前処理が必要です。

色のばらつきを防ぐため,この例では標準的な染色の正規化手法を使用してデータを前処理します。関数转变を,补助关圈augmentAndLabelCamelyon16によって指定されたカスタム前処理演算と共に使用して,染色の正規化と拡張を適用します。この関数は,この例にサポートファイルとして添付されています。

関数augmentAndLabelCamelyon16は以下の操作を実行します。

  • 関数normalizeStaining.mを使用して染色を正規化します[4].macenkoのの法をして,染色の正催化し実ししでで,固定固定れは列をするのみ込みによってh&eカラーチャネルをによってし,个别ににをしし,个别ににをれたたににれた。[关键词,正式,正,正,所以,正面,正,所以〖H&E〗返しとH&Eイメージ返しイメージとH&Eイメージ返しイメージ。

  • 関数jitterColorHSVをを使てカラーカラーカラージッタージッター追します。カラーカラーは,イメージイメージコントラスト,色相,彩度,および明度にをををことこと各パッチのををささせせますrアーティイメージ内のせますますアーティアーティアーティ内内せせせせせなアーティアーティを避けるため,カラージッターはhsv色空间で実行。

  • 90度回転と垂直方向および水平方向の反転のランダムな組み合わせを適用します。ランダムなアフィン変換により,入力イメージデータの方向がネットワークに反映されなくなります。

  • パッチに“正常”または“肿瘤”のラベルを付けます。

各イメージパッチから,拡張されてラベルが付けられた5つのパッチが生成されます。それらのパッチは,染色が正規化されたパッチ,染色が正規化されカラージッターが適用されたパッチ,染色が正規化されカラージッターとランダムなアフィン変換が適用されたパッチ,ランダムなアフィン変換が適用されたヘマトキシリンイメージ,およびランダムなアフィン変換が適用されたエオシンイメージです。

正常部分の学習イメージと検証イメージを変換するデータストアを作成し,生成されたパッチに“正常”のラベルを付けます。

dsLabeledNormalData =变换(dsNormalData,......@(x,info)augmentandlabelcamelyon16(x,信息,“正常”),“IncludeInfo”,真正的);dslabelednormaldataval =变换(dsnormaldataval,......@(x,info)augmentandlabelcamelyon16(x,信息,“正常”),“IncludeInfo”,真正的);

腫瘍の学習イメージと検証イメージを変換するデータストアを作成し,生成されたパッチに“肿瘤”のラベルを付けます。

dsLabeledTumorData =变换(dsTumorData,......@(x,info)augmentandlabelcamelyon16(x,信息,“肿瘤”),“IncludeInfo”,真正的);dsLabeledTumorDataVal =变换(dsTumorDataVal,......@(x,info)augmentandlabelcamelyon16(x,信息,“肿瘤”),“IncludeInfo”,真正的);

腫瘍クラスと正常クラスのバランス調整

腫瘍イメージ内の癌組織の量は,正常組織の量に比べて非常に小さくなります。大量の正常組織とごくわずかの腫瘍組織を含む,クラスが不均衡なデータでネットワークに学習させるのを回避するために,追加の前処理が必要です。

,このこの例で,バランスの取れ,バランスバランスのの习と肿疡の习パッチランダム选択选択randomSamplingDatastoreという名前のデータストア定义ししますこのはははは,この例にサポートファイル添付れています。詳細については,カスタムデータストアの開発を参照してください。

正常部分および腫瘍の学習データストアからカスタムのrandomSamplingDatastoreを作成します。無作為抽出データストアDstrain.は,エポックエポックの各各反复で习データのミニバッチをに提供し

dstrain = randomsamplingdatastore(dslabeledtumordata,dslabelednormaldata);

検証中に使用するパッチの数を制限するため,この例では,各クラスから5つの検証パッチを返すvalidationDatastoreという名前のデータストア定义ししますこのはははは,この例にサポートファイル添付れています。

正常部分および腫瘍の検証データストアからカスタムのvalidationDatastoreを作成します。

numValidationPatchesPerClass = 5;dsVal = validationDatastore (dsLabeledTumorDataVal,......dsLabeledNormalDataVal numValidationPatchesPerClass);

Inception-V3ネットワーク层の设定

この例では,Inception-v3ネットワークを使用します。このネットワークは、ImageNet データベースの 100 万枚を超えるイメージで学習させた畳み込みニューラル ネットワークです [3.]。このネットワークは,深さが48層であり,イメージを1000個のオブジェクトカテゴリ(キーボード,マウス,鉛筆,多くの動物など)に分類できます。このネットワークでは,3チャネルで299行299列のイメージ入力サイズを想定しています。

関数Inceptionv3.(深度学习工具箱)は,事前学習済みのInception-v3ネットワークを返します。在ception-v3 には、Deep Learning Toolbox™ Model for Inception-v3 Network サポート パッケージが必要です。このサポート パッケージがインストールされていない場合、関数によってダウンロード用リンクが表示されます。

网= inceptionv3;

最後の層の置き換え

ネットワークの畳み込み層は,入力イメージを分類するために,最後の学習可能な層と最終分類層が使用するイメージの特徴を抽出します。これらの2つの層は,ネットワークによって抽出された特徴を組み合わせてクラス確率,損失値,および予測ラベルにまとめる方法に関する情報を含んでいます。新しいイメージを分類するために事前学習済みのネットワークを再学習させるには,これら2つの層を新しいデータセットに適応させた新しい層に置き換えます。詳細については,新しいイメージを分类するための深层学习ネットワーク学习(深度学习工具箱)を参照してください。

学習済みのネットワークから層グラフを抽出します。

lgraph = layerGraph(净);

サポート关节findLayersToReplaceを使用して,置き換える2つの層の名前を見つけます。この関数は、この例にサポート ファイルとして添付されています。Inception-v3 では、これら 2 つの層の名前は“预测”“ClassificationLayer_predictions”です。

[learnableLayer, classLayer] = findLayersToReplace (lgraph)
learnableLayer = fulllyconnectedlayer with properties: Name: 'predictions' Hyperparameters InputSize: 2048 OutputSize: 1000 Learnable Parameters Weights: [1000×2048 single] Bias: [1000×1 single]显示所有属性
classLayer = ClassificationOutputLayer with properties: Name: 'ClassificationLayer_predictions' Classes: [1000×1 categorical] ClassWeights: 'none' OutputSize: 1000 Hyperparameters LossFunction: 'crossentropyex'

この例の目的は2つのクラス(腫瘍領域と非腫瘍領域)間でバイナリセグメンテーションを実行することです。2つのクラスの新しい全結合層を作成します。元の最後の全結合層を新しい層に置き換えます。

numclasses = 2;newlearnablelayer =全连接列(numcrasses,“名字”“预测”);lgraph = replaceLayer (lgraph learnableLayer.Name newLearnableLayer);

2. HOOKESENCHEA]这次利用2つのクラスのします。

newClassLayer = classificationLayer (“名字”“ClassificationLayer_predictions”);lgraph = replaceElayer(Lapraph,ClassLayer.name,NewClassLayer);

学習オプションの指定

rmsprop最適化ソルバーを使用してネットワークに学習させます。このソルバーは、収束を高速化するために学習率とモーメンタムを自動的に調整します。関数trainingOptions(深度学习工具箱)をを使し,その他のハイパーパラメーター设定をますます。大量の学习によってによってすぐに收束に到到到ためためMaxEpochsを小さい値に減らします。

checkpointsDir = fullfile (trainingImageDir,“检查点”);如果〜存在(CheckPointsdir,“dir”)MKDIR(CheckPointsdir);结束选择= trainingOptions (“rmsprop”......“InitialLearnRate”,1e-5,......“SquaredGradientDecayFactor”, 0.99,......'maxepochs',3,......“MiniBatchSize”,32,......“阴谋”'培训 - 进步'......“CheckpointPath”checkpointsDir,......“ValidationData”dsVal,......“ExecutionEnvironment”“汽车”......“洗牌”'每个时代');

ネットワークの学習またはダウンロード

既定既定で,このこの例,补助关圈downloadTrainedCamelyonNetを使用して,事前学習済みバージョンの学習済みInception-v3ネットワークをダウンロードします。この補助関数は,この例にサポートファイルとして添付されています。この事前学習済みのネットワークを使用することで、学習の完了を待たずに例全体を実行できます。

ネットワークに学習させるには,次のコードで変数doTraining真的に設定します。関数trainNetwork(深度学习工具箱)を使用してネットワークを学習させます。

GPUが利用できる場合,GPUで学習を行います。GPUを使用するには,并行计算工具箱™,およびCUDA®対応NVIDIA GPU®が必要です。詳細については,リリース別のGPUサポート(并行计算工具箱)を参照してください。英伟达泰坦Xでの学習は約20時間かかります。

dotraining = false;如果DotRaining TrousaWnet = Trainnetwork(Dstrain,Larkp,选项);modeldateTeme = string(DateTime(“现在”“格式”“yyyy-MM-dd-HH-mm-ss”));保存(strcat (“trainedCamelyonNet——”modelDateTime,“。垫”),'trousahynet');其他的trainedCamelyonNet_url =“//www.tatmou.com/金宝appsupportfiles/vision/data/trainedCamelyonNet.mat”;netDir = fullfile (tempdir,“Camelyon16”);downloadTrainedCamelyonNet (trainedCamelyonNet_url netDir);负载(fullfile (netDir“trainedCamelyonNet.mat”));结束
Cameylon16数据集的预训练的Inception-v3网络已经存在。

テストデータのダウンロードと前処理

Camelyon16テストデータセットは130個のWSIで構成されています。これらのイメージには,正常組織と腫瘍組織の両方が含まれています。この例では Camelyon16 テスト データの 2 つのテスト イメージを使用します。各ファイルのサイズは約 2 GB です。

テストデータを格納するディレクトリを作成します。

testingimagedir = fullfile(tempdir,“Camelyon16”“测试”);如果~存在(testingImageDir“dir”mkdir (testingImageDir);mkdir (fullfile (testingImageDir,“图片”));mkdir (fullfile (testingImageDir,“lesion_annotations”));结束testdatadir = fullfile(testingimagedir,“图片”);testtumorannotationdir = fullfile(testingimagedir,“lesion_annotations”);

テストデータをダウンロードするには,Camelyon17の网页サイトににに,最初最初[camelyon16数据集]リンクリンククリックします。“测试”ディレクトリを开开,以下の手顺にます。

  • “lesion_annotations.zip”ファイルをダウンロードします。参数testtumorannotationdir.で指定されたディレクトリ,すべてのファイルを解冻し。

  • “图像”ディレクトリを開きます。最初の2つのファイル“test_001.tifと“test_002.tifをダウンロードします。変数testDataDirで指定さされたたディレクトリファイルをを移しし

テストイメージの数を指定します。

numtestfiles = 2;

テストイメージのマスクの作成

テストイメージには,正常イメージと腫瘍イメージの混合が含まれています。分類中の計算量を減らすために,マスクを作成してROIを定義します。

マスク例で,粗く,メモリに解像レベル使使は,粗く,メモリは。

resolutionLevel = 7;

組織を含む領域のマスクを作成します。補助関数createMaskForNormalTissueを使用することにより,色のしきい値処理を使用してマスクを作成できます。この補助関数は,この例にサポートファイルとして添付されています。この補助関数の詳細については,正常イメージのマスクの作成を参照してください。

testtissuemaskdir = fullfile(testdatadir,[“test_tissuemask_level”num2str (resolutionLevel)]);createMaskForNormalTissue (testDataDir testTissueMaskDir resolutionLevel);

腫瘍組織を含むイメージのマスクを作成します。腫瘍組織を含まないイメージをスキップします。補助関数createMaskForTumorTissueを使用することにより,ROIオブジェクトを使用してマスクを作成できます。この補助関数は,この例にサポートファイルとして添付されています。この補助関数の詳細については,肿疡肿疡イメージのマスク作作作者を参照してください。

testTumorMaskDir = fullfile (testDataDir, (“test_tumormask_level”num2str (resolutionLevel)]);createMaskForTumorTissue (testDataDir testTumorAnnotationDir、testTumorMaskDir resolutionLevel);

テストデータの分類とヒートマップの作成

各テストイメージには,正常組織を示すマスクと腫瘍組織を示すマスクの2つのマスクが含まれています。blockedImageオブジェクトを作成し,補助関数createblockedimageandmaskArrays.を使用してテストデータとマスクを管理します。この補助関数は、この例にサポート ファイルとして添付されています。

[testImages, testTissueMasks] = createBlockedImageAndMaskArrays (testDataDir testTissueMaskDir);[~, testTumorMasks] = createBlockedImageAndMaskArrays (testDataDir testTumorMaskDir);

学习済みinception-v3ネットワークを使用し,テストイメージtestImages内の腫瘍パッチを識別します。関数应用を,补助关圈tumorProbabilityHeatMapによって指定されたカスタム処理パイプラインと共に使用して,ブロック単位でテストイメージを分類します。この補助関数は,この例にサポートファイルとして添付されています。必要な計算量を減らすため,組織を含むパッチのみを関数应用が処理するように,組織マスクtesttissuemask.を指定します。名称と値のペアペア幂“UseParallel”を,canUseGPUによって返される布尔として指定します。サポートされている GPU を計算に使用できる場合、関数应用はブロックを並列で評価します。

関数tumorProbabilityHeatMapは,各組織ブロックに対して以下の操作を実行します。

  • 関数预测(深度学习工具箱)を使用して腫瘍確率スコアを計算します。

  • 腫瘍確率スコアに等しいピクセル値を使用して,ヒートマップイメージパッチを作成します。

関数应用は,各ブロックのヒートマップをつなぎ合わせて,テストイメージの単一のヒートマップを作成します。ヒートマップは,ネットワークが,腫瘍を含む領域を検出した場所を示します。

ヒートマップを可化化ために,元のイメージの上にマップをを合书,透明度“AlphaData”プロパティを组织マスクとして设定しますますし重ねは,肿疡がイメージ内でどの程度局てているをます示しで表示表示领域は赤ピクセルで表示れててますます。

outputHeatmapsDir = fullfile (testingImageDir,'热门');如果~存在(outputHeatmapsDir“dir”mkdir (outputHeatmapsDir);结束patchsize = [299,299,3];idx = 1:numtestfiles bls = selectblocklocations(testimages(idx),“BlockSize”,patchsize(1:2),“面具”testTissueMasks (idx),......“InclusionThreshold”0,“水平”1);testHeatMaps (idx) =应用(testImages (idx), @ (x) tumorProbabilityHeatMap (x, trainedNet),......“水平”,1,“BlockLocationSet”美国劳工统计局,“UseParallel”canUseGPU,“OutputLocation”, outputHeatmapsDir);图hTest = bigimageshow(testestimages (idx));hTestAxes = hTest.Parent;hTestAxes。可见=“关闭”;hMaskAxes =轴;hMask = bigimageshow (testHeatMaps (idx),“父”hMaskAxes,......“插值”“最近的”“AlphaData”,testtissuemasks(Idx));Colormap(Jet(255));hmaskaxes.visible =“关闭”;linkaxes ([hTestAxes hMaskAxes]);标题([“测试图像的肿瘤热图”num2str (idx)]);结束

参考文献

Ehteshami B. B.等。深度学习算法检测乳腺癌女性淋巴结转移的诊断评估美国医学协会杂志.卷。318,2017年,第22,2,2,7岁,PP。2199-2210。doi: 10.1001 / jama.2017.14585

Szegedy, C., V. Vanhoucke, S. Ioffe, J. Shlens, Z. Wojna。“重新思考计算机视觉的Inception架构。”在计算机视觉与模式识别会议论文集, 2818 - 2826。拉斯维加斯,内华达州:IEEE, 2016。

[3] ImageNet。http://www.image-net.org。

等。一种用于定量分析的组织学切片标准化方法在2009 IEEE生物医学成像国际研讨会:从纳米到宏观1107-1110。波士顿,马:IEEE,2009。

[5] xml2struct//www.tatmou.com/matlabcentral/fileexchange/28518-xml2struct

参考

(深度学习工具箱)||(深度学习工具箱)|||||

関連するトピック