caffe中使用python的簡單介紹

本文目錄一覽:

怎樣用python調用已經訓練好的caffe

定義CAFFE為caffe跟目錄,caffe的核心代碼都在$CAFFE/src/caffe 下,主要有以下部分:net, blob, layer, solver.

net.cpp:

net定義網絡, 整個網絡中含有很多layers, net.cpp負責計算整個網絡在訓練中的forward, backward過程, 即計算forward/backward 時各layer的gradient。

layers:

在$CAFFE/src/caffe/layers中的層,在protobuffer (.proto文件中定義message類型,.prototxt或.binaryproto文件中定義message的值) 中調用時包含屬性name, type(data/conv/pool…), connection structure (input blobs and output blobs),layer-specific parameters(如conv層的kernel大小)。定義一個layer需要定義其setup, forward 和backward過程。

blob.cpp:

net中的數據和求導結果通過4維的blob傳遞。一個layer有很多blobs, e.g,

對data,weight blob大小為Number * Channels * Height * Width, 如256*3*224*224;

對conv層,weight blob大小為 Output 節點數 * Input 節點數 * Height * Width,如AlexNet第一個conv層的blob大小為96 x 3 x 11 x 11;

對inner product 層, weight blob大小為 1 * 1 * Output節點數 * Input節點數; bias blob大小為1 * 1 * 1 * Output節點數( conv層和inner product層一樣,也有weight和bias,所以在網絡結構定義中我們會看到兩個blobs_lr,第一個是weights的,第二個是bias的。類似地,weight_decay也有兩個,一個是weight的,一個是bias的);

blob中,mutable_cpu/gpu_data() 和cpu/gpu_data()用來管理memory,cpu/gpu_diff()和 mutable_cpu/gpu_diff()用來計算求導結果。

slover.cpp:

結合loss,用gradient更新weights。主要函數:

Init(),

Solve(),

ComputeUpdateValue(),

Snapshot(), Restore(),//快照(拷貝)與恢復 網絡state

Test();

在solver.cpp中有3中solver,即3個類:AdaGradSolver, SGDSolver和NesterovSolver可供選擇。

關於loss,可以同時有多個loss,可以加regularization(L1/L2);

Protocol buffer:

上面已經將過, protocol buffer在 .proto文件中定義message類型,.prototxt或.binaryproto文件中定義message的值;

Caffe

Caffe的所有message定義在$CAFFE/src/caffe/proto/caffe.proto中。

Experiment

在實驗中,主要用到兩個protocol buffer: solver的和model的,分別定義solver參數(學習率啥的)和model結構(網絡結構)。

好吧,copy了一大段,不曉得有沒有幫助,說點accuracy = 0.5的問題。簡單說,就是分錯了,好吧我知道這是廢話。既然是分錯了,那麼就要檢查下了,首先檢查你的訓練模型。

根據訓練過程來看,訓練應該是已經收斂了,(反正loss一直在減小)。

這句可能是我理解問題,如果模型收斂的話,loss應該趨於平穩,如這樣。

哦這是對數圖。如果沒有完全收斂的話,考慮下調整參數吧。說到調參,又是個坑啊。。。這個我也是懵懵懂懂。不過可以參考某些大牛的做法,比如用淺層CNN參數初始化深層CNN,或者學hinton老爺子用DBN來搞個預訓練。不過即使是隨機初始參數,按道理不應該出現這種accuracy=0.5的情況。個人感覺要麼就是訓練沒有完成,要麼就是在做最後二分的那一層有什麼問題。。。

其實應該先檢查訓練數據,訓練數據搞混了,其他都是白搭。

如果檢查模型,你可以先看下你參數更新的梯度是否已經趨於零了,然後再看看你二分那一層有木有問題。

當然,說了這麼多,可能也沒啥幫助,如果你哪天改用matlab或者theano了,可以交流下,caffe確實不甚了解。。。

在嘗試用caffe分類一個自己的二分類圖像數據庫。根據訓練過程來看,訓練應該是已經收斂了,(反正loss一直在減小)。然而測試集上的accuracy一直都是=0.5.

所以現在想着把生成的模型文件調出來用數據測試下,觀察下是什麼問題,請問應當如何去實現呢。

或者各位如果能指點下,可能是什麼原因導致的accuracy = 0.5 不變。那就更好啦。

謝謝!

新手試運行了一個 caffe 的 Python 代碼,出現這個錯誤是怎麼回事

一、問題

在成功編譯caffe的源碼之後,可以在Python環境中使用caffe。

在Ubuntu環境下,打開python解釋程序,輸入import caffe時:出現以下錯誤

import caffe

Traceback (most recent call last):

File “stdin”, line 1, in module

ImportError: No module named caffe

二、解決思路

基本思路是把caffe中的python導入到解釋器中

三、解決方法

第一種方法:設置環境變量

在終中輸入:

export PYTHONPATH=~/caffe/python #caffe的路徑下面的python

則該終端起作用,關掉終端後或重新打開一終端,則失效。

放到配置文件中,可以永久有效果,命令操作如下:

A.把環境變量路徑放到 ~/.bashrc文件中

sudo echo export PYTHONPATH=”~/caffe/python” ~/.bashrc

B.使環境變量生效

source ~/.bashrc

第二種方法:通過代碼來實現

在每個python代碼中使用以下代碼: (這個方法在寫python代碼時有用)

caffe_root = ‘~/caffe/python ‘

import sys

sys.path.insert(0, caffe_root + ‘python’)

import caffe

caffe的python接口求助

一、前期環境以及準備1、安裝python在caffe中,python2和python3的接口都有。但frcnn中只能支持python2.7,所以千萬不要裝成python3。為了方便,不用自己去pip一大堆庫,我建議安裝anaconda2,裏面已經安裝了很多第三方的庫。另附python,Windows的第三方庫,裏面很全。或許有一些庫你要去官網上下載。2、安裝(更新)顯卡驅動和cudaNVIDIA的顯卡驅動安裝應該不用我說了吧,到官網上下載吧。我要說明一點的是,我的1080ti在安裝顯卡驅動時,說和Windows不匹配。怎麼解決呢?更新Windows,到官網上下驅動,再安裝。成功!還有就是記得更新你的顯卡驅動,以防老的驅動不支持cuda。CUDA安裝的話,也是傻瓜試的安裝。提醒一點的是,不要改變他的安裝路徑,默認路徑。然後去NVIDIA的官網上下載cudnn庫,這個庫的話需要去NVIDIA註冊一個賬號,然後問你用這個來完成什麼工作之類的巴拉巴拉。這個庫長什麼樣呢?下載完解壓縮,得到一個cuda的文件夾,裏面有3個文件夾然後打開你的CUDA文件夾,默認路徑是C:\ProgramFiles\NVIDIAGPUComputingToolkit\CUDA\v8.0把cudnn庫裏面的3個文件夾裏面的文件,分別加到cuda裏面對應的文件夾。然後打開cuda需要編譯的部分,默認路徑是C:\ProgramData\NVIDIACorporation\CUDASamples\v8.0因為我用的VS2015,那麼我就用打開2015的那個,然後改成release運行。至此,顯卡計算的環境就搭建完成了。3、cmake和gitcmake的話,我建議直接下載編譯好的能運行的文件(到官網上下載),然後解壓文件,把bin的路徑添加到Path中。git:因為frcnn裏面有很多linux的腳本,你可以不用,但用的話會很方便的。所以我建議安裝git。同樣,傻瓜式的安裝,直接到官網上下載。二、py-faster-rcnn1、編譯caffe的python接口GPU版本(如果你編譯過了就不用了)因為frcnn的編譯過程用需要用到python的caffe包,所以必須要先編譯一次caffe。如果你已經編譯過caffe的py接口就不用了。下載微軟的Caffe,git的地址你可以用git直接下載,或者在git的地址里下載,隨便你。[plain]viewplaincopygitclonecdcaffegitcheckoutwindows打開caffe\scripts,然後編輯build_win.cmd文件第7行的VERSION是你VS的版本,VS2015對應的是14,VS2013對應的應該是12;第8行改為0;第9行改為0(如果你不用GPU,那就還是1);13行的python_version是你的python版本,2.x就是2,3.x就是3;24,28行是你的python的安裝目錄,如果你是anaconda就改你的anaconda的目錄,否則就不改。同樣69-95行同樣修改。以上2張圖是我的cmake文件配置。進入caffe\scripts,打開cmd,直接執行build_win.cmd。注意他會自動下載需要的庫,因為服務器呢都不在國內,所以我建議掛個VPN,不然你且等呢吧。這樣cmake後呢,python的接口就已經編譯好了,不用再編譯一遍了。把caffe\python下的caffe的文件夾copy到python的第三方包的文件夾就ok。這樣caffe的python接口就好了,你可以進cmd的python試一下importcaffe。如果說,他提示少了什麼包,你直接pip這個包就好了,找不到的話,百度一下就有。但只要你跟着上面我的方法做應該不會出現什麼問題。2、編譯py-faster-rcnn依賴庫首先呢,我們先去編譯一下frcnn的依賴庫。Windows下,不能使用自帶的lib,把自帶的lib刪了,重新下載,這裡給出git的地址。好了,現在你的庫應該長成這樣,有setup.py和setup_cuda.py。進cmd,install這2個文件。現在你肯定會遇到問題,提示你VC版本不對怎麼呢,先set一下:輸入SETVS90COMNTOOLS=%VS140COMNTOOLS%,VS後面的數字就是你的版本。還有不要忘了把你VS的c1.exe加到path下。編譯好frcnn的依賴庫後,應該是這個樣子的。3、給caffe加frcnn的層現在,我們再下載一個caffe,跟前面一樣,把build_win.cmd進行修改。然後我們就可以把frcnn的一些特有的層加到caffe里編譯了。1)添加層和文件打開py-faster-rcnn\caffe-fast-rcnn\src\caffe\layers文件夾,找到4個文件分別為然後copy到你新的caffe的對應文件夾caffe\src\caffe\layers里。接着我們添加頭文件,打開py-faster-rcnn\caffe-fast-rcnn\include\caffe,把fast_rcnn_layers.hpp這文件copy到caffe的對應文件夾下caffe\include\caffe。2)配置2個新層打開你的caffe\src\caffe\proto下的caffe.proto,進行編輯。在407行左右往原來的文件里添加新的層的配置信息[plain]viewplaincopyoptionalROIPoolingParameterroi_pooling_param=8266711;optionalSmoothL1LossParametersmooth_l1_loss_param=8266712;messageROIPoolingParameter{//Pad,kernelsize,andstrideareallgivenasasinglevalueforequal//dimensionsinheightandwidthorasY,Xpairs.optionaluint32pooled_h=1[default=0];//Thepooledoutputheightoptionaluint32pooled_w=2[default=0];//Thepooledoutputwidth//MultiplicativespatialscalefactortotranslateROIcoordsfromtheir//inputscaletothescaleusedwhenpoolingoptionalfloatspatial_scale=3[default=1];}messageSmoothL1LossParameter{//SmoothL1Loss(x)=//0.5*(sigma*x)**2–ifx1.0/sigma/sigma//|x|-0.5/sigma/sigma–otherwiseoptionalfloatsigma=1[default=1];}3)cmake新的caffe的python接口就是再執行一遍build_win.cmd就行。編譯好之後,把caffe根目錄下的python文件夾替換py-faster-rcnn\caffe-fast-rcnn的python文件夾。三、demo完成以上步驟你的py-faster-rcnn就已經編譯成功了。如果你想用demo測試一下的話可以用.\data\scripts里的腳本去下載已經訓練好的model,文件挺大的、速度挺慢的。所以給大家提供一個百度5,把caffemodel文件放在data\faster_rcnn_models,然後執行tools\demo.py就能看到結果了

caffe中怎麼寫python層

這兩天一直在研究faster rcnn的源碼,可是依舊感覺雲里霧裡,故下定決心把caffe調用Python

layer的流程仔細走一遍,好明白到底是什麼在調用python layer。話說 linux

調試還真是蛋疼啊,木有ide那樣直接下斷點,gdb又不會用,只能傻比比的不斷的LOG(INFO)輸出。還好最終還是明白了,我就直接順着

faster rcnn來說,並記錄在此。

faster

rcnn最核心的代碼就是在lib文件中,其他的都只是各種調用文件而已。不過lib里寫了很多個模塊,如何讓caffe知道模塊在哪裡,並調用呢?這是

我搞一晚上的初衷。我先大概說一下caffe正常的流程,首先從文件中讀入solver並生成一個solver,然後根據solver的net路徑生成一

個net,net調用layer_factory循環生成每個層,最後根據讀入model或是filler來初始化參數。實際上也怪自己馬虎大意,沒太細

看代碼,導致所用的時間比較多。從上面的流程可以知道layer_factory是循環生成每個層,我看.cpp文件也的確寫了#if

WITH_PYTHON_LAYER,然後有什麼什麼操作,比如儲存python

layer的python_param,並調用setup,不過我沒看出來這裡實際上已經是利用boost進行C++

Python混編了。這些操作的定義就在python_layer.hpp文件中,我當初還以為在什麼pythonXXX.cpp中,找了半天也沒找到。

layer_factory中python

layer的setup相關具體操作是,先根據param找到module的位置,再加載module,再根據層名加載層,然後前向計算反向計算什麼的。

這些就已經算是達到目的了。不過只是知道相對路徑,怎麼可能加載成功呢?然後又繼續找啊找,終於在faster

rcnn的tools文件中找到。_init_paths里有寫一些預操作,比如將lib路徑寫入PYTHONPATH中,當然如果寫入的話,這樣就可以

直接加載了。終於搞定。

這次也算是個小問題而已,不過只有再理清了整條脈絡,看代碼才會更加清晰,故也算是個重要的問題吧。不過這次也算是暴露了我不認真的問題,以後還是要耐心仔細找答案才行啊。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/159861.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-20 00:16
下一篇 2024-11-20 00:16

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python實現畫筆方向改變

    本文將介紹如何在Python中實現畫筆方向改變,讓畫筆以中心為軸旋轉。 一、Tkinter庫概述 Tkinter是Python自帶的GUI庫,可用於創建各種GUI應用程序。在Pyt…

    編程 2025-04-29
  • 運維Python和GO應用實踐指南

    本文將從多個角度詳細闡述運維Python和GO的實際應用,包括監控、管理、自動化、部署、持續集成等方面。 一、監控 運維中的監控是保證系統穩定性的重要手段。Python和GO都有強…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29

發表回復

登錄後才能評論