国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

計(jì)算機(jī)畢設(shè) 基于生成對(duì)抗網(wǎng)絡(luò)的照片上色動(dòng)態(tài)算法設(shè)計(jì)與實(shí)現(xiàn) - 深度學(xué)習(xí) opencv python

這篇具有很好參考價(jià)值的文章主要介紹了計(jì)算機(jī)畢設(shè) 基于生成對(duì)抗網(wǎng)絡(luò)的照片上色動(dòng)態(tài)算法設(shè)計(jì)與實(shí)現(xiàn) - 深度學(xué)習(xí) opencv python。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


1 前言

?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。

為了大家能夠順利以及最少的精力通過(guò)畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天要分享的是

?? 基于生成對(duì)抗網(wǎng)絡(luò)的照片上色動(dòng)態(tài)算法設(shè)計(jì)與實(shí)現(xiàn)

??學(xué)長(zhǎng)這里給一個(gè)題目綜合評(píng)分(每項(xiàng)滿分5分)

  • 難度系數(shù):3分
  • 工作量:3分
  • 創(chuàng)新點(diǎn):4分

計(jì)算機(jī)畢設(shè) 基于生成對(duì)抗網(wǎng)絡(luò)的照片上色動(dòng)態(tài)算法設(shè)計(jì)與實(shí)現(xiàn) - 深度學(xué)習(xí) opencv python,畢業(yè)設(shè)計(jì),python,畢設(shè)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-683733.html

1 課題背景

隨著科技的發(fā)展,現(xiàn)在已經(jīng)沒有朋友會(huì)再去買膠卷拍照片了。不過(guò)對(duì)于很多70、80后來(lái)說(shuō),他們家中還保存著大量之前拍攝的膠卷和老照片。這些老照片是一個(gè)時(shí)代的記憶,記錄著我們生活中的點(diǎn)點(diǎn)滴滴。不過(guò)時(shí)代發(fā)展了,這些老照片的保存和瀏覽也應(yīng)該與時(shí)俱進(jìn)。在本期文章中,我們就介紹如何將這些老照片轉(zhuǎn)化為數(shù)字照片,更方便大家在電腦或者手機(jī)上瀏覽、保存和回憶。

本項(xiàng)目中我們利用生成對(duì)抗網(wǎng)絡(luò)-GAN和圖像動(dòng)作驅(qū)動(dòng)-First Order Motion Model來(lái)給老照片上色并使它動(dòng)起來(lái)。

2 GAN(生成對(duì)抗網(wǎng)絡(luò))

2.1 簡(jiǎn)介

**GANs(Generative adversarial networks,對(duì)抗式生成網(wǎng)絡(luò))**可以把這三個(gè)單詞拆分理解。

  • Generative:生成式模型
  • Adversarial:采取對(duì)抗的策略
  • Networks:網(wǎng)絡(luò)(不一定是深度學(xué)習(xí))

模型通過(guò)框架中(至少)兩個(gè)模塊:生成模型(Generative Model)和判別模型(Discriminative Model)的互相博弈學(xué)習(xí)產(chǎn)生相當(dāng)好的輸出。原始 GAN 理論中,并不要求 G 和 D 都是神經(jīng)網(wǎng)絡(luò),只需要是能擬合相應(yīng)生成和判別的函數(shù)即可。但實(shí)用中一般均使用深度神經(jīng)網(wǎng)絡(luò)作為 G 和 D 。

計(jì)算機(jī)畢設(shè) 基于生成對(duì)抗網(wǎng)絡(luò)的照片上色動(dòng)態(tài)算法設(shè)計(jì)與實(shí)現(xiàn) - 深度學(xué)習(xí) opencv python,畢業(yè)設(shè)計(jì),python,畢設(shè)

2.2 基本原理

這里介紹的是原生的GAN算法,雖然有一些不足,但提供了一種生成對(duì)抗性的新思路。放心,我這篇博文不會(huì)堆一大堆公式,只會(huì)提供一種理解思路。

理解GAN的兩大護(hù)法G和D,生成對(duì)抗網(wǎng)絡(luò)(GAN)由2個(gè)重要的部分構(gòu)成:

  • 生成器(Generator):通過(guò)機(jī)器生成數(shù)據(jù)(大部分情況下是圖像),負(fù)責(zé)憑空捏造數(shù)據(jù)出來(lái),目的是“騙過(guò)”判別器
  • 判別器(Discriminator):判斷這張圖像是真實(shí)的還是機(jī)器生成的,負(fù)責(zé)判斷數(shù)據(jù)是不是真數(shù)據(jù),目的是找出生成器做的“假數(shù)據(jù)”

計(jì)算機(jī)畢設(shè) 基于生成對(duì)抗網(wǎng)絡(luò)的照片上色動(dòng)態(tài)算法設(shè)計(jì)與實(shí)現(xiàn) - 深度學(xué)習(xí) opencv python,畢業(yè)設(shè)計(jì),python,畢設(shè)

這樣可以簡(jiǎn)單的看作是兩個(gè)網(wǎng)絡(luò)的博弈過(guò)程。在最原始的GAN論文里面,G和D都是兩個(gè)多層感知機(jī)網(wǎng)絡(luò)。首先,注意一點(diǎn),GAN操作的數(shù)據(jù)不一定非得是圖像數(shù)據(jù),不過(guò)為了更方便解釋,用圖像數(shù)據(jù)為例解釋以下GAN:

計(jì)算機(jī)畢設(shè) 基于生成對(duì)抗網(wǎng)絡(luò)的照片上色動(dòng)態(tài)算法設(shè)計(jì)與實(shí)現(xiàn) - 深度學(xué)習(xí) opencv python,畢業(yè)設(shè)計(jì),python,畢設(shè)

tensorflow實(shí)現(xiàn)

import tensorflow as tf


def load_dataset(mnist_size, mnist_batch_size, cifar_size, cifar_batch_size,):
  """ load mnist and cifar10 dataset to shuffle.

  Args:
    mnist_size: mnist dataset size.
    mnist_batch_size: every train dataset of mnist.
    cifar_size: cifar10 dataset size.
    cifar_batch_size: every train dataset of cifar10.

  Returns:
    mnist dataset, cifar10 dataset

  """
  # load mnist data
  (mnist_train_images, mnist_train_labels), (_, _) = tf.keras.datasets.mnist.load_data()

  # load cifar10 data
  (cifar_train_images, cifar_train_labels), (_, _) = tf.keras.datasets.cifar10.load_data()

  mnist_train_images = mnist_train_images.reshape(mnist_train_images.shape[0], 28, 28, 1).astype('float32')
  mnist_train_images = (mnist_train_images - 127.5) / 127.5  # Normalize the images to [-1, 1]

  cifar_train_images = cifar_train_images.reshape(cifar_train_images.shape[0], 32, 32, 3).astype('float32')
  cifar_train_images = (cifar_train_images - 127.5) / 127.5  # Normalize the images to [-1, 1]

  # Batch and shuffle the data
  mnist_train_dataset = tf.data.Dataset.from_tensor_slices(mnist_train_images)
  mnist_train_dataset = mnist_train_dataset.shuffle(mnist_size).batch(mnist_batch_size)

  cifar_train_dataset = tf.data.Dataset.from_tensor_slices(cifar_train_images)
  cifar_train_dataset = cifar_train_dataset.shuffle(cifar_size).batch(cifar_batch_size)

  return mnist_train_dataset, cifar_train_dataset

3 DeOldify 框架

本項(xiàng)目中用到的上色就用到了DeOldify 框架,DeOldify 創(chuàng)建的目的是為了給黑白照片上色,但讓人驚艷的是它除了能處理圖片外,也可以處理視頻;

DeOldify 的核心網(wǎng)絡(luò)框架是 GAN ,對(duì)比以前上色技術(shù)有以下幾個(gè)特點(diǎn):

  • 1,老照片中的偽影在上色過(guò)程中會(huì)被消除;
  • 2,老照片的人臉部位來(lái)說(shuō),處理后皮膚會(huì)變得更光滑;
  • 3,呈現(xiàn)更詳細(xì)、真實(shí)的渲染效果;

實(shí)現(xiàn)過(guò)程

準(zhǔn)備好權(quán)重文件

計(jì)算機(jī)畢設(shè) 基于生成對(duì)抗網(wǎng)絡(luò)的照片上色動(dòng)態(tài)算法設(shè)計(jì)與實(shí)現(xiàn) - 深度學(xué)習(xí) opencv python,畢業(yè)設(shè)計(jì),python,畢設(shè)

相關(guān)代碼

#部分代碼
def deoldify(self,img,render_factor=35):
        """
        風(fēng)格化
        """
        # 轉(zhuǎn)換通道
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        pil_img = Image.fromarray(img)
        # 渲染彩圖
        color_img = self.deoldify_model.filter(
            pil_img, pil_img, render_factor=render_factor,post_process=True
        )
        color_img = np.asarray(color_img)
        color_img = cv2.cvtColor(color_img, cv2.COLOR_RGB2BGR)
        # 轉(zhuǎn)為numpy圖
        print('deoldify 轉(zhuǎn)換成功')
        return np.asarray(color_img)

實(shí)現(xiàn)效果:

計(jì)算機(jī)畢設(shè) 基于生成對(duì)抗網(wǎng)絡(luò)的照片上色動(dòng)態(tài)算法設(shè)計(jì)與實(shí)現(xiàn) - 深度學(xué)習(xí) opencv python,畢業(yè)設(shè)計(jì),python,畢設(shè)計(jì)算機(jī)畢設(shè) 基于生成對(duì)抗網(wǎng)絡(luò)的照片上色動(dòng)態(tài)算法設(shè)計(jì)與實(shí)現(xiàn) - 深度學(xué)習(xí) opencv python,畢業(yè)設(shè)計(jì),python,畢設(shè)

4 First Order Motion Model

First Order Motion model的任務(wù)是image animation,給定一張?jiān)磮D片,給定一個(gè)驅(qū)動(dòng)視頻,生成一段視頻,其中主角是源圖片,動(dòng)作是驅(qū)動(dòng)視頻中的動(dòng)作,源圖像通常包含一個(gè)主體,驅(qū)動(dòng)視頻包含一系列動(dòng)作。

通俗來(lái)說(shuō),F(xiàn)irst Order Motion能夠?qū)⒔o定的驅(qū)動(dòng)視頻中的人物A的動(dòng)作遷移至給定的源圖片中的人物B身上,生成全新的以人物B的臉演繹人物A的表情的視頻。

以人臉表情遷移為例,給定一個(gè)源人物,給定一個(gè)驅(qū)動(dòng)視頻,可以生成一個(gè)視頻,其中主體是源人物,視頻中源人物的表情是由驅(qū)動(dòng)視頻中的表情所確定的。通常情況下,我們需要對(duì)源人物進(jìn)行人臉關(guān)鍵點(diǎn)標(biāo)注、進(jìn)行表情遷移的模型訓(xùn)練。

基本框架

first-order 的算法框架如下圖所示,主要包括三個(gè)部分的網(wǎng)絡(luò),keyporint detector 檢測(cè)圖像中的關(guān)鍵點(diǎn),以及每個(gè)關(guān)鍵點(diǎn)對(duì)應(yīng)的jaccobian矩陣;dense motion network 基于前面的結(jié)果生成最終的transform map 以及occulation map;使用transform map 和 occulation map 對(duì)編碼后的source feature 做變換和mask處理,再decoder 生成出最終的結(jié)果。

計(jì)算機(jī)畢設(shè) 基于生成對(duì)抗網(wǎng)絡(luò)的照片上色動(dòng)態(tài)算法設(shè)計(jì)與實(shí)現(xiàn) - 深度學(xué)習(xí) opencv python,畢業(yè)設(shè)計(jì),python,畢設(shè)

本項(xiàng)目相關(guān)代碼

    def FOM_video(self,driving_video,source_image,result_video):

        # 讀取圖片
        source_image = imageio.imread(source_image)
        # 讀取視頻
        reader = imageio.get_reader(driving_video)
        fps = reader.get_meta_data()['fps']
        driving_video = []
        try:
            for im in reader:
                driving_video.append(im)
        except RuntimeError:
            pass
        reader.close()
        # 預(yù)處理
        source_image = resize(source_image, (255, 255))[..., :3]
        driving_video = [resize(frame, (255, 255))[..., :3] for frame in driving_video]
        
        # 推理
        predictions = self.make_animation(source_image, driving_video, self.fom_generator, self.fom_kp_detector, relative=True, adapt_movement_scale=True, cpu=True)
        # 保存
        imageio.mimsave(result_video, [img_as_ubyte(frame) for frame in predictions], fps=fps)
        
driving_video = './images/test2.mp4'
source_image = './images/out2.jpg'
result_video = './putput/result.mp4'
# 圖像動(dòng)起來(lái)
gan.FOM_video(driving_video, source_image,result_video)

運(yùn)行如下命令,實(shí)現(xiàn)表情動(dòng)作遷移。其中,各參數(shù)的具體使用說(shuō)明如下:

  • driving_video: 驅(qū)動(dòng)視頻,視頻中人物的表情動(dòng)作作為待遷移的對(duì)象。本項(xiàng)目中驅(qū)動(dòng)視頻路徑為 “work/driving_video.MOV”,大家可以上傳自己準(zhǔn)備的視頻,更換 driving_video 參數(shù)對(duì)應(yīng)的路徑;
  • source_image: 原始圖片,視頻中人物的表情動(dòng)作將遷移到該原始圖片中的人物上。這里原始圖片路徑使用 “work/image.jpeg”,大家可以使用自己準(zhǔn)備的圖片,更換 source_image 參數(shù)對(duì)應(yīng)的路徑;
  • relative: 指示程序中使用視頻和圖片中人物關(guān)鍵點(diǎn)的相對(duì)坐標(biāo)還是絕對(duì)坐標(biāo),建議使用相對(duì)坐標(biāo),若使用絕對(duì)坐標(biāo),會(huì)導(dǎo)致遷移后人物扭曲變形;
  • adapt_scale: 根據(jù)關(guān)鍵點(diǎn)凸包自適應(yīng)運(yùn)動(dòng)尺度;
  • ratio: 針對(duì)多人臉,將框出來(lái)的人臉貼回原圖時(shí)的區(qū)域占寬高的比例,默認(rèn)為0.4,范圍為【0.4,0.5】

命令運(yùn)行成功后會(huì)在ouput文件夾生成名為result.mp4的視頻文件,該文件即為動(dòng)作遷移后的視頻。

實(shí)現(xiàn)效果:

,若使用絕對(duì)坐標(biāo),會(huì)導(dǎo)致遷移后人物扭曲變形;

  • adapt_scale: 根據(jù)關(guān)鍵點(diǎn)凸包自適應(yīng)運(yùn)動(dòng)尺度;
  • ratio: 針對(duì)多人臉,將框出來(lái)的人臉貼回原圖時(shí)的區(qū)域占寬高的比例,默認(rèn)為0.4,范圍為【0.4,0.5】

命令運(yùn)行成功后會(huì)在ouput文件夾生成名為result.mp4的視頻文件,該文件即為動(dòng)作遷移后的視頻。

實(shí)現(xiàn)效果:

計(jì)算機(jī)畢設(shè) 基于生成對(duì)抗網(wǎng)絡(luò)的照片上色動(dòng)態(tài)算法設(shè)計(jì)與實(shí)現(xiàn) - 深度學(xué)習(xí) opencv python,畢業(yè)設(shè)計(jì),python,畢設(shè)

5 最后

到了這里,關(guān)于計(jì)算機(jī)畢設(shè) 基于生成對(duì)抗網(wǎng)絡(luò)的照片上色動(dòng)態(tài)算法設(shè)計(jì)與實(shí)現(xiàn) - 深度學(xué)習(xí) opencv python的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包