gkioxari / k-poselets

k-poselets CVPR2014 code
14 stars 16 forks source link

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);