Image_preprocessing
23008 ワード
長さaixsに基づいて、残りの部分は0(黒)に塗りつぶされますが、中心は変わりません。
os.chdir('/home/mskang/hyeokjong/cancer/2018/task1/ISIC2018_Task1-2_Training_Input')
train_inputs_list = os.listdir('/home/mskang/hyeokjong/cancer/2018/task1/ISIC2018_Task1-2_Training_Input')
train_inputs_list.remove('ATTRIBUTION.txt')
train_inputs_list.remove('LICENSE.txt')
# len(train_inputs_list)
for i in tqdm(range(len(train_inputs_list))):
os.chdir('/home/mskang/hyeokjong/cancer/2018/task1/ISIC2018_Task1-2_Training_Input')
img = Image.open(train_inputs_list[i])
imgArray = np.array(img)
a,b,_ = imgArray.shape
if a >= b:
z = np.zeros(( a, (a-b)//2 , 3))
con = np.concatenate( [z,imgArray,z], axis=1)
else:
z = np.zeros(((b-a)//2 , b , 3))
con = np.concatenate( [z,imgArray,z], axis=0)
con = con.astype('uint8')
padded_image = Image.fromarray(con)
os.chdir('/home/mskang/hyeokjong/cancer/2018/task1/train_input_pad')
padded_image.save('padded_' + train_inputs_list[i] + '.jpg')
Segmentationでは、次のようにサイズを変更すると、各ピクセルが「int」ではなく「地面真実」(target)から「浮動小数点」に変わります。
私はただ考えているだけで、たぶん調整すればいいと思っています.私は間違っています.
class custom_dataset(Dataset):
def __init__(self, inputs_dir , targets_dir, transform = None):
self.inputs_dir = inputs_dir
self.inputs_list = os.listdir(inputs_dir)
self.targets_dir = targets_dir
self.targets_list = os.listdir(targets_dir)
self.transform = transform
def __len__(self):
return len(self.inputs_list)
def __getitem__(self,idx):
os.chdir(self.inputs_dir)
input_image = Image.open(self.inputs_list[idx])
os.chdir(self.targets_dir)
target_image = Image.open(self.targets_list[idx])
if self.transform:
input_image_tensor = self.transform(input_image)
target_image_tensor = self.transform(target_image)
return ( input_image_tensor ,target_image_tensor)
path_train_inputs = '/home/mskang/hyeokjong/cancer/2018/task1/train_input_pad'
path_train_targets = '/home/mskang/hyeokjong/cancer/2018/task1/train_targets_pad'
train_dataset = custom_dataset(path_train_inputs, path_train_targets )
train_transformation = transforms.Compose([transforms.Resize(4),
transforms.RandomHorizontalFlip(),
transforms.ToTensor()])
train_dataset.transform = train_transformation
batch_size = 2
train_dl = DataLoader(train_dataset, batch_size, shuffle=True,
num_workers=4, pin_memory=True)
for i,j in train_dl:
inputs,targets = i,j
break
inputs.shape
---------------------------
torch.Size([2, 3, 4, 4])
targets.shape
---------------------------
torch.Size([2, 1, 4, 4])
targets
---------------------------
tensor([[[[0.0000, 0.0157, 0.0196, 0.0000],
[0.0314, 0.4510, 0.4784, 0.0157],
[0.0471, 0.4314, 0.4000, 0.0196],
[0.0000, 0.0000, 0.0000, 0.0000]]],
[[[0.0000, 0.0000, 0.0000, 0.0000],
[0.0000, 0.0314, 0.0588, 0.0000],
[0.0000, 0.0471, 0.0824, 0.0000],
[0.0000, 0.0000, 0.0000, 0.0000]]]])
Resizeの方法もいろいろありますが、上記のようにResizeを実行するとfloatがスムーズに計算されて生成されます.上のコードを見てください.
Custom_dataset
では、変換は対応可能であり、直接データセット上で変換され、.transform
に変換されるが、速度差はない.(考えてみれば、二人はまるで同じようです)実験が進む
すなわち、targetは
transforms.Resize()
を使用できない.では、一定の解決策がありますが、上記のコードのように
.transform
でやるとinputとtargetは同じ変換を採用するので、当初はdataset class
に異なる変換を適用すればいいと思います.torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None)
~mode
調整2つの解決策があります
1つ目は、本明細書で説明するresizeです.
2つ目はダイレクトエンコーディングトレーニング(どうせ反復器)またはdataloaderの作成です.( custom collate_fn )
https://discuss.pytorch.org/t/how-to-create-a-dataloader-with-variable-size-input/8278/2
しかしなぜcustom collate fnのキャラクターは0を加えてサイズを調整するのかもちろん最初の計算は速いです.
追加のcustom collate fnが極端に異なるサイズの画像であることを考慮する必要がある場合、同じモデルを使用するのはよくないので、reizeは正しい.
割合を維持する問題があるだけです.
ほとんどのコードはclass部分で変換されます.これが原因です.
解決策は以下の通り.
1.
torch.nn.functional.interpolate
、torch.nn.Upsample
が2つのpytorchに内蔵されています.2.https://pytorch.org/vision/stable/transforms.htmlを見て
torchvision.transforms.Resize(size, interpolation=<InterpolationMode.BILINEAR: 'bilinear'>, max_size=None, antialias=None)
でモードを指定できます.3.custom transformation classを作成すればよい.
つまり、変換.Component([])で要素を入れる必要があるのはクラスであることがわかります.
2番が一番気持ちがいい
lossと同様にfunctionとclassの2つのクラスがあり、classが継承されるとカスタマイズしやすい.
この部分はよくできているような気がします
https://stackoverflow.com/questions/23853632/which-kind-of-interpolation-best-for-resizing-image
どんな補間がいいですか.
ㅄㅄㅄㅄㅄㅄㅄㅄㅄㅄ
Reference
この問題について(Image_preprocessing), 我々は、より多くの情報をここで見つけました https://velog.io/@jj770206/Image-pretreatmentテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol