windows下用caffe載入二進位制模型(linux下訓練)的問題
最近,需要移植faster-rcnn的detect部分到android平臺上,為方便刪減程式碼與除錯,需要跨平臺相容到windows下執行,windows下除錯的時候,用的是linux下的模型定義proto與訓練好的二進位制模型,但是,一直載入模型不成功,逐步解決方法如下:
(1)核對protobuf版本,均為2.5.0,不可能是因為版本不相容所致;
(2)核對cafe.proto,這個檔案在linux和windows下是相同的,編譯出來的caffe.pb.h與caffe.pb.h.cc幾乎完全相同(除個別處0填充外),因此不可能是proto定義不同引起的失敗;
無奈,只能除錯protobuf中的程式碼,逐步跟進:
(3)編譯windows下protobuf程式碼(debug版本),注意protoc同時編譯更新,並除錯caffe的模型載入,發現問題如下:
具體表現為:讀取模型buffer時,只讀取很少部分便檔案終止,因此,不能成功初始化每個layer的引數,問題出現在open/read檔案操作函式,
actual-read-size = open(file-descriptor, buf-ptr, need-size),其中need-size預設patch size = 8192,讀取到的actual-read-size為82, 遠遠沒有讀取完畢,懷疑是遇到了終止符;
用UltraEdit檢視二進位制模型,如下:
注意紅色圓圈部分,為第83個字元, 1A對應的ASCII碼為SUB,而在windows下,SUB是一種文字檔案讀取終止符,因此,讀取模型buffer提前終止,所以失敗,
1A對應的十進位制整數為26, protobuf在save以及parse caffe model的時候(取決於caffe.pb.cc, 不同的網路對應的二進位制模型可能出現26, 也可能不出現26,複雜程度不同而已),會插入tag作為分隔不同值域的標識,tag中出現了26, 即windows下的sub終止標識;
(4)為何會在二進位制中出現sub?
按道理來說,都是二進位制位元組流。這就是windows下open/read存在的問題, 同時也是windows與linux處理二進位制檔案盒文字檔案的方式不同。
(a) windows區分文字檔案與二進位制檔案,linux下則不區分(均為位元組流);
(b)open/read(系統函式)與fopen/fread(C語言API)是不同的,除了緩衝機制外(此處的緩衝機制與我們的問題無關),
在windows下,fopen可以指定“rb”二進位制讀取方式開啟,read則需要聯合O_RDONLY|O_BINARY使用,讀取二進位制模型。
而在linux, 只有O_RDONLY,無O_BINARY,, O_RDONLY一般定義在/usr/include/bits/fcntl.h------->fcntl-linux.h 中, 即便存在O_BINARY的話,對於開啟讀取二進位制模型來說,O_RDONLY與O_RDONLY|O_BINARY是無差別的,fopen(file, "rb")與fopen(file, "r")也是無差別的;
那麼,在caffe的src/util/io.cpp檔案的ReadProtoFromBinaryFile函式中便存在一個小bug, 使得,caffe在windows下載入linux下訓練的模型成為一種不可跨平臺性(狹義的),
修正如下:
#ifdef _WIN32
int fd = open(filename, O_RDONLY|O_BINARY);
#else
int fd = open(filename, O_RDONLY);
#endif
當然,caffe原始碼中均未出現O_BINARY,需要在用到出現錯誤的同時,想到這點不同,並對應修正編譯(本處caffe版本為faster-rcnn python版中對應的caffe分支, 請檢查caffe最新分支是否更正過此所謂的bug(自定義bug ^_^))。
相關推薦
windows下用caffe載入二進位制模型(linux下訓練)的問題
最近,需要移植faster-rcnn的detect部分到android平臺上,為方便刪減程式碼與除錯,需要跨平臺相容到windows下執行,windows下除錯的時候,用的是linux下的模型定義proto與訓練好的二進位制模型,但是,一直載入模型不成功,逐步解決方法如下:
windows系統用anaconda配置安裝TensorFlow (2017.4.13)tensorflow支援python3.5版本 1.開啟anaconda依次輸入: 1 conda con
(2017.6.09)tensorflow支援python3.5版本 1.開啟anaconda依次輸入: 1 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
Linux下編寫和載入 .ko 檔案(驅動模組檔案)
一、.ko 檔案介紹 .ko檔案是kernel object檔案(核心模組),該檔案的意義就是把核心的一些功能移動到核心外邊, 需要的時候插入核心,不需要時解除安裝。 二、優點 (1)這樣可以縮小核心體積; (2)使用方便。 三、.ko檔案一般的用處
關於quarz的使用中出現了開發環境下正常執行,測試環境(LINUX - Ubutu15.4)使用異常的情況
開發中使用了spring和quarz結合的方式,執行了四個任務,兩個流量資料同步,日同步每天0點同步資料,每小時的資料存放在redis裡,供頁面使用。另外兩個任務負責同步squid的日誌到第三方日誌伺服器,一個每30秒檢測一次日誌狀態,日誌檔案大於10M或者0點以後未同步資料就會開始使用我編寫的py
把文字格式轉換為二進位制格式(Linux系統中)
在一些應用中我們時常需要一些二進位制不可讀的檔案,於是轉換格式就是一個必不可少的過程,下面是用perl寫的程式碼: 程式碼: use strict; my $file=shift
Windows下用Matlab載入caffemodel做影象分類
1.編譯caffe的matlab介面 用到了happynear提供的caffe-windows-master,編譯caffe和matlab介面的過程看這裡。編譯好之後,caffe-windows-master\matlab\+caffe\private內的檔案如下: 如果
在windows下用caffe跑ImageNet
使用caffe主要分為三大步: 【1】用convert_imageset.exe把圖片資料庫轉換為.lmdb或者.leveldb的格式。 【2】用compute_image_mean.exe進行取均值的預處理,生成.binaryproto檔案 【3】用ca
Ubuntu16.04下 用Caffe訓練自己的網路和模型並測試
1.準備圖片(訓練太久就不放那麼多圖片了)在caffe根目錄下data中新建資料夾6class(意思是6類),在6class資料夾下新建兩個資料夾train和val。train用來存放訓練的圖片,在train資料夾下新建6個資料夾0-5 。圖片有6類,杯子(資料夾0)、書包(
Windows下用VS2013載入caffemodel做影象分類
結果顯示在左上角,有英文和中文兩種標籤可選,如果顯示中文,需要使用Freetype庫,請自行百度。 #include <caffe/caffe.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/hig
unity動態載入FBX模型(Http下載到Rescources檔案,場景Load直接呼叫):
using UnityEngine; using System.Collections; using System.IO; using System.Net; using System; using UnityEditor; public class WWWLo
QT 下用opencv實現影象分類(1)
一.概述 1.按影象中的內容給影象分類是計算機視覺中比較適合初學者的專案,我見過好多手機相簿都有這一個功能,比如把美食歸為一個標籤,藍天白雲歸為一個標籤等等。還有我之前做過的車牌識別的專案都用到影象分類。 2.我做這個專案的環境是QT加opencv3.2,專案在MAC上跑
系統技術非業餘研究 » nmon(Linux下很好用的效能監測工具)介紹
The nmon tool is designed for AIX and Linux performance specialists to use for monitoring and analyzing performance data, including: * CPU utiliz
用SVD壓縮深度模型(DNN,CNN)的全連線層(fully-connected layer)
轉自:https://my.oschina.net/liusicong/blog/866364 轉載請註明出處,否則將依法追究版權 全連線層出現在DNN和 CNN中.很多論文[介紹瞭如何用SVD,VQ,Sparse code壓縮全連線層,這些方法不是端到端地訓練一個新模型
Windows 7作業系統下Apache的安裝與配置(圖文詳解)
This is the main Apache HTTP server configuration file. It contains the # configuration directives that give the server its instructions. # See <UR
開發環境-Windows下搭建JAVA Web開發環境(含Tomcat+MySQL)-過程記錄
一、新建雲伺服器 (請注意,文中連結均在“http”中“h”後和“www”第一個“w”後多加一“ ”) 1、在"teng xun 雲",新建雲伺服器:Windows Server 2012 R2 標準版 64位中文版 2、登入雲伺服器:h ttps://w
命令列編譯C++(Linux下、Windows下)
C++ 編譯過程 一般而言,對於 C++ 程式編譯有以下4個階段: 預處理(preprocessing) 對源程式中的偽指令(以#開頭的指令)和特殊符號進行處理。偽指令包括巨集定義、條件編譯指令、標頭檔案包含指令等。 編譯(compilation)
Windows 10系統下安裝和搭建TensorFlow筆記(for CPU only)
1. 環境介紹 CPU:Intel Core i5 7500 OS:Windows 10 x64 VS:Visual Studio 2015 注意: 本文僅適用於基於CPU的TensorFlow環境搭建,對GPU硬體沒有要求,也無需安裝顯示卡驅動。 2.
windows下開發apache模組環境部署(apache,perl,apxs)
轉自:https://blog.csdn.net/hxsstar/article/details/198200291,windows下安裝apache 一定要custom全部安裝,否則就不會有include和lib目錄2,安裝Perl我們將要使用的apx包要用到perl解析編
C# Unity用AssetBundle載入本地資源 (1)
/// <summary> /// AssetBundle載入器 /// </summary> public class AssetBundleLoger { /// <summary>
【MySQL】Windows系統下安裝MySQL 5.6.37(壓縮包方式)
Windows系統下安裝MySQL 5.6.37(壓縮包方式) 1、下載安裝介質 安裝介質:mysql-5.6.37-winx64.zip 下載地址:http://blog.csdn.net/kerafan/article/details/780018492、解壓安裝介質