-
MMagic (Multimodal?Advanced,?Generative, and?Intelligent?Creation) 是一個(gè)供專業(yè)人工智能研究人員和機(jī)器學(xué)習(xí)工程師去處理、編輯和生成圖像與視頻的開源 AIGC 工具箱。MMagic 支持各種基礎(chǔ)生成模型,包括:
-
無條件生成對抗網(wǎng)絡(luò) (GANs),條件生成對抗網(wǎng)絡(luò) (GANs)
-
內(nèi)部學(xué)習(xí)
-
擴(kuò)散模型…
-
-
自從 MMEditing 誕生以來,它一直是許多圖像超分、編輯和生成任務(wù)的首選算法庫。經(jīng)過 OpenMMLab 2.0 的迭代更新以及與 MMGeneration 的代碼合并,MMEditing 已經(jīng)成為了一個(gè)支持基于 GAN 和傳統(tǒng) CNN 的底層視覺算法的強(qiáng)大工具。MMEditing 正式更名為?MMagic(Multimodal?Advanced,?Generative, and?Intelligent Creation)。
-
針對 Diffusion Model,我們提供了以下“魔法”:
-
支持基于 Stable Diffusion 與 Disco Diffusion 的圖像生成;
-
支持 Dreambooth 以及 DreamBooth LoRA 等 Finetune 方法;
-
支持 ControlNet 進(jìn)行可控性的文本到圖像生成;
-
支持 xFormers 加速;
-
支持基于 MultiFrame Render 的視頻生成;
-
支持通過 Wrapper 調(diào)用 Diffusers 的基礎(chǔ)模型以及采樣策略
-
-
MMagic可以實(shí)現(xiàn)的功能有圖文生成;圖像翻譯;3D 生成;圖像超分辨率;視頻超分辨率;視頻插幀;圖像補(bǔ)全;圖像摳圖;圖像修復(fù);圖像上色;圖像生成等。
-
配置文件按照下面的風(fēng)格命名
-
{model}_[model setting]_{backbone}_[refiner]_[norm setting]_[misc]_[gpu x batch_per_gpu]_{schedule}_{dataset}
-
-
{model}
: 模型種類,例如?srcnn
,?dim
?等等。 -
[model?setting]
: 特定設(shè)置一些模型,例如,輸入圖像?resolution
?, 訓(xùn)練?stage?name
。 -
{backbone}
: 主干網(wǎng)絡(luò)種類,例如?r50
?(ResNet-50)、x101
?(ResNeXt-101)。 -
{refiner}
: 精煉器種類,例如?pln
?簡單精煉器模型 -
[norm_setting]
: 指定歸一化設(shè)置,默認(rèn)為批歸一化,其他歸一化可以設(shè)為:?bn
(批歸一化),?gn
?(組歸一化),?syncbn
?(同步批歸一化)。 -
[misc]
: 模型中各式各樣的設(shè)置/插件,例如?dconv
,?gcb
,?attention
,?mstrain
。 -
[gpu?x?batch_per_gpu]
: GPU數(shù)目 和每個(gè) GPU 的樣本數(shù), 默認(rèn)為?8x2
?。 -
{schedule}
: 訓(xùn)練策略,如?20k
,?100k
?等,意思是?20k
?或?100k
?迭代輪數(shù)。 -
{dataset}
: 數(shù)據(jù)集,如?places
(圖像補(bǔ)全)、comp1k
(摳圖)、div2k
(圖像恢復(fù))和?paired
(圖像生成)。
-
-
-
配置文件 - 生成。對完整的配置和生成系統(tǒng)中的模塊有一個(gè)基本的了解,對 pix2pix 的配置做如下簡要說明。
-
# 模型設(shè)置 model = dict( type='Pix2Pix', # 合成器名稱 generator=dict( type='UnetGenerator', # 生成器名稱 in_channels=3, # 生成器的輸入通道數(shù) out_channels=3, # 生成器的輸出通道數(shù) num_down=8, # # 生成器中下采樣的次數(shù) base_channels=64, # 生成器最后卷積層的通道數(shù) norm_cfg=dict(type='BN'), # 歸一化層的配置 use_dropout=True, # 是否在生成器中使用 dropout init_cfg=dict(type='normal', gain=0.02)), # 初始化配置 discriminator=dict( type='PatchDiscriminator', # 判別器的名稱 in_channels=6, # 判別器的輸入通道數(shù) base_channels=64, # 判別器第一卷積層的通道數(shù) num_conv=3, # 判別器中堆疊的中間卷積層(不包括輸入和輸出卷積層)的數(shù)量 norm_cfg=dict(type='BN'), # 歸一化層的配置 init_cfg=dict(type='normal', gain=0.02)), # 初始化配置 gan_loss=dict( type='GANLoss', # GAN 損失的名稱 gan_type='vanilla', # GAN 損失的類型 real_label_val=1.0, # GAN 損失函數(shù)中真實(shí)標(biāo)簽的值 fake_label_val=0.0, # GAN 損失函數(shù)中偽造標(biāo)簽的值 loss_weight=1.0), # GAN 損失函數(shù)的權(quán)重 pixel_loss=dict(type='L1Loss', loss_weight=100.0, reduction='mean')) # 模型訓(xùn)練和測試設(shè)置 train_cfg = dict( direction='b2a') # pix2pix 的圖像到圖像的轉(zhuǎn)換方向 (模型訓(xùn)練的方向,和測試方向一致)。模型默認(rèn): a2b test_cfg = dict( direction='b2a', # pix2pix 的圖像到圖像的轉(zhuǎn)換方向 (模型測試的方向,和訓(xùn)練方向一致)。模型默認(rèn): a2b show_input=True) # 保存 pix2pix 的測試圖像時(shí)是否顯示輸入的真實(shí)圖像 # 數(shù)據(jù)設(shè)置 train_dataset_type = 'GenerationPairedDataset' # 訓(xùn)練數(shù)據(jù)集的類型 val_dataset_type = 'GenerationPairedDataset' # 驗(yàn)證/測試數(shù)據(jù)集類型 img_norm_cfg = dict(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) # 輸入圖像歸一化配置 train_pipeline = [ dict( type='LoadPairedImageFromFile', # 從文件路徑加載圖像對 io_backend='disk', # 存儲圖像的 IO 后端 key='pair', # 查找對應(yīng)路徑的關(guān)鍵詞 flag='color'), # 加載圖像標(biāo)志 dict( type='Resize', # 圖像大小調(diào)整 keys=['img_a', 'img_b'], # 要調(diào)整大小的圖像的關(guān)鍵詞 scale=(286, 286), # 調(diào)整圖像大小的比例 interpolation='bicubic'), # 調(diào)整圖像大小時(shí)用于插值的算法 dict( type='FixedCrop', # 固定裁剪,在特定位置將配對圖像裁剪為特定大小以訓(xùn)練 pix2pix keys=['img_a', 'img_b'], # 要裁剪的圖像的關(guān)鍵詞 crop_size=(256, 256)), # 裁剪圖像的大小 dict( type='Flip', # 翻轉(zhuǎn)圖像 keys=['img_a', 'img_b'], # 要翻轉(zhuǎn)的圖像的關(guān)鍵詞 direction='horizontal'), # 水平或垂直翻轉(zhuǎn)圖像 dict( type='RescaleToZeroOne', # 將圖像從 [0, 255] 縮放到 [0, 1] keys=['img_a', 'img_b']), # 要重新縮放的圖像的關(guān)鍵詞 dict( type='Normalize', # 圖像歸一化 keys=['img_a', 'img_b'], # 要?dú)w一化的圖像的關(guān)鍵詞 to_rgb=True, # 是否將圖像通道從 BGR 轉(zhuǎn)換為 RGB **img_norm_cfg), # 圖像歸一化配置(`img_norm_cfg` 的定義見上文) dict( type='ToTensor', # 將圖像轉(zhuǎn)化為 Tensor keys=['img_a', 'img_b']), # 要從圖像轉(zhuǎn)換為 Tensor 的圖像的關(guān)鍵詞 dict( type='Collect', # 決定數(shù)據(jù)中哪些鍵應(yīng)該傳遞給合成器 keys=['img_a', 'img_b'], # 圖像的關(guān)鍵詞 meta_keys=['img_a_path', 'img_b_path']) # 圖片的元關(guān)鍵詞 ] test_pipeline = [ dict( type='LoadPairedImageFromFile', # 從文件路徑加載圖像對 io_backend='disk', # 存儲圖像的 IO 后端 key='pair', # 查找對應(yīng)路徑的關(guān)鍵詞 flag='color'), # 加載圖像標(biāo)志 dict( type='Resize', # 圖像大小調(diào)整 keys=['img_a', 'img_b'], # 要調(diào)整大小的圖像的關(guān)鍵詞 scale=(256, 256), # 調(diào)整圖像大小的比例 interpolation='bicubic'), # 調(diào)整圖像大小時(shí)用于插值的算法 dict( type='RescaleToZeroOne', # 將圖像從 [0, 255] 縮放到 [0, 1] keys=['img_a', 'img_b']), # 要重新縮放的圖像的關(guān)鍵詞 dict( type='Normalize', # 圖像歸一化 keys=['img_a', 'img_b'], # 要?dú)w一化的圖像的關(guān)鍵詞 to_rgb=True, # 是否將圖像通道從 BGR 轉(zhuǎn)換為 RGB **img_norm_cfg), # 圖像歸一化配置(`img_norm_cfg` 的定義見上文) dict( type='ToTensor', # 將圖像轉(zhuǎn)化為 Tensor keys=['img_a', 'img_b']), # 要從圖像轉(zhuǎn)換為 Tensor 的圖像的關(guān)鍵詞 dict( type='Collect', # 決定數(shù)據(jù)中哪些鍵應(yīng)該傳遞給合成器 keys=['img_a', 'img_b'], # 圖像的關(guān)鍵詞 meta_keys=['img_a_path', 'img_b_path']) # 圖片的元關(guān)鍵詞 ] data_root = 'data/pix2pix/facades' # 數(shù)據(jù)的根路徑 data = dict( samples_per_gpu=1, # 單個(gè) GPU 的批量大小 workers_per_gpu=4, # 為每個(gè) GPU 預(yù)取數(shù)據(jù)的 Worker 數(shù) drop_last=True, # 是否丟棄訓(xùn)練中的最后一批數(shù)據(jù) val_samples_per_gpu=1, # 驗(yàn)證中單個(gè) GPU 的批量大小 val_workers_per_gpu=0, # 在驗(yàn)證中為每個(gè) GPU 預(yù)取數(shù)據(jù)的 Worker 數(shù) train=dict( # 訓(xùn)練數(shù)據(jù)集配置 type=train_dataset_type, dataroot=data_root, pipeline=train_pipeline, test_mode=False), val=dict( # 驗(yàn)證數(shù)據(jù)集配置 type=val_dataset_type, dataroot=data_root, pipeline=test_pipeline, test_mode=True), test=dict( # 測試數(shù)據(jù)集配置 type=val_dataset_type, dataroot=data_root, pipeline=test_pipeline, test_mode=True)) # 優(yōu)化器 optimizers = dict( # 用于構(gòu)建優(yōu)化器的配置,支持 PyTorch 中所有優(yōu)化器,且參數(shù)與 PyTorch 中對應(yīng)優(yōu)化器相同 generator=dict(type='Adam', lr=2e-4, betas=(0.5, 0.999)), discriminator=dict(type='Adam', lr=2e-4, betas=(0.5, 0.999))) # 學(xué)習(xí)策略 lr_config = dict(policy='Fixed', by_epoch=False) # 用于注冊 LrUpdater 鉤子的學(xué)習(xí)率調(diào)度程序配置 # 檢查點(diǎn)保存 checkpoint_config = dict(interval=4000, save_optimizer=True, by_epoch=False) # 配置檢查點(diǎn)鉤子,實(shí)現(xiàn)參考 https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/hooks/checkpoint.py evaluation = dict( # 構(gòu)建驗(yàn)證鉤子的配置 interval=4000, # 驗(yàn)證區(qū)間 save_image=True) # 是否保存圖片 log_config = dict( # 配置注冊記錄器鉤子 interval=100, # 打印日志的時(shí)間間隔 hooks=[ dict(type='TextLoggerHook', by_epoch=False), # 用于記錄訓(xùn)練過程的記錄器 # dict(type='TensorboardLoggerHook') # 還支持 Tensorboard 記錄器 ]) visual_config = None # 構(gòu)建可視化鉤子的配置 # 運(yùn)行設(shè)置 total_iters = 80000 # 訓(xùn)練模型的總迭代次數(shù) cudnn_benchmark = True # 設(shè)置 cudnn_benchmark dist_params = dict(backend='nccl') # 設(shè)置分布式訓(xùn)練的參數(shù),端口也可以設(shè)置 log_level = 'INFO' # 日志級別 load_from = None # 從給定路徑加載模型作為預(yù)訓(xùn)練模型。 這不會恢復(fù)訓(xùn)練 resume_from = None # 從給定路徑恢復(fù)檢查點(diǎn),當(dāng)檢查點(diǎn)被保存時(shí),訓(xùn)練將從該 epoch 恢復(fù) workflow = [('train', 1)] # runner 的工作流程。 [('train', 1)] 表示只有一個(gè)工作流程,名為 'train' 的工作流程執(zhí)行一次。 訓(xùn)練當(dāng)前生成模型時(shí)保持不變 exp_name = 'pix2pix_facades' # 實(shí)驗(yàn)名稱 work_dir = f'./work_dirs/{exp_name}' # 保存當(dāng)前實(shí)驗(yàn)的模型檢查點(diǎn)和日志的目錄
-
-
配置文件 - 補(bǔ)全。對完整的配置和修復(fù)系統(tǒng)中的模塊有一個(gè)基本的了解,對 Global&Local 的配置作如下簡要說明。
-
model = dict( type='GLInpaintor', # 補(bǔ)全器的名稱 encdec=dict( type='GLEncoderDecoder', # 編碼器-解碼器的名稱 encoder=dict(type='GLEncoder', norm_cfg=dict(type='SyncBN')), # 編碼器的配置 decoder=dict(type='GLDecoder', norm_cfg=dict(type='SyncBN')), # 解碼器的配置 dilation_neck=dict( type='GLDilationNeck', norm_cfg=dict(type='SyncBN'))), # 擴(kuò)頸的配置 disc=dict( type='GLDiscs', # 判別器的名稱 global_disc_cfg=dict( in_channels=3, # 判別器的輸入通道數(shù) max_channels=512, # 判別器中的最大通道數(shù) fc_in_channels=512 * 4 * 4, # 最后一個(gè)全連接層的輸入通道 fc_out_channels=1024, # 最后一個(gè)全連接層的輸出通道 num_convs=6, # 判別器中使用的卷積數(shù)量 norm_cfg=dict(type='SyncBN') # 歸一化層的配置 ), local_disc_cfg=dict( in_channels=3, # 判別器的輸入通道數(shù) max_channels=512, # 判別器中的最大通道數(shù) fc_in_channels=512 * 4 * 4, # 最后一個(gè)全連接層的輸入通道 fc_out_channels=1024, # 最后一個(gè)全連接層的輸出通道 num_convs=5, # 判別器中使用的卷積數(shù)量 norm_cfg=dict(type='SyncBN') # 歸一化層的配置 ), ), loss_gan=dict( type='GANLoss', # GAN 損失的名稱 gan_type='vanilla', # GAN 損失的類型 loss_weight=0.001 # GAN 損失函數(shù)的權(quán)重 ), loss_l1_hole=dict( type='L1Loss', # L1 損失的類型 loss_weight=1.0 # L1 損失函數(shù)的權(quán)重 ), pretrained=None) # 預(yù)訓(xùn)練權(quán)重的路徑 train_cfg = dict( disc_step=1, # 訓(xùn)練生成器之前訓(xùn)練判別器的迭代次數(shù) iter_tc=90000, # 預(yù)熱生成器的迭代次數(shù) iter_td=100000, # 預(yù)熱判別器的迭代次數(shù) start_iter=0, # 開始的迭代 local_size=(128, 128)) # 圖像塊的大小 test_cfg = dict(metrics=['l1']) # 測試的配置 dataset_type = 'ImgInpaintingDataset' # 數(shù)據(jù)集類型 input_shape = (256, 256) # 輸入圖像的形狀 train_pipeline = [ dict(type='LoadImageFromFile', key='gt_img'), # 加載圖片的配置 dict( type='LoadMask', # 加載掩碼 mask_mode='bbox', # 掩碼的類型 mask_config=dict( max_bbox_shape=(128, 128), # 檢測框的形狀 max_bbox_delta=40, # 檢測框高寬的變化 min_margin=20, # 檢測框到圖片邊界的最小距離 img_shape=input_shape)), # 輸入圖像的形狀 dict( type='Crop', # 裁剪 keys=['gt_img'], # 要裁剪的圖像的關(guān)鍵詞 crop_size=(384, 384), # 裁剪圖像塊的大小 random_crop=True, # 是否使用隨機(jī)裁剪 ), dict( type='Resize', # 圖像大小調(diào)整 keys=['gt_img'], # 要調(diào)整大小的圖像的關(guān)鍵詞 scale=input_shape, # 調(diào)整圖像大小的比例 keep_ratio=False, # 調(diào)整大小時(shí)是否保持比例 ), dict( type='Normalize', # 圖像歸一化 keys=['gt_img'], # 要?dú)w一化的圖像的關(guān)鍵詞 mean=[127.5] * 3, # 歸一化中使用的均值 std=[127.5] * 3, # 歸一化中使用的標(biāo)準(zhǔn)差 to_rgb=False), # 是否將圖像通道從 BGR 轉(zhuǎn)換為 RGB dict(type='GetMaskedImage'), # 獲取被掩蓋的圖像 dict( type='Collect', # 決定數(shù)據(jù)中哪些鍵應(yīng)該傳遞給合成器 keys=['gt_img', 'masked_img', 'mask', 'mask_bbox'], # 要收集的數(shù)據(jù)的關(guān)鍵詞 meta_keys=['gt_img_path']), # 要收集的數(shù)據(jù)的元關(guān)鍵詞 dict(type='ToTensor', keys=['gt_img', 'masked_img', 'mask']), # 將圖像轉(zhuǎn)化為 Tensor dict(type='ToTensor', keys=['mask_bbox']) # 轉(zhuǎn)化為 Tensor ] test_pipeline = train_pipeline # 構(gòu)建測試/驗(yàn)證流程 data_root = 'data/places365' # 數(shù)據(jù)根目錄 data = dict( samples_per_gpu=12, # 單個(gè) GPU 的批量大小 workers_per_gpu=8, # 為每個(gè) GPU 預(yù)取數(shù)據(jù)的 Worker 數(shù) val_samples_per_gpu=1, # 驗(yàn)證中單個(gè) GPU 的批量大小 val_workers_per_gpu=8, # 在驗(yàn)證中為每個(gè) GPU 預(yù)取數(shù)據(jù)的 Worker 數(shù) drop_last=True, # 是否丟棄訓(xùn)練中的最后一批數(shù)據(jù) train=dict( # 訓(xùn)練數(shù)據(jù)集配置 type=dataset_type, ann_file=f'{data_root}/train_places_img_list_total.txt', data_prefix=data_root, pipeline=train_pipeline, test_mode=False), val=dict( # 驗(yàn)證數(shù)據(jù)集配置 type=dataset_type, ann_file=f'{data_root}/val_places_img_list.txt', data_prefix=data_root, pipeline=test_pipeline, test_mode=True)) optimizers = dict( # 用于構(gòu)建優(yōu)化器的配置,支持 PyTorch 中所有優(yōu)化器,且參數(shù)與 PyTorch 中對應(yīng)優(yōu)化器相同 generator=dict(type='Adam', lr=0.0004), disc=dict(type='Adam', lr=0.0004)) lr_config = dict(policy='Fixed', by_epoch=False) # 用于注冊 LrUpdater 鉤子的學(xué)習(xí)率調(diào)度程序配置 checkpoint_config = dict(by_epoch=False, interval=50000) # 配置檢查點(diǎn)鉤子,實(shí)現(xiàn)參考 https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/hooks/checkpoint.py log_config = dict( # 配置注冊記錄器鉤子 interval=100, # 打印日志的時(shí)間間隔 hooks=[ dict(type='TextLoggerHook', by_epoch=False), # dict(type='TensorboardLoggerHook'), # 支持 Tensorboard 記錄器 # dict(type='PaviLoggerHook', init_kwargs=dict(project='mmagic')) ]) # 用于記錄訓(xùn)練過程的記錄器 visual_config = dict( # 構(gòu)建可視化鉤子的配置 type='VisualizationHook', output_dir='visual', interval=1000, res_name_list=[ 'gt_img', 'masked_img', 'fake_res', 'fake_img', 'fake_gt_local' ], ) # 用于可視化訓(xùn)練過程的記錄器。 evaluation = dict(interval=50000) # 構(gòu)建驗(yàn)證鉤子的配置 total_iters = 500002 dist_params = dict(backend='nccl') # 設(shè)置分布式訓(xùn)練的參數(shù),端口也可以設(shè)置 log_level = 'INFO' # 日志級別 work_dir = None # 保存當(dāng)前實(shí)驗(yàn)的模型檢查點(diǎn)和日志的目錄 load_from = None # 從給定路徑加載模型作為預(yù)訓(xùn)練模型。 這不會恢復(fù)訓(xùn)練 resume_from = None # 從給定路徑恢復(fù)檢查點(diǎn),當(dāng)檢查點(diǎn)被保存時(shí),訓(xùn)練將從該 epoch 恢復(fù) workflow = [('train', 10000)] # runner 的工作流程。 [('train', 1)] 表示只有一個(gè)工作流程,名為 'train' 的工作流程執(zhí)行一次。 訓(xùn)練當(dāng)前生成模型時(shí)保持不變 exp_name = 'gl_places' # 實(shí)驗(yàn)名稱 find_unused_parameters = False # 是否在分布式訓(xùn)練中查找未使用的參數(shù)
-
-
配置文件 - 摳圖。原始 DIM 模型的配置做一個(gè)簡短的評論,如下所示。
-
# 模型配置 model = dict( type='DIM', # 模型的名稱(我們稱之為摳圖器) backbone=dict( # 主干網(wǎng)絡(luò)的配置 type='SimpleEncoderDecoder', # 主干網(wǎng)絡(luò)的類型 encoder=dict( # 編碼器的配置 type='VGG16'), # 編碼器的類型 decoder=dict( # 解碼器的配置 type='PlainDecoder')), # 解碼器的類型 pretrained='./weights/vgg_state_dict.pth', # 編碼器的預(yù)訓(xùn)練權(quán)重 loss_alpha=dict( # alpha 損失的配置 type='CharbonnierLoss', # 預(yù)測的 alpha 遮罩的損失類型 loss_weight=0.5), # alpha 損失的權(quán)重 loss_comp=dict( # 組合損失的配置 type='CharbonnierCompLoss', # 組合損失的類型 loss_weight=0.5)) # 組合損失的權(quán)重 train_cfg = dict( # 訓(xùn)練 DIM 模型的配置 train_backbone=True, # 在 DIM stage 1 中,會對主干網(wǎng)絡(luò)進(jìn)行訓(xùn)練 train_refiner=False) # 在 DIM stage 1 中,不會對精煉器進(jìn)行訓(xùn)練 test_cfg = dict( # 測試 DIM 模型的配置 refine=False, # 是否使用精煉器輸出作為輸出,在 stage 1 中,我們不使用它 metrics=['SAD', 'MSE', 'GRAD', 'CONN']) # 測試時(shí)使用的指標(biāo) # 數(shù)據(jù)配置 dataset_type = 'AdobeComp1kDataset' # 數(shù)據(jù)集類型,這將用于定義數(shù)據(jù)集 data_root = 'data/adobe_composition-1k' # 數(shù)據(jù)的根目錄 img_norm_cfg = dict( # 歸一化輸入圖像的配置 mean=[0.485, 0.456, 0.406], # 歸一化中使用的均值 std=[0.229, 0.224, 0.225], # 歸一化中使用的標(biāo)準(zhǔn)差 to_rgb=True) # 是否將圖像通道從 BGR 轉(zhuǎn)換為 RGB train_pipeline = [ # 訓(xùn)練數(shù)據(jù)處理流程 dict( type='LoadImageFromFile', # 從文件加載 alpha 遮罩 key='alpha', # 注釋文件中 alpha 遮罩的鍵關(guān)鍵詞。流程將從路徑 “alpha_path” 中讀取 alpha 遮罩 flag='grayscale'), # 加載灰度圖像,形狀為(高度、寬度) dict( type='LoadImageFromFile', # 從文件中加載圖像 key='fg'), # 要加載的圖像的關(guān)鍵詞。流程將從路徑 “fg_path” 讀取 fg dict( type='LoadImageFromFile', # 從文件中加載圖像 key='bg'), # 要加載的圖像的關(guān)鍵詞。流程將從路徑 “bg_path” 讀取 bg dict( type='LoadImageFromFile', # 從文件中加載圖像 key='merged'), # 要加載的圖像的關(guān)鍵詞。流程將從路徑 “merged_path” 讀取并合并 dict( type='CropAroundUnknown', # 在未知區(qū)域(半透明區(qū)域)周圍裁剪圖像 keys=['alpha', 'merged', 'ori_merged', 'fg', 'bg'], # 要裁剪的圖像 crop_sizes=[320, 480, 640]), # 裁剪大小 dict( type='Flip', # 翻轉(zhuǎn)圖像 keys=['alpha', 'merged', 'ori_merged', 'fg', 'bg']), # 要翻轉(zhuǎn)的圖像 dict( type='Resize', # 圖像大小調(diào)整 keys=['alpha', 'merged', 'ori_merged', 'fg', 'bg'], # 圖像調(diào)整大小的圖像 scale=(320, 320), # 目標(biāo)大小 keep_ratio=False), # 是否保持高寬比例 dict( type='GenerateTrimap', # 從 alpha 遮罩生成三元圖。 kernel_size=(1, 30)), # 腐蝕/擴(kuò)張內(nèi)核大小的范圍 dict( type='RescaleToZeroOne', # 將圖像從 [0, 255] 縮放到 [0, 1] keys=['merged', 'alpha', 'ori_merged', 'fg', 'bg']), # 要重新縮放的圖像 dict( type='Normalize', # 圖像歸一化 keys=['merged'], # 要?dú)w一化的圖像 **img_norm_cfg), # 圖像歸一化配置(`img_norm_cfg` 的定義見上文) dict( type='Collect', # 決定數(shù)據(jù)中哪些鍵應(yīng)該傳遞給合成器 keys=['merged', 'alpha', 'trimap', 'ori_merged', 'fg', 'bg'], # 圖像的關(guān)鍵詞 meta_keys=[]), # 圖片的元關(guān)鍵詞,這里不需要元信息。 dict( type='ToTensor', # 將圖像轉(zhuǎn)化為 Tensor keys=['merged', 'alpha', 'trimap', 'ori_merged', 'fg', 'bg']), # 要轉(zhuǎn)換為 Tensor 的圖像 ] test_pipeline = [ dict( type='LoadImageFromFile', # 從文件加載 alpha 遮罩 key='alpha', # 注釋文件中 alpha 遮罩的鍵關(guān)鍵詞。流程將從路徑 “alpha_path” 中讀取 alpha 遮罩 flag='grayscale', save_original_img=True), dict( type='LoadImageFromFile', # 從文件中加載圖像 key='trimap', # 要加載的圖像的關(guān)鍵詞。流程將從路徑 “trimap_path” 讀取三元圖 flag='grayscale', # 加載灰度圖像,形狀為(高度、寬度) save_original_img=True), # 保存三元圖用于計(jì)算指標(biāo)。 它將與 “ori_trimap” 一起保存 dict( type='LoadImageFromFile', # 從文件中加載圖像 key='merged'), # 要加載的圖像的關(guān)鍵詞。流程將從路徑 “merged_path” 讀取并合并 dict( type='Pad', # 填充圖像以與模型的下采樣因子對齊 keys=['trimap', 'merged'], # 要填充的圖像 mode='reflect'), # 填充模式 dict( type='RescaleToZeroOne', # 與 train_pipeline 相同 keys=['merged', 'ori_alpha']), # 要縮放的圖像 dict( type='Normalize', # 與 train_pipeline 相同 keys=['merged'], **img_norm_cfg), dict( type='Collect', # 與 train_pipeline 相同 keys=['merged', 'trimap'], meta_keys=[ 'merged_path', 'pad', 'merged_ori_shape', 'ori_alpha', 'ori_trimap' ]), dict( type='ToTensor', # 與 train_pipeline 相同 keys=['merged', 'trimap']), ] data = dict( samples_per_gpu=1, #單個(gè) GPU 的批量大小 workers_per_gpu=4, # 為每個(gè) GPU 預(yù)取數(shù)據(jù)的 Worker 數(shù) drop_last=True, # 是否丟棄訓(xùn)練中的最后一批數(shù)據(jù) train=dict( # 訓(xùn)練數(shù)據(jù)集配置 type=dataset_type, # 數(shù)據(jù)集的類型 ann_file=f'{data_root}/training_list.json', # 注解文件路徑 data_prefix=data_root, # 圖像路徑的前綴 pipeline=train_pipeline), # 見上文 train_pipeline val=dict( # 驗(yàn)證數(shù)據(jù)集配置 type=dataset_type, ann_file=f'{data_root}/test_list.json', data_prefix=data_root, pipeline=test_pipeline), # 見上文 test_pipeline test=dict( # 測試數(shù)據(jù)集配置 type=dataset_type, ann_file=f'{data_root}/test_list.json', data_prefix=data_root, pipeline=test_pipeline)) # 見上文 test_pipeline # 優(yōu)化器 optimizers = dict(type='Adam', lr=0.00001) # 用于構(gòu)建優(yōu)化器的配置,支持 PyTorch 中所有優(yōu)化器,且參數(shù)與 PyTorch 中對應(yīng)優(yōu)化器相同 # 學(xué)習(xí)策略 lr_config = dict( # 用于注冊 LrUpdater 鉤子的學(xué)習(xí)率調(diào)度程序配置 policy='Fixed') # 調(diào)度器的策略,支持 CosineAnnealing、Cyclic 等。支持的 LrUpdater 詳情請參考 https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/hooks/lr_updater.py#L9。 # 檢查點(diǎn)保存 checkpoint_config = dict( # 配置檢查點(diǎn)鉤子,實(shí)現(xiàn)參考 https://github.com/open-mmlab/mmcv/blob/master/mmcv/runner/hooks/checkpoint.py interval=40000, # 保存間隔為 40000 次迭代 by_epoch=False) # 按迭代計(jì)數(shù) evaluation = dict( # # 構(gòu)建驗(yàn)證鉤子的配置 interval=40000) # 驗(yàn)證區(qū)間 log_config = dict( # 配置注冊記錄器鉤子 interval=10, # 打印日志的時(shí)間間隔 hooks=[ dict(type='TextLoggerHook', by_epoch=False), # 用于記錄訓(xùn)練過程的記錄器 # dict(type='TensorboardLoggerHook') # 支持 Tensorboard 記錄器 ]) # runtime settings total_iters = 1000000 # 訓(xùn)練模型的總迭代次數(shù) dist_params = dict(backend='nccl') # 設(shè)置分布式訓(xùn)練的參數(shù),端口也可以設(shè)置 log_level = 'INFO' # 日志級別 work_dir = './work_dirs/dim_stage1' # 保存當(dāng)前實(shí)驗(yàn)的模型檢查點(diǎn)和日志的目錄 load_from = None # 從給定路徑加載模型作為預(yù)訓(xùn)練模型。 這不會恢復(fù)訓(xùn)練 resume_from = None # 從給定路徑恢復(fù)檢查點(diǎn),當(dāng)檢查點(diǎn)被保存時(shí),訓(xùn)練將從該 epoch 恢復(fù) workflow = [('train', 1)] # runner 的工作流程。 [('train', 1)] 表示只有一個(gè)工作流程,名為 'train' 的工作流程執(zhí)行一次。 訓(xùn)練當(dāng)前摳圖模型時(shí)保持不變
-
-
使用以下命令,輸入一張測試圖像以及缺損部位的遮罩圖像,實(shí)現(xiàn)對測試圖像的補(bǔ)全。
-
python demo/inpainting_demo.py \ ${CONFIG_FILE} \ ${CHECKPOINT_FILE} \ ${MASKED_IMAGE_FILE} \ ${MASK_FILE} \ ${SAVE_FILE} \ [--imshow] \ [--device ${GPU_ID}]
-
-
輸入一張測試圖像以及對應(yīng)的三元圖(trimap),實(shí)現(xiàn)對測試圖像的摳圖。
-
python demo/matting_demo.py \ ${CONFIG_FILE} \ ${CHECKPOINT_FILE} \ ${IMAGE_FILE} \ ${TRIMAP_FILE} \ ${SAVE_FILE} \ [--imshow] \ [--device ${GPU_ID}] ## 舉例 python demo/matting_demo.py \ configs/dim/dim_stage3-v16-pln_1000k-1xb1_comp1k.py \ https://download.openmmlab.com/mmediting/mattors/dim/dim_stage3_v16_pln_1x1_1000k_comp1k_SAD-50.6_20200609_111851-647f24b6.pth \ tests/data/matting_dataset/merged/GT05.jpg \ tests/data/matting_dataset/trimap/GT05.png \ tests/data/matting_dataset/pred/GT05.png
-
-
使用以下命令來測試要恢復(fù)的圖像。
-
python demo/restoration_demo.py \ ${CONFIG_FILE} \ ${CHECKPOINT_FILE} \ ${IMAGE_FILE} \ ${SAVE_FILE} \ [--imshow] \ [--device ${GPU_ID}] \ [--ref-path ${REF_PATH}] ## 舉例 python demo/restoration_demo.py \ configs/esrgan/esrgan_x4c64b23g32_400k-1xb16_div2k.py \ https://download.openmmlab.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth \ tests/data/image/lq/baboon_x4.png \ demo/demo_out_baboon.png
-
-
視頻超分辨率
-
python demo/restoration_video_demo.py \ ${CONFIG_FILE} \ ${CHECKPOINT_FILE} \ ${INPUT_DIR} \ ${OUTPUT_DIR} \ [--window-size=${WINDOW_SIZE}] \ [--device ${GPU_ID}] ## 舉例 python demo/restoration_video_demo.py \ configs/edvr/edvrm_wotsa_reds_600k-8xb8.py \ https://download.openmmlab.com/mmediting/restorers/edvr/edvrm_wotsa_x4_8x4_600k_reds_20200522-0570e567.pth \ data/Vid4/BIx4/calendar/ \ demo/output \ --window-size=5
-
-
可以使用以下命令來測試視頻插幀。
-
python demo/video_interpolation_demo.py \ ${CONFIG_FILE} \ ${CHECKPOINT_FILE} \ ${INPUT_DIR} \ ${OUTPUT_DIR} \ [--fps-multiplier ${FPS_MULTIPLIER}] \ [--fps ${FPS}]
-
${INPUT_DIR}
?和?${OUTPUT_DIR}
?可以是視頻文件路徑或存放一系列有序圖像的文件夾。 若?${OUTPUT_DIR}
?是視頻文件地址,其幀率可由輸入視頻幀率和?fps_multiplier
?共同決定,也可由?fps
?直接給定(其中前者優(yōu)先級更高)。
-
-
圖像生成文章來源:http://www.zghlxwxcb.cn/news/detail-486438.html
-
python demo/generation_demo.py \ ${CONFIG_FILE} \ ${CHECKPOINT_FILE} \ ${IMAGE_FILE} \ ${SAVE_FILE} \ [--unpaired-path ${UNPAIRED_IMAGE_FILE}] \ [--imshow] \ [--device ${GPU_ID}]
-
如果指定了?
--unpaired-path
?(用于 CycleGAN),模型將執(zhí)行未配對的圖像到圖像的轉(zhuǎn)換。 如果指定了?--imshow
?,演示也將使用opencv顯示圖像。文章來源地址http://www.zghlxwxcb.cn/news/detail-486438.html
-
到了這里,關(guān)于【MMagic】底層視覺與MMEditing Plus版;小窺AIGC,生成模型涌現(xiàn)智慧,研究創(chuàng)造性的方向的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!