1. 程式人生 > >谷歌的Deepdream實現

谷歌的Deepdream實現

最近學習tensorflow,聽說谷歌的Deepdream比較有趣,就實現一下,但是,畫面有的好恐怖。

先上程式碼:

gen_deepdream.py

# coding:utf-8
from __future__ import print_function
import os
from io import BytesIO
import numpy as np
from functools import partial
import PIL.Image
import scipy.misc
import tensorflow as tf

graph = tf.Graph()
model_fn = 'tensorflow_inception_graph.pb'
sess = tf.InteractiveSession(graph=graph)
with tf.gfile.FastGFile(model_fn, 'rb') as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
t_input = tf.placeholder(np.float32, name='input')  # define the input tensor
imagenet_mean = 117.0
t_preprocessed = tf.expand_dims(t_input - imagenet_mean, 0)
tf.import_graph_def(graph_def, {'input': t_preprocessed})

def savearray(img_array, img_name):
    scipy.misc.toimage(img_array).save(img_name)
    print('img saved: %s' % img_name)

def visstd(a, s=0.1):
    return (a - a.mean()) / max(a.std(), 1e-4) * s + 0.5

def resize_ratio(img, ratio):
    min = img.min()
    max = img.max()
    img = (img - min) / (max - min) * 255
    img = np.float32(scipy.misc.imresize(img, ratio))
    img = img / 255 * (max - min) + min
    return img

def resize(img, hw):
    min = img.min()
    max = img.max()
    img = (img - min) / (max - min) * 255
    img = np.float32(scipy.misc.imresize(img, hw))
    img = img / 255 * (max - min) + min
    return img

def calc_grad_tiled(img, t_grad, tile_size=512):
    sz = tile_size
    h, w = img.shape[:2]
    sx, sy = np.random.randint(sz, size=2)
    img_shift = np.roll(np.roll(img, sx, 1), sy, 0)  # 先在行上做整體移動,再在列上做整體移動
    grad = np.zeros_like(img)
    for y in range(0, max(h - sz // 2, sz), sz):
        for x in range(0, max(w - sz // 2, sz), sz):
            sub = img_shift[y:y + sz, x:x + sz]
            g = sess.run(t_grad, {t_input: sub})
            grad[y:y + sz, x:x + sz] = g
    return np.roll(np.roll(grad, -sx, 1), -sy, 0)

def tffunc(*argtypes):
    placeholders = list(map(tf.placeholder, argtypes))
    def wrap(f):
        out = f(*placeholders)
        def wrapper(*args, **kw):
            return out.eval(dict(zip(placeholders, args)), session=kw.get('session'))
        return wrapper
    return wrap

def render_deepdream(t_obj, img0,
                     iter_n=10, step=1.5, octave_n=4, octave_scale=1.4):
    t_score = tf.reduce_mean(t_obj)
    t_grad = tf.gradients(t_score, t_input)[0]

    img = img0
    # 同樣將影象進行金字塔分解
    # 此時提取高頻、低頻的方法比較簡單。直接縮放就可以
    octaves = []
    for i in range(octave_n - 1):
        hw = img.shape[:2]
        lo = resize(img, np.int32(np.float32(hw) / octave_scale))
        hi = img - resize(lo, hw)
        img = lo
        octaves.append(hi)

    # 先生成低頻的影象,再依次放大並加上高頻
    for octave in range(octave_n):
        if octave > 0:
            hi = octaves[-octave]
            img = resize(img, hi.shape[:2]) + hi
        for i in range(iter_n):
            g = calc_grad_tiled(img, t_grad)
            img += g * (step / (np.abs(g).mean() + 1e-7))
            print('.', end=' ')

    img = img.clip(0, 255)
    savearray(img, 'deepdream.jpg')

if __name__ == '__main__':
    img0 = PIL.Image.open('test.jpg')
    img0 = np.float32(img0)

    name = 'mixed4d_3x3_bottleneck_pre_relu'
    channel = 139
    layer_output = graph.get_tensor_by_name("import/%s:0" % name)
    render_deepdream(layer_output[:, :, :, channel], img0)

    # name = 'mixed4c'
    # layer_output = graph.get_tensor_by_name("import/%s:0" % name)
    # render_deepdream(tf.square(layer_output), img0)

結果:


是它:

和它:


生成所得。

程式碼中其他需要的,可以留言傳送給你。

相關推薦

【深度學習】deepdream原理及tensorflow實現

什麼是DeepDream? DeepDream是谷歌釋出的對卷積神經網路(CNN)進行視覺化的方法,當然它的用途不僅限於此,我們可以通過它讓機器“做夢”,以下是一些效果: 可以看到計算機將自然影象的

瀏覽器實現跨域

大家在做http請求的時候可能會遇到跨域問題,這裡為大家提供解決方案,親自實驗有效。 一般是報上述錯誤。   首先在C盤新建一個資料夾,命名按照下面的來。 開啟谷歌瀏覽器的設定 在“目標” 的exe後面新增下面這段內容,不要忘記打空格。並且下面這段內容不要放在包含“exe”的雙

chrome瀏覽器實現多使用者登入

Chrome谷歌瀏覽器實現多使用者登入 在工作和生活中,有時候會用不同的賬戶登入同一個系統,總是退出再換另一個賬號登入的話就比較麻煩,也很浪費時間,今天學到了一個小技巧–谷歌瀏覽器的多使用者管理,使用之後,對於多使用者登入的切換方便多了~ 工具/原料 Chrome瀏覽器 實現

地圖實現車輛位置實時跟蹤

谷歌地圖沒有直接給路書的功能,在這裡模擬一個,車輛上會隨時傳一個座標值,通過後端的橋接,即時反饋給前端這些資料,得到座標點,就可以進行地圖打點,實現一種類似導航的效果,來展示位置所在。 本 Chat 內容有: 實時位置展示; 路線回放功能; 路線記錄功能。 通過本次 Chat

Deepdream實現

最近學習tensorflow,聽說谷歌的Deepdream比較有趣,就實現一下,但是,畫面有的好恐怖。先上程式碼:gen_deepdream.py# coding:utf-8 from __future__ import print_function import os fr

廣告Admob在cocos2dx上通過回調實現底部Banner

rac dea oncreate match orien googl sid onresume clu 首先說明我的開發平臺,以免由於平臺問題造成不必要的誤解: cocos2dx-3.4 ndk-r9d eclipse Admob是谷歌官方廣告,已經集成在google_

開源的TensorFlow Object Detection API視頻物體識別系統實現教程

cti blog tail xiaoxiao pan clas post ont 谷歌 教程:http://blog.csdn.net/xiaoxiao123jun/article/details/76605928 全部代碼:https://github.com/lyj83

js 利用canvas + flv.js實現 視頻流 截屏 、本地下載功能實現,兼容火狐,, 截屏跨域的坑

font 方案 function can 屬性和方法 load() com DG ren 1 本地視頻截屏(canvsa)    <!DOCTYPE html> <html> <head> <meta charset=

開源整合學習工具AdaNet:2017年提出的演算法終於實現

曉查 編譯整理量子位 報道 | 公眾號 QbitAI 最近,谷歌在GitHub上釋出了用TensorFlow實現的AutoML框架——AdaNet,它改進了整合學習的方法,能以最少的專家干預實現自動習得高質量模型。 谷歌AI研究團曾在2017年的ICML上提出了AdaNet:人

兄弟公司暫停隱形眼鏡測血糖研究:技術無法實現

@央廣軍事11月10日訊息,2018中國航展上首次公開展出的“瞭望者Ⅱ”察打一體導彈無人艇,是剛剛成功進行首發導彈飛行試驗命中靶心的實艇,試驗成功後隨即吊裝到展位與公眾見面。據媒體此前報道,該艇是中國第一艘導彈無人艇,也是繼以色列拉斐爾海上騎士後全球第二個成功發射導彈的無人艇,填補了國內導彈無人艇這一技術空白

雲配置FTP主動模式,使用寶塔的FTP儲存空間外掛實現自動備份資料

最近谷歌雲註冊就送300刀,就擼了一個用來做資料備份,發現FTP使用flashfxp能連線上,但用寶塔的FTP儲存空間外掛就一直連線不上,按寶塔論壇的方法還是不管用(https://www.bt.cn/bbs/forum.php?mod=viewthread&tid=1903&extra=),

使用翻譯讓你的網站也實現多國語言版

我們經常會看到訪問一些外國網站的時候,會在網站底部或者頂部出現您當前網頁的網頁需要翻譯的工具條,讓你很輕鬆的翻譯成自己熟悉的語言,這樣的網站使用者體驗絕對是非常讚的,所以呢,當你發現自己的網站只有簡體中文,但卻被不同語言的使用者訪問,他們很苦惱,你網站上有大篇大篇精彩的文章,他們卻不知所云。你是不是自己也很鬱

1094 的招聘——C++實現

題目 1094 谷歌的招聘 (20 分) 2004 年 7 月,谷歌在矽谷的 101 號公路邊豎立了一塊巨大的廣告牌(如下圖)用於招聘。內容超級簡單,就是一個以 .com 結尾的網址,而前面的網址是一個 10 位素數,這個素數是自然常數 e 中最早出現的 10 位連續數字。能找

基於開源的TensorFlow Object Detection API視訊物體識別系統實現教程

安裝Python 進入Python3.6.2下載頁,選擇 Files 中Windows平臺的Python安裝包,下載並安裝(本人安裝的是3.6.2版本的python,可根據實際情況下載不同版本的python) 安裝TensorFlow 進入TensorFlow

利用object_detection API實現物體識別(知識總結)

這兩天想著實現一個實時物體識別的程式,正好了解到谷歌的object_detection API可以實時呼叫攝像頭進行識別畫面內的物體,所以就收集了相關資料學習了一下。 要準備的東西: 安裝谷歌object_detection API 安裝python3.5(本人的Mac

selenium+python實現頁面開啟-自動化第一步

1python和selenium環境配置完成 2需要下載對應的谷歌瀏覽器版本的chromedriver 3將下載的chromedriver解壓之後放在python安裝的根目錄下面 4程式碼編寫 如: from selenium import webdriver driver

用js實現複製內容到作業系統貼上板(相容IE、、火狐等瀏覽器)

一、如果只考慮IE瀏覽器,可以直接用原聲js實現 if(window.clipboardData){ //清空作業系統貼上板 window.clipboardData.clearData(); //將需要複製的內容複製到作業系統貼上板 window.clipbo

js實現伺服器端pdf檔案下載,支援

1.txt文字檔案實現下載而不是在瀏覽器中開啟 對於txt檔案發現下面的方法並不適用,ie瀏覽器會自動開啟,通過查詢發現通過《download.js》下載download.js,頁面引用此js後,直接呼叫 download("檔案路徑","檔名稱","text/plain") 就可以直接

對於開源的TensorFlow Object Detection API視訊物體識別系統實現教程

本教程針對Windows10實現谷歌近期公佈的TensorFlow Object Detection API視訊物體識別系統,其他平臺也可借鑑。 本教程將網路上相關資料篩選整合(文末附上參考資料連結),旨在為快速搭建環境以及實現視訊物體識別功能提供參考,關於此

DataFlow程式設計模型以及Spark/Flink/StreamCQL的相關實現

流式計算框架程式設計介面的標準化,傻瓜化,SQL化,自打穀歌發表Dataflow程式設計模型的Paper起,就有走上臺面的趨勢。各家計算框架都開始認真考慮相關的問題,儼然成為大家競爭的熱點方向。在過去一年多的時間裡,Beam/Flink/Spark在這方面的努力和相關工作也逐