因为个人项目原因,我曾将参考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