python图片自动上色_自己实现黑白图片自动上色AI(一)

前言

我们将用两篇文章来从零实现一个自动上色的AI。我们知道人工智能能够学习到图片里面的概率模型,也某一类物体与另外一类物体交错存在的概率,那么有没有可能实现一种AI,看遍上千种物体之后,开始学会知道:皮肤是黄色的,头发是黑色的,牙齿是白色的,水是天蓝的,花是红的,草是绿的,天空是蓝的呢?答案是存在的,也是很多时候我们梦寐以求去寻觅的。那么我们接下来就是真正从零来写一个深度学习应用,去实现这么一个AI。在动手之前,让我们来看一下,我们最终要达到的效果是怎样的:

当我们自己能够实现这个之后, 你就可以。。。自己开发一套系统专门用人工智能给黑白图片着色,甚至给素描着色,或者做一个APP,专门自动给图片上色,给设计师用,上一张图片五毛钱。。。想想还是非常激动,升级CEO,迎娶白富美,走向人生巅峰就在眼前…… 好了梦想是非常美好的但是不能贪杯哦,让我们直接开始吧!

我们做一个简单版本的自动上色AI之后的效果:

简直美哭有没有。这是400x400的上色AI,比你以前看到的256x256都要大。闲话不多说,直接开始咯。

1. 从最简单的版本开始

本篇博客是阅读了很多论文、源码之后才开始写作的,重复造轮子是个bad idea,所以你可能会看到一些borrow的代码(其实几乎是自己从头写的),但是即使是同一行代码我都会做出自己的修改,写上自己的注释,所以大家有任何疑问,欢迎从文章末尾的博客找到我与我进行互动。闲话不多说,在正式开始之前,我简要列举一下图片彩色的几种思路(说实话非常不喜欢一些人写博客把论文直接照搬,甚至把模型结构直接复制粘贴,我敢说他们自己都没有理解论文的真实含义):我们知道图片正常情况下是RGB的,这样的话图片的颜色信息就被分散在了R,G,B三个通道里,我们要做AI上色,首先你肯定要有黑白图片吧,黑白图片都没有那还上个毛?而黑白图片是gray也就是灰度图,灰度图只有一个通道,这和我们熟悉的mnist是一样的,用这个输入,输出是啥?那么这里就引出了一个新的图片制式,LAB,也就是明度+颜色A+颜色B,这里的颜色A是红绿,颜色B是黄蓝,而明度里面并没有包含颜色的信息,因此使用LAB来做自动上色简直是再合适不过;

上面说的办法用的还是x是灰度图,y是原图对应的ab通道,那么有没有办法用生成对抗网络来生成一张彩色的图呢?答案是有的,这种方法思路是训练一个G,专门从灰度图生成彩色图,训练一个D,专门辨别这张图和原图的差距是多少,通过训练来生成一个强大无比的G,专门生成彩色图。

还有一些其他的思路,比如Recursive PixelColor,就是用RNN来对图片像素级别的学习,从而生成彩色图,但是本质上也和第一种方法类似,只不过用的网络模型不同。

好了,概览了人类所能搞出的一些方法后,我们就得评估一下了。用哪种方法好呢?如果你现在正在看这篇文章,那么你算是走了狗*运,我们不会实现所有的方法(摊手)。但是我们会通过三个阶段来从0制作一个自动上色程序,分为 simple, advance, complex三个版本。当然啦,代码是从少到多了。而我们采用的思路呢,就是第一种,大家别小看第一种方法,很多专业的上色程序说不定就是第一种做出来的,只要你的模型够复杂,你的训练数据足够多,你的网络可以收敛,上色的效果绝对是杠杠的!

OK,让我们直接从最简单的版本开始吧!

开始之前,我们得新建一个colorize的文件夹,然后 touch simple.py ,新建一个python文件,我们依旧采用python3,当然也可以兼容python2啦,如果你有pycharm的话就更好啦。开始写一个简单的函数把:

"""

this file is the simple version of colorize

you are going to need skimage and keras for it

any version should be compatible

"""

import keras

import tensorflow as tf

from skimage.io import imread, imsave

from skimage.color import rgb2gray, gray2rgb, rgb2lab, lab2rgb

fr

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值