1. 程式人生 > >windows下用caffe載入二進位制模型(linux下訓練)的問題

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  ^_^))。

相關推薦

windowscaffe載入二進位制模型linux訓練的問題

最近,需要移植faster-rcnn的detect部分到android平臺上,為方便刪減程式碼與除錯,需要跨平臺相容到windows下執行,windows下除錯的時候,用的是linux下的模型定義proto與訓練好的二進位制模型,但是,一直載入模型不成功,逐步解決方法如下:

windows系統anaconda配置安裝TensorFlow 2017.4.13tensorflow支援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

WindowsMatlab載入caffemodel做影象分類

1.編譯caffe的matlab介面 用到了happynear提供的caffe-windows-master,編譯caffe和matlab介面的過程看這裡。編譯好之後,caffe-windows-master\matlab\+caffe\private內的檔案如下: 如果

windowscaffe跑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)、書包(

WindowsVS2013載入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上跑

系統技術非業餘研究 » nmonLinux很好的效能監測工具介紹

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++LinuxWindows

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# UnityAssetBundle載入本地資源 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、解壓安裝介質