pix2pixHD コード --- データセットの処理

トレーニング ファイル内: dataset はデータローダーのメソッドであり、データローダーは CreateDataLoader と同じです。
ここに画像の説明を挿入
そこで、CreateDataLoader にジャンプします
ここに画像の説明を挿入
。CreateDataLoader で返される dataset_loader は CustomDatasetDataLoader からのものです。すべてが初期化を呼び出します。CustomDatasetDataLoader はクラスであるため、initialize はクラス内のメソッドを呼び出します。
CustomDatasetDataLoader に移動します。
ここに画像の説明を挿入
まず name メソッドを定義し、それを呼び出すと、「CustomDatasetDataLoader」を返します。次に、initialize が定義されます。
まず、データセット dataset が定義されます。dataset
ここに画像の説明を挿入

は AlignedDataset から取得され、initialize メソッドが呼び出されます。AlignedDataset は
ここに画像の説明を挿入
BaseDataset を継承し、BaseDataset は抽象クラスです。メソッドは AlignedDataset によって書き換える必要があります。AlignedDataset
ここに画像の説明を挿入
では、ロードします。データセット、len、getitem、ini の 3 つの要素です。
ここに画像の説明を挿入
まず、ラベルのチャンネルに応じて入力がラベルであるかどうかを判断します。ラベルでない場合は、self.opt.label_nc == 0、dir_A='_A'、それ以外の場合は dir_A='_label'。次に、dir_A のパスを取得します。
ここに画像の説明を挿入
make_dataset関数に従ってtrain_labelの画像をリストに入れます:
ここに画像の説明を挿入
train_img、train_instanceは同じです。
ここに画像の説明を挿入
次に、getitem にランダムにインデックスを入力し、リスト A に移動してインデックスに従って値を取得し、抽出されたパスを画像経由で開きます。開いた後は画像形式になります。次に、それを get_params 関数に入力します。
ここに画像の説明を挿入
まず画像のサイズを取得し、次にトリミング方法を決定します。デフォルトはトリミングなし、1024x512 にズームします (説明がありますので読んでください): その場合、元の画像は 2048x1024, (x,y)
ここに画像の説明を挿入
=rand((2048- 512)、(1024- 512))、辞書を返します。「flip」は True または False に対応します。
ここに画像の説明を挿入
ラベル チャネルに従ってトランスフォーマ変換を実行します。
ここに画像の説明を挿入

def get_transform(opt, params, method=Image.BICUBIC, normalize=True):
    transform_list = []
    if 'resize' in opt.resize_or_crop:
        osize = [opt.loadSize, opt.loadSize]
        transform_list.append(transforms.Scale(osize, method))   
    elif 'scale_width' in opt.resize_or_crop:
        transform_list.append(transforms.Lambda(lambda img: __scale_width(img, opt.loadSize, method)))
        
    if 'crop' in opt.resize_or_crop:
        transform_list.append(transforms.Lambda(lambda img: __crop(img, params['crop_pos'], opt.fineSize)))

    if opt.resize_or_crop == 'none':
        base = float(2 ** opt.n_downsample_global)
        if opt.netG == 'local':
            base *= (2 ** opt.n_local_enhancers)
        transform_list.append(transforms.Lambda(lambda img: __make_power_2(img, base, method)))

    if opt.isTrain and not opt.no_flip:
        transform_list.append(transforms.Lambda(lambda img: __flip(img, params['flip'])))

    transform_list += [transforms.ToTensor()]

    if normalize:
        transform_list += [transforms.Normalize((0.5, 0.5, 0.5),
                                                (0.5, 0.5, 0.5))]
    return transforms.Compose(transform_list)

まず空のリストを定義し、条件に従って追加します。
まず __scale_width オペレーションを追加します。transforms.Lambda は __scale_width を
ここに画像の説明を挿入
ここに画像の説明を挿入
3 つのパラメータ、画像サイズ、target_w=1024、method=bicubic にカプセル化します。
まずow=2048、oh=1024、w=1024、h=(1024*1024/2048)=512、次にimgを(1024,512)に補間します。残りの変換は必要に応じて追加できます。
最後に、テンソルに変換して正規化し、compose で文字列化します。
ここに画像の説明を挿入
一連の変換の後、ラベルは 255 倍され、ラベルはグレースケール イメージに変換されます。
画像に対しても同じことを行いますが、255 を掛けません。インスタンス イメージを使用する場合は、ラベルに対しても同じことを行います。
最後に、辞書を使用してそれを保存します。CreateDataset が
ここに画像の説明を挿入
終了し、出力データセットがデータローダーに渡されます。データローダーに入った後の値は、CustomDatasetDataLoader.load_data を呼び出すことで取得できます。
ここに画像の説明を挿入
ようやくトレーニングに戻ります:
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_43733107/article/details/130849970
おすすめ