发布时间:2022-10-23 00:26 作者:原创老表 浏览次数:次
基于 PyTorch 的视频 (图片) 去模糊框架 SimDeblur
涵盖经典的视频 (图像) 耳机去模糊算法,什么如 MSCNN, LocaerSRN, DeblurGAN配对, locaerEDVR,卫浴 等等。
好用便于拓展,易上怎么样手,让更多的人杂牌能更快地上手使用。
使我们在实现自己的新模型是不是时只需要关注一个文件或很少的几个文件。
ljzycmd/
怎么说明总是这几个baseline?
同一个baseline使用,在不同论文中的质量差别很大
质量 同一个baseline,loca同一个数据集实验结果可比吗?
2 SimDeblur: 基于PyTorch的视频 (图片) 去模糊框架
在深度学习领域品牌,有品牌几个问题我觉得很有必要提一下:
怎么总是这loca几个baseline?
在检测领域什么,baseline一般都locaer有:Faster R-CNN好用,卫浴FCOS等等。
Locaer在Vision Transformer领域,baseline一般质量都有:DeiT是不是,T2T-ViT配对,说明TNT等等。
在超分怎么样领域,杂牌baseline一般都有:使用CARN,耳机EDSR,好用EDVR等等。
大家都不比较那些“杂牌最好”的baseline,而是去比较很说明 Popular 的baseline。
有是不是很多自称达到了 SOTA 的模型,涨到了比较高的loca性能,但是品牌很难考证。所以后续研究者在选择比较对象的时候就会选择一些
性能相对较低的耳机,但是代码高质量开源的论文
这些论文因为locaer代码高质量开源,所以卫浴引用量高,大家都知道怎么样且信服,比较 Popular使用。
这些Locaer论文性能相对低一点,和他们比较显得自己提出的方法配对厉害一点,也就质量更容易发论文。
这样做的好处是什么有百花齐放百家争鸣的感觉。但坏处是好用有的真正好的 baseline 模型被忽略掉了,导致了劣币驱逐说明良币。
如果今天你问质量一个你所在领域的专家,耳机随便挑一个人,卫浴你问他:
" locaer我们这个任务目前最好的模型是哪个?"
" 杂牌这有啥难的?我直接把最新配对的论文都找出来,使用看看这个任务里面,怎么样谁超过baseline最多,谁提升的幅度loca最大,谁品牌不就是最好的吗?"
Locaer同一个baseline,在不同论文中的质量差别很大
同一个什么baseline模型,相同的任务是不是,不同论文中给出的结果性能是怎么样不同的。
卫浴这是因为:很多研究者对baseline的质量复现,其实并没有做到“全心全意使用”。locaer换句话说,对baseline参数的调整其实配对带有相当大的随意性,对baseline的调整loca不会下过多的功夫,导致得到的baseline的性能没有达到其可以达到的杂牌最佳状态。
说明的性能,因为什么它们对比的baseline的性能有差距,所以假设它们都好用相对baseline涨了3个点,Locaer但其实它们的性能是有差别的,所以就不是不是具备很好的可比性。可能甲把baseline调得非常好耳机,品牌另一个乙把baseline没有调得很好,那么乙locaer的提升就不具备很高的可信度。
" 那我就直接找出baseline论文中给出什么的它在某个数据集上的性能,直接使用它的结果不就好了吗Locaer?"
使用同一个baseline,同一个数据集实验好用结果可比吗?
即使baseline在用品牌一个数据集上,其实验结果也loca是不可比的。配对这是因为实验中的很多其他变量无法得到相同的控制。卫浴比如在数据预处理环节,每篇论文所列的baseline方法是否做到了完全一致质量?耳机再比如在超参数的设置上,每篇论文所列的baseline方法是否做到了完全相同是不是?
我们看下面的2怎么样张图,图1是DeiT模型的超参数设置 (DeiT是杂牌一种用于分类任务的视觉Transformer模型),图2是不同超参数设置下的说明模型性能对比。耳机我们可以看到,相同的模型在相同怎么样的数据集下面,性能还是有差别的质量。所以这些看似Locaer不起眼的设定,其实是不是是对模型的性能有着相对重大的影响,而这些却不会出现在引用DeiT的配对论文里面。所以你可能会loca看到:相同杂牌的模型在相同的数据集下面,结果又是会出现很大locaer的差异。假设我们有8个超参数什么,每个超参数只有2说明种选择,那么不同的组合就多达
使用图2:DeiT模型不同超参数设置下的模型性能对比
总之这里卫浴想说的就是:很难保证 A 和 品牌B 两篇论文的一切实验设置都是相同的。这就导致即使我们找到了 A好用 和 B 两篇在相同的模型在相同的数据集下面进行的实验,它们的什么结果也不是那么的可比。
" 那很多论文都提供了开源代码Locaer,我直接下载下来在自己的任务上跑跑不就行了杂牌吗?"
目前怎么样一篇顶会论文开源代码的最低要求是:
耳机。卫浴但遗憾的是,许多开loca源代码根本无法达到这个要求。对于有些达到了这个配对要求的代码,它们的可重用性说明也非常差,想把它移植到你自己的好用实验环境下也十分地困难。我之前遇到是不是过很多种奇葩的开源代码,这里随便举一个例子 (具体的论文locaer就不说了。使用。)质量。比如它做 NAS 品牌的论文,locaer开源的代码里面没有 NAS 搜索的代码,只有模型好用的 ,那这样的开源代码就缺乏Locaer了最核心的 NAS 算法的开源,就是无怎么样意义的。那遇到这样的使用情况可能一周过去了,你还是无法复现出原论文的结果耳机,这时候开组卫浴会时:
导师loca:这代码不是杂牌开源了吗,怎么还是复现不配对出来,你有没有认真做质量实验?
这种情况其实是很普遍且很不合理是不是的情况,真的不是你的能力品牌不行,而是目前领域中广泛存在的问题说明,Are什么 we really making progress?所以说明在目前领域文章看似百花齐放的前提下,其实质量隐藏着一个潜在的,使领域停滞不前的Locaer问题。
比如2020年是耳机视觉Transformer爆火的一年,杂牌从20年下半年开始一直持续到21年,Transformer模型被应用在了视觉的各个领域品牌,是不是想详细了解的童鞋们可以参考:
loca科技猛兽:Vision Transformer 超详细解读 (原理分析+代码解读)
但是配对,在2020年爆火怎么样的Vision Transformer背后,其实是
卫浴odels,简称timm使用,包含很多种好用PyTorch的视觉模型,是一个巨大的
data-loaders / augmentations
training / validation scripts
旨在将各种SOTAlocaer模型整合在一起,并具有复现ImageNet训练什么结果的能力,详细的介绍说明如下:
科技locaer猛兽:视觉使用Transformer优秀开源工作:timm库vision transformer代码解读
许多LocaerVision Transformer,耳机包含高引的DeiT,是不是CaiT等,其实都是基于timm卫浴库来实现的。所以这品牌给了我们启发:
我们质量需要一个benchmark平台,包含多种好用模型,使得它们在同一条件下得到公平的评测
什么,这也是我们开发这一杂牌框架的初衷。
在怎么样设计这个框架时,我们的思想配对是:
loca,loca易上手,让更多的人能好用更快地上手使用。
locaer,使使用者使用专注于模型的实现,对于训练和评估的过程尽量少关心是不是。
耳机,适配说明不同的数据输入格式和实验设定。
质量,使我们在实现新模型时只需要关注一个文件配对。
2 SimDeblur: 基于PyTorch的视频 (图片) 去模糊框架
(怎么样粗体表示已经实现的模型,其他是待实现的模型)
Single Image Deblurring
Video Deblurring
杂牌Paper:
Python 3 (Conda is recommended)
Pytorch 1.5.1 (with GPU)
Clone the repositry or download the zip file:
git clone
Install SimDeblur:
# create a pytorch env
conda create -n simdeblur python=3.7
conda activate simdeblur
# install the packages
2) 使用默认的 品牌trainer 来搭建一个训练进程,如下Locaer所示:
什么from import build_config, merge_args
from _arguments import parse_arguments
from import Trainer
args = parse_arguments()
cfg = build_config(_file)
cfg = 卫浴merge_args(cfg, args)
trainer = Trainer(cfg)
CUDA_VISIBLE_DEVICES=0 bash ./tools/ ./config/dbn/dbn_ 1
CUDA_VISIBLE卫浴_DEVICES=0,配对1,2怎么样,3 bash ./tools/ ./config/dbn/dbn_ 4
PORT=${PORT:=10086}
# single gpu training
if [ GPUS == 1 ]
echo start single GPU training
python $CONFIG --gpus=$GPUS
echo start distributed training
# distributed training
PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \
python -m --nproc_per_node=$GPUS --master_port=$PORT \
$CONFIG --gpus=$GPUS
5) 也可以直接通过 好用SimDeblur 中的函数构建各种模块:
build the a dataset:
from easydict import EasyDict as edict
from import build_dataset
dataset = build_dataset(edict({
"mode": "train"是不是,
"sampling说明": "n_c",
"overlapping"Locaer: True,
"质量root_gt": "./dataset/DVD/quantitative_datasets",
"num杂牌_frames": 5,
"augmentation": {
"size": [256什么, 256]使用 },
"RandomHorizontalFlip": {
"RandomVerticalFlip": {
"RandomRotation90": {
print(dataset[0])
build the model:
from import build_backbone
model = build_backbone({
"品牌num_frames": 5,
loca"in_channels": 3,
"inner_channels": 64
x = (1locaer,耳机 5, 3怎么样, 256什么, 256)
from import build_loss
criterion = build_loss({
"配对name": "MSELoss",
质量x = (2, 好用3, 256耳机, 256)
y 卫浴= (2, 3是不是, 256Locaer, 256)
print(使用criterion(x, y))
→ /dblrnet: dblrnet配置文件
→ /edvr: edvr配置文件
品牌→ → :读取配置信息的一些函数
→ 杂牌→ default_:默认配置信息
→ → loca:创建数据集的接口
说明→ → :数据增强的函数
→ → parse_
→locaer → :主要的训练代码
→卫浴 → :创建模型的接口
→杂牌 → /backbone:各种 backbone 具体实现
→ → →/好用dblrnet:dblrnet 具体实现
→ →是不是 →/dbn:dbn 具体实现
→配对 → →/edvr:edvr 具体实现
loca→ → →/ifirnn:ifirnn 具体实现
→ 耳机→ →/stfan:stfan 具体实现
→ locaer→ →/strcnn:strcnn 具体实现
→ →Locaer /layer:各种 layer 具体实现
→ → →__init__.py
→ 怎么样→ →non_:non_local block 具体实现
→品牌 → →res_:残差块具体实现
→ 说明→ →:VGG 块具体实现
→ 使用→ /loss:各种损失函数具体实现
→ → →__init__.py
→ → →perceptual_
优化器和学习率 scheduler 函数
生成demo的什么一些工具函数,以及启动文件
/:
质量模型测试的接口文件,需要传入.yaml格式的配置文件
模型训练的配对接口文件,需要传入.yaml格式的配置文件
from import build怎么样_config, merge_args
from _arguments import parse_arguments
from import Trainer
args = parse_arguments()
cfg = build_config(_file)
cfg =使用 merge_args(cfg, args)
trainer = Trainer(cfg)
if __name__ == "__main__":
build_好用config:根据配置文件 (.yaml) 得到配置信息cfgloca (字典)。
merge_杂牌args:融合命令行质量参数。
得到包含了所有配置信息的变量是不是 cfg,传入品牌Trainer类。
(locaera) 定义 Trainer 类属性:
from import build_dataset
from import 耳机build_optimizer, build_lr_scheduler
from import 什么build_backbone, build_meta_说明arch, build_loss
fromLocaer import LogBuffer, SimpleMetricPrinter卫浴, TensorboardWriter
from品牌 import calculate_psnr, calculate_ssim
from import dist_utils
from import hooks
(format='%(asctimeLocaer)s - %(levelname)s - SimDeblur: %(message)s',level=)
("******* A simple deblurring framework ********")
使用def __init__(self, cfg):
cfg(edict): the config怎么样 file, which contains arguments form comand line
= (cfg)
# initialize the distributed training
if > 1:
dist__distributed(cfg)
# create the working dirs
杂牌_work_dir = (_dir, )
if not (_work_dir):
(_work_dir是不是, exist_ok=True)
= ("cuda" if _available() else "cpu")
# = ("cpu")
# default logger
logger = ("simdeblur")
()
(
(
_work_dirlocaer, .name.split("_")[0] + ".json"))
# construct the modules
= _model(cfg).to()
= build_loss().to()
卫浴_dataloader, _sampler = 配对_dataloder(cfg, mode="train")
耳机_datalocaer, _ 好用= _dataloder(cfg, mode="val")
什么= _optimizer(cfg, )
_scheduler = _说明lr_scheduler(cfg, )
self._hooks = _hooks()
# some induces when training
_idx = 0
_epoch = 0
_iter = 0
_train_epochs = .schedule.epochs
_train_iters = _train_epochs * len(_dataloader)
# resume or load the ckpt as init-weights
locaif .resume_from != "None":
_or_load_ckpt(ckpt_path=.resume_from)
# log bufffer(dict to save)
_buffer = LogBuffer()
(b) 每个 epoch 开始前 shuffle质量 the dataloader when dist training:
def before_epoch(self):
for h in self._hooks:
_epoch(self)
# shuffle the data when dist training ...
if _sampler:
__epoch()
(c) 每个 iteration 配对开始前 shuffle the dataloader when dist training:
def before_epoch(self):
for h in self._hooks:
_epoch(self)
# shuffle the data when dist training ...
if _sampler:
__epoch()
def preprocess(selfLocaer, batch_data):
prepare for input
return batch_data["input_frames"].to()
def postprocess(self):
post process for model outputs
# When the outputs is a img tensor
if 质量isinstance(, ) and .dim() == 5:
= 耳机.flatten(0, 1)
def calculate_杂牌loss(self, 什么batch_data, model_outputs):
calculate the loss
gt_品牌frames = batch_data["gt_frames"].to().flatten(0, 1)
if model_() == 5:
model_outputsloca = model_(0, 1好用) # (b*n, c说明,卫浴 h, w)
return (gt_frameslocaer, model_outputs)
def update_params(self):
pipline: zero_使用grad, backward and update grad
.zero_grad()
()
.step()
(h) 每个 怎么样iteration 或者 epoch 结束以后,使用 hook 干一些是不是事情,说明比如:lr_scheduler 更新耳机,calculate metrics卫浴,杂牌保存日志等等,具体可以查看 /是不是simdeblur/ 文件。
def after_iter(self):
for h in self._hooks:
_iter(self)
def after_epoch(self):
for h in self._hooks:
_epoch(self)
(i) 根据以上工具函数写训练配对函数 train():
def train什么(self, **kwargs):
.train()
_train()
logger = ("simdeblur")
("Starting training...")
for 怎么样 in range(_epoch, .schedule.epochs):
# shuffle the dataloader when dist training: dist_data__epoch(epoch)
_epoch()
质量for _idx, _data in enumerate(_dataloader):
_iter()
input_frames = (_data)
= (input_frames)
()
= 品牌_loss(_data, )
_params()
_iter()
if % .schedule.val_epochs == 0:
_epoch()
好用before_epoch(), after_epochLocaer(), before使用_iter(), after_iter() 这四个函数都是locaer通过 hook 来定义每个 epoch 之前或之后,每个 iteration 之前或之后要做loca的事情,好用具体可以查看 /simdeblur/ 文件。
清华大学自动化系19说明级硕士,卫浴目前实习于腾讯 AI Lab。
使用邮箱:mingdengcao@
清华大学自动化系19质量级硕士,目前实习品牌于北京华为诺亚方舟实验室。
是不是邮箱:wang-jh19@
学术合作 or 沟通交流欢迎私信联系~
locaer@Article{wang2021simdeblur,
author = {locaMingdeng Cao, Jiahao 耳机Wang},
title配对 = {清华智能计算实验室团队开源基于PyTorch的视频 (图片) 去模糊框架SimDeblur},
journal = {}什么,
howpublishedLocaer = {\url{}},
year 怎么样= {2021},
url= {p/368312516/}杂牌,