k-poselets CVPR2014 code
Matlab C++ M C Objective-C
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
code
readme

readme

-----------------------------------------------------------------------------------------
DATA INITIALIZATION
-----------------------------------------------------------------------------------------

(1)  Set up the list of images
       imglist=setup_imglist(image_names, img_path);
       where, image_names : list of image names
        	     img_path: the path to the directory containing the images

 (2) Read annotations
       annot=read_img_annotations(image_names, imglist, annot_path);
       where, image_names: list of image names
       	      annot_path: the path to the directory containing the annotations

-----------------------------------------------------------------------------------------
CONSTRUCTION OF POSLISTS
-----------------------------------------------------------------------------------------

(1) part=sample_kposelets(annot,imglist,unit_dims,K,NUM_CANDIDATES);
       where, unit_dims: the desired aspect rations [h w], e.g. [96 64;64 64]
        	      K: numbers of parts
        	      NUM_CANDIDATES: number of candidate K-poselets

(2) [Visualization] browse_kposelets(annot,imglist,part,i);
      where, i: index into the candidates, i=1,...,NUM_CANDIDATES


-----------------------------------------------------------------------------------------
 TRAINING EACH POSELET
-----------------------------------------------------------------------------------------

(1) model = train_kposelet(part, annot, negimglist, imglist, name, kpid, index_in_part);
    part, annot, imglist are the same as above.
    negimglist is a list of negative images. 
    name serves as an identifier for a *set* of kposelets. For instance if you are training
    kposelets on PASCAL you can name it "PASCAL"
    kpid serves as an identifier for a particular kposelet in the set. During detection, the
    output will record the kpid for each detection.
    index_in_part is the index in part of the kposelet you want to train.

-------------------------------------------------------------------------------------------
KEYPOINT MODELS
-------------------------------------------------------------------------------------------

(1)  kps_models = keypoint_klet(annot,part)
        where kps_models contains the keypoint model for each poselet

(2) coords = predict_keypoints(box, kps_model)

(3) bbox_models=bbox_klet(annot,part)



-------------------------------------------------------------------------------------------
DETECTING K-POSELETS
-------------------------------------------------------------------------------------------
(1) detections = collect_detections_on_imglist(imglist, models, 3, start_id, end_id, use_sse);
	where start_id is the starting index and end_id is the ending index in imglist



-------------------------------------------------------------------------------------------
AMP SELECTION
-------------------------------------------------------------------------------------------
After computing detections on val:
(1) Find labels of activations
Using torsos:
[labels, index] = find_labels_of_activations(annot, imglist, detections, kps_models, [1 4 7 10], 0.5);
Using bounding boxes:
[labels, index] = find_labels_of_activations_bbox(annot, imglist, detections, bbox_models, 0.5);

(2) Get precision-recall mapping
prec_rec = precision_recall_for_klets(detections, labels);
Use torsos to get torso_prec_rec, bounding boxes to get bbox_prec_rec;

(3) AMP selection
max_score=compute_max_score(detections, index);
[C, amp] = amp_selection(max_score, prec_rec, 200);

(4) Select detections
detections=select_detections(detections, ismember(detections.kpids, C));


-------------------------------------------------------------------------------------------
CLUSTERING
-------------------------------------------------------------------------------------------
(1) clusters = cluster_activations_agglomerative(detections, kps_models, torso_prec_rec, [1 4 7 10], 0.3);



-------------------------------------------------------------------------------------------
STAGE 2 MODELS
-------------------------------------------------------------------------------------------
(1) Train stage 2 models:
stage2model = train_stage2_detection_top_withbbox(training_image_ids, clusters, detections,...
							 kps_models, torso_prec_rec, bbox_prec_rec, imglist, annot, bbox_models, C);

(2) Test stage 2 models:
[scores, bounds, idx]=test_stage2_detection_top(clusters, detections, kps_models, ...
							torso_prec_rec, bbox_prec_rec, imglist, bbox_models, ...
							C, stage2model);

-------------------------------------------------------------------------------------------
KEYPOINT PREDICTIONS
-------------------------------------------------------------------------------------------
(1) Precision-recall mapping based on keypoint predictions
kps_prec_rec = kps_prec_rec(annot,imglist,detections,kps_models,alpha) ;

(2) Keypoint prediction: Each cluster makes a prediction for each keypoint and a score
kp_pred = kposelet_keypoint_prediction(     imglist,detections,clusters,kps_prec_rec,kps_models)

-------------------------------------------------------------------------------------------
KEYPOINT EVALUATION
-------------------------------------------------------------------------------------------
(1) Evaluation of APK
compute_kp_APK(annot,kp_pred,alpha);