?
因為個人項目原因,我曾將參考OpenMax源碼GitHub - abhijitbendale/OSDN: Code and data for the research paper “Towards Open Set Deep Networks” A Bendale, T Boult, CVPR 2016將其轉換到MATLAB使用。
OpenMax 使用極值理論實現對開放集的篩選,在計算得分時需要用libMR 包,用于計算 weibull 概率分布。因此,訓練過程中會需要fit_high() 函數用于提取右端極大值數據進行擬合,保存每一個類別擬合的MetaRecognition 對象。測試時調用預測類別 MetaRecognition 對象的CDF() 函數計算得分,獲得預測樣本的得分。
為了能夠在 MATLAB 中實現調用 libMR ,我做出了如下操作:
-
定義了一個句柄類 MetaRecognitionHandle,里面封裝一些與 MetaRecognition
相關的操作,主要是封裝了需要使用到的函數,使得這些操作可以在 MATLAB 中以面向對象的方式調用。 -
針對要用到的函數定義對應的 mexfunction文件,實現對 fit_high() 和CDF() 函數的調用。
-
MATLAB 命令行一次運行
mex XXX.cpp
。
為了在 MATLAB 中保存 MetaRecognition 對象,我在運行 MATLAB 代碼時為每一個 MetaRecognition 對象開辟一個相應的內存空間,用于調用相應類別擬合成的對象所對應的函數。
classdef MetaRecognitionHandle < handleproperties (Access = private)ObjectHandle; % 存儲C++對象指針endmethodsfunction obj = MetaRecognitionHandle()obj.ObjectHandle = mexCreateMetaRecognition(); % 創建MetaRecognition對象的MEX函數endfunction delete(obj)mexDeleteMetaRecognition(obj.ObjectHandle); % 銷毀MetaRecognition對象的MEX函數endfunction c=fitHigh(obj, tailToFit, tailSize)c=mexFitHigh(obj.ObjectHandle, tailToFit, tailSize); % 調用fit_high的MEX函數endfunction score = wScore(obj, channelDistance)score = mexWScore(obj.ObjectHandle, cha