OpenCV DNN 模塊-風(fēng)格遷移

風(fēng)格遷移5 - 副本.png

本文主要介紹OpenCV的DNN模塊的使用。OpenCV的DNN模塊自從contrib倉庫開始塌西,就是只支持推理他挎,不支持訓(xùn)練。但是僅僅只是推理方面捡需,也夠強(qiáng)大了“旖埃現(xiàn)在OpenCV已經(jīng)支持TensorFlow、Pytorch/Torch站辉、Caffe呢撞、DarkNet等模型的讀取。本文們就以風(fēng)格遷移為例饰剥,來看一下OpenCV DNN模塊的用法殊霞。

相比于復(fù)雜而耗時的模型訓(xùn)練過程,模型推理就顯得簡單多了汰蓉。簡單來說绷蹲,過程就是:

  1. 加載模型
  2. 輸入圖像預(yù)處理(跟訓(xùn)練過程一樣的方式,增強(qiáng)除外)
  3. 模型推理

1. 加載模型

因為OpenCV只支持推理,所以首先你需要有一個訓(xùn)練好的模型祝钢。OpenCV支持所有主流框架的大部分模型比规。從OpenCV的readNet系列函數(shù)就可以看出來:

  • readNetFromCaffe
  • readNetFromTensorflow
  • readNetFromTorch
  • readNetFromDarknet
  • readNetFromONNX
  • readNetFromModelOptimizer

本文所用風(fēng)格遷移模型是李飛飛的文章<<Perceptual Losses for Real-Time Style Transfer and Super-Resolution>>開源的Torch/Lua的模型,地址在這里:https://github.com/jcjohnson/fast-neural-style拦英。他們提供了十種風(fēng)格遷移的模型苞俘,模型的下載腳本在:https://github.com/jcjohnson/fast-neural-style/blob/master/models/download_style_transfer_models.sh。顯然這里需要用OpenCV的readNetFromTorch函數(shù)去加載模型龄章,由于模型較多,這里提供的函數(shù)可以選擇加載指定的模型:

import cv2

model_base_dir = "/cvpy/style_transfer/models/"
d_model_map = {
    1: "udnie",
    2: "la_muse",
    3: "the_scream",
    4: "candy",
    5: "mosaic",
    6: "feathers",
    7: "starry_night"
}

def get_model_from_style(style: int):
    """
    加載指定風(fēng)格的模型
    :param style: 模型編碼
    :return: model
    """
    model_name = d_model_map.get(style, "mosaic")
    model_path = model_base_dir + model_name + ".t7"
    model = cv2.dnn.readNetFromTorch(model_path)
    return model

2. 圖像預(yù)處理

在OpenCV中乞封,輸入給模型的圖像需要首先被構(gòu)建成一個4維的Blob做裙,看到Blob這個詞感覺是收到了Caffe的影響。在構(gòu)建Blob的時候會做一些諸如resize肃晚、歸一化和縮放之類的簡單預(yù)處理锚贱。OpenCV提供的函數(shù)為:

blobFromImage(image, scalefactor=None, size=None, mean=None, swapRB=None, crop=None, ddepth=None)

這個函數(shù)在構(gòu)建Blob的之前會先做如下計算:

(image - mean) * scalefactor

函數(shù)中的swapRB參數(shù)的含義是swap Blue and Red channels关串,干的是cvtColor(image, cv2.COLOR_BGR2RGB)的事情拧廊。

本文的風(fēng)格遷移所需要做的圖像預(yù)處理很簡單,只是三通道分別減去均值即可晋修。代碼如下:

(h, w) = img.shape[:2]
blob = cv2.dnn.blobFromImage(img, 1.0, (w, h), (103.939, 116.779, 123.680), swapRB=False, crop=False)

3. 模型推理

模型推理過程就是神經(jīng)網(wǎng)絡(luò)模型進(jìn)行一次前向傳播吧碾,在OpenCV中,用以下可讀性非常強(qiáng)的兩行代碼即可完成:

net.setInput(blob)
output = net.forward()

把第一節(jié)構(gòu)建的blob輸入給模型墓卦,然后執(zhí)行一次前向傳播倦春。

得到輸出output再做一些處理使得我們可以更好的可視化圖像:

# reshape輸出結(jié)果, 將減去的平均值加回來,并交換各顏色通道
output = output.reshape((3, output.shape[2], output.shape[3]))
output[0] += 103.939
output[1] += 116.779
output[2] += 123.680
output = output.transpose(1, 2, 0)

效果展示

找一張測試圖片落剪,選擇不同的風(fēng)格睁本,試一下效果。

風(fēng)格遷移5.png

想用自己的圖片風(fēng)格遷移一下嗎忠怖?cvpy.net網(wǎng)站剛部署成功呢堰,來試試吧。
嘗試地址:傳自己的圖片嘗試一下吧凡泣!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枉疼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鞋拟,更是在濱河造成了極大的恐慌往衷,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件严卖,死亡現(xiàn)場離奇詭異席舍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哮笆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門来颤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汰扭,“玉大人,你說我怎么就攤上這事福铅÷苊” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵滑黔,是天一觀的道長笆包。 經(jīng)常有香客問我,道長略荡,這世上最難降的妖魔是什么庵佣? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮汛兜,結(jié)果婚禮上巴粪,老公的妹妹穿的比我還像新娘。我一直安慰自己粥谬,他們只是感情好肛根,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著漏策,像睡著了一般派哲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上掺喻,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天狮辽,我揣著相機(jī)與錄音,去河邊找鬼巢寡。 笑死喉脖,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抑月。 我是一名探鬼主播树叽,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谦絮!你這毒婦竟也來了题诵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤层皱,失蹤者是張志新(化名)和其女友劉穎性锭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叫胖,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡草冈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怎棱。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡哩俭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拳恋,到底是詐尸還是另有隱情凡资,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布谬运,位于F島的核電站隙赁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏梆暖。R本人自食惡果不足惜伞访,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望式廷。 院中可真熱鬧,春花似錦芭挽、人聲如沸滑废。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蠕趁。三九已至,卻和暖如春辛馆,著一層夾襖步出監(jiān)牢的瞬間俺陋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工昙篙, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留腊状,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓苔可,卻偏偏與公主長得像缴挖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子焚辅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容