在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

通過深度學習方法為黑白老照片自動上色,帶我們重新憶起那段老時光!

電子工程師 ? 來源:未知 ? 作者:李倩 ? 2018-09-07 10:13 ? 次閱讀

我們知道,深度學習幾乎已經應用在每一個領域,但如果我們能夠構建一個基于深度學習的模型,讓它能夠給老照片著色,重現我們童年的舊回憶,這該多么令人激動啊!那么我們要怎么做呢?本文的作者將為大家介紹一個教程,通過深度學習方法為黑白老照片自動上色,帶我們重新憶起那段老時光!

現如今,給照片著色通常是在 PS 中手工完成的。

所以說,如果要給一幅照片著色的話,短時間內是不可能完成的。它需要廣泛的研究,要知道,單是一張臉的著色,就需要多達20層粉色、綠色和藍色的色調才能使照片擁有恰到好處的效果。

現在,我要介紹的這個簡單的神經網絡——Inception Resnet V2,已經訓練了120萬張圖像,可以幫助我們完成著色的任務。為了能夠實現著色,我們將用 Unsplash 的肖像來訓練這個神經網絡。

介紹

在本節中,我將就如何渲染圖像、數字顏色的基礎知識以及神經網絡的主要邏輯進行概述。

黑白圖像可以用像素網格表示,每個像素都有與其亮度相對應的值。這些值的范圍是0~255,對應的是從黑到白。

彩色圖像是由三層組成:紅色層、綠色層和藍色層。你可以想象一下,在白色背景上將綠葉分成三個通道。直覺上,你可能會認為植物只存在于綠色層中。

但是,如下圖所示,葉子在所有三個通道中都存在。這些層不僅決定了顏色,還決定了亮度。

例如,要得到白色,你需要所有的顏色均勻分布。通過增加等量的紅色和藍色,會使綠色變得更亮。因此,彩色圖像使用三層來對顏色和對比度進行編碼:

和黑白圖像一樣,彩色圖像中的每一層,也有0~255的值。值0表示這個層中沒有顏色。如果像素網格所有顏色通道的值都為0,那么這個圖像像素就是黑色的。

神經網絡在輸入值和輸出值之間創建了一種關系。為了能夠更為準確地完成著色任務,網絡需要找到能夠將灰度圖像和彩色圖像聯系起來的特征。

總的來說就是,我們需要找到能夠將灰度值網格鏈接到三個顏色網格的特征。

f()是神經網絡,[B&W]是我們的輸入,[R]、[G]、[B]是我們的輸出

現在,隨著數據集的增加,由于我們處理的是高分辨率圖像,因此我們需要更多的計算能力。為此,我個人更喜歡使用 Deep Cognition 的 Deep Learning Studio jupyter notebooks,它為Amazon 的深度學習示例提供了GPU,可用來訓練模型。

如果你不熟悉如何使用Deep Learning Studio,可以看看以下這些資料

Deep Learning made easy with Deep Learning Studio?—?An Introduction

http://u6.gg/eqfdu

Deep Learning made easy with Deep Learning Studio?—?Complete Guide

http://u6.gg/eqffa

A video walkthrough of Deep Cognition

http://u6.gg/eqfh7

python代碼和數據集可以從 GitHub 中下載

https://github.com/Rajat2712/Deep-Learning-Studio

環境設置

Deep Learning Studio 最好的地方之一就是,只需單擊 Deep Learning Studio Cloud,就可以輕松地完成安裝,然后隨時隨地使用它們。

▌1.安裝 Python 環境

要安裝 Python 環境,請點擊 DLS 中的 Environments 選項卡。

然后在 Available Environments 單擊你要安裝的環境。

對于這項任務,我們將安裝以下環境:

Python3

Tensorflow-gpu-1.6.0

Keras-gpu-2.1.5

▌2.安裝python包

單擊啟動環境。然后點擊菜單的 Open New Terminal 打開終端。

在終端中鍵入以下命令:

1pipinstallscikit-image

上傳數據集

打開文件瀏覽器,并為這個項目創建一個新文件夾。上傳在 Github 存儲庫中可用的數據集。

如果需要自定義數據集,可以通過在 train 文件夾中上傳高分辨率的彩色圖像和test文件夾中的灰度圖像來創建。

接下來我們開始編碼

▌導入所有的庫

1importkeras 2fromkeras.applications.inception_resnet_v2importInceptionResNetV2 3fromkeras.preprocessingimportimage 4fromkeras.engineimportLayer 5fromkeras.applications.inception_resnet_v2importpreprocess_input 6fromkeras.layersimportConv2D,UpSampling2D,InputLayer,Conv2DTranspose,Input,Reshape,merge,concatenate 7fromkeras.layersimportActivation,Dense,Dropout,Flatten 8fromkeras.layers.normalizationimportBatchNormalization 9fromkeras.callbacksimportTensorBoard10fromkeras.modelsimportSequential,Model11fromkeras.layers.coreimportRepeatVector,Permute12fromkeras.preprocessing.imageimportImageDataGenerator,array_to_img,img_to_array,load_img13fromskimage.colorimportrgb2lab,lab2rgb,rgb2gray,gray2rgb14fromskimage.transformimportresize15fromskimage.ioimportimsave16importnumpyasnp17importos18importrandom19importtensorflowastf

▌從Train文件夾中讀取所有圖像并加載初始權重值

1#Getimages2X=[]3forfilenameinos.listdir('Train/'):4X.append(img_to_array(load_img('Train/'+filename)))5X=np.array(X,dtype=float)6Xtrain=1.0/255*X7#Loadweights8inception=InceptionResNetV2(weights='imagenet',include_top=True)9inception.graph=tf.get_default_graph()

▌在融合層(fusion layer)兩邊分別創建編碼器和解碼器

Inception ResNet v2 是一個在120萬張圖像上訓練的神經網絡,也是現今最強大的分類器之一。與編碼器并行,輸入圖像也通過 Inception ResNet v2 來運行。提取分類層并將其與編碼器的輸出合并。

通過將學習從分類轉移到著色網絡上,網絡可以對圖片中的內容有所了解。進而使網絡能夠將著色方案與對象表示相匹配。

將encoder_input輸入到我們的編碼器模型中,然后將編碼器模型的輸出與融合層中的 embed_input融合,用融合層的輸出作為解碼器模型的輸入,最后返回最終的輸出decoder_output。

1embed_input=Input(shape=(1000,)) 2#Encoder 3encoder_input=Input(shape=(256,256,1,)) 4encoder_output=Conv2D(64,(3,3),activation='relu',padding='same',strides=2)(encoder_input) 5encoder_output=Conv2D(128,(3,3),activation='relu',padding='same')(encoder_output) 6encoder_output=Conv2D(128,(3,3),activation='relu',padding='same',strides=2)(encoder_output) 7encoder_output=Conv2D(256,(3,3),activation='relu',padding='same')(encoder_output) 8encoder_output=Conv2D(256,(3,3),activation='relu',padding='same',strides=2)(encoder_output) 9encoder_output=Conv2D(512,(3,3),activation='relu',padding='same')(encoder_output)10encoder_output=Conv2D(512,(3,3),activation='relu',padding='same')(encoder_output)11encoder_output=Conv2D(256,(3,3),activation='relu',padding='same')(encoder_output)12#Fusion13fusion_output=RepeatVector(32*32)(embed_input)14fusion_output=Reshape(([32,32,1000]))(fusion_output)15fusion_output=concatenate([encoder_output,fusion_output],axis=3)16fusion_output=Conv2D(256,(1,1),activation='relu',padding='same')(fusion_output)17#Decoder18decoder_output=Conv2D(128,(3,3),activation='relu',padding='same')(fusion_output)19decoder_output=UpSampling2D((2,2))(decoder_output)20decoder_output=Conv2D(64,(3,3),activation='relu',padding='same')(decoder_output)21decoder_output=UpSampling2D((2,2))(decoder_output)22decoder_output=Conv2D(32,(3,3),activation='relu',padding='same')(decoder_output)23decoder_output=Conv2D(16,(3,3),activation='relu',padding='same')(decoder_output)24decoder_output=Conv2D(2,(3,3),activation='tanh',padding='same')(decoder_output)25decoder_output=UpSampling2D((2,2))(decoder_output)26model=Model(inputs=[encoder_input,embed_input],outputs=decoder_output)

現在,我們必須調整圖像的大小來適應 Inception 模型。然后根據模型對像素和顏色值使用預處理器進行格式化。在最后一步中,我們通過 Inception 網絡運行它并提取模型的最后一層。

1defcreate_inception_embedding(grayscaled_rgb): 2grayscaled_rgb_resized=[] 3foriingrayscaled_rgb: 4i=resize(i,(299,299,3),mode='constant') 5grayscaled_rgb_resized.append(i) 6grayscaled_rgb_resized=np.array(grayscaled_rgb_resized) 7grayscaled_rgb_resized=preprocess_input(grayscaled_rgb_resized) 8withinception.graph.as_default(): 9embed=inception.predict(grayscaled_rgb_resized)10returnembed

用ImageDataGenertor可以調整圖像生成器的設置。如此一來得到不會重復的圖像,從而提高了學習率。shear_rangetilts使圖像向左或向右傾斜,其他設置為縮放、旋轉和水平翻轉。

1#Imagetransformer2datagen=ImageDataGenerator(3shear_range=0.2,4zoom_range=0.2,5rotation_range=20,6horizontal_flip=True)7#Generatetrainingdata8batch_size=10

我們使用 Xtrain 文件夾中的圖像,根據上面的設置生成圖像。然后,為X_batch提取黑色層和白色層,并為兩個顏色層提取兩種顏色。

為創建我們的 batch,我們使用經過調整的圖像。將它們轉換為黑白圖像,并通過 Inception ResNet 模型運行它們。

1defimage_a_b_gen(batch_size):2forbatchindatagen.flow(Xtrain,batch_size=batch_size):3grayscaled_rgb=gray2rgb(rgb2gray(batch))4embed=create_inception_embedding(grayscaled_rgb)5lab_batch=rgb2lab(batch)6X_batch=lab_batch[:,:,:,0]7X_batch=X_batch.reshape(X_batch.shape+(1,))8Y_batch=lab_batch[:,:,:,1:]/1289yield([X_batch,create_inception_embedding(grayscaled_rgb)],Y_batch)

現在,我們將使用 “RMSProp” 優化器和均方誤差作為損失函數來編譯模型。

GPU 越強,得到的圖像就越多。通過現在的設置,你可以使用50~100張圖像。steps_per_epoch是通過將訓練圖像的數量除以 batch 大小來計算的。

1#Trainmodel2model.compile(optimizer='rmsprop',loss='mse')3model.fit_generator(image_a_b_gen(batch_size),epochs=50,steps_per_epoch=1)

1.0/255 表示我們使用的是 24 位 RGB 顏色空間,這意味著我們為每個顏色通道使用 0 ~ 255 之間的數字。這將會產生 1670 萬種顏色的組合。

而人類只能感知 200 ~ 1000 萬種顏色,因此,使用再大的顏色空間并沒有多大意義。

與 RGB 顏色空間相比,LAB 顏色空間具有不同的范圍。在 LAB 顏色空間中,顏色光譜 ab 范圍從-128~128。通過將輸出層中的所有值除以 128,將色譜范圍限制在 -1 ~ 1 之間。

將它與神經網絡相匹配,神經網絡也返回 -1 ~ 1 之間的值。

在使用 rgb2lab 函數轉換顏色空間之后,我們選擇灰度層:[:,:,0],這是對神經網絡的輸入。[:,:,1:]選擇兩個顏色層:綠-紅和藍-黃。

1color_me=[]2forfilenameinos.listdir('Test/'):3color_me.append(img_to_array(load_img('Test/'+filename)))4color_me=np.array(color_me,dtype=float)5gray_me=gray2rgb(rgb2gray(1.0/255*color_me))6color_me_embed=create_inception_embedding(gray_me)7color_me=rgb2lab(1.0/255*color_me)[:,:,:,0]8color_me=color_me+.reshape(color_me.shape+(1,))

神經網絡進行訓練后,做出最終的預測,并將其轉化為圖像。

在這里,我們使用一個灰度圖像作為輸入,并通過訓練好的神經網絡來運行它。我們取在 -1 ~ 1 之間所有的輸出值,然后乘以 128,就得到了 Lab 色譜中正確的顏色。

最后,用 三層 0 填充得到一個黑色的 RGB 畫布。然后從測試圖像中,復制灰度圖層。然后將這兩個顏色層添加到 RGB 畫布上。再將這個像素值數組轉換為圖片。

1#Testmodel2output=model.predict([color_me,color_me_embed])3output=output*1284#Outputcolorizations5foriinrange(len(output)):6cur=np.zeros((256,256,3))7cur[:,:,0]=color_me[i][:,:,0]8cur[:,:,1:]=output[i]9imsave("result/img_"+str(i)+".png",lab2rgb(cur))

結果

在小型數據集上的結果,訓練圖像數 = 10,測試圖像數 = 8;

▌測試數據:

▌經過50個輪數之后:

▌經過100個輪數之后:

▌經過1000個輪數之后:

▌經過2000個輪數之后:

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 神經網絡
    +關注

    關注

    42

    文章

    4773

    瀏覽量

    100872
  • 圖像
    +關注

    關注

    2

    文章

    1086

    瀏覽量

    40496
  • 深度學習
    +關注

    關注

    73

    文章

    5506

    瀏覽量

    121258

原文標題:用AI給黑白照片上色,復現記憶中的舊時光

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    前面板自動上色

    利用ini文件前面板自動上色
    發表于 01-07 22:54

    深度學習介紹

    在未來的某個時候,人們必定能夠相對自如地運用人工智能,安全地駕車出行。這個時刻何時到來我無法預見;但我相信,彼時“智能”會顯現出更“切實”的意義。與此同時,通過深度學習方法,人工智能的實際應用能夠在
    發表于 11-11 07:55

    開源神經網絡圖片上色技術解析 解密深度學習自動上色

    如何利用深度神經網絡給圖片自動上色,本文介紹了開源神經網絡圖片上色技術,解析深度學習自動上色
    發表于 01-10 13:21 ?1.2w次閱讀

    模型驅動深度學習的標準流程與學習方法解析

    模型驅動的深度學習方法近年來,深度學習在人工智能領域一系列困難問題上取得了突破性成功應用。
    的頭像 發表于 01-24 11:30 ?4935次閱讀
    模型驅動<b class='flag-5'>深度</b><b class='flag-5'>學習</b>的標準流程與<b class='flag-5'>學習方法</b>解析

    人類無法做到的事AI卻輕易做到了

    他們給遭遇戰火前的沖繩照片重新上色,還原已經逝去的美景。 利用 AI 技術可以完成一些人類無法做到的事情,比如給黑白照片重新
    的頭像 發表于 03-29 16:25 ?3883次閱讀

    深度解析機器學習三類學習方法

    在機器學習(Machine learning)領域。主要有三類不同的學習方法:監督學習(Supervised learning)、非監督學習(Unsupervised learning
    發表于 05-07 09:09 ?1.4w次閱讀

    如何通過MEC構造基于深度學習自動駕駛汽車緩存

    本文通過使用部署在多接入邊緣計算(MEC)結構上的深度學習方法自動駕駛汽車提出了基于深度
    的頭像 發表于 10-10 09:26 ?4547次閱讀

    Xilinx FPGA如何通過深度學習圖像分類加速機器學習

    了解Xilinx FPGA如何通過深度學習圖像分類示例來加速重要數據中心工作負載機器學習。該演示可通過Alexnet神經網絡模型加速圖像(從ImageNet獲得)分類。它可
    的頭像 發表于 11-28 06:54 ?3822次閱讀

    AI上色對比人工調色 結果令人難以置信

    老照片力求還原真實色彩的目的不同,視頻調色中的黑白上色,會融入更多調色師的主觀意志和創意想法,除了保留真實感外,還要好看,具有觀賞性,甚至為故事服務。
    的頭像 發表于 04-29 14:18 ?6174次閱讀

    你想修復你的老照片

    時代在進步,技術在發展,AI自動修復老照片APP軟件的運用將會越來越智能。
    發表于 07-26 08:43 ?2731次閱讀

    深度討論集成學習方法,解決AI實踐難題

    集成學習方法是一類先進的機器學習方法,這類方法訓練多個學習器并將它們結合起來解決一個問題,在實踐中獲得了巨大成功,并成為機器學習領域的“常青
    發表于 08-16 11:40 ?779次閱讀
    <b class='flag-5'>深度</b>討論集成<b class='flag-5'>學習方法</b>,解決AI實踐難題

    汽車背后的故事 通過深度學習提高和發展車輛感知

    汽車背后的故事 通過深度學習提高和發展車輛感知
    發表于 11-01 08:24 ?2次下載
    汽車背后的故事 <b class='flag-5'>通過深度</b><b class='flag-5'>學習</b>提高和發展車輛感知

    使用深度學習方法對音樂流派進行分類

    電子發燒友網站提供《使用深度學習方法對音樂流派進行分類.zip》資料免費下載
    發表于 02-08 10:02 ?1次下載
    使用<b class='flag-5'>深度</b><b class='flag-5'>學習方法</b>對音樂流派進行分類

    深度學習中的無監督學習方法綜述

    應用中往往難以實現。因此,無監督學習深度學習中扮演著越來越重要的角色。本文旨在綜述深度學習中的無監督
    的頭像 發表于 07-09 10:50 ?803次閱讀

    傳統機器學習方法和應用指導

    用于開發生物學數據的機器學習方法。盡管深度學習(一般指神經網絡算法)是一個強大的工具,目前也非常流行,但它的應用領域仍然有限。與深度學習相比
    的頭像 發表于 12-30 09:16 ?232次閱讀
    傳統機器<b class='flag-5'>學習方法</b>和應用指導
    主站蜘蛛池模板: 女人aaaaa片一级一毛片| 亚洲 欧美 视频| 免费看曰批女人爽的视频网址| 高h办公室| 2018天天弄| 欧美性幼| 亚洲一区二区三区在线| 狠狠色噜噜综合社区| 一级久久久| 色老头久久久久久久久久| 啪啪大片| 黄色a三级免费看| 在线看片福利| 天天干天天干天天干天天 | 欧美成人全部免费观看1314色| 国产精品xxxav免费视频| 性瘾高h姚蕊全文免费阅读| 在线免费观看你懂的| 色综合久久一区二区三区| 99视频热| 天堂成人| 久久亚洲综合中文字幕| 扒开双腿爽爽爽视频www| 国产精品不卡片视频免费观看 | 久久看免费视频| www.成人av.com| 免费看美女毛片| 中文字幕一区二区精品区| 精品精品国产自在久久高清| 色五月激情五月| 国产主播在线播放| 天天搞天天搞| 天堂在线bt| 性欧美极品| 国产成人精品三级在线| 色狠狠狠狠综合影视| 国产网站在线| 久久精品免看国产| 222aaa天堂| 成人网中文字幕色| 日本免费a级片|