⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 do_manual_train_parts_structure.m

📁 一个学习自然场景类别的贝叶斯模型、基于“词袋”模型的目标分类。来源于Feifei Li的论文。是近年来的目标识别模型热点之一。
💻 M
字号:
function do_manual_train_parts_structure(config_file)  %% Function that lets the user manually click on parts of the%objects. The number of clicks per image is determined by the number of%parts in the model, which is in turn set by the Learn.Num_Parts%parameter. The scale of the regions picked out by each click (shown by%the red square) is given in Interest_Points.Scale, which should be a%single value.  % The model will use the first clicked point as a landmark, which all the% other will be measured relative to. The position of all the other parts% is assumed to be conditionally independent, given the landmark. Thus% the model is a tree structured graphical model, of depth 1. Gaussian% distributions are used to model the location of each part relative to% the landmark. %% Note that the model learnt is only translation invariant. It is not%scale or rotation etc. invariant at all. Feel free to upgrade it!!!    % For the appearance, the artimetic mean of the raw pixels intensities of% each part over all images is taken to be the filter that will be used% by do_parts_filtering.m routine.       %% Note that this only trains a model. It does not evaluate any test%% images. Use do_plsa_evaluation for that.    %% Before running this, you must have run:%%    do_random_indices - to generate random_indices.mat file%%    do_preprocessing - to get the images that the operator will run on  %% R.Fergus (fergus@csail.mit.edu) 03/10/05.    %%% debugging switchDEBUG = 1;    %%% figure to use for presenting images to the user for clicking  TEMP_FIGURE_NUM = 999;  %%% standard color orderingcols = {'r' 'g' 'b' 'c' 'm' 'y' 'k'};%% Evaluate global configuration fileeval(config_file);%% ensure models subdir is present[s,m1,m2] = mkdir(RUN_DIR,Global.Model_Dir_Name);%% Which classes are positivepos_class_ind = find(Categories.Labels);%% indices of images belonging to positive classpos_image_ind = cat(2,Categories.Train_Frames{pos_class_ind});%% Get list of file name of input images of positive class onlyimg_file_names = genFileNames({Global.Image_Dir_Name},pos_image_ind,RUN_DIR,Global.Image_File_Name,Global.Image_Extension,Global.Num_Zeros);%% show instuctions...fprintf('\nA total of %d images selected for training\n',length(img_file_names));fprintf('\nPlease select %d points per image.\n',Learn.Num_Parts);fprintf('Left mouse button selects; Right mouse button deletes previous click\n',Learn.Num_Parts);%% prepare cell array to hold all clicked regionspart = cell(1,Learn.Num_Parts);%%% Check that we have a constant scale supplied for features (manual%scale selection not yet implemented)if (length(Interest_Point.Scale)>1)  error('Multi-scale feature selection not currently implemented. Set Interest_Point.Scale to be a single number not a vector.');end%%% Width and height of featureswidth = Interest_Point.Scale * 2;height = width; %%% square regionfor a = 1:length(img_file_names)  %%% get figur up and clear it  figure(TEMP_FIGURE_NUM); clf;    %%% read in image  im = imread(img_file_names{a});    %%% get size  [imy,imx,imz] = size(im);    %%% show it   imagesc(im); hold on; axis('equal');  %%% if grayscale image then change colormap  if (imz==1)    colormap(gray);    im_gray = im;  else    %%% get grayscale version    im_gray = rgb2gray(im);  end    %%% put up image number  title(['Image: ',num2str(a)]);   %%% now get user input  num_clicked = 1;    fprintf('Image: %d, choose point ',a);  while(num_clicked<=Learn.Num_Parts)        fprintf('%d ',num_clicked);    [x(num_clicked),y(num_clicked),b] = ginput(1);        if (b==1) %%% left button            %%% show clicked point      plot(x(num_clicked),y(num_clicked),'r.');          %%% get rectangle      rect = [x(num_clicked)-width/2 y(num_clicked)-height/2 width-1 height-1];            %%% show rectangle      rectangle('Position',rect,'EdgeColor','r');            %%% increment number of clicks      num_clicked = num_clicked+1;     elseif (b==3) %%% right      %%% correct previous point (overwrite in black)      if (num_clicked>1)        fprintf('Correcting point: %d\n',num_clicked);           %%% overwrite red dot with black one        plot(x(num_clicked-1),y(num_clicked-1),'k.');                %%% get rectangle        rect = [x(num_clicked-1)-width/2 y(num_clicked-1)-height/2 width-1 height-1];              %%% show rectangle        rectangle('Position',rect,'EdgeColor','k');                %%% decrease clicks        num_clicked = num_clicked-1;      end          else      %%% middle not used    end    %%% tiny pause to prevent accidental double-clicks on the same point    pause(0.05);      end    fprintf('\n');    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  % ok, we now have user clicked points for the image in x and y  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    %%% Now crop regions at fixed scale, set by mean of Interest_Point.Scale.      for b=1:Learn.Num_Parts        %%% get rectangle    rect = [x(b)-width/2 y(b)-height/2 width-1 height-1];        %%% crop rectangle from image    p = imcrop(im_gray,rect);     %%% store raw pixels in matrix    part{b}(:,a) = p(:);       end    %%% Store relative configuration of points, using 1st click as a  %%% landmark  shape_x(:,a) = [x-x(1)]';  shape_y(:,a) = [y-y(1)]';  %%% store hand clicked locations for posterity....  hand_clicks_x(:,a) = x';  hand_clicks_y(:,a) = y';  end %%% end of loop over all images%%% Now find average appearance by averaging over pixel values of all%%% hand-clicked instancesfor c=1:Learn.Num_Parts  part_filter(:,c) = mean(part{c},2);end%%% Now get distribution on shapeshape_mean_x = mean(shape_x,2);shape_mean_y = mean(shape_y,2);shape_var_x  = var(shape_x')';shape_var_y  = var(shape_y')';  if DEBUG  %%% Plot out model    %%% show part filters  figure(TEMP_FIGURE_NUM+1);  for a=1:Learn.Num_Parts    subplot(1,Learn.Num_Parts,a);    imagesc(reshape(part_filter(:,a),[width height]));    colormap(gray); axis('equal');    title(['Filter ',num2str(a)]);  end    %%% show relative location model  figure(TEMP_FIGURE_NUM+2); axis('ij'); axis('square'); hold on;  for a=1:Learn.Num_Parts    plot(shape_mean_x(a),shape_mean_y(a),cols{a},'Marker','+');    if (a>1) %% only show ellipses for non-landmark parts      [ph,cy,L,l,th] = draw_ellipse([shape_mean_x(a);shape_mean_y(a)],diag([shape_var_x(a);shape_var_y(a)]),cols{a},2,[]);    end  end  title('Relative location model');  end%%%% now store everything: the model, the templates, the hand-clicked locations....[fname,model_ind] = get_new_model_name([RUN_DIR,'/',Global.Model_Dir_Name],Global.Num_Zeros);%%% save variables to filesave(fname,'shape_mean_x','shape_mean_y','shape_var_x','shape_var_y','part_filter','hand_clicks_x','hand_clicks_y','part');%%% copy conf_file into models directory too..config_fname = which(config_file);copyfile(config_fname,[RUN_DIR,'/',Global.Model_Dir_Name,'/',Global.Config_File_Name,prefZeros(model_ind,Global.Num_Zeros),'.m']);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -