重拾旧时光——Bringing-Old-Photos-Back-to-Life

2023-05-16

Bringing-Old-Photos-Back-to-Life

  • Bringing-Old-Photos-Back-to-Life项目简介
    • Bringing-Old-Photos-Back-to-Life项目资源下载与配置
      • Bringing-Old-Photos-Back-to-Life的使用和相关问题的解决

Bringing-Old-Photos-Back-to-Life项目简介



  最近在公众号看到有关Bringing-Old-Photos-Back-to-Life的内容,觉得很有意思,可以将模糊的,褶皱的照片相应的还原,在这里插入图片描述
重拾旧时光的回忆,所以自己尝试一下。

  这个开源的项目在github上可以找到,这里给出项目地址Bringing-Old-Photos-Back-to-Life。这个项目是有关于模糊,褶皱照片的修复的算法,是基于2020微软最新的一篇CPVR的文章,原理简单来说就是用变分自动编码机(VAE)将图像变换到隐藏空间,并在隐空间进行图像恢复操作在这里插入图片描述


Bringing-Old-Photos-Back-to-Life项目资源下载与配置

  该项目包含了测试训练集和资源包,所以先下载该项目,项目地址
https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life
项目也依赖于Synchronized-BatchNorm-PyTorch,文章中也给出了我们配置教程,所以按照教程来配置即可。

  第一步,克隆项目,即下载压缩包并解压

git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life.git



  第二步,配置环境,进入项目的目录下

cd Face_Enhancement/models/networks
git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm .
cd ../../../
cd Global/detection_models
git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm .
cd ../../

然后下载相应的组件

cd Face_Detection/
wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
bzip2 -d shape_predictor_68_face_landmarks.dat.bz2
cd ../
cd Face_Enhancement/
wget https://facevc.blob.core.windows.net/zhanbo/old_photo/pretrain/Face_Enhancement/checkpoints.zip
unzip checkpoints.zip
cd ../
cd Global/
wget https://facevc.blob.core.windows.net/zhanbo/old_photo/pretrain/Global/checkpoints.zip
unzip checkpoints.zip
cd ../

安装依赖项

pip install -r requirements.txt

  更详细的教程可以查看Colab中的内容。

Bringing-Old-Photos-Back-to-Life的使用和相关问题的解决

  对于没有裂痕的图片的修复可以是用这个代码,进入项目文件的目录下

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

其中[test_image_folder_path]是想要修复的图片的目录地址,[output_path]是结果存放的地址,同时这些地址路径要是绝对路径

  如果是有裂痕的图片,代码有所不同

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

  当然文章中给出的代码我在实际运行的情况中还是会出现问题的,这里我对我遇到的问题和相应简单的解决办法进行介绍:

  在对没有裂痕的图片进行修复的时候出现在这里插入图片描述
这里我们可以将Face_Enhancement \ test_face.py中的第40行的代码img_name = img_path[b].split("/")[-1]改为img_name = os.path.split(img_path[b])[-1]问题可以解决。

  该算法的运行实现对GPU的内存很挺高的要求,对于处理高像素的图片,我出现过Skip当前图片的提示,还有CUDA out of memory. Tried to allocate 78.00 MiB (GPU 0; 7.43 GiB total capacity; 6.42 GiB already allocated; 88.94 MiB free; 6.75 GiB reserved in total by PyTorch)这样的报错,主要问题还是内存处理不够,GPU同时处理不了这些操作,为了简单方便,所以我就从输入上,将要处理的图片的像素都先缩放至我电脑可以处理的像素要求,这样可以使算法相应的工作。

  对于处理没有裂痕的图片的操作,我们可以将Global \ test.py中的data_transforms函数中的

h = int(round(oh / 4)*4)
w = int(round(ow / 4)*4)

直接修改为我们想要输入的图片缩放成能处理的像素大小,比如我这里就修改为

w = 450
h = 450

将原始输入图片缩放为450 x 450的像素,即可以正常运行(虽然结果会有点不太好看)。

  对于处理有裂痕的图片,我们可以将Global \ detection.py中ata_transforms函数中if full_size == "full_size"中的

h = int(round(oh / 16) * 16)
w = int(round(ow / 16) * 16)

改为

h = 256
w = 256

这样缩放为256 x 256像素的图片。


  处理完问题后,我们可以来测试一下,我们先对项目给出的图片进行测试。

  对于没有裂痕的图片的处理(这里仅放出部分)

修复前
在这里插入图片描述
修复后
在这里插入图片描述

修复前
在这里插入图片描述
修复后
在这里插入图片描述

修复前
在这里插入图片描述
修复后
在这里插入图片描述
由于调整了像素,所以与原图有所出入,但是图片的清晰程度增加了,我们也可以试试自己的图片,我在网上找了几张图:

修复前
在这里插入图片描述
修复后
在这里插入图片描述

修复前
在这里插入图片描述
修复后
在这里插入图片描述



  对于有裂痕的图片的处理

修复前
在这里插入图片描述
修复后
在这里插入图片描述

修复前
在这里插入图片描述
修复后
在这里插入图片描述

修复前
在这里插入图片描述
修复后
在这里插入图片描述

修复前
在这里插入图片描述
修复后
在这里插入图片描述

同样,我们可以将自己的图片的进行修复,比如我找到的一张:

修复前
在这里插入图片描述
修复后
在这里插入图片描述



总结
  怎么样,是不是觉得这个算法很有意思,那就找出那些照片来修复,重拾那些美好的旧时光,同时,有条件的伙伴可以提高电脑的配置,来修复更高像素的图片。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重拾旧时光——Bringing-Old-Photos-Back-to-Life 的相关文章

  • vector中emplace_back方法的用途

    在写代码的过程中 xff0c CLion提醒我把 span style background color ffd900 push back span 方法替换成 span style background color ffd900 empl
  • Android 任务栈空间,【Android】任务和返回栈(tasks and back stack)

    tasks and back stack 一个Task就是一组activity的集合 这些activity按照它们打开的顺序被放置于一个先进后出的栈中 back stack 用户点击图标打开一个app时 xff0c 该app的task会被移
  • Open eyes in your life

    读到几个故事 xff0c 希望和大家分享 一 成功无捷径 Be proactive 一个青年职员平时工作懒懒散散 xff0c 在转正前一个月他问老板 xff1a 如果我兢兢业业工作一个月 xff0c 我能转正吗 xff1f 老板答道 xff
  • Google+ 照片 api [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有 Google 照片 gdata API 吗 我正在使用谷歌 picasa API但 picasa 对照片有 1 GB 的限制 我想使用我的脚本上
  • Android:后退按钮中的 onSaveInstanceState

    我正在开发一个应用程序 其中我将覆盖后退按钮 我创建了一个复选框 单击后我调用意图 startActivityforResult 并且还保持活动状态为 Override public void onSaveInstanceState Bun
  • 如何通过Flickrj Api访问私人照片?

    我正在通过 Flickr API 进行经过身份验证的调用来访问照片 但我只得到我的公开照片 而没有任何私人照片 下面给出的是我正在使用的代码 Flickr f RequestContext requestContext String fro
  • ror 中使用 Paperclip 进行多次上传

    我正在使用回形针上传一栋建筑物的一张照片 http www youtube com watch v KGmsaXhIdjc我已经用这种方法做到了 但我决定将多张照片上传到一栋建筑 我可以使用回形针来做到这一点还是必须更改它并使用 jQuer
  • iPhone设备上的相册路径是什么?

    我试图将 PNG 文件保存到 iPhone 设备上的相册文件夹中 扩展名为 png 以便保持透明度 我的问题是 UIImageWriteToSavedPhotosAlbum 函数使用的相册路径是什么 我正在使用数据写入文件方法 Thanks
  • 返回上一页,使用 header(“位置:”);在 PHP 中

    这个问题的标题有点解释了我的问题 如何使用以下命令将 PHP 页面访问者重定向回之前的页面header Location URL of previous page try header Location SERVER HTTP REFERE
  • Xcode / Swift:如何实现后退按钮?

    我刚刚开始使用 Xcode 和 Swift 我尝试构建我的第一个 iOS 小应用程序 但现在我遇到了问题 我不知道如何实现后退按钮 以便我回到之前的视图 我的故事板看起来像这样 当我打开 A Z 视图时 我想显示后退箭头 它将返回到 Ite
  • 如何从反应本机页面返回本机视图控制器?

    我用一个包装了一个反应本机页面UIViewController 并用导航控制器推送它 但是如何使用react native js代码弹出到本机页面 最简单的方法是拥有一个引用您的属性UIViewController在你的AppDelegat
  • 返回上一个片段无法正常工作

    我正在使用导航抽屉 当我选择一个项目时 它会正确地将前一个片段替换为我选择的片段 但是如果我打开另一个片段 然后单击后退按钮 它将转到上一个活动而不是上一个活动片段 这样做有什么问题吗 private void selectItem int
  • Android ActionBarSherlock 顶部图标返回

    我正在尝试制作顶部操作栏图标以允许用户返回到上一个屏幕 我试图实现这些代码 但没有一个起作用 任何人都可以指导我吗 我知道这看起来很简单 我是 android 新手 下面是我的代码 问题 当我点击图标按钮时 它只是清除了我的屏幕 而没有转到
  • Javascript / jQuery 后退按钮 - 只要最后一页是当前网站的一部分?

    使用下面的代码 我可以制作一个 后退 按钮 但是有没有办法使链接要求最后一页是当前网站的一部分 document ready function a back click function parent history back return
  • ios7 新的平移手势返回导航堆栈不会清除桌面视图选择

    我有一个类似注释的应用程序 uitableviewcontroller 通过将各个注释推送到导航堆栈来显示它们 我决定使用 ios7 后退按钮和附带的平移手势识别器 我唯一的修改是在推送详细视图控制器之前 通过将来自控制器的 navigat
  • 防止后退按钮关闭对话框

    我试图阻止在 Android 中按后退按钮时关闭 AlertDialog 框 我遵循了两种流行的方法在这个线程中 https stackoverflow com questions 4779954 disable back button i
  • 在 Android 上点击后退按钮时关闭应用程序

    所以我的登录活动是您看到的第一个屏幕 当您点击后退按钮时 它会退出应用程序 很好 所以我再次打开应用程序 登录后 我现在处于我的主要活动中 我该如何做到这一点 以便当我现在点击后退按钮时 它会退出应用程序而不是返回到登录活动 当您推送新活动
  • Android 后退按钮和进度对话框

    我有一个异步任务在工作时显示进度对话框 它调用在UiThread上运行从内部后台操作显示进度对话框 在运行时我想允许使用后退按钮取消操作 其他人遇到过这个问题 当 ProgressDialog 正在运行时 后退按钮不起作用 https st
  • 导航控制器后退按钮可转到上一屏幕之前的屏幕

    我想知道是否可以使用导航控制器按钮返回到上一页 现在 我已经使用此代码定制了按钮 self navigationItem leftBarButtonItem UIBarButtonItem alloc initWithTitle mainL
  • Javascript/jQuery 仅在浏览器后退/前进按钮单击时检测哈希更改

    是否可以仅在浏览器历史记录更改 即 后退 或 前进 按钮 时检测哈希更改 我已经看到了 onBeforeUnload 事件 但该事件不会在哈希更改时触发 因为窗口未卸载 hashchange 事件显然会在哈希值发生变化时触发 有什么解决办法

随机推荐

  • 使用nginx进行负载均衡

    1 nginx负载均衡介绍 nginx应用场景之一就是负载均衡 在访问量较多的时候 xff0c 可以通过负载均衡 xff0c 将多个请求分摊到多台服务器上 xff0c 相当于把一台服务器需要承担的负载量交给多台服务器处理 xff0c 进而提
  • 普通人的第一个Linux发行版-安装Deepin20.5

    1 Deepin系统闲聊 Deepin是Linux系统的发行版之一 Deepin其实在国内已经有相当长的发展时间了 xff0c 个人认为 xff0c 在国内的Linux发行版中 xff0c Deepin可以不夸张的说就是龙头 xff0c 例
  • Deepin20.5安装JDK8

    1 下载OpenJDK Deepin20 5下安装jdk 这里使用AdoptOpenJDK xff0c 版本8 虚拟机使用HotSplot 首先进入AdoptOpenJDK官网进行下载 xff0c 官方地址为 xff1a https ado
  • Deepin20.5安装maven

    1 前置依赖 安装Maven之前 xff0c 首先需要安装JDK xff0c 如何从Deepin中安装JDK xff0c 可以参考 xff1a Deepin20 5安装JDK8 2 下载Maven 官网最新版本已经变为3 8 xff0c 这
  • Python不智能的聊天机器人

    上代码 xff01 亲测好用 本文当做Git库 xff0c 经常更新 xff01 2022 08 17 V0 1 39 39 39 pyinstaller使用方法 home leopader local bin pyinstaller i
  • 厌倦了各种app推送广告?用RSS来订阅自己想看的内容吧

    前言 现在是2022年 xff0c 大数据加上信息大爆炸 xff0c 让各种资讯类App已经到了满天飞的地步 微博 头条 抖音 B站 公众号等等等 xff0c 数之不尽 xff0c 一会看看这个 xff0c 一会看看那个 xff0c 应用来
  • linux安装极狐gitlab

    1 官网寻找安装方式 不管我们使用任何软件 xff0c 最靠谱的方式就是查看官方文档 gitlab提供了相应的安装文档 xff0c 并且有对应的中文文档 地址如下 xff1a https gitlab cn install 我在这里以Cen
  • linux安装jenkins

    1 官网寻找安装方式 进入到jenkins官网 xff0c 找到对应的下载页面 xff1a https www jenkins io download 根据自己系统还有想要使用的版本 xff0c 进行选择即可 这里我们使用CentOS作为示
  • 使用jenkins实现自动化部署springboot应用

    1 前置准备 这里代码仓库使用gitlab 在介绍如何通过gitlab和jenkins进行自动化部署之前 xff0c 需要先安装完成gitlab以及jenkins 两种程序的安装方式以及相关配置可以参看以下内容 xff1a linux中安装
  • 申请免费的国产泛域名证书

    1 申请免费泛域名证书 云服务商提供的免费证书一般都是单独域名证书 xff0c 对于泛域名 xff08 也可以称为子域名 通配符域名 xff09 支持的较少 如果想要使用免费的泛域名 xff0c 则需要付费购买或者使用Let s Encry
  • QT入门初学者——如何新建一个工程项目(详细)

    本文讲的是如果用QT新建一个项目和打开现有的项目 我这里的QT使用的是QT4 xff0c 如果需要安装软件的话去我的后序其他文章里找 xff0c 可以直接下载安装使用 第一步 xff0c 先打开QT程序 打开之后的页面是这样的 xff0c
  • QT入门初学者——如何更改Widget窗口左上角标题的图标

    运行出来之后的界面左上角都是默认窗口的属性值 xff0c 今天教大家怎么个性化设置 首先 xff0c 先打开自己的UI界面 xff0c 鼠标选中Widget xff08 QWidget xff09 在后下角属性调整里面找到下列两个属性值 x
  • QT入门初学者——如何创建和使用资源文件Resource(详细)

    使用QT创建资源文件 xff0c 可以对UI设计 窗口图标等一些需要用到图片或GIF图的地方 首先先拥有一个基本的QT项目 xff0c 可以是全新创建的 xff0c 也可以是现有的 xff0c 打开该项目 点击File gt New Fil
  • C语言题目:HDU - 1408 盐水的故事

    题目描述 挂盐水的时候 xff0c 如果滴起来有规律 xff0c 先是滴一滴 xff0c 停一下 xff1b 然后滴二滴 xff0c 停一 下 xff1b 再滴三滴 xff0c 停一下 xff0c 现在有一个问题 xff1a 这瓶盐水一共有
  • 使用Android Studio创建第一个程序Hello word超详细

    首先 xff0c 打开Android Studio软件 xff0c 双击打开 打开后的页面如下所示 xff0c 点击第一个新建一个项目 点开之后如图所示 xff0c 点击Phone and Tablet xff0c 这个就是手机和平板适用
  • 让我们和机器一起聊天

    Python大法好 xff01 让我们做一个可以聊天的玩意 xff01 Python可以干好多事 xff0c 两天前 xff0c 我有一个想法 xff1a 和电脑交流 我第一个想法就是打造一个字典数据集 xff0c 获取你的输入 xff0c
  • 团体程序设计天梯赛-练习集-001 Hello World (5 分)

    这道超级简单的题目没有任何输入 你只需要在一行中输出著名短句 Hello World 就可以了 输入样例 xff1a 无 输出样例 xff1a Hello World include lt stdio h gt int main void
  • C++20新特性—range(一)

    1 range的概念 Ranges 实际上可理解为一个接口规范 xff08 C 43 43 20中的concept xff09 xff0c 它针对集合 xff0c 提供begin 和end 两个方法 xff0c 返回一个指示类 xff08
  • Ubuntu 终端闪退的一个解决方法

    Ubuntu 终端闪退的一个解决方法 首先看一下 tmp 目录的权限情况 gxp span class hljs variable 64 gxp span span class hljs symbol span span class hlj
  • 重拾旧时光——Bringing-Old-Photos-Back-to-Life

    Bringing Old Photos Back to Life Bringing Old Photos Back to Life项目简介Bringing Old Photos Back to Life项目资源下载与配置Bringing O