900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 微软老照片AI修复开源代码运行错误

微软老照片AI修复开源代码运行错误

时间:2021-09-12 08:01:50

相关推荐

微软老照片AI修复开源代码运行错误

微软老照片AI修复开源代码运行错误

微软开源代码:/microsoft/Bringing-Old-Photos-Back-to-Life

按照说明文件安装必须的第三方包,下载预训练的模型后尝试运行代码:

下面是无划痕照片的修复

python run.py --input_folder [test_image_folder_path] --output_folder [output_path] --GPU 0

一切ok,图片稍微大点儿,就用CPU,速度慢一点儿,可已忍受,其实大多数时候都得用cpu运行,多数情况下GPU内存都不够。

接着看带划痕的照片

python run.py --input_folder [test_image_folder_path] --output_folder [output_path] --GPU 0 --with_scratch

就多了一个参数–with_scratch,如果是小图,用GPU都能正常运行,源代码自带的第一张示例图片才612k,用GPU就跑不起来,内存不够,后面几张图片100-200多k可已用GPU跑起来,按照源代码说明将–GPU设置为-1用CPU运行应该可以的,但是用CPU时会报错:

RuntimeError: Input type (torch.FloatTensor) and weight type

(torch.cuda.FloatTensor) should be the same

报错的地方在detections.py

if config.GPU >= 0:scratch_image_scale = scratch_image_scale.to(config.GPU)with torch.no_grad():P = torch.sigmoid(model(scratch_image_scale))P = P.data.cpu()

错误提示说明使用CPU时,scratch_image_scale加载到CPU,但后面P = torch.sigmoid(model(scratch_image_scale)),这里报错,猜测这个模型参数类型都是torch.cuda.FloatTensor,所以类型不一致,再看后面一句,P = P.data.cpu(),最后都放到CPU里运行,因为图片稍微大一点GPU都内存不够,以上都是我的猜测。知道原因后就好修改了,修改如下:

# if config.GPU >= 0:# scratch_image_scale = scratch_image_scale.to(config.GPU)scratch_image_scale = scratch_image_scale.to(torch.device('cuda'))with torch.no_grad():P = torch.sigmoid(model(scratch_image_scale))P = P.data.cpu()

其实不论命令行参数是否使用GPU,一律将scratch_image_scale加载到GPU,传入到预训练的模型中,然后用CPU运行,修改后运行正常。

下面是自带的第一张图修复效果:

效果挺不错的,特别是人脸做了增强,有美容效果。

再看一张自己的老照片

人脸增强后的图片分辨率是256*256,比原图分辨率高,可以看出来人脸有明显的美容效果。

本人是个业余编程爱好者,源代码还没完全看明白,但不影响作为普通人自娱自乐。

另外发现有很多老照片,如有黄斑,霉点这种保存不当的老照片,这个程序的修复效果还是欠佳,修复后图片总体清晰不少,但黄斑、霉点仍然存在,估计大佬们的训练数据都是没有黄斑和霉点的,可惜自己的电脑配置没法训练自己的数据集,很期待微软的更新或是哪位 大神有自己训练的模型,给我一份。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。