看Faster RCNN代码里面 model = Model.ZF_for_Faster_RCNN_VOC2007
怎么也找不到Model是什么东西,查了网络才知道原来是package:
matlab项目管理有自己独特的使用方法,使用packages来组织是一种不错的组织方式,结合matlab帮助介绍一下。
Package文件夹是一种特殊的文件夹,它可以包含类文件夹、函数、类定义文件和其他包。实际上包为包内的类、函数等定义了一个命名空间。这意味着包内的函数名和类名需要有唯一的名字。包的使用为组织类和函数以及函数的复用提供一种很好的途径。
注意:包不支持matlab7.6版本以前创建的类,即不使用classdef的类。
包文件夹总是以+开头,例如
+mypack +mypack/pkfcn.m % a package function +mypack/@myClass % class folder in a package
使用what命令可以列出包的目录,如下
what event Classes in directory Y:xxx\matlab\toolbox\matlab\lang\+event EventData PropertyEvent listener proplistener
使用包内的包成员,如包、函数和类必须使用包名作为前缀,例如
z = mypack.pkfcn(x,y);
obj = mypack.myClass(arg1,arg2,...);
注意的是包内包成员的定义不需要包前缀,即
function z = pkfcn(x,y)
classdef myClass
而对于类成员函数的使用是不需要使用包前缀的,因为你已经获得了类的一个实例,即
obj.myMethod(arg) or myMethod(obj,arg)
但是类的静态函数却是需要包前缀的
mypack.myClass.stMethod(arg)
如果不想每次使用包里的函数或类时都要加个前缀,可以先用import导入包,而且import导入时可以只导入要用的。其用法如下
function myFunc import pkg.cls1 obj = cls1(arg,...); % call cls1 constructor obj.Prop = cls1.StaticMethod(arg,...); % call cls1 static method end
一旦使用import导入了函数,使用时就不再需要加前缀了。
如果导入的函数不想用了,可以使用下列命令清除导入
clear import
但此命令不能在函数空间使用,只能在base空间使用。
注意的是,如果包内同名的函数和类,matlab有自己处理冲突的规定,详细看matlab帮助吧。
对于如果想在其他路径使用包,就要把包的父文件夹包含到matlab路径中,而不是包文件夹。而且,即使包文件夹是当前文件夹,它的父文件夹仍然必须被包含在matlab路径中,否则包成员不可用。
包成员即使在包文件夹为当前文件夹的时候也需要使用包前缀来使用。
包文件夹不遮蔽位于其matlab路径后面的包文件夹,这和类是不一样的。
包内如果有同名的函数或类,matlab有自己处理的方式,详细看matlab帮助吧。