[医用画像処理 | データ前処理 | 整理]

【知識のポイント】

データ読み込みと前処理/ 2√Code :正規化処理方法×2、切り抜き・回転・反転、中央切り抜きの完全ケース

正規化処理×2:

【データ強化】

torchvision.transforms と compose について

 torchvision からインポート変換 -> 多くのクラスを定義する変換ツールボックスに入ります

作成について:

機能説明: torchvision.transforms は pytorch の画像前処理パッケージです. Compose は通常、複数のステップを統合するために使用されます. 変換内の関数 (リンクが表示されます)

Python Image Library PIL (Python Image Library) は、Python 用のサードパーティの画像処理ライブラリですが、その強力な機能とユーザー数の多さから、Python の公式画像処理ライブラリとほぼ考えられています。

 transforms.Compose() の使用: torchvision は、PyTorch 深層学習フレームワークを提供する pytorch のグラフィック ライブラリであり、主にコンピューター ビジョン モデルの構築に使用されます。torchvision.transforms は主に一般的なグラフィックスの変換に使用されます。

torchvision の構成は次のとおりです:
torchvision.datasets: データをロードするためのいくつかの関数と一般的に使用されるデータ セット インターフェイス;
torchvision.models:  AlexNet、VGG、ResNet などの一般的に使用されるモデル構造 (事前トレーニングされたモデルを含む) が含まれています。
torchvision.transforms: よく使用される画像の変換 (トリミング、回転など)。

torchvision.utils: その他の便利なメソッド。

いくつかの一般的な操作をリストします

class torchvision.transforms .CenterCrop(size) 指定された PIL.Image をセンターカットして指定されたサイズを取得します。サイズはタプル (target_height, target_width) にすることができます。size を整数にすることもできます。この場合、カットされたイメージの形状は正方形になります。

 class torchvision.transforms .RandomCrop(size, padding=0) 切断中心点の位置はランダムに選択されますsize にはタプルまたは整数を指定できます。

 class torchvision.transforms.Randomhorizo  ​​ntalFlip指定された PIL.Image を確率0.5でランダムに水平方向に反転します。つまり、反転する確率が半分、反転しない確率が半分です。 

class torchvision.transforms.RandomSizedCrop (size, interpolation=2) は、 まず指定された PIL.Image をランダムに切り取り、次に指定されたサイズにサイズ変更します。 

class torchvision.transforms.Padding (padding, fill=0) は、 指定された PIL.Image のすべてのエッジを指定されたパッド値で塗りつぶします。

パディング: 埋めるピクセル数 塗りつぶし: どの値で埋めるか

例1。

from torchvision import transforms
from PIL import Image

padding_img = transforms.Pad(padding=10, fill=0)
img = Image.open('test.jpg')
 
print(type(img))
print(img.size)
 
padded_img=padding(img)
print(type(padded_img))
print(padded_img.size)

Compose() クラスの主な機能は、複数の画像変換操作を連結し、変換リスト内の変換操作を横断することです。Compose のパラメータは実際にはlistであり、このリスト内の要素が実行する変換操作です。

特定の例と、単一ステップのコード Jupyter 手続き化が示されています (各ステップで処理される画像も示されています)。

transforms.Compose([transforms.RandomResizedCrop(224),
 		    transforms.RandomHorizontalFlip(),
                    transforms.ToTensor(),
                    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])

transforms.RandomResizeCrop(224) は、指定された画像をさまざまなサイズとアスペクト比にランダムにトリミングし、次にトリミングされた画像を指定されたサイズにスケーリングします (つまり、最初にランダムに収集し、次にトリミングされた画像を同じサイズにスケーリングします)。 scale=(0.08, 1.0) この操作の意味は、たとえそれがオブジェクトの一部でしかないとしても、それがこのタイプのオブジェクトであると考えるということです。

transforms.Randomhorizo​​ntalFlip() は、 指定された PIL の画像を指定された確率 (デフォルトは 0.5) で水平方向にランダムに回転します。

transforms.ToTensor() は、指定された画像を Tensor に変換します

transforms.Normalize() 正規化処理

from PIL import Image
# 操作1
img = Image.open("./demo.jpg")
print("原图大小:",img.size)
data1 = transforms.RandomResizedCrop(224)(img)
print("随机裁剪后图片大小:",data1.size)
data2 = transforms.RandomResizedCrop(224)(img)
data1 = transforms.RandomResizedCrop(224)(img)

plt.subplot(2,2,1),plt.imshow(img),plt.title("原图")
plt.subplot(2,2,2),plt.imshow(data1),plt.title("转换后的图1")
plt.subplot(2,2,3),plt.imshow(data2),plt.title("转换后的图2")
plt.subplot(2,2,4),plt.imshow(data3),plt.title("转换后的图3")
plt.show()
# 操作2
img = Image.open("./demo.jpg")
img1 = transforms.RandomHorizontalFlip()(img)
img2 = transforms.RandomHorizontalFlip()(img)
img3 = transforms.RandomHorizontalFlip()(img)

plt.subplot(2,2,1),plt.imshow(img),plt.title("原图")
plt.subplot(2,2,2), plt.imshow(img1), plt.title("变换后的图1")
plt.subplot(2,2,3), plt.imshow(img2), plt.title("变换后的图2")
plt.subplot(2,2,4), plt.imshow(img3), plt.title("变换后的图3")
plt.show()
# 操作3、4
img = Image.open("./demo.jpg")
img = transforms.ToTensor()(img)
img = transforms.Normalize(mean=[0.5,0.5,0.5], std=[0.5,0.5,0.5])(img)
print(img)

plt.subplot(m,n,p) #m 行 n 列を生成するには、これが p 番目の図になります plt.subplot('row','column','number')

c

c

c

c

c

c

セグメンテーションについてのある程度の理解: 深層学習に基づいて医用画像処理を行う場合、主な作業はデータ前処理部分に集中します。つまり、医用画像の形式と特性を深く理解し、ターゲットの特徴を強調するための適切な画像前処理操作を設計し、変換することです。元の形式 データは、深層学習モデルへの入力に適した形式に処理されますこの 3 点は、自然画像処理から医用画像処理へ移行する過程で最も難しい 3 点でもあります。モデルの違いは、深層学習に基づく医療画像のセグメンテーションには大きな影響を与えません。言い換えれば、自然な画像セグメンテーションに優れたネットワーク モデルを医療画像に直接転送することができます (逆も同様)。その効果はトレーニング後にのみ確認できます (非常に有名な FCN、SegNet、U-Net など)。 . 、特に U-Net はもともと MICCAI に掲載されていました)。もちろん、トレーニング モデルを効率的に設計したい場合は、データの特性(セグメント化するオブジェクトのサイズ範囲、2D か 3D など) に基づいてネットワークを設計する必要がありますAutoDL テクノロジーは 2019 年に優れた成果を上げており(Neural Architecture Search: A Survey )、将来的にはネットワーク モデルの設計を実現するのが困難になると予測されています。

医用画像データセット:

チャレンジ - グランド チャレンジ (grand-challenge.org)

はじめに - グランド チャレンジ (grand-challenge.org)

【コード】

読むには:

Pytorch での部分重みの柔軟なロード

pytorch でのカスタム データセットからのデータの読み取り: 独自のデータセットをトレーニング セットと検証セットに分割し、カスタム データセットを通じてデータをバッチに読み取り、パッケージ化する方法について説明します。

最初の PyTorch ニューラル ネットワークをステップバイステップで実行する

手をつないで

すぐに始めましょう

カスタム データセット

pytorch を使用して独自の画像データセットをトレーニングする方法

PyTorch の Dataset と DataLoader を使用して独自のデータセットを構築する

CSV データ ファイルの読み取り - カプセル化後 - データのバッチ処理

個人記録:

分割Pipeline

おすすめ

転載: blog.csdn.net/sinat_40759442/article/details/128091723