function [Pz_d_test,labels] = do_plsa_test(config_file) %% Test plsa model %% Runs the pLSA procedure, this time holding P(w|z) constant and %% estimating P(d|z) using a "folding in" procedure. Calls code written %% by Josef Sivic (josef@robots.ox.ac.uk), based on the paper: %% %% J. Sivic, B. C. Russell, A. Efros, A. Zisserman and W. T. Freeman, %% Discovering objects and their location in images, ICCV 2005. %% The action of this routine depends on the directory in which it is %% run: %% (a) If run from RUN_DIR, then it will evaluate the latest model in the %% models subdirectory. i.e. if you have just run %% do_plsa('config_file_2'), which saved to model_0011.mat and %% config_file_0011.m in the models subdirectory in RUN_DIR, then doing %% do_plsa_evaluation('config_file_2') will load up model_0011.mat and %% evaluate it. %% (b) If run within in models subdirectory, then it %% will evaluate the model corresponding to the configuration file passed %% to it. i.e. do_plsa_evaluation('config_file_0002') will load %% model_0002.mat and evaluate/plot figures for it. %% %% Mode (a) exists to allow a complete experiment to be run from start to %% finish without having to manually go into the models subdirectory and %% find the appropriate one to evaluate. %% If this routine is called on a newly learnt model, it will run the pLSA code %% in folding in mode and then plot lots of figures. If run a second time %% on the same model, it will only plot the figures, since there is no need %% to recompute the P(d|z) on the testing images. If you want to force it %% to re-run on the images, then remove the Pd_z_test variable from the %% model file. %% R.Fergus (fergus@csail.mit.edu) 03/10/05. %% Evaluate global configuration file eval(config_file); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% Model section %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% get filename of model to learn %%% if in models subdirectory then just get index off config_file string if (strcmp(pwd,[RUN_DIR,'/',Global.Model_Dir_Name]) | strcmp(pwd,[RUN_DIR,'\',Global.Model_Dir_Name])) ind = str2num(config_file(end-Global.Num_Zeros+1:end)); else %%% otherwise just take newest model in subdir. ind = length(dir([RUN_DIR,'/',Global.Model_Dir_Name,'/',Global.Model_File_Name,'*.mat'])); end %%% construct model file name model_fname = [RUN_DIR,'/',Global.Model_Dir_Name,'/',Global.Model_File_Name,prefZeros(ind,Global.Num_Zeros),'.mat']; %%% load up model load(model_fname); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Test section - run model on testing images only if Pd_z_test does not exist %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if ~exist('Pd_z_test') %%% only do this section the first time we look at the model %%% saves time if we just want to look at the pretty %%% figures %% get all file names of testing image interest point files. ip_file_names = genFileNames({Global.Interest_Dir_Name},Categories.All_Test_Frames,RUN_DIR,Global.Interest_File_Name,'.mat',Global.Num_Zeros); %% Create matrix to hold word histograms from all images X = zeros(VQ.Codebook_Size,length(Categories.All_Test_Frames)); %% load up all interest_point files which should have the histogram %% variable already computed (performed by do_vq routine). for a=1:length(ip_file_names) %% load file load(ip_file_names{a}); %% store histogram X(:,a) = histogram'; end %%% Call actual EM routine again in test mode [Pw_z,Pd_z_test,Pz_test,Li_test] = pLSA_EM(X,Pw_z,Learn.Num_Topics,Learn); Pdz_test = Pd_z_test.*repmat(Pz_test,100,1); Pd_test = sum(Pdz_test,2); Pz_d_test = Pdz_test./repmat(Pd_test,1,2); %%% get labels for test frames labels = []; for a=1:Categories.Number labels = [labels , Categories.Labels(a)*ones(1,length(Categories.Test_Frames{a}))]; end %%% compute classification performance for each topic for t=1:Learn.Num_Topics %%% get scores for each image values = Pd_z_test(:,t)'; end end