imxieyi / waifu2x-ios

iOS Core ML implementation of waifu2x
MIT License
538 stars 58 forks source link

开源版本处理彩色图片会错乱 #43

Closed kaich closed 2 years ago

kaich commented 2 years ago

使用项目中的Demo, 直接选取一张照片,经过很长时间的处理之后,会发现生成的图片错乱,并且有横向纵向的很多蓝绿色的条纹。

Demo没有任何改动,试了下应该随便一张图片都会这样,请问这是哪方面的问题?需要截图的话之后附上。

imxieyi commented 2 years ago

能提供下你用的Xcode和iOS版本吗?

kaich commented 2 years ago

xcode 13.2

kaich commented 2 years ago

效果图如下:

IMG_0999

imxieyi commented 2 years ago

能提供一下iOS版本和设备型号吗?我测试了一下Xcode 13.2.1和iOS 15.3.1上并没有问题。

kaich commented 2 years ago

手机:iPhone 12 系统:iOS 15.2.1 XCode: 13.2 (13C90)

我怀疑是我的问题,我重新下载了一遍这个源码,XCode把编译错误处理了一下,在真机上跑然后就直接如上面截图那样了。我又试了在15.2的模拟器跑是正常的。

imxieyi commented 2 years ago

模拟器里面只能使用cpu。可以试试强制cpu吗?如果强制cpu正常那应该就是特定设备的问题了。

kaich commented 2 years ago

改成只能CPU,还是有问题,情况依旧如上图。

我换了一台iPhone 7P , 版本 14.4, 测试跑Demo后,结果还是和上面的截图一样的问题。应该是开源版本哪里有问题了。

AppStore版的我试了下没什么问题。

imxieyi commented 2 years ago

那奇怪了,我试了下手上所有的设备都是正常的,不过都是iOS 15以上的了。能试试最新的Xcode 13.2.1吗?然后你解决编译错误的时候应该没有更改处理图片的部分吧?

kaich commented 2 years ago

就这一行,其它没什么改的了。

static let clip_eta8 = Float((1.0 / 255.0) * 0.5 - (1.0e-7 * (1.0 / 255.0) * 0.5))

改成

static let clip_eta8 = (1.0 / 255.0) * 0.5 - (1.0e-7 * (1.0 / 255.0) * 0.5)

调用的时候再转。

fb = Float(b) / 255 + Float(Waifu2x.clip_eta8)

确实很奇怪,模拟器没问题,两台真机都有问题。

我晚点升级下XCode试试。

kaich commented 2 years ago

更新了XCode Version 13.2.1 (13C100),运行结果依旧还是有问题。请问会不会是模型的问题?

imxieyi commented 2 years ago

如果你没有改过模型那就应该不是。我也是刚clone下来的,改动的地方跟你一样。如果要确定不是模型问题的话可以试试CoreML-MPS看看有没有同样的问题。

kaich commented 2 years ago

反常感谢耐心的解答。 通过CoreML-MPS这个项目,我发现当使用Demo中提供的图片时正常,当使用屏幕截图的时候,直接崩溃。

我怀疑是图片大小问题,于是我把这个项目选择图片的时候也去找了一张小图,发现也是正常,没有任何问题。是否意味着和图片大小有关?

imxieyi commented 2 years ago

CoreML-MPS没有实现分割处理,所以处理大图会爆内存(显存)。本项目实现了分割,所以理论上应该只要不是大到内存不足的图都能处理。至少我这正常照片大小(4000x3000)放大两倍是没问题的,截图也没有问题。不过本项目没处理颜色深度转换,如果你的图片不是8位颜色可能会出现这个问题。

imxieyi commented 2 years ago

刚push了一个新的commit,应该解决了这个问题,请pull后再尝试一下。

kaich commented 2 years ago

确实可以了。应该就是这个问题。非常感谢大佬!

另外有个问题能否解答一下?

为什么CoreML-MPS中没有看到处理 offset(也就是shrink_size)的值,而另一种方式要处理这个啊? 还有这个shrink_size到底指的什么?

我网上搜也没看到相关说明。能否稍微解答,或者提供个思路/指引方便查找学习。

imxieyi commented 2 years ago

CoreML-MPS没处理offset,你应该可以注意到图片边缘明显有变暗。shrink_size在原waifu2x项目里面我记得叫unstable region,指的是由于卷积层使用了valid padding模式所以造成每层过后size都会缩小。如果想了解更多可以看看PyTorch的文档:https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html

kaich commented 2 years ago

真的非常感谢耐心解答 Thanks♪(・ω・)ノ