linux跑caffe模型的步驟,Caffe初步實踐——使用訓練好的模型完成語義分割任務

Caffe剛剛安裝配置結束,乘熱打鐵!

(一)環境準備

前面我有兩篇文章寫到caffe的搭建,第一篇cpu only ,第二篇是在服務器上搭建的,其中第二篇因為硬件環境更佳我們的步驟稍顯復雜。其實,第二篇也僅僅是caffe的初步搭建完成,還沒有編譯python接口,那么下面我們一起搞定吧!

在這篇博文的結尾,我們再增加編譯Python接口,而這部分內容請參考我的博文《 Ubuntu14.04搭建Caffe(僅cpu) 》http://www.linuxidc.com/Linux/2016-09/135034.htm?,這篇文章從編譯Python接口部分看就好了。

(二)下載模型

作者在github上開源了代碼:Fully Convolutional Networks,我們首先將代碼下載并且解壓到家目錄下。

項目文件結構很清晰,如果想train自己的model,只需要修改一些文件路徑設置即可,這里我們應用已經train好的model來測試一下自己的圖片:

我們下載voc-fcn32s,voc-fcn16s以及voc-fcn8s的caffemodel(根據提供好的caffemodel-url),fcn-16s和fcn32s都是缺少deploy.prototxt的,我們根據train.prototxt稍加修改即可。注意,這里的caffemode-url其實在各個模型的文件夾下面都已經提供給我們了,請讀者細心找一找,看看是不是每一個文件夾下面都有一個caffemode-url的文件?打開里面會有模型的下載地址!

(三)修改infer.py文件

caffe path的加入,由于FCN代碼和caffe代碼是獨立的文件夾,因此,須將caffe的Python接口加入到path中去。這里有兩種方案,一種是在所有代碼中出現import caffe之前,加入:

1 importsys2 sys.path.append('caffe根目錄/python')

另一種一勞永逸的方法是:在終端或者bashrc中將接口加入到PYTHONPATH中:

export PYTHONPATH=caffe根目錄/python:$PYTHONPATH

本次我們采用后者。

在解壓代碼的根目錄下找到一個文件:infer.py。略微修改infer.py,就可以測試我們自己的圖片了,請大家根據自己實際情況來進行修改。

im = Image.open('voc-fcn8s/test.jpeg')?這里指的是測試圖片路徑!

net = caffe.Net('voc-fcn8s/deploy.prototxt', 'voc-fcn8s/fcn8s-heavy-pascal.caffemodel', caffe.TEST)?,這里指的是voc-fcn8s文件下的部署文件和模型。注意,fcn下每一個模型其實都對應于一個文件夾,而每個文件夾下應當放著這個模型的caffemodel文件和prototxt文件!

plt.savefig('test.png')?,這里指的是最終分割的結果應當放置在哪個路徑下,大家都知道,語義分割的結果應當是一張圖片!

修改完后的infer.py如下所示:

1 importnumpy as np2 from PIL importImage3 importmatplotlib.pyplot as plt4 importcaffe5

6 #load image, switch to BGR, subtract mean, and make dims C x H x W for Caffe

7 im = Image.open('voc-fcn8s/test.jpeg')8 in_ = np.array(im, dtype=np.float32)9 in_ = in_[:,:,::-1]10 in_ -= np.array((104.00698793,116.66876762,122.67891434))11 in_ = in_.transpose((2,0,1))12

13 #load net

14 net = caffe.Net('voc-fcn8s/deploy.prototxt', 'voc-fcn8s/fcn8s-heavy-pascal.caffemodel', caffe.TEST)15 #shape for input (data blob is N x C x H x W), set data

16 net.blobs['data'].reshape(1, *in_.shape)17 net.blobs['data'].data[...] =in_18 #run net and take argmax for prediction

19 net.forward()20 out = net.blobs['score'].data[0].argmax(axis=0)21

22 plt.imshow(out,cmap='gray');23 plt.axis('off')24 plt.savefig('test.png')25 #plt.show()

e43eb6e001850b8eec609ff95c11569a.png

運行結束后會在軟件的根目錄下生成一個分割好的圖片test.png!

ce40bf10311d78cb0af8e785f60bf41a.png

我們可以看一下原始圖片和最后生成的圖片的區別:

f41d0b299e3ce70fd8812ba7c8e8a869.png

a3ceac9d6a2880b8263053ff256c8f22.png

可能會遇到的問題:

(1)no display name and no $DISPLAY environment variable

其實,在Ubuntu虛擬終端里執行python infer.py是沒有任何錯誤的,但是我是通過遠程訪問連接服務器的方式運行程序的。所以在執行到最后的時候會報這個錯。不過不要害怕,

在stackoverflow中找到了終極解決辦法:

f156ee3566de89e07fdc1a66bfcad9e7.png

如圖中所示的步驟,找到matplotlibrc,將backend從tkAGG修改為AGG。

sudo gedit /home/xuanxufeng/.local/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc

7fd15e31f132bf05cd5abc05fd98973d.png

再次在putty中執行就沒有任何問題了!

(2)在執行python infer.py時可能會提示缺少某一兩個模塊。

這個不用擔心,都是小問題,百度很容易搜到,一兩個命令安裝就好了~

(四) 結束語

從開始讀論文到現在,也算是前進了一小步,可以看見的一小步。在往后,隨著實驗的一步步進行,我還會再更新模型的訓練以及訓練數據集的制作!請各位看官耐心等待!

Ubuntu 16.04下Matlab2014a+Anaconda2+OpenCV3.1+Caffe安裝 http://www.linuxidc.com/Linux/2016-07/132860.htm

Caffe配置簡明教程 ( Ubuntu 14.04 / CUDA 7.5 / cuDNN 5.1 / OpenCV 3.1 )? http://www.linuxidc.com/Linux/2016-09/135016.htm

0b1331709591d260c1c78e86d0c51c18.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375943.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375943.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375943.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于 Code First

第一感覺還是很新鮮的,你可以自由的控制數據結構。 比如,你想象oracle那樣,給每個表增加4個字段,創建人,創建時間,更新人,更新時間。完全可以創建一個父類包含著四個屬性(甚至可以把…

靈悟禮品網上專賣店——新建數據庫

一、小組成員: 洪雪意(產品負責人) 陳淑筠(Master) 二、組內人員任務情況 計劃完成的任務的第三個模塊:分析并建立數據庫 已完成的任務: 任務的第三個模塊: 陳淑筠(負責…

操作系統上機題目(多進程1)

1、創建1個子進程2、程通過管道與子進程連接 子進程的標準輸出連接到管道的寫端主進程的標準輸入連接到管道的讀端3、進程中調用exec(“echo”, “echo”, “hello world”, NULL)4、進程中調用read(0, buf, sizeof(buf)),從標準輸入中獲取子進程發送的字符串&…

Oracle數據庫dmp文件Dos命令下導入導出

Oracle數據庫dmp文件Dos命令下導入導出 2013-03-09 18:22:52| 分類: Oracle |舉報|字號 訂閱 數據導出: 一. 導出工具exp 他是操作系統下一個可執行的文件,存放目錄/Oracle_Home/bin. exp導出工具將數據庫中數據備份壓縮成一個二進制系統文件,可以在不同的OS間遷…

c語言報錯找不到標識符,error C3861: “_T”: 找不到標識符

頭天好好的程序,第二天一早就報錯,還是莫名其妙的錯誤:atlconv.h等頭文件中的“_T” 報錯,百思不得其解,各種搜索而不得,整個人都崩潰了。出問題一定是有原因的,后來冷靜下來,縷縷思…

js 面向對象插件寫法,還是很好理解的

/** * Created by jiangtao on 2015/5/12. * name jihe */(function () { function gather(msg) { //適應參數 if (msg) { if (msg.imgFile ! undefined) { this.imgFile msg.imgFile; }; if (msg.wechatAppid ! undefined) { this.wechatAppid msg.wechatAppid; }; }; this.…

操作系統上機題目(多進程2)

1、主進程創建2個子進程,主進程通過兩個管道分別與兩個子進程連接2、第一個子進程計算從1加到50的和,并將結果通過管道送給父進程3、第一個子進程計算從50加到100的和,并將結果通過管道送給父進程4、父進程讀取兩個子進程的結果,將…

JavaScript 的簡介

JavaScript 是一種基于對象和事件驅動的腳本語言。JavaScript和HTML一起實現網頁與客戶端的交互,從而可以開發客戶端的應用程序。JavaScript是通過潛入在標準的HTML文件中實現的,可以直接控制瀏覽器窗口個元素以及頁面內容。JavaScript一個重要的功能就是…

c語言大樂透編譯,Excel大樂透搖號vba代碼分享,說不定就中百萬了呢

大家好我是Excel從零到一,今天閑來無聊做了一套大樂透搖號程序的vba代碼分享給大家來看下效果Excel大樂透搖號vba代碼分享,說不定就中百萬了呢Sub 搖號()Dim i, a, test, s(1 To 35) As IntegerFor i 1 To 5line1: test Application.WorksheetFunction…

操作系統上機題目(多線程1)

主線程創建10個子線程 第0個子線程計算從01加到10的和 - 第1個子線程計算從11加到20的和 … 第9個子線程計算從91加到100的和 2. 主線程歸并10個子線程的計算結果&#xff0c;最終結果為5050 本題必須使用線程參數來完成 #include<stdio.h> #include<unistd.h> #i…

紙上談兵: 堆 (heap)

紙上談兵: 堆 (heap) 作者&#xff1a;Vamei 出處&#xff1a;http://www.cnblogs.com/vamei 歡迎轉載&#xff0c;也請保留這段聲明。謝謝&#xff01; 堆(heap)又被為優先隊列(priority queue)。盡管名為優先隊列&#xff0c;但堆并不是隊列。回憶一下&#xff0c;在隊列中&a…

C語言 取模運算 保證正數,c語言的取模運算

我們對C的%運算知多少呢&#xff1f;當是正整數時&#xff0c;可能大家都知道。例如&#xff1a;5%3等于2, 3%5等于3。當存在負數時呢&#xff1f;先看看例子&#xff1a;例一&#xff1a;int main(){int x;x -6%5; printf("%2d/n",x);x 6%-5; printf("%2d/n&…

操作系統上機題目(多線程2)

主線程創建4個子線程T1、T2、T3、T4&#xff0c;主線程在4個子線程退出后&#xff0c;才退出線程T1、T2、T3、T4的運行時代碼如下&#xff1a; #include <unistd.h> // sleep函數聲明在該頭文件中void *T1_entry(void *arg) {sleep(2); // 睡眠2秒&#xff0c;不準刪除…

圖形GUI名稱

15句柄圖形(Handle Graphics)15.1圖形窗的產生和控制(Figure window creation and control)clf 清除當前圖close 關閉圖形figure 打開或創建圖形窗口gcf 獲得當前圖的柄openfig 打開圖形refresh 刷新圖形shg 顯示圖形窗15.2軸的產生和控制(Axis creation and control)axes 在任…

c語言編程非線性方程求解,c語言計算機編程三種方法求解非線性方程.doc

c語言計算機編程三種方法求解非線性方程.doc本 科 專 業 學 年 論 文題 目非線性方程求解比較姓 名 何 娟 專 業 計算機科學技術系 班 級 08 級本科(2)班 指 導 老 師 劉 曉 娜 完成日期 2010 年 11 月 21 日計算機學年專業論文 非線性方程求解- 1 -題 目非線性方程求解比較摘 …

最近用到這個強大的工具 PhysicsEditor (轉)

今天收到PhysicsEditor作者發過來的license key&#xff0c;所以順便把PhysicsEditor也嘗試了一下。主要是嘗試將PhysicsEditor與cocos2dx&#xff0c;box2d結合開發的一些步驟。之前大概網絡檢索了一下&#xff0c;知道PhysicsEditor的功能其實很簡單。一句話就是給圖片的邊緣…

淺談塊級元素和內聯元素的嵌套規則

1. 替換和不可替換元素 從元素本身的特點來講&#xff0c;可以分為替換和不可替換元素。 a) 替換元素 替換元素就是瀏覽器根據元素的標簽和屬性&#xff0c;來決定元素的具體顯示內容。 例如瀏覽器會根據<img>標簽的src屬性的值來讀取圖片信息并顯示出來&#xff0c;而如…

如何更新Chrome

在瀏覽器的地址欄中輸入chrome://help即可進行自動更新&#xff0c;如下圖&#xff1a;

c語言用指針實現打開和關閉文件,我用rewind函數沒把指針直到開始,關閉文件然后打開就行。幫忙看看...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓高手啊&#xff0c;我試了&#xff0c;結果是回到文件頭了&#xff0c;把123覆蓋了&#xff0c;為ABC 但我這個程序就能直接不關閉文件而用rewind函數到開頭&#xff0c;你幫忙看看&#xff0c; //二進制文件的輸入輸出--數據塊的讀…

最佳適應算法模擬內存分配

最佳適應算法 從全部空閑區中找出能滿足作業要求的&#xff0c;且大小最小的空閑分區&#xff0c;這種方法能使碎片盡量小。 問題描述 Given five memory partitions of 100 KB, 500 KB, 200 KB, 300 KB, and 600 KB (in order), how would each of the first-fit, best-fit…