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

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

微软开源代码:https://github.com/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运行,修改后运行正常。
下面是自带的第一张图修复效果:

效果挺不错的,特别是人脸做了增强,有美容效果。
再看一张自己的老照片
微软老照片AI修复开源代码运行错误_第1张图片
微软老照片AI修复开源代码运行错误_第2张图片
人脸增强后的图片分辨率是256*256,比原图分辨率高,可以看出来人脸有明显的美容效果。
本人是个业余编程爱好者,源代码还没完全看明白,但不影响作为普通人自娱自乐。

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

你可能感兴趣的:(笔记,深度学习,神经网络,pytorch)