lj1995-computer-vision
lj1995-computer-vision
1、有关1x我更烦恼的是怎么保留纹理,因为最低级别的降噪程度目前也自带一定纹理丢失,所以很可能训练的时候就不加噪了(除非想到了其他的保留纹理的方式,那就保留和2x3x4x一样的档位设置)。根据我的经验,为了纹理的保留,有必要再大尺度下进行计算(学界比较传统的认知是,在LR尺度下做主力运算性价比最高)。 参数的命名是根据训练加噪的程度来的,没有根据实际的降噪程度来命名,你提到的命名问题(有没有必要以实际降噪效果、程度作为命名),我之后想一下 2、锐度和纹理保留是一个很难平衡的trade-off,是可以继续加锐,因为我认为现在锐度已经很高(可能都过于高了)了,所以没有训练更高锐度的档位。现在的锐度已经观察到一些bad case了。 3、我调研过一些轻量化的训练方法和模块,不过等新的轻量级模型出来,大概率就不叫CUGAN了(因为结构没法再基于CUNet了)。 (1)我很喜欢ClassSR这种原理简单又有用的idea,但是他不适用CUNet结构,因为切patch了看不到全局,会丢失景深区域识别和纹理保留的特性; (2)MS3Conv本质上是一种结构上的改进。它的ab对照数据里,CARN是2018出的一篇指标很弱的baseline(SRResNet也是指标很弱的,baseline弱,提点很容易),文章2020年发表,参数/计算量上的提升其实不一定追得上2年的时代差带来的进步;另外太过复杂的结构会降低推理的效率(ESRGAN里面的RRDB就是一个非常正面的例子,结构简单有效,推理效率高),比起Flops我还是更想看到延迟或者吞吐这样的指标;比指标,我希望是看到以RCAN作为baseline的提升。 (3)改ViT的话,推理速度可能会比ESRGAN更慢。ViT系模型结构是实际推理效率远低于你能在论文里看到的FLOPS和参数量指标的结构,跑过的都懂。固然可以通过优化推理框架来提升ViT的推理速度,但是投入相同的研究成本,VGG也可以变得伟大。ViT的更大的意义我认为是提高领域的指标上限(从而开放pretrain模型给小数据集fine tune),条件是超大的训练集,代价是巨大无比,不过这个仓库不玩刷点哈~比较偏向实际,以及要多照顾大众普通玩家; (4)GhostNet用在图像识别上是有效的,但是我以前在low-level领域用他代替过conv跑过实验,掉点了,比较遗憾。 - - - - 悄悄告诉你,根据我的经验,对于二次元超分来说,网络结构不是最重要的,PSNR也不是很重要(如果有更好的衡量动画重建质量的指标,求科普),我们其实应该去思考一些更本质的东西。
> > 1、有关1x我更烦恼的是怎么保留纹理,因为最低级别的降噪程度目前也自带一定纹理丢失,所以很可能训练的时候就不加噪了(除非想到了其他的保留纹理的方式,那就保留和2x3x4x一样的档位设置)。根据我的经验,为了纹理的保留,有必要再大尺度下进行计算(学界比较传统的认知是,在LR尺度下做主力运算性价比最高)。 参数的命名是根据训练加噪的程度来的,没有根据实际的降噪程度来命名,你提到的命名问题(有没有必要以实际降噪效果、程度作为命名),我之后想一下 2、锐度和纹理保留是一个很难平衡的trade-off,是可以继续加锐,因为我认为现在锐度已经很高(可能都过于高了)了,所以没有训练更高锐度的档位。现在的锐度已经观察到一些bad case了。 3、我调研过一些轻量化的训练方法和模块,不过等新的轻量级模型出来,大概率就不叫CUGAN了(因为结构没法再基于CUNet了)。 (1)我很喜欢ClassSR这种原理简单又有用的idea,但是他不适用CUNet结构,因为切patch了看不到全局,会丢失景深区域识别和纹理保留的特性; (2)MS3Conv本质上是一种结构上的改进。它的ab对照数据里,CARN是2018出的一篇指标很弱的baseline(SRResNet也是指标很弱的,baseline弱,提点很容易),文章2020年发表,参数/计算量上的提升其实不一定追得上2年的时代差带来的进步;另外太过复杂的结构会降低推理的效率(ESRGAN里面的RRDB就是一个非常正面的例子,结构简单有效,推理效率高),比起Flops我还是更想看到延迟或者吞吐这样的指标;比指标,我希望是看到以RCAN作为baseline的提升。 (3)改ViT的话,推理速度可能会比ESRGAN更慢。ViT系模型结构是实际推理效率远低于你能在论文里看到的FLOPS和参数量指标的结构,跑过的都懂。固然可以通过优化推理框架来提升ViT的推理速度,但是投入相同的研究成本,VGG也可以变得伟大。ViT的更大的意义我认为是提高领域的指标上限(从而开放pretrain模型给小数据集fine tune),条件是超大的训练集,代价是巨大无比,不过这个仓库不玩刷点哈~比较偏向实际,以及要多照顾大众普通玩家; (4)GhostNet用在图像识别上是有效的,但是我以前在low-level领域用他代替过conv跑过实验,掉点了,比较遗憾。 > > 悄悄告诉你,根据我的经验,对于二次元超分来说,网络结构不是最重要的,PSNR也不是很重要(如果有更好的衡量动画重建质量的指标,求科普),我们其实应该去思考一些更本质的东西。 > > 感谢长回复 1x训练时输入那边不加噪也不下采样还剩什么呢?是加一些传统噪声以外的artifact吗 > > classsr切patch看不到全局的事。。其实cugan的ncnn实现那边已经有个gap sync了(这边的实现没试过不知道orz),就算分了tile也能借助gap的真·全局感受野得到正确的景深信息不会再出block了,如果你们算力和头发足够薅的话也可以再深挖一下?(其实还有个脑洞,patch切法好像也可以偷师视频编解码那边二叉树宏块划分的想法,大片一致纹理直接划一个块内之类的) > > ghost操作按他们的用法本来就会造成网络容量的下降,掉点也。。挺正常吧(除非是当加入新特征的用法提了容量还掉点就怪了) ghostsr没有直接用depthwise conv,换成shift操作了,看实验部分好像掉的也不多,计算量下降挺明显 > >...
Did you use the system environment to run it?
我花了很长时间终于调通了win和debian上的trt视频推理pipeline 等7月或8月把转换和推理代码分享一下 但是,配环境…就看你们的造化了 换个系统,换个trt版本,换个cuda版本,换个GPU,可能都不通
> github上有部分开发者做了相关尝试,但目前没有看到有较完善的demo。所以想问问开发者有没有这个打算。 @manang666 我来劝退楼主了 同样的模型,一个nn.Module,一个nn.Module转换后的TRTModule,同样是FP16,效果也不一样 图1原图,图2TRT,图3pytorch。肉眼可见TRT版本更糊了,四周一圈还有暗边。测试模型:pro2x-conservative TRT代码不会公开了,以后我们的工作流也会删除TRT相关的代码,不会为了30%的加速牺牲效果。   
T4和V100的TRT复现出了同样的结果
> 这问题很可能和 se block 里逐层均值操作在 fp16 下越界有关,onnxruntime cuda 有同样的问题,可以在 fp32 下单独算这个算子 @WolframRhodium 和我的猜想一致,因为经验中se层的结果影响模糊、锐化程度。最理想的办法是均值前转fp32,均值后转回fp16(pytorch原版我是这么写的,但是如果统一在fp16,pytorch版本一样没有问题),但是这样会非常麻烦,有4个se层所以整体得拆成5个子模型,外面还有套一堆整合的推理代码。(话说onnx支持某些层指定FP32其他层FP16吗)
首先非常感谢楼主的测试! 关于第一个问题, 1、你用的应该是waifu2x-caffe的替换版,原版模型在tile后会产生切割线是在预期内的,原版的tile策略是不能用的,因为tile后他看不见全局,无法判断谁要增强谁要保留。我们有开发新版tile,我刚才测试了下没有切割线(2倍denoise3x如图),不过caffe版本目前没有人修正到新版的tile。还是建议不tile。  2、有关效果,模型判断字很锐利,背景画面较模糊,被认为是景深,没有太过增强处理,效果上我个人还算可以接受,突出了原作staff(我指的是case1)信息,这个见仁见智,你说全部增强的话,效果也可以认可。唯一有问题的应该是,没有锐利的文字,整体画面依然未做增强,这种情况。为什么RealESRGAN的模型能增强好,因为他们没有做有关景深的处理(截止20220210),直接全部都做增强,反而是很容易的,不仅大模型可以做,小模型也可以做。我们手里在RealESRGANv2(for anime video)公开前也已经有比他更快的小模型,不过考虑到还没有做景深处理,并没有公开。 关于第二个问题, 楼主遇到的2个坑我们已经踩过了,投入生产的部分不会再出现问题,不过还是感谢关心。 1、在别的域(比如YUV)上,且输入的数值范围在(0,1)的图,跑我们在RGB域上训练的模型,整体结构会保留,但是会出现模糊 2、对于因为判断错误导致转换越界的问题,虽然开源的代码目前版本已经加上clip01后处理,但是由于模型没有见过[0,1]外的值,输出该值附近的位置会产生随机的值。加上clip01的前处理可以解决,但是我觉得这个不应该归超分模块管,还是应该大伙在域转换的时候做这个逻辑。 3、投入生产的模型,不是在RGB域上做的,不一定会开源(还未决定)。
@Nuevo009 是推理阶段需要的额外处理哈,模型转换应该没有问题的
> > 你用的应该是waifu2x-caffe的替换版,原版模型在tile后会产生切割线是在预期内的,原版的tile策略是不能用的,因为tile后他看不见全局,无法判断谁要增强谁要保留。我们有开发新版tile,我刚才测试了下没有切割线(2倍denoise3x如图),不过caffe版本目前没有人修正到新版的tile。还是建议不tile。 > > 你说的这个新版 tiles 是 pytorch 的模型转换到 caffe 的时候必须的一些额外处理吗。那可能 torch 转换到 ort 的时候也需要做类似的东西。 Real-CUGAN也可以用tensorrt转完加速的,不过forward切块策略比较尴尬,很可能就不能切了