├── .DS_Store ├── README.md ├── detection ├── .DS_Store ├── CMakeLists.txt ├── MTCNN.cpp ├── MTCNN.h ├── main.cpp └── main.cpp.new ├── model ├── det1.caffemodel ├── det1.prototxt ├── det2.caffemodel ├── det2.prototxt ├── det3.caffemodel ├── det3.prototxt ├── det4.caffemodel └── det4.prototxt ├── result ├── .DS_Store ├── FDDB_evaluation │ ├── .DS_Store │ ├── CMakeLists.txt │ ├── FDDB-folds │ │ ├── .DS_Store │ │ ├── CascadeCNN.txt │ │ ├── CascadeCNN │ │ │ ├── FDDB-fold-01-CascadeCNN.txt │ │ │ ├── FDDB-fold-02-CascadeCNN.txt │ │ │ ├── FDDB-fold-03-CascadeCNN.txt │ │ │ ├── FDDB-fold-04-CascadeCNN.txt │ │ │ ├── FDDB-fold-05-CascadeCNN.txt │ │ │ ├── FDDB-fold-06-CascadeCNN.txt │ │ │ ├── FDDB-fold-07-CascadeCNN.txt │ │ │ ├── FDDB-fold-08-CascadeCNN.txt │ │ │ ├── FDDB-fold-09-CascadeCNN.txt │ │ │ └── FDDB-fold-10-CascadeCNN.txt │ │ ├── ContROC.txt │ │ ├── ContROC_MTCNN.txt │ │ ├── ContROC_MTCNN_20.txt │ │ ├── DiscROC.txt │ │ ├── DiscROC_MTCNN.txt │ │ ├── DiscROC_MTCNN_20.txt │ │ ├── MTCNN.txt │ │ ├── MTCNN │ │ │ ├── FDDB-fold-01-MTCNN.txt │ │ │ ├── FDDB-fold-02-MTCNN.txt │ │ │ ├── FDDB-fold-03-MTCNN.txt │ │ │ ├── FDDB-fold-04-MTCNN.txt │ │ │ ├── FDDB-fold-05-MTCNN.txt │ │ │ ├── FDDB-fold-06-MTCNN.txt │ │ │ ├── FDDB-fold-07-MTCNN.txt │ │ │ ├── FDDB-fold-08-MTCNN.txt │ │ │ ├── FDDB-fold-09-MTCNN.txt │ │ │ └── FDDB-fold-10-MTCNN.txt │ │ ├── MTCNN_20.txt │ │ ├── MTCNN_20 │ │ │ ├── FDDB-fold-01-MTCNN.txt │ │ │ ├── FDDB-fold-02-MTCNN.txt │ │ │ ├── FDDB-fold-03-MTCNN.txt │ │ │ ├── FDDB-fold-04-MTCNN.txt │ │ │ ├── FDDB-fold-05-MTCNN.txt │ │ │ ├── FDDB-fold-06-MTCNN.txt │ │ │ ├── FDDB-fold-07-MTCNN.txt │ │ │ ├── FDDB-fold-08-MTCNN.txt │ │ │ ├── FDDB-fold-09-MTCNN.txt │ │ │ └── FDDB-fold-10-MTCNN.txt │ │ ├── ellipseList.txt │ │ ├── ellipseList │ │ │ ├── FDDB-fold-01-ellipseList.txt │ │ │ ├── FDDB-fold-02-ellipseList.txt │ │ │ ├── FDDB-fold-03-ellipseList.txt │ │ │ ├── FDDB-fold-04-ellipseList.txt │ │ │ ├── FDDB-fold-05-ellipseList.txt │ │ │ ├── FDDB-fold-06-ellipseList.txt │ │ │ ├── FDDB-fold-07-ellipseList.txt │ │ │ ├── FDDB-fold-08-ellipseList.txt │ │ │ ├── FDDB-fold-09-ellipseList.txt │ │ │ └── FDDB-fold-10-ellipseList.txt │ │ ├── fileList.txt │ │ ├── fileList │ │ │ ├── FDDB-fold-01.txt │ │ │ ├── FDDB-fold-02.txt │ │ │ ├── FDDB-fold-03.txt │ │ │ ├── FDDB-fold-04.txt │ │ │ ├── FDDB-fold-05.txt │ │ │ ├── FDDB-fold-06.txt │ │ │ ├── FDDB-fold-07.txt │ │ │ ├── FDDB-fold-08.txt │ │ │ ├── FDDB-fold-09.txt │ │ │ └── FDDB-fold-10.txt │ │ └── merge_txt.sh │ ├── compare │ │ ├── .DS_Store │ │ ├── CMakeLists.txt │ │ ├── compare.cpp │ │ ├── compare.h │ │ └── main.cpp │ ├── controc_Cascade.png │ ├── controc_MTCNN.png │ ├── controc_MTCNN_20.png │ ├── controc_MTCNN_num.png │ ├── discroc_Cascade.png │ ├── discroc_MTCNN.png │ ├── discroc_MTCNN_20.png │ ├── discroc_MTCNN_num.png │ ├── evaluation │ │ ├── CascadeCNN.txt │ │ ├── EllipseR.cpp │ │ ├── EllipseR.hpp │ │ ├── EllipsesSingleImage.cpp │ │ ├── EllipsesSingleImage.hpp │ │ ├── Hungarian.cpp │ │ ├── Hungarian.hpp │ │ ├── Makefile │ │ ├── MatchPair.cpp │ │ ├── MatchPair.hpp │ │ ├── Matching.cpp │ │ ├── Matching.hpp │ │ ├── OpenCVUtils.cpp │ │ ├── OpenCVUtils.hpp │ │ ├── README.txt │ │ ├── RectangleR.cpp │ │ ├── RectangleR.hpp │ │ ├── RectanglesSingleImage.cpp │ │ ├── RectanglesSingleImage.hpp │ │ ├── Region.cpp │ │ ├── Region.hpp │ │ ├── RegionsSingleImage.cpp │ │ ├── RegionsSingleImage.hpp │ │ ├── Results.cpp │ │ ├── Results.hpp │ │ ├── common.hpp │ │ ├── ellipseList.txt │ │ ├── evaluate.cpp │ │ ├── fileList.txt │ │ └── runEvaluate.pl │ └── face_detection │ │ ├── .DS_Store │ │ ├── CMakeLists.txt │ │ ├── GenSample.cpp │ │ ├── GenSample.h │ │ ├── ellipse_transform.cpp │ │ ├── ellipse_transform.h │ │ ├── fddb_detection.cpp │ │ ├── fddb_detection.h │ │ └── main.cpp ├── img_838-compare.jpg ├── img_906-compare.jpg ├── normal.bmp ├── record_gpu_1.txt ├── record_gpu_2.txt ├── result_gpu_1.png ├── result_gpu_2.png └── trump.jpg └── script ├── .DS_Store ├── PRCurve.py ├── plot_ROC_curve.py ├── test_time.py ├── train_process.png └── train_sh ├── .DS_Store ├── ONet_solver.prototxt ├── ONet_train.prototxt ├── ONet_train.sh ├── PNet_solver.prototxt ├── PNet_train.prototxt ├── PNet_train.sh ├── RNet_solver.prototxt ├── RNet_train.prototxt ├── RNet_train.sh ├── celeba_crop ├── .DS_Store ├── CMakeLists.txt ├── celeba_crop.cpp ├── celeba_crop.h └── main.cpp ├── generate_hdf5.py ├── test_24.txt └── train_24.txt /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/.DS_Store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MTCNN 2 | 3 | Repository for "[Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neural Networks](https://arxiv.org/abs/1604.02878)", implemented with Caffe, C++ interface. Compared with Cascade CNN, MTCNN integrates the detection net and calibration net into one net. Moreover, face alignment is also applied in the same net. 4 | 5 | ## Result 6 | 7 | ### Face Detection 8 | The results of each procedure in MTCNN are contained in result folder. The final results are shown in the flowing. These two pictures are collected by FDDB separately. The MTCNN fails to detect a face which is contained in FDDB in the left picture, while it detect a face in the right picture which is not contained in FDDB. (Better than the benchmark in some cases.) 9 | 10 | 11 | 12 | ### Face Alignment 13 | 14 | 15 | 16 | ### Time Cost 17 | The average time cost is faster than Cascade CNN which is 0.197 s/frame. The result is generated by testing a 1080P live video. 18 | 19 | 20 | 21 | ### Accuracy 22 | 23 | The accuracy in FDDB which is higher than 0.9. The model contained in as a pretrain model and improve the result 24 | 25 | 26 | 27 | ## How to train 28 | 29 | A hdf5 dataset is necessray to train a model which has multiple labels in a Caffe model. A sample of script which can generate .hdf5 file is list [here](https://github.com/foreverYoungGitHub/MTCNN/blob/master/script/train_sh/generate_hdf5.py). 30 | 31 | In this sample, you need to prepare 4 txt file, which contains label (0 or 1), landmark (ratio in the cropped image), regression box (ratio), and cropped image pathes. A database contained landmarks infomation is needed to generate the sample with these multiple attribute, such as [CelebA](http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html). Then change the pathes in the sample code. The output hdf5 file is shown in `train_file_path`. Notice the image size needs to be changed to generate suitable data for you net. 32 | 33 | ``` 34 | label_path = '../dataset/label.txt' 35 | landmark_path = '../dataset/landmark.txt' 36 | regression_box_path = '../dataset/regression_box.txt' 37 | crop_image_path = '../dataset/crop_image.txt' 38 | train_file_path = '../dataset/train_24.hd5' 39 | ``` 40 | 41 | Then, write the path of the hdf5 file into a txt and contain the txt in prototxt file. 42 | 43 | ``` 44 | hdf5_data_param { 45 | source: "/Users/Young/Documents/Programming/MTCNN/MTCNN_train/test_48.txt" 46 | batch_size: 100 47 | } 48 | ``` 49 | 50 | Run the shell file and train the model. 51 | 52 | ### Train strategy 53 | 54 | The images are used to train the CNN divide into 3 groups: positive face, negative face and part of the face. When the Intersection-over-Union (IoU) ratio of the cropped image is higher than 0.7, lower than 0.3, or between 0.3 and 0.7 to any ground truth provided by dataset, it belongs to the positive face, the negative face or the part of the face. (You can decide the thresholds by yourself.) The general train process is shown in following figure, while the detialed train processes are also listed. 55 | 56 | 57 | 58 | 1. Cropping the images from the dataset randomly, and dividing into positive face, negative face and part of the face based on the IoU between the ground truth and cropped image; 59 | 2. Training the P-Net based on the randomly cropped image; 60 | 3. Cropping the image from the dataset based on the detected bounding box of the P-Net, dividing it and utilizing it to fine-tuning the P-Net; 61 | 4. Training the R-Net based on the data used to fine-tuning the P-Net; 62 | 5. Cropping the image from the dataset based on the detected bounding box of the R-Net, dividing it and utilizing it to fine-tuning the R-Net; 63 | 6. Training the O-Net based on the data used to fine-tuning the P-Net and R-Net; 64 | 7. Cropping the image from the dataset based on the detected bounding box of the O-Net, dividing it and utilizing it to fine-tuning the O-Net. 65 | 66 | ### The example label for the 3 types data: 67 | 68 | positive face: 69 | - face detection: 1; 70 | - face landmark: [0.1,0.2,0.3,0.4,0.5,0.1,0.2,0.3,0.4,0.5]; 71 | - face regression: [0.1,0.1,0.1,0.1]. 72 | 73 | part of the face: 74 | - face detection: 1; 75 | - face landmark: [0.1,0.2,0.3,0.4,0.5,0.1,0.2,0.3,0.4,0.5]; 76 | - face regression: [0.4,0.4,0.4,0.4]. 77 | 78 | negative face: 79 | - face detection: 0; 80 | - face landmark: [0,0,0,0,0,0,0,0,0,0]; 81 | - face regression: [0,0,0,0]. 82 | 83 | You can also train the face detection and regression for the dataset without landmark label. The model is then used to train the face landmark. 84 | -------------------------------------------------------------------------------- /detection/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/detection/.DS_Store -------------------------------------------------------------------------------- /detection/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.6) 2 | project(MTCNN) 3 | 4 | #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 5 | set(CMAKE_CXX_STANDARD 11) 6 | 7 | find_package(OpenCV) 8 | 9 | # minicaffe 10 | include_directories(/home/yzh/working/mini-caffe/include) 11 | link_directories(/home/yzh/working/mini-caffe/build) 12 | 13 | set(SOURCE_FILES main.cpp MTCNN.cpp MTCNN.h) 14 | add_executable(MTCNN ${SOURCE_FILES}) 15 | 16 | target_link_libraries(MTCNN ${OpenCV_LIBS} ) 17 | target_link_libraries(MTCNN caffe) 18 | -------------------------------------------------------------------------------- /detection/MTCNN.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Young on 2016/11/27. 3 | // 4 | 5 | //#define CPU_ONLY 6 | 7 | #ifndef MTCNN_MTCNN_H 8 | #define MTCNN_MTCNN_H 9 | 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | using namespace caffe; 16 | 17 | class MTCNN { 18 | 19 | public: 20 | 21 | MTCNN(); 22 | MTCNN(const std::vector model_file, const std::vector trained_file); 23 | ~MTCNN(); 24 | 25 | void detection(const cv::Mat& img, std::vector& rectangles); 26 | void detection(const cv::Mat& img, std::vector& rectangles, std::vector& confidence); 27 | void detection(const cv::Mat& img, std::vector& rectangles, std::vector& confidence, std::vector>& alignment); 28 | void detection_TEST(const cv::Mat& img, std::vector& rectangles); 29 | 30 | void Preprocess(const cv::Mat &img); 31 | void P_Net(); 32 | void R_Net(); 33 | void O_Net(); 34 | void detect_net(int i); 35 | 36 | void local_NMS(); 37 | void global_NMS(); 38 | 39 | void Predict(const cv::Mat& img, int i); 40 | void Predict(const std::vector imgs, int i); 41 | void WrapInputLayer(const cv::Mat& img, std::vector *input_channels, int i); 42 | void WrapInputLayer(const vector imgs, std::vector *input_channels, int i); 43 | 44 | float IoU(cv::Rect rect1, cv::Rect rect2); 45 | float IoM(cv::Rect rect1, cv::Rect rect2); 46 | void resize_img(); 47 | void GenerateBoxs(cv::Mat img); 48 | void BoxRegress(std::vector& bounding_box, std::vector regression_box); 49 | void Padding(std::vector& bounding_box, int img_w,int img_h); 50 | cv::Mat crop(cv::Mat img, cv::Rect& rect); 51 | 52 | void img_show(cv::Mat img, std::string name); 53 | void img_show_T(cv::Mat img, std::string name); 54 | //param for P, R, O, L net 55 | std::vector> nets_; 56 | std::vector input_geometry_; 57 | int num_channels_; 58 | 59 | //variable for the image 60 | cv::Mat img_; 61 | std::vector img_resized_; 62 | std::vector scale_; 63 | 64 | //variable for the output of the neural network 65 | // std::vector regression_box_; 66 | std::vector regression_box_temp_; 67 | std::vector bounding_box_; 68 | std::vector confidence_; 69 | std::vector confidence_temp_; 70 | std::vector> alignment_; 71 | std::vector alignment_temp_; 72 | //paramter for the threshold 73 | int minSize_ = 200; 74 | float factor_ = 0.709; 75 | float threshold_[3] = {0.5, 0.5, 0.3}; 76 | float threshold_NMS_ = 0.5; 77 | std::vector > output_blob_names_ = {{"conv4-2", "prob1"}, 78 | {"conv5-2", "prob1"}, 79 | {"conv6-2", "conv6-3", "prob1"} }; 80 | }; 81 | 82 | 83 | #endif //MTCNN_MTCNN_H 84 | -------------------------------------------------------------------------------- /detection/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "MTCNN.h" 3 | #include "opencv2/opencv.hpp" 4 | #include 5 | 6 | using namespace std; 7 | using namespace cv; 8 | 9 | int main() { 10 | 11 | vector model_file = { 12 | "../model/det1.prototxt", 13 | "../model/det2.prototxt", 14 | "../model/det3.prototxt" 15 | // "../model/det4.prototxt" 16 | }; 17 | 18 | vector trained_file = { 19 | "../model/det1.caffemodel", 20 | "../model/det2.caffemodel", 21 | "../model/det3.caffemodel" 22 | // "../model/det4.caffemodel" 23 | }; 24 | 25 | MTCNN mtcnn(model_file, trained_file); 26 | 27 | vector rectangles; 28 | string img_path = "../result/trump.jpg"; 29 | Mat img = imread(img_path); 30 | 31 | int count = 1; 32 | unsigned start = time(NULL); 33 | for(int i=0; i < count; i++) { 34 | mtcnn.detection_TEST(img, rectangles); 35 | } 36 | unsigned end = time(NULL); 37 | unsigned ave = (end-start)*1000.0/count; 38 | std::cout << "Run " << count << " times, "<<"Average time:" << ave << std::endl; 39 | 40 | return 0; 41 | } 42 | 43 | /* 44 | * 45 | int main() { 46 | 47 | 48 | //the vector used to input the address of the net model 49 | vector model_file = { 50 | "../model/det1.prototxt", 51 | "../model/det2.prototxt", 52 | "../model/det3.prototxt" 53 | // "../model/det4.prototxt" 54 | }; 55 | 56 | //the vector used to input the address of the net parameters 57 | vector trained_file = { 58 | "../model/det1.caffemodel", 59 | "../model/det2.caffemodel", 60 | "../model/det3.caffemodel" 61 | // "../model/det4.caffemodel" 62 | }; 63 | 64 | MTCNN mtcnn(model_file, trained_file); 65 | 66 | // VideoCapture cap(0); 67 | VideoCapture cap("../../0294_02_004_angelina_jolie.avi"); 68 | 69 | VideoWriter writer; 70 | writer.open("../result/0294_02_004_angelina_jolie.avi",CV_FOURCC('M', 'J', 'P', 'G'), 25, Size(1280,720), true); 71 | 72 | Mat img; 73 | int frame_count = 0; 74 | while(cap.read(img)) 75 | { 76 | vector rectangles; 77 | vector confidences; 78 | std::vector> alignment; 79 | mtcnn.detection(img, rectangles, confidences, alignment); 80 | 81 | for(int i = 0; i < rectangles.size(); i++) 82 | { 83 | int green = confidences[i] * 255; 84 | int red = (1 - confidences[i]) * 255; 85 | rectangle(img, rectangles[i], cv::Scalar(0, green, red), 3); 86 | for(int j = 0; j < alignment[i].size(); j++) 87 | { 88 | cv::circle(img, alignment[i][j], 5, cv::Scalar(255, 255, 0), 3); 89 | } 90 | } 91 | 92 | frame_count++; 93 | cv::putText(img, std::to_string(frame_count), cvPoint(3, 13), 94 | cv::FONT_HERSHEY_COMPLEX_SMALL, 0.8, cvScalar(0, 255, 0), 1, CV_AA); 95 | writer.write(img); 96 | imshow("Live", img); 97 | waitKey(1); 98 | } 99 | 100 | return 0; 101 | } 102 | 103 | 104 | */ 105 | -------------------------------------------------------------------------------- /detection/main.cpp.new: -------------------------------------------------------------------------------- 1 | #include 2 | #include "MTCNN.h" 3 | #include "opencv2/opencv.hpp" 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | using namespace std; 10 | using namespace cv; 11 | 12 | int main() { 13 | 14 | vector model_file = { 15 | "../model/det1.prototxt", 16 | "../model/det2.prototxt", 17 | "../model/det3.prototxt" 18 | // "../model/det4.prototxt" 19 | }; 20 | 21 | vector trained_file = { 22 | "../model/det1.caffemodel", 23 | "../model/det2.caffemodel", 24 | "../model/det3.caffemodel" 25 | // "../model/det4.caffemodel" 26 | }; 27 | 28 | MTCNN mtcnn(model_file, trained_file); 29 | 30 | 31 | const char *dirPath = "/home/yzh/working/FaceNet/face_recognition_mcaffe/test/precision_test/picture_for_all/"; 32 | DIR * pd = opendir(dirPath); 33 | string sdirPath(dirPath); 34 | string img_path; 35 | struct dirent *filename; 36 | int count = 0; 37 | int nums = 200; 38 | time_t total = 0; 39 | while(nums > 0 && (filename=readdir(pd))) { 40 | if( strcmp(filename->d_name, ".") == 0 || strcmp(filename->d_name, "..") == 0) 41 | continue; 42 | img_path = sdirPath + filename->d_name; 43 | //std::cout << img_path << std::endl; 44 | time_t start = time(NULL); 45 | Mat img = imread(img_path); 46 | //imshow("picture", img); 47 | //waitKey(0); 48 | vector rectangles; 49 | mtcnn.detection(img, rectangles); 50 | time_t end = time(NULL); 51 | total += end - start; 52 | count++; 53 | //std::cout << count << endl; 54 | nums--; 55 | } 56 | closedir(pd); 57 | std::cout << "total:" << total << std::endl; 58 | double ave = total*1000.0/count; 59 | std::cout << "Run " << count << " times, "<<"Average time:" << ave << std::endl; 60 | 61 | return 0; 62 | } 63 | 64 | /* 65 | * 66 | int main() { 67 | 68 | 69 | //the vector used to input the address of the net model 70 | vector model_file = { 71 | "../model/det1.prototxt", 72 | "../model/det2.prototxt", 73 | "../model/det3.prototxt" 74 | // "../model/det4.prototxt" 75 | }; 76 | 77 | //the vector used to input the address of the net parameters 78 | vector trained_file = { 79 | "../model/det1.caffemodel", 80 | "../model/det2.caffemodel", 81 | "../model/det3.caffemodel" 82 | // "../model/det4.caffemodel" 83 | }; 84 | 85 | MTCNN mtcnn(model_file, trained_file); 86 | 87 | // VideoCapture cap(0); 88 | VideoCapture cap("../../0294_02_004_angelina_jolie.avi"); 89 | 90 | VideoWriter writer; 91 | writer.open("../result/0294_02_004_angelina_jolie.avi",CV_FOURCC('M', 'J', 'P', 'G'), 25, Size(1280,720), true); 92 | 93 | Mat img; 94 | int frame_count = 0; 95 | while(cap.read(img)) 96 | { 97 | vector rectangles; 98 | vector confidences; 99 | std::vector> alignment; 100 | mtcnn.detection(img, rectangles, confidences, alignment); 101 | 102 | for(int i = 0; i < rectangles.size(); i++) 103 | { 104 | int green = confidences[i] * 255; 105 | int red = (1 - confidences[i]) * 255; 106 | rectangle(img, rectangles[i], cv::Scalar(0, green, red), 3); 107 | for(int j = 0; j < alignment[i].size(); j++) 108 | { 109 | cv::circle(img, alignment[i][j], 5, cv::Scalar(255, 255, 0), 3); 110 | } 111 | } 112 | 113 | frame_count++; 114 | cv::putText(img, std::to_string(frame_count), cvPoint(3, 13), 115 | cv::FONT_HERSHEY_COMPLEX_SMALL, 0.8, cvScalar(0, 255, 0), 1, CV_AA); 116 | writer.write(img); 117 | imshow("Live", img); 118 | waitKey(1); 119 | } 120 | 121 | return 0; 122 | } 123 | 124 | 125 | */ 126 | -------------------------------------------------------------------------------- /model/det1.caffemodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/model/det1.caffemodel -------------------------------------------------------------------------------- /model/det1.prototxt: -------------------------------------------------------------------------------- 1 | name: "PNet" 2 | layer { 3 | name: "input" 4 | type: "Input" 5 | top: "data" 6 | input_param { 7 | shape { 8 | dim: 1 9 | dim: 3 10 | dim: 12 11 | dim: 12 12 | } 13 | } 14 | } 15 | layer { 16 | name: "conv1" 17 | type: "Convolution" 18 | bottom: "data" 19 | top: "conv1" 20 | param { 21 | lr_mult: 1 22 | decay_mult: 1 23 | } 24 | param { 25 | lr_mult: 2 26 | decay_mult: 0 27 | } 28 | convolution_param { 29 | num_output: 10 30 | kernel_size: 3 31 | stride: 1 32 | weight_filler { 33 | type: "xavier" 34 | } 35 | bias_filler { 36 | type: "constant" 37 | value: 0 38 | } 39 | } 40 | } 41 | layer { 42 | name: "PReLU1" 43 | type: "PReLU" 44 | bottom: "conv1" 45 | top: "conv1" 46 | } 47 | layer { 48 | name: "pool1" 49 | type: "Pooling" 50 | bottom: "conv1" 51 | top: "pool1" 52 | pooling_param { 53 | pool: MAX 54 | kernel_size: 2 55 | stride: 2 56 | } 57 | } 58 | layer { 59 | name: "conv2" 60 | type: "Convolution" 61 | bottom: "pool1" 62 | top: "conv2" 63 | param { 64 | lr_mult: 1 65 | decay_mult: 1 66 | } 67 | param { 68 | lr_mult: 2 69 | decay_mult: 0 70 | } 71 | convolution_param { 72 | num_output: 16 73 | kernel_size: 3 74 | stride: 1 75 | weight_filler { 76 | type: "xavier" 77 | } 78 | bias_filler { 79 | type: "constant" 80 | value: 0 81 | } 82 | } 83 | } 84 | layer { 85 | name: "PReLU2" 86 | type: "PReLU" 87 | bottom: "conv2" 88 | top: "conv2" 89 | } 90 | layer { 91 | name: "conv3" 92 | type: "Convolution" 93 | bottom: "conv2" 94 | top: "conv3" 95 | param { 96 | lr_mult: 1 97 | decay_mult: 1 98 | } 99 | param { 100 | lr_mult: 2 101 | decay_mult: 0 102 | } 103 | convolution_param { 104 | num_output: 32 105 | kernel_size: 3 106 | stride: 1 107 | weight_filler { 108 | type: "xavier" 109 | } 110 | bias_filler { 111 | type: "constant" 112 | value: 0 113 | } 114 | } 115 | } 116 | layer { 117 | name: "PReLU3" 118 | type: "PReLU" 119 | bottom: "conv3" 120 | top: "conv3" 121 | } 122 | layer { 123 | name: "conv4-1" 124 | type: "Convolution" 125 | bottom: "conv3" 126 | top: "conv4-1" 127 | param { 128 | lr_mult: 1 129 | decay_mult: 1 130 | } 131 | param { 132 | lr_mult: 2 133 | decay_mult: 0 134 | } 135 | convolution_param { 136 | num_output: 2 137 | kernel_size: 1 138 | stride: 1 139 | weight_filler { 140 | type: "xavier" 141 | } 142 | bias_filler { 143 | type: "constant" 144 | value: 0 145 | } 146 | } 147 | } 148 | layer { 149 | name: "conv4-2" 150 | type: "Convolution" 151 | bottom: "conv3" 152 | top: "conv4-2" 153 | param { 154 | lr_mult: 1 155 | decay_mult: 1 156 | } 157 | param { 158 | lr_mult: 2 159 | decay_mult: 0 160 | } 161 | convolution_param { 162 | num_output: 4 163 | kernel_size: 1 164 | stride: 1 165 | weight_filler { 166 | type: "xavier" 167 | } 168 | bias_filler { 169 | type: "constant" 170 | value: 0 171 | } 172 | } 173 | } 174 | layer { 175 | name: "prob1" 176 | type: "Softmax" 177 | bottom: "conv4-1" 178 | top: "prob1" 179 | } 180 | -------------------------------------------------------------------------------- /model/det2.caffemodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/model/det2.caffemodel -------------------------------------------------------------------------------- /model/det2.prototxt: -------------------------------------------------------------------------------- 1 | name: "RNet" 2 | layer { 3 | name: "input" 4 | type: "Input" 5 | top: "data" 6 | input_param { 7 | shape { 8 | dim: 1 9 | dim: 3 10 | dim: 24 11 | dim: 24 12 | } 13 | } 14 | } 15 | layer { 16 | name: "conv1" 17 | type: "Convolution" 18 | bottom: "data" 19 | top: "conv1" 20 | param { 21 | lr_mult: 0 22 | decay_mult: 0 23 | } 24 | param { 25 | lr_mult: 0 26 | decay_mult: 0 27 | } 28 | convolution_param { 29 | num_output: 28 30 | kernel_size: 3 31 | stride: 1 32 | weight_filler { 33 | type: "xavier" 34 | } 35 | bias_filler { 36 | type: "constant" 37 | value: 0 38 | } 39 | } 40 | } 41 | layer { 42 | name: "prelu1" 43 | type: "PReLU" 44 | bottom: "conv1" 45 | top: "conv1" 46 | propagate_down: true 47 | } 48 | layer { 49 | name: "pool1" 50 | type: "Pooling" 51 | bottom: "conv1" 52 | top: "pool1" 53 | pooling_param { 54 | pool: MAX 55 | kernel_size: 3 56 | stride: 2 57 | } 58 | } 59 | layer { 60 | name: "conv2" 61 | type: "Convolution" 62 | bottom: "pool1" 63 | top: "conv2" 64 | param { 65 | lr_mult: 0 66 | decay_mult: 0 67 | } 68 | param { 69 | lr_mult: 0 70 | decay_mult: 0 71 | } 72 | convolution_param { 73 | num_output: 48 74 | kernel_size: 3 75 | stride: 1 76 | weight_filler { 77 | type: "xavier" 78 | } 79 | bias_filler { 80 | type: "constant" 81 | value: 0 82 | } 83 | } 84 | } 85 | layer { 86 | name: "prelu2" 87 | type: "PReLU" 88 | bottom: "conv2" 89 | top: "conv2" 90 | propagate_down: true 91 | } 92 | layer { 93 | name: "pool2" 94 | type: "Pooling" 95 | bottom: "conv2" 96 | top: "pool2" 97 | pooling_param { 98 | pool: MAX 99 | kernel_size: 3 100 | stride: 2 101 | } 102 | } 103 | layer { 104 | name: "conv3" 105 | type: "Convolution" 106 | bottom: "pool2" 107 | top: "conv3" 108 | param { 109 | lr_mult: 0 110 | decay_mult: 0 111 | } 112 | param { 113 | lr_mult: 0 114 | decay_mult: 0 115 | } 116 | convolution_param { 117 | num_output: 64 118 | kernel_size: 2 119 | stride: 1 120 | weight_filler { 121 | type: "xavier" 122 | } 123 | bias_filler { 124 | type: "constant" 125 | value: 0 126 | } 127 | } 128 | } 129 | layer { 130 | name: "prelu3" 131 | type: "PReLU" 132 | bottom: "conv3" 133 | top: "conv3" 134 | propagate_down: true 135 | } 136 | layer { 137 | name: "conv4" 138 | type: "InnerProduct" 139 | bottom: "conv3" 140 | top: "conv4" 141 | param { 142 | lr_mult: 0 143 | decay_mult: 0 144 | } 145 | param { 146 | lr_mult: 0 147 | decay_mult: 0 148 | } 149 | inner_product_param { 150 | num_output: 128 151 | weight_filler { 152 | type: "xavier" 153 | } 154 | bias_filler { 155 | type: "constant" 156 | value: 0 157 | } 158 | } 159 | } 160 | layer { 161 | name: "prelu4" 162 | type: "PReLU" 163 | bottom: "conv4" 164 | top: "conv4" 165 | } 166 | layer { 167 | name: "conv5-1" 168 | type: "InnerProduct" 169 | bottom: "conv4" 170 | top: "conv5-1" 171 | param { 172 | lr_mult: 0 173 | decay_mult: 0 174 | } 175 | param { 176 | lr_mult: 0 177 | decay_mult: 0 178 | } 179 | inner_product_param { 180 | num_output: 2 181 | weight_filler { 182 | type: "xavier" 183 | } 184 | bias_filler { 185 | type: "constant" 186 | value: 0 187 | } 188 | } 189 | } 190 | layer { 191 | name: "conv5-2" 192 | type: "InnerProduct" 193 | bottom: "conv4" 194 | top: "conv5-2" 195 | param { 196 | lr_mult: 1 197 | decay_mult: 1 198 | } 199 | param { 200 | lr_mult: 2 201 | decay_mult: 1 202 | } 203 | inner_product_param { 204 | num_output: 4 205 | weight_filler { 206 | type: "xavier" 207 | } 208 | bias_filler { 209 | type: "constant" 210 | value: 0 211 | } 212 | } 213 | } 214 | layer { 215 | name: "prob1" 216 | type: "Softmax" 217 | bottom: "conv5-1" 218 | top: "prob1" 219 | } 220 | -------------------------------------------------------------------------------- /model/det3.caffemodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/model/det3.caffemodel -------------------------------------------------------------------------------- /model/det3.prototxt: -------------------------------------------------------------------------------- 1 | name: "ONet" 2 | layer { 3 | name: "input" 4 | type: "Input" 5 | top: "data" 6 | input_param { 7 | shape { 8 | dim: 1 9 | dim: 3 10 | dim: 48 11 | dim: 48 12 | } 13 | } 14 | } 15 | layer { 16 | name: "conv1" 17 | type: "Convolution" 18 | bottom: "data" 19 | top: "conv1" 20 | param { 21 | lr_mult: 1 22 | decay_mult: 1 23 | } 24 | param { 25 | lr_mult: 2 26 | decay_mult: 1 27 | } 28 | convolution_param { 29 | num_output: 32 30 | kernel_size: 3 31 | stride: 1 32 | weight_filler { 33 | type: "xavier" 34 | } 35 | bias_filler { 36 | type: "constant" 37 | value: 0 38 | } 39 | } 40 | } 41 | layer { 42 | name: "prelu1" 43 | type: "PReLU" 44 | bottom: "conv1" 45 | top: "conv1" 46 | } 47 | layer { 48 | name: "pool1" 49 | type: "Pooling" 50 | bottom: "conv1" 51 | top: "pool1" 52 | pooling_param { 53 | pool: MAX 54 | kernel_size: 3 55 | stride: 2 56 | } 57 | } 58 | layer { 59 | name: "conv2" 60 | type: "Convolution" 61 | bottom: "pool1" 62 | top: "conv2" 63 | param { 64 | lr_mult: 1 65 | decay_mult: 1 66 | } 67 | param { 68 | lr_mult: 2 69 | decay_mult: 1 70 | } 71 | convolution_param { 72 | num_output: 64 73 | kernel_size: 3 74 | stride: 1 75 | weight_filler { 76 | type: "xavier" 77 | } 78 | bias_filler { 79 | type: "constant" 80 | value: 0 81 | } 82 | } 83 | } 84 | layer { 85 | name: "prelu2" 86 | type: "PReLU" 87 | bottom: "conv2" 88 | top: "conv2" 89 | } 90 | layer { 91 | name: "pool2" 92 | type: "Pooling" 93 | bottom: "conv2" 94 | top: "pool2" 95 | pooling_param { 96 | pool: MAX 97 | kernel_size: 3 98 | stride: 2 99 | } 100 | } 101 | layer { 102 | name: "conv3" 103 | type: "Convolution" 104 | bottom: "pool2" 105 | top: "conv3" 106 | param { 107 | lr_mult: 1 108 | decay_mult: 1 109 | } 110 | param { 111 | lr_mult: 2 112 | decay_mult: 1 113 | } 114 | convolution_param { 115 | num_output: 64 116 | kernel_size: 3 117 | weight_filler { 118 | type: "xavier" 119 | } 120 | bias_filler { 121 | type: "constant" 122 | value: 0 123 | } 124 | } 125 | } 126 | layer { 127 | name: "prelu3" 128 | type: "PReLU" 129 | bottom: "conv3" 130 | top: "conv3" 131 | } 132 | layer { 133 | name: "pool3" 134 | type: "Pooling" 135 | bottom: "conv3" 136 | top: "pool3" 137 | pooling_param { 138 | pool: MAX 139 | kernel_size: 2 140 | stride: 2 141 | } 142 | } 143 | layer { 144 | name: "conv4" 145 | type: "Convolution" 146 | bottom: "pool3" 147 | top: "conv4" 148 | param { 149 | lr_mult: 1 150 | decay_mult: 1 151 | } 152 | param { 153 | lr_mult: 2 154 | decay_mult: 1 155 | } 156 | convolution_param { 157 | num_output: 128 158 | kernel_size: 2 159 | weight_filler { 160 | type: "xavier" 161 | } 162 | bias_filler { 163 | type: "constant" 164 | value: 0 165 | } 166 | } 167 | } 168 | layer { 169 | name: "prelu4" 170 | type: "PReLU" 171 | bottom: "conv4" 172 | top: "conv4" 173 | } 174 | layer { 175 | name: "conv5" 176 | type: "InnerProduct" 177 | bottom: "conv4" 178 | top: "conv5" 179 | param { 180 | lr_mult: 1 181 | decay_mult: 1 182 | } 183 | param { 184 | lr_mult: 2 185 | decay_mult: 1 186 | } 187 | inner_product_param { 188 | num_output: 256 189 | weight_filler { 190 | type: "xavier" 191 | } 192 | bias_filler { 193 | type: "constant" 194 | value: 0 195 | } 196 | } 197 | } 198 | layer { 199 | name: "drop5" 200 | type: "Dropout" 201 | bottom: "conv5" 202 | top: "conv5" 203 | dropout_param { 204 | dropout_ratio: 0.25 205 | } 206 | } 207 | layer { 208 | name: "prelu5" 209 | type: "PReLU" 210 | bottom: "conv5" 211 | top: "conv5" 212 | } 213 | layer { 214 | name: "conv6-1" 215 | type: "InnerProduct" 216 | bottom: "conv5" 217 | top: "conv6-1" 218 | param { 219 | lr_mult: 1 220 | decay_mult: 1 221 | } 222 | param { 223 | lr_mult: 2 224 | decay_mult: 1 225 | } 226 | inner_product_param { 227 | num_output: 2 228 | weight_filler { 229 | type: "xavier" 230 | } 231 | bias_filler { 232 | type: "constant" 233 | value: 0 234 | } 235 | } 236 | } 237 | layer { 238 | name: "conv6-2" 239 | type: "InnerProduct" 240 | bottom: "conv5" 241 | top: "conv6-2" 242 | param { 243 | lr_mult: 1 244 | decay_mult: 1 245 | } 246 | param { 247 | lr_mult: 2 248 | decay_mult: 1 249 | } 250 | inner_product_param { 251 | num_output: 4 252 | weight_filler { 253 | type: "xavier" 254 | } 255 | bias_filler { 256 | type: "constant" 257 | value: 0 258 | } 259 | } 260 | } 261 | layer { 262 | name: "conv6-3" 263 | type: "InnerProduct" 264 | bottom: "conv5" 265 | top: "conv6-3" 266 | param { 267 | lr_mult: 1 268 | decay_mult: 1 269 | } 270 | param { 271 | lr_mult: 2 272 | decay_mult: 1 273 | } 274 | inner_product_param { 275 | num_output: 10 276 | weight_filler { 277 | type: "xavier" 278 | } 279 | bias_filler { 280 | type: "constant" 281 | value: 0 282 | } 283 | } 284 | } 285 | layer { 286 | name: "prob1" 287 | type: "Softmax" 288 | bottom: "conv6-1" 289 | top: "prob1" 290 | } 291 | -------------------------------------------------------------------------------- /model/det4.caffemodel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/model/det4.caffemodel -------------------------------------------------------------------------------- /result/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/.DS_Store -------------------------------------------------------------------------------- /result/FDDB_evaluation/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/FDDB_evaluation/.DS_Store -------------------------------------------------------------------------------- /result/FDDB_evaluation/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.6) 2 | project(FDDB_evaluation) 3 | 4 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 5 | 6 | set(OpenCV_DIR "/usr/local/lib") 7 | find_package(OpenCV) 8 | 9 | set(SOURCE_FILES 10 | evaluation/common.hpp 11 | evaluation/EllipseR.cpp 12 | evaluation/EllipseR.hpp 13 | evaluation/EllipsesSingleImage.cpp 14 | evaluation/EllipsesSingleImage.hpp 15 | evaluation/evaluate.cpp 16 | evaluation/Hungarian.cpp 17 | evaluation/Hungarian.hpp 18 | evaluation/Matching.cpp 19 | evaluation/Matching.hpp 20 | evaluation/MatchPair.cpp 21 | evaluation/MatchPair.hpp 22 | evaluation/OpenCVUtils.cpp 23 | evaluation/OpenCVUtils.hpp 24 | evaluation/RectangleR.cpp 25 | evaluation/RectangleR.hpp 26 | evaluation/RectanglesSingleImage.cpp 27 | evaluation/RectanglesSingleImage.hpp 28 | evaluation/Region.cpp 29 | evaluation/Region.hpp 30 | evaluation/RegionsSingleImage.cpp 31 | evaluation/RegionsSingleImage.hpp 32 | evaluation/Results.cpp 33 | evaluation/Results.hpp) 34 | 35 | add_executable(FDDB_evaluation ${SOURCE_FILES}) 36 | target_link_libraries(FDDB_evaluation ${OpenCV_LIBS} ) -------------------------------------------------------------------------------- /result/FDDB_evaluation/FDDB-folds/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/FDDB_evaluation/FDDB-folds/.DS_Store -------------------------------------------------------------------------------- /result/FDDB_evaluation/FDDB-folds/fileList/FDDB-fold-01.txt: -------------------------------------------------------------------------------- 1 | 2002/08/11/big/img_591 2 | 2002/08/26/big/img_265 3 | 2002/07/19/big/img_423 4 | 2002/08/24/big/img_490 5 | 2002/08/31/big/img_17676 6 | 2002/07/31/big/img_228 7 | 2002/07/24/big/img_402 8 | 2002/08/04/big/img_769 9 | 2002/07/19/big/img_581 10 | 2002/08/13/big/img_723 11 | 2002/08/12/big/img_821 12 | 2003/01/17/big/img_610 13 | 2002/08/13/big/img_1116 14 | 2002/08/28/big/img_19238 15 | 2002/08/21/big/img_660 16 | 2002/08/14/big/img_607 17 | 2002/08/05/big/img_3708 18 | 2002/08/19/big/img_511 19 | 2002/08/07/big/img_1316 20 | 2002/07/25/big/img_1047 21 | 2002/07/23/big/img_474 22 | 2002/07/27/big/img_970 23 | 2002/09/02/big/img_15752 24 | 2002/09/01/big/img_16378 25 | 2002/09/01/big/img_16189 26 | 2002/08/26/big/img_276 27 | 2002/07/24/big/img_518 28 | 2002/08/14/big/img_1027 29 | 2002/08/24/big/img_733 30 | 2002/08/15/big/img_249 31 | 2003/01/15/big/img_1371 32 | 2002/08/07/big/img_1348 33 | 2003/01/01/big/img_331 34 | 2002/08/23/big/img_536 35 | 2002/07/30/big/img_224 36 | 2002/08/10/big/img_763 37 | 2002/08/21/big/img_293 38 | 2002/08/15/big/img_1211 39 | 2002/08/15/big/img_1194 40 | 2003/01/15/big/img_390 41 | 2002/08/06/big/img_2893 42 | 2002/08/17/big/img_691 43 | 2002/08/07/big/img_1695 44 | 2002/08/16/big/img_829 45 | 2002/07/25/big/img_201 46 | 2002/08/23/big/img_36 47 | 2003/01/15/big/img_763 48 | 2003/01/15/big/img_637 49 | 2002/08/22/big/img_592 50 | 2002/07/25/big/img_817 51 | 2003/01/15/big/img_1219 52 | 2002/08/05/big/img_3508 53 | 2002/08/15/big/img_1108 54 | 2002/07/19/big/img_488 55 | 2003/01/16/big/img_704 56 | 2003/01/13/big/img_1087 57 | 2002/08/10/big/img_670 58 | 2002/07/24/big/img_104 59 | 2002/08/27/big/img_19823 60 | 2002/09/01/big/img_16229 61 | 2003/01/13/big/img_846 62 | 2002/08/04/big/img_412 63 | 2002/07/22/big/img_554 64 | 2002/08/12/big/img_331 65 | 2002/08/02/big/img_533 66 | 2002/08/12/big/img_259 67 | 2002/08/18/big/img_328 68 | 2003/01/14/big/img_630 69 | 2002/08/05/big/img_3541 70 | 2002/08/06/big/img_2390 71 | 2002/08/20/big/img_150 72 | 2002/08/02/big/img_1231 73 | 2002/08/16/big/img_710 74 | 2002/08/19/big/img_591 75 | 2002/07/22/big/img_725 76 | 2002/07/24/big/img_820 77 | 2003/01/13/big/img_568 78 | 2002/08/22/big/img_853 79 | 2002/08/09/big/img_648 80 | 2002/08/23/big/img_528 81 | 2003/01/14/big/img_888 82 | 2002/08/30/big/img_18201 83 | 2002/08/13/big/img_965 84 | 2003/01/14/big/img_660 85 | 2002/07/19/big/img_517 86 | 2003/01/14/big/img_406 87 | 2002/08/30/big/img_18433 88 | 2002/08/07/big/img_1630 89 | 2002/08/06/big/img_2717 90 | 2002/08/21/big/img_470 91 | 2002/07/23/big/img_633 92 | 2002/08/20/big/img_915 93 | 2002/08/16/big/img_893 94 | 2002/07/29/big/img_644 95 | 2002/08/15/big/img_529 96 | 2002/08/16/big/img_668 97 | 2002/08/07/big/img_1871 98 | 2002/07/25/big/img_192 99 | 2002/07/31/big/img_961 100 | 2002/08/19/big/img_738 101 | 2002/07/31/big/img_382 102 | 2002/08/19/big/img_298 103 | 2003/01/17/big/img_608 104 | 2002/08/21/big/img_514 105 | 2002/07/23/big/img_183 106 | 2003/01/17/big/img_536 107 | 2002/07/24/big/img_478 108 | 2002/08/06/big/img_2997 109 | 2002/09/02/big/img_15380 110 | 2002/08/07/big/img_1153 111 | 2002/07/31/big/img_967 112 | 2002/07/31/big/img_711 113 | 2002/08/26/big/img_664 114 | 2003/01/01/big/img_326 115 | 2002/08/24/big/img_775 116 | 2002/08/08/big/img_961 117 | 2002/08/16/big/img_77 118 | 2002/08/12/big/img_296 119 | 2002/07/22/big/img_905 120 | 2003/01/13/big/img_284 121 | 2002/08/13/big/img_887 122 | 2002/08/24/big/img_849 123 | 2002/07/30/big/img_345 124 | 2002/08/18/big/img_419 125 | 2002/08/01/big/img_1347 126 | 2002/08/05/big/img_3670 127 | 2002/07/21/big/img_479 128 | 2002/08/08/big/img_913 129 | 2002/09/02/big/img_15828 130 | 2002/08/30/big/img_18194 131 | 2002/08/08/big/img_471 132 | 2002/08/22/big/img_734 133 | 2002/08/09/big/img_586 134 | 2002/08/09/big/img_454 135 | 2002/07/29/big/img_47 136 | 2002/07/19/big/img_381 137 | 2002/07/29/big/img_733 138 | 2002/08/20/big/img_327 139 | 2002/07/21/big/img_96 140 | 2002/08/06/big/img_2680 141 | 2002/07/25/big/img_919 142 | 2002/07/21/big/img_158 143 | 2002/07/22/big/img_801 144 | 2002/07/22/big/img_567 145 | 2002/07/24/big/img_804 146 | 2002/07/24/big/img_690 147 | 2003/01/15/big/img_576 148 | 2002/08/14/big/img_335 149 | 2003/01/13/big/img_390 150 | 2002/08/11/big/img_258 151 | 2002/07/23/big/img_917 152 | 2002/08/15/big/img_525 153 | 2003/01/15/big/img_505 154 | 2002/07/30/big/img_886 155 | 2003/01/16/big/img_640 156 | 2003/01/14/big/img_642 157 | 2003/01/17/big/img_844 158 | 2002/08/04/big/img_571 159 | 2002/08/29/big/img_18702 160 | 2003/01/15/big/img_240 161 | 2002/07/29/big/img_553 162 | 2002/08/10/big/img_354 163 | 2002/08/18/big/img_17 164 | 2003/01/15/big/img_782 165 | 2002/07/27/big/img_382 166 | 2002/08/14/big/img_970 167 | 2003/01/16/big/img_70 168 | 2003/01/16/big/img_625 169 | 2002/08/18/big/img_341 170 | 2002/08/26/big/img_188 171 | 2002/08/09/big/img_405 172 | 2002/08/02/big/img_37 173 | 2002/08/13/big/img_748 174 | 2002/07/22/big/img_399 175 | 2002/07/25/big/img_844 176 | 2002/08/12/big/img_340 177 | 2003/01/13/big/img_815 178 | 2002/08/26/big/img_5 179 | 2002/08/10/big/img_158 180 | 2002/08/18/big/img_95 181 | 2002/07/29/big/img_1297 182 | 2003/01/13/big/img_508 183 | 2002/09/01/big/img_16680 184 | 2003/01/16/big/img_338 185 | 2002/08/13/big/img_517 186 | 2002/07/22/big/img_626 187 | 2002/08/06/big/img_3024 188 | 2002/07/26/big/img_499 189 | 2003/01/13/big/img_387 190 | 2002/08/31/big/img_18025 191 | 2002/08/13/big/img_520 192 | 2003/01/16/big/img_576 193 | 2002/07/26/big/img_121 194 | 2002/08/25/big/img_703 195 | 2002/08/26/big/img_615 196 | 2002/08/17/big/img_434 197 | 2002/08/02/big/img_677 198 | 2002/08/18/big/img_276 199 | 2002/08/05/big/img_3672 200 | 2002/07/26/big/img_700 201 | 2002/07/31/big/img_277 202 | 2003/01/14/big/img_220 203 | 2002/08/23/big/img_232 204 | 2002/08/31/big/img_17422 205 | 2002/07/22/big/img_508 206 | 2002/08/13/big/img_681 207 | 2003/01/15/big/img_638 208 | 2002/08/30/big/img_18408 209 | 2003/01/14/big/img_533 210 | 2003/01/17/big/img_12 211 | 2002/08/28/big/img_19388 212 | 2002/08/08/big/img_133 213 | 2002/07/26/big/img_885 214 | 2002/08/19/big/img_387 215 | 2002/08/27/big/img_19976 216 | 2002/08/26/big/img_118 217 | 2002/08/28/big/img_19146 218 | 2002/08/05/big/img_3259 219 | 2002/08/15/big/img_536 220 | 2002/07/22/big/img_279 221 | 2002/07/22/big/img_9 222 | 2002/08/13/big/img_301 223 | 2002/08/15/big/img_974 224 | 2002/08/06/big/img_2355 225 | 2002/08/01/big/img_1526 226 | 2002/08/03/big/img_417 227 | 2002/08/04/big/img_407 228 | 2002/08/15/big/img_1029 229 | 2002/07/29/big/img_700 230 | 2002/08/01/big/img_1463 231 | 2002/08/31/big/img_17365 232 | 2002/07/28/big/img_223 233 | 2002/07/19/big/img_827 234 | 2002/07/27/big/img_531 235 | 2002/07/19/big/img_845 236 | 2002/08/20/big/img_382 237 | 2002/07/31/big/img_268 238 | 2002/08/27/big/img_19705 239 | 2002/08/02/big/img_830 240 | 2002/08/23/big/img_250 241 | 2002/07/20/big/img_777 242 | 2002/08/21/big/img_879 243 | 2002/08/26/big/img_20146 244 | 2002/08/23/big/img_789 245 | 2002/08/06/big/img_2683 246 | 2002/08/25/big/img_576 247 | 2002/08/09/big/img_498 248 | 2002/08/08/big/img_384 249 | 2002/08/26/big/img_592 250 | 2002/07/29/big/img_1470 251 | 2002/08/21/big/img_452 252 | 2002/08/30/big/img_18395 253 | 2002/08/15/big/img_215 254 | 2002/07/21/big/img_643 255 | 2002/07/22/big/img_209 256 | 2003/01/17/big/img_346 257 | 2002/08/25/big/img_658 258 | 2002/08/21/big/img_221 259 | 2002/08/14/big/img_60 260 | 2003/01/17/big/img_885 261 | 2003/01/16/big/img_482 262 | 2002/08/19/big/img_593 263 | 2002/08/08/big/img_233 264 | 2002/07/30/big/img_458 265 | 2002/07/23/big/img_384 266 | 2003/01/15/big/img_670 267 | 2003/01/15/big/img_267 268 | 2002/08/26/big/img_540 269 | 2002/07/29/big/img_552 270 | 2002/07/30/big/img_997 271 | 2003/01/17/big/img_377 272 | 2002/08/21/big/img_265 273 | 2002/08/09/big/img_561 274 | 2002/07/31/big/img_945 275 | 2002/09/02/big/img_15252 276 | 2002/08/11/big/img_276 277 | 2002/07/22/big/img_491 278 | 2002/07/26/big/img_517 279 | 2002/08/14/big/img_726 280 | 2002/08/08/big/img_46 281 | 2002/08/28/big/img_19458 282 | 2002/08/06/big/img_2935 283 | 2002/07/29/big/img_1392 284 | 2002/08/13/big/img_776 285 | 2002/08/24/big/img_616 286 | 2002/08/14/big/img_1065 287 | 2002/07/29/big/img_889 288 | 2002/08/18/big/img_188 289 | 2002/08/07/big/img_1453 290 | 2002/08/02/big/img_760 291 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/FDDB-folds/fileList/FDDB-fold-02.txt: -------------------------------------------------------------------------------- 1 | 2002/07/28/big/img_416 2 | 2002/08/07/big/img_1393 3 | 2002/08/26/big/img_292 4 | 2002/08/26/big/img_301 5 | 2003/01/13/big/img_195 6 | 2002/07/26/big/img_532 7 | 2002/08/20/big/img_550 8 | 2002/08/05/big/img_3658 9 | 2002/08/26/big/img_738 10 | 2002/09/02/big/img_15750 11 | 2003/01/17/big/img_451 12 | 2002/07/23/big/img_339 13 | 2002/08/16/big/img_637 14 | 2002/08/14/big/img_748 15 | 2002/08/06/big/img_2739 16 | 2002/07/25/big/img_482 17 | 2002/08/19/big/img_191 18 | 2002/08/26/big/img_537 19 | 2003/01/15/big/img_716 20 | 2003/01/15/big/img_767 21 | 2002/08/02/big/img_452 22 | 2002/08/08/big/img_1011 23 | 2002/08/10/big/img_144 24 | 2003/01/14/big/img_122 25 | 2002/07/24/big/img_586 26 | 2002/07/24/big/img_762 27 | 2002/08/20/big/img_369 28 | 2002/07/30/big/img_146 29 | 2002/08/23/big/img_396 30 | 2003/01/15/big/img_200 31 | 2002/08/15/big/img_1183 32 | 2003/01/14/big/img_698 33 | 2002/08/09/big/img_792 34 | 2002/08/06/big/img_2347 35 | 2002/07/31/big/img_911 36 | 2002/08/26/big/img_722 37 | 2002/08/23/big/img_621 38 | 2002/08/05/big/img_3790 39 | 2003/01/13/big/img_633 40 | 2002/08/09/big/img_224 41 | 2002/07/24/big/img_454 42 | 2002/07/21/big/img_202 43 | 2002/08/02/big/img_630 44 | 2002/08/30/big/img_18315 45 | 2002/07/19/big/img_491 46 | 2002/09/01/big/img_16456 47 | 2002/08/09/big/img_242 48 | 2002/07/25/big/img_595 49 | 2002/07/22/big/img_522 50 | 2002/08/01/big/img_1593 51 | 2002/07/29/big/img_336 52 | 2002/08/15/big/img_448 53 | 2002/08/28/big/img_19281 54 | 2002/07/29/big/img_342 55 | 2002/08/12/big/img_78 56 | 2003/01/14/big/img_525 57 | 2002/07/28/big/img_147 58 | 2002/08/11/big/img_353 59 | 2002/08/22/big/img_513 60 | 2002/08/04/big/img_721 61 | 2002/08/17/big/img_247 62 | 2003/01/14/big/img_891 63 | 2002/08/20/big/img_853 64 | 2002/07/19/big/img_414 65 | 2002/08/01/big/img_1530 66 | 2003/01/14/big/img_924 67 | 2002/08/22/big/img_468 68 | 2002/08/18/big/img_354 69 | 2002/08/30/big/img_18193 70 | 2002/08/23/big/img_492 71 | 2002/08/15/big/img_871 72 | 2002/08/12/big/img_494 73 | 2002/08/06/big/img_2470 74 | 2002/07/23/big/img_923 75 | 2002/08/26/big/img_155 76 | 2002/08/08/big/img_669 77 | 2002/07/23/big/img_404 78 | 2002/08/28/big/img_19421 79 | 2002/08/29/big/img_18993 80 | 2002/08/25/big/img_416 81 | 2003/01/17/big/img_434 82 | 2002/07/29/big/img_1370 83 | 2002/07/28/big/img_483 84 | 2002/08/11/big/img_50 85 | 2002/08/10/big/img_404 86 | 2002/09/02/big/img_15057 87 | 2003/01/14/big/img_911 88 | 2002/09/01/big/img_16697 89 | 2003/01/16/big/img_665 90 | 2002/09/01/big/img_16708 91 | 2002/08/22/big/img_612 92 | 2002/08/28/big/img_19471 93 | 2002/08/02/big/img_198 94 | 2003/01/16/big/img_527 95 | 2002/08/22/big/img_209 96 | 2002/08/30/big/img_18205 97 | 2003/01/14/big/img_114 98 | 2003/01/14/big/img_1028 99 | 2003/01/16/big/img_894 100 | 2003/01/14/big/img_837 101 | 2002/07/30/big/img_9 102 | 2002/08/06/big/img_2821 103 | 2002/08/04/big/img_85 104 | 2003/01/13/big/img_884 105 | 2002/07/22/big/img_570 106 | 2002/08/07/big/img_1773 107 | 2002/07/26/big/img_208 108 | 2003/01/17/big/img_946 109 | 2002/07/19/big/img_930 110 | 2003/01/01/big/img_698 111 | 2003/01/17/big/img_612 112 | 2002/07/19/big/img_372 113 | 2002/07/30/big/img_721 114 | 2003/01/14/big/img_649 115 | 2002/08/19/big/img_4 116 | 2002/07/25/big/img_1024 117 | 2003/01/15/big/img_601 118 | 2002/08/30/big/img_18470 119 | 2002/07/22/big/img_29 120 | 2002/08/07/big/img_1686 121 | 2002/07/20/big/img_294 122 | 2002/08/14/big/img_800 123 | 2002/08/19/big/img_353 124 | 2002/08/19/big/img_350 125 | 2002/08/05/big/img_3392 126 | 2002/08/09/big/img_622 127 | 2003/01/15/big/img_236 128 | 2002/08/11/big/img_643 129 | 2002/08/05/big/img_3458 130 | 2002/08/12/big/img_413 131 | 2002/08/22/big/img_415 132 | 2002/08/13/big/img_635 133 | 2002/08/07/big/img_1198 134 | 2002/08/04/big/img_873 135 | 2002/08/12/big/img_407 136 | 2003/01/15/big/img_346 137 | 2002/08/02/big/img_275 138 | 2002/08/17/big/img_997 139 | 2002/08/21/big/img_958 140 | 2002/08/20/big/img_579 141 | 2002/07/29/big/img_142 142 | 2003/01/14/big/img_1115 143 | 2002/08/16/big/img_365 144 | 2002/07/29/big/img_1414 145 | 2002/08/17/big/img_489 146 | 2002/08/13/big/img_1010 147 | 2002/07/31/big/img_276 148 | 2002/07/25/big/img_1000 149 | 2002/08/23/big/img_524 150 | 2002/08/28/big/img_19147 151 | 2003/01/13/big/img_433 152 | 2002/08/20/big/img_205 153 | 2003/01/01/big/img_458 154 | 2002/07/29/big/img_1449 155 | 2003/01/16/big/img_696 156 | 2002/08/28/big/img_19296 157 | 2002/08/29/big/img_18688 158 | 2002/08/21/big/img_767 159 | 2002/08/20/big/img_532 160 | 2002/08/26/big/img_187 161 | 2002/07/26/big/img_183 162 | 2002/07/27/big/img_890 163 | 2003/01/13/big/img_576 164 | 2002/07/30/big/img_15 165 | 2002/07/31/big/img_889 166 | 2002/08/31/big/img_17759 167 | 2003/01/14/big/img_1114 168 | 2002/07/19/big/img_445 169 | 2002/08/03/big/img_593 170 | 2002/07/24/big/img_750 171 | 2002/07/30/big/img_133 172 | 2002/08/25/big/img_671 173 | 2002/07/20/big/img_351 174 | 2002/08/31/big/img_17276 175 | 2002/08/05/big/img_3231 176 | 2002/09/02/big/img_15882 177 | 2002/08/14/big/img_115 178 | 2002/08/02/big/img_1148 179 | 2002/07/25/big/img_936 180 | 2002/07/31/big/img_639 181 | 2002/08/04/big/img_427 182 | 2002/08/22/big/img_843 183 | 2003/01/17/big/img_17 184 | 2003/01/13/big/img_690 185 | 2002/08/13/big/img_472 186 | 2002/08/09/big/img_425 187 | 2002/08/05/big/img_3450 188 | 2003/01/17/big/img_439 189 | 2002/08/13/big/img_539 190 | 2002/07/28/big/img_35 191 | 2002/08/16/big/img_241 192 | 2002/08/06/big/img_2898 193 | 2003/01/16/big/img_429 194 | 2002/08/05/big/img_3817 195 | 2002/08/27/big/img_19919 196 | 2002/07/19/big/img_422 197 | 2002/08/15/big/img_560 198 | 2002/07/23/big/img_750 199 | 2002/07/30/big/img_353 200 | 2002/08/05/big/img_43 201 | 2002/08/23/big/img_305 202 | 2002/08/01/big/img_2137 203 | 2002/08/30/big/img_18097 204 | 2002/08/01/big/img_1389 205 | 2002/08/02/big/img_308 206 | 2003/01/14/big/img_652 207 | 2002/08/01/big/img_1798 208 | 2003/01/14/big/img_732 209 | 2003/01/16/big/img_294 210 | 2002/08/26/big/img_213 211 | 2002/07/24/big/img_842 212 | 2003/01/13/big/img_630 213 | 2003/01/13/big/img_634 214 | 2002/08/06/big/img_2285 215 | 2002/08/01/big/img_2162 216 | 2002/08/30/big/img_18134 217 | 2002/08/02/big/img_1045 218 | 2002/08/01/big/img_2143 219 | 2002/07/25/big/img_135 220 | 2002/07/20/big/img_645 221 | 2002/08/05/big/img_3666 222 | 2002/08/14/big/img_523 223 | 2002/08/04/big/img_425 224 | 2003/01/14/big/img_137 225 | 2003/01/01/big/img_176 226 | 2002/08/15/big/img_505 227 | 2002/08/24/big/img_386 228 | 2002/08/05/big/img_3187 229 | 2002/08/15/big/img_419 230 | 2003/01/13/big/img_520 231 | 2002/08/04/big/img_444 232 | 2002/08/26/big/img_483 233 | 2002/08/05/big/img_3449 234 | 2002/08/30/big/img_18409 235 | 2002/08/28/big/img_19455 236 | 2002/08/27/big/img_20090 237 | 2002/07/23/big/img_625 238 | 2002/08/24/big/img_205 239 | 2002/08/08/big/img_938 240 | 2003/01/13/big/img_527 241 | 2002/08/07/big/img_1712 242 | 2002/07/24/big/img_801 243 | 2002/08/09/big/img_579 244 | 2003/01/14/big/img_41 245 | 2003/01/15/big/img_1130 246 | 2002/07/21/big/img_672 247 | 2002/08/07/big/img_1590 248 | 2003/01/01/big/img_532 249 | 2002/08/02/big/img_529 250 | 2002/08/05/big/img_3591 251 | 2002/08/23/big/img_5 252 | 2003/01/14/big/img_882 253 | 2002/08/28/big/img_19234 254 | 2002/07/24/big/img_398 255 | 2003/01/14/big/img_592 256 | 2002/08/22/big/img_548 257 | 2002/08/12/big/img_761 258 | 2003/01/16/big/img_497 259 | 2002/08/18/big/img_133 260 | 2002/08/08/big/img_874 261 | 2002/07/19/big/img_247 262 | 2002/08/15/big/img_170 263 | 2002/08/27/big/img_19679 264 | 2002/08/20/big/img_246 265 | 2002/08/24/big/img_358 266 | 2002/07/29/big/img_599 267 | 2002/08/01/big/img_1555 268 | 2002/07/30/big/img_491 269 | 2002/07/30/big/img_371 270 | 2003/01/16/big/img_682 271 | 2002/07/25/big/img_619 272 | 2003/01/15/big/img_587 273 | 2002/08/02/big/img_1212 274 | 2002/08/01/big/img_2152 275 | 2002/07/25/big/img_668 276 | 2003/01/16/big/img_574 277 | 2002/08/28/big/img_19464 278 | 2002/08/11/big/img_536 279 | 2002/07/24/big/img_201 280 | 2002/08/05/big/img_3488 281 | 2002/07/25/big/img_887 282 | 2002/07/22/big/img_789 283 | 2002/07/30/big/img_432 284 | 2002/08/16/big/img_166 285 | 2002/09/01/big/img_16333 286 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/FDDB-folds/fileList/FDDB-fold-03.txt: -------------------------------------------------------------------------------- 1 | 2002/07/26/big/img_1010 2 | 2002/07/21/big/img_793 3 | 2002/07/22/big/img_720 4 | 2002/07/31/big/img_337 5 | 2002/07/27/big/img_185 6 | 2002/08/23/big/img_440 7 | 2002/07/31/big/img_801 8 | 2002/07/25/big/img_478 9 | 2003/01/14/big/img_171 10 | 2002/08/07/big/img_1054 11 | 2002/09/02/big/img_15659 12 | 2002/07/29/big/img_1348 13 | 2002/08/09/big/img_337 14 | 2002/08/26/big/img_684 15 | 2002/07/31/big/img_537 16 | 2002/08/15/big/img_808 17 | 2003/01/13/big/img_740 18 | 2002/08/07/big/img_1667 19 | 2002/08/03/big/img_404 20 | 2002/08/06/big/img_2520 21 | 2002/07/19/big/img_230 22 | 2002/07/19/big/img_356 23 | 2003/01/16/big/img_627 24 | 2002/08/04/big/img_474 25 | 2002/07/29/big/img_833 26 | 2002/07/25/big/img_176 27 | 2002/08/01/big/img_1684 28 | 2002/08/21/big/img_643 29 | 2002/08/27/big/img_19673 30 | 2002/08/02/big/img_838 31 | 2002/08/06/big/img_2378 32 | 2003/01/15/big/img_48 33 | 2002/07/30/big/img_470 34 | 2002/08/15/big/img_963 35 | 2002/08/24/big/img_444 36 | 2002/08/16/big/img_662 37 | 2002/08/15/big/img_1209 38 | 2002/07/24/big/img_25 39 | 2002/08/06/big/img_2740 40 | 2002/07/29/big/img_996 41 | 2002/08/31/big/img_18074 42 | 2002/08/04/big/img_343 43 | 2003/01/17/big/img_509 44 | 2003/01/13/big/img_726 45 | 2002/08/07/big/img_1466 46 | 2002/07/26/big/img_307 47 | 2002/08/10/big/img_598 48 | 2002/08/13/big/img_890 49 | 2002/08/14/big/img_997 50 | 2002/07/19/big/img_392 51 | 2002/08/02/big/img_475 52 | 2002/08/29/big/img_19038 53 | 2002/07/29/big/img_538 54 | 2002/07/29/big/img_502 55 | 2002/08/02/big/img_364 56 | 2002/08/31/big/img_17353 57 | 2002/08/08/big/img_539 58 | 2002/08/01/big/img_1449 59 | 2002/07/22/big/img_363 60 | 2002/08/02/big/img_90 61 | 2002/09/01/big/img_16867 62 | 2002/08/05/big/img_3371 63 | 2002/07/30/big/img_342 64 | 2002/08/07/big/img_1363 65 | 2002/08/22/big/img_790 66 | 2003/01/15/big/img_404 67 | 2002/08/05/big/img_3447 68 | 2002/09/01/big/img_16167 69 | 2003/01/13/big/img_840 70 | 2002/08/22/big/img_1001 71 | 2002/08/09/big/img_431 72 | 2002/07/27/big/img_618 73 | 2002/07/31/big/img_741 74 | 2002/07/30/big/img_964 75 | 2002/07/25/big/img_86 76 | 2002/07/29/big/img_275 77 | 2002/08/21/big/img_921 78 | 2002/07/26/big/img_892 79 | 2002/08/21/big/img_663 80 | 2003/01/13/big/img_567 81 | 2003/01/14/big/img_719 82 | 2002/07/28/big/img_251 83 | 2003/01/15/big/img_1123 84 | 2002/07/29/big/img_260 85 | 2002/08/24/big/img_337 86 | 2002/08/01/big/img_1914 87 | 2002/08/13/big/img_373 88 | 2003/01/15/big/img_589 89 | 2002/08/13/big/img_906 90 | 2002/07/26/big/img_270 91 | 2002/08/26/big/img_313 92 | 2002/08/25/big/img_694 93 | 2003/01/01/big/img_327 94 | 2002/07/23/big/img_261 95 | 2002/08/26/big/img_642 96 | 2002/07/29/big/img_918 97 | 2002/07/23/big/img_455 98 | 2002/07/24/big/img_612 99 | 2002/07/23/big/img_534 100 | 2002/07/19/big/img_534 101 | 2002/07/19/big/img_726 102 | 2002/08/01/big/img_2146 103 | 2002/08/02/big/img_543 104 | 2003/01/16/big/img_777 105 | 2002/07/30/big/img_484 106 | 2002/08/13/big/img_1161 107 | 2002/07/21/big/img_390 108 | 2002/08/06/big/img_2288 109 | 2002/08/21/big/img_677 110 | 2002/08/13/big/img_747 111 | 2002/08/15/big/img_1248 112 | 2002/07/31/big/img_416 113 | 2002/09/02/big/img_15259 114 | 2002/08/16/big/img_781 115 | 2002/08/24/big/img_754 116 | 2002/07/24/big/img_803 117 | 2002/08/20/big/img_609 118 | 2002/08/28/big/img_19571 119 | 2002/09/01/big/img_16140 120 | 2002/08/26/big/img_769 121 | 2002/07/20/big/img_588 122 | 2002/08/02/big/img_898 123 | 2002/07/21/big/img_466 124 | 2002/08/14/big/img_1046 125 | 2002/07/25/big/img_212 126 | 2002/08/26/big/img_353 127 | 2002/08/19/big/img_810 128 | 2002/08/31/big/img_17824 129 | 2002/08/12/big/img_631 130 | 2002/07/19/big/img_828 131 | 2002/07/24/big/img_130 132 | 2002/08/25/big/img_580 133 | 2002/07/31/big/img_699 134 | 2002/07/23/big/img_808 135 | 2002/07/31/big/img_377 136 | 2003/01/16/big/img_570 137 | 2002/09/01/big/img_16254 138 | 2002/07/21/big/img_471 139 | 2002/08/01/big/img_1548 140 | 2002/08/18/big/img_252 141 | 2002/08/19/big/img_576 142 | 2002/08/20/big/img_464 143 | 2002/07/27/big/img_735 144 | 2002/08/21/big/img_589 145 | 2003/01/15/big/img_1192 146 | 2002/08/09/big/img_302 147 | 2002/07/31/big/img_594 148 | 2002/08/23/big/img_19 149 | 2002/08/29/big/img_18819 150 | 2002/08/19/big/img_293 151 | 2002/07/30/big/img_331 152 | 2002/08/23/big/img_607 153 | 2002/07/30/big/img_363 154 | 2002/08/16/big/img_766 155 | 2003/01/13/big/img_481 156 | 2002/08/06/big/img_2515 157 | 2002/09/02/big/img_15913 158 | 2002/09/02/big/img_15827 159 | 2002/09/02/big/img_15053 160 | 2002/08/07/big/img_1576 161 | 2002/07/23/big/img_268 162 | 2002/08/21/big/img_152 163 | 2003/01/15/big/img_578 164 | 2002/07/21/big/img_589 165 | 2002/07/20/big/img_548 166 | 2002/08/27/big/img_19693 167 | 2002/08/31/big/img_17252 168 | 2002/07/31/big/img_138 169 | 2002/07/23/big/img_372 170 | 2002/08/16/big/img_695 171 | 2002/07/27/big/img_287 172 | 2002/08/15/big/img_315 173 | 2002/08/10/big/img_361 174 | 2002/07/29/big/img_899 175 | 2002/08/13/big/img_771 176 | 2002/08/21/big/img_92 177 | 2003/01/15/big/img_425 178 | 2003/01/16/big/img_450 179 | 2002/09/01/big/img_16942 180 | 2002/08/02/big/img_51 181 | 2002/09/02/big/img_15379 182 | 2002/08/24/big/img_147 183 | 2002/08/30/big/img_18122 184 | 2002/07/26/big/img_950 185 | 2002/08/07/big/img_1400 186 | 2002/08/17/big/img_468 187 | 2002/08/15/big/img_470 188 | 2002/07/30/big/img_318 189 | 2002/07/22/big/img_644 190 | 2002/08/27/big/img_19732 191 | 2002/07/23/big/img_601 192 | 2002/08/26/big/img_398 193 | 2002/08/21/big/img_428 194 | 2002/08/06/big/img_2119 195 | 2002/08/29/big/img_19103 196 | 2003/01/14/big/img_933 197 | 2002/08/11/big/img_674 198 | 2002/08/28/big/img_19420 199 | 2002/08/03/big/img_418 200 | 2002/08/17/big/img_312 201 | 2002/07/25/big/img_1044 202 | 2003/01/17/big/img_671 203 | 2002/08/30/big/img_18297 204 | 2002/07/25/big/img_755 205 | 2002/07/23/big/img_471 206 | 2002/08/21/big/img_39 207 | 2002/07/26/big/img_699 208 | 2003/01/14/big/img_33 209 | 2002/07/31/big/img_411 210 | 2002/08/16/big/img_645 211 | 2003/01/17/big/img_116 212 | 2002/09/02/big/img_15903 213 | 2002/08/20/big/img_120 214 | 2002/08/22/big/img_176 215 | 2002/07/29/big/img_1316 216 | 2002/08/27/big/img_19914 217 | 2002/07/22/big/img_719 218 | 2002/08/28/big/img_19239 219 | 2003/01/13/big/img_385 220 | 2002/08/08/big/img_525 221 | 2002/07/19/big/img_782 222 | 2002/08/13/big/img_843 223 | 2002/07/30/big/img_107 224 | 2002/08/11/big/img_752 225 | 2002/07/29/big/img_383 226 | 2002/08/26/big/img_249 227 | 2002/08/29/big/img_18860 228 | 2002/07/30/big/img_70 229 | 2002/07/26/big/img_194 230 | 2002/08/15/big/img_530 231 | 2002/08/08/big/img_816 232 | 2002/07/31/big/img_286 233 | 2003/01/13/big/img_294 234 | 2002/07/31/big/img_251 235 | 2002/07/24/big/img_13 236 | 2002/08/31/big/img_17938 237 | 2002/07/22/big/img_642 238 | 2003/01/14/big/img_728 239 | 2002/08/18/big/img_47 240 | 2002/08/22/big/img_306 241 | 2002/08/20/big/img_348 242 | 2002/08/15/big/img_764 243 | 2002/08/08/big/img_163 244 | 2002/07/23/big/img_531 245 | 2002/07/23/big/img_467 246 | 2003/01/16/big/img_743 247 | 2003/01/13/big/img_535 248 | 2002/08/02/big/img_523 249 | 2002/08/22/big/img_120 250 | 2002/08/11/big/img_496 251 | 2002/08/29/big/img_19075 252 | 2002/08/08/big/img_465 253 | 2002/08/09/big/img_790 254 | 2002/08/19/big/img_588 255 | 2002/08/23/big/img_407 256 | 2003/01/17/big/img_435 257 | 2002/08/24/big/img_398 258 | 2002/08/27/big/img_19899 259 | 2003/01/15/big/img_335 260 | 2002/08/13/big/img_493 261 | 2002/09/02/big/img_15460 262 | 2002/07/31/big/img_470 263 | 2002/08/05/big/img_3550 264 | 2002/07/28/big/img_123 265 | 2002/08/01/big/img_1498 266 | 2002/08/04/big/img_504 267 | 2003/01/17/big/img_427 268 | 2002/08/27/big/img_19708 269 | 2002/07/27/big/img_861 270 | 2002/07/25/big/img_685 271 | 2002/07/31/big/img_207 272 | 2003/01/14/big/img_745 273 | 2002/08/31/big/img_17756 274 | 2002/08/24/big/img_288 275 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/FDDB-folds/fileList/FDDB-fold-05.txt: -------------------------------------------------------------------------------- 1 | 2002/08/16/big/img_932 2 | 2002/07/19/big/img_393 3 | 2002/08/20/big/img_764 4 | 2002/08/15/big/img_616 5 | 2002/07/26/big/img_267 6 | 2002/07/27/big/img_1069 7 | 2002/08/14/big/img_1041 8 | 2003/01/13/big/img_594 9 | 2002/09/01/big/img_16845 10 | 2002/08/09/big/img_229 11 | 2003/01/16/big/img_639 12 | 2002/08/19/big/img_398 13 | 2002/08/18/big/img_978 14 | 2002/08/24/big/img_296 15 | 2002/07/29/big/img_415 16 | 2002/07/30/big/img_923 17 | 2002/08/18/big/img_575 18 | 2002/08/22/big/img_182 19 | 2002/07/25/big/img_806 20 | 2002/07/22/big/img_49 21 | 2002/07/29/big/img_989 22 | 2003/01/17/big/img_789 23 | 2003/01/15/big/img_503 24 | 2002/09/01/big/img_16062 25 | 2003/01/17/big/img_794 26 | 2002/08/15/big/img_564 27 | 2003/01/15/big/img_222 28 | 2002/08/01/big/img_1656 29 | 2003/01/13/big/img_432 30 | 2002/07/19/big/img_426 31 | 2002/08/17/big/img_244 32 | 2002/08/13/big/img_805 33 | 2002/09/02/big/img_15067 34 | 2002/08/11/big/img_58 35 | 2002/08/22/big/img_636 36 | 2002/07/22/big/img_416 37 | 2002/08/13/big/img_836 38 | 2002/08/26/big/img_363 39 | 2002/07/30/big/img_917 40 | 2003/01/14/big/img_206 41 | 2002/08/12/big/img_311 42 | 2002/08/31/big/img_17623 43 | 2002/07/29/big/img_661 44 | 2003/01/13/big/img_417 45 | 2002/08/02/big/img_463 46 | 2002/08/02/big/img_669 47 | 2002/08/26/big/img_670 48 | 2002/08/02/big/img_375 49 | 2002/07/19/big/img_209 50 | 2002/08/08/big/img_115 51 | 2002/08/21/big/img_399 52 | 2002/08/20/big/img_911 53 | 2002/08/07/big/img_1212 54 | 2002/08/20/big/img_578 55 | 2002/08/22/big/img_554 56 | 2002/08/21/big/img_484 57 | 2002/07/25/big/img_450 58 | 2002/08/03/big/img_542 59 | 2002/08/15/big/img_561 60 | 2002/07/23/big/img_360 61 | 2002/08/30/big/img_18137 62 | 2002/07/25/big/img_250 63 | 2002/08/03/big/img_647 64 | 2002/08/20/big/img_375 65 | 2002/08/14/big/img_387 66 | 2002/09/01/big/img_16990 67 | 2002/08/28/big/img_19341 68 | 2003/01/15/big/img_239 69 | 2002/08/20/big/img_528 70 | 2002/08/12/big/img_130 71 | 2002/09/02/big/img_15108 72 | 2003/01/15/big/img_372 73 | 2002/08/16/big/img_678 74 | 2002/08/04/big/img_623 75 | 2002/07/23/big/img_477 76 | 2002/08/28/big/img_19590 77 | 2003/01/17/big/img_978 78 | 2002/09/01/big/img_16692 79 | 2002/07/20/big/img_109 80 | 2002/08/06/big/img_2660 81 | 2003/01/14/big/img_464 82 | 2002/08/09/big/img_618 83 | 2002/07/22/big/img_722 84 | 2002/08/25/big/img_419 85 | 2002/08/03/big/img_314 86 | 2002/08/25/big/img_40 87 | 2002/07/27/big/img_430 88 | 2002/08/10/big/img_569 89 | 2002/08/23/big/img_398 90 | 2002/07/23/big/img_893 91 | 2002/08/16/big/img_261 92 | 2002/08/06/big/img_2668 93 | 2002/07/22/big/img_835 94 | 2002/09/02/big/img_15093 95 | 2003/01/16/big/img_65 96 | 2002/08/21/big/img_448 97 | 2003/01/14/big/img_351 98 | 2003/01/17/big/img_133 99 | 2002/07/28/big/img_493 100 | 2003/01/15/big/img_640 101 | 2002/09/01/big/img_16880 102 | 2002/08/15/big/img_350 103 | 2002/08/20/big/img_624 104 | 2002/08/25/big/img_604 105 | 2002/08/06/big/img_2200 106 | 2002/08/23/big/img_290 107 | 2002/08/13/big/img_1152 108 | 2003/01/14/big/img_251 109 | 2002/08/02/big/img_538 110 | 2002/08/22/big/img_613 111 | 2003/01/13/big/img_351 112 | 2002/08/18/big/img_368 113 | 2002/07/23/big/img_392 114 | 2002/07/25/big/img_198 115 | 2002/07/25/big/img_418 116 | 2002/08/26/big/img_614 117 | 2002/07/23/big/img_405 118 | 2003/01/14/big/img_445 119 | 2002/07/25/big/img_326 120 | 2002/08/10/big/img_734 121 | 2003/01/14/big/img_530 122 | 2002/08/08/big/img_561 123 | 2002/08/29/big/img_18990 124 | 2002/08/10/big/img_576 125 | 2002/07/29/big/img_1494 126 | 2002/07/19/big/img_198 127 | 2002/08/10/big/img_562 128 | 2002/07/22/big/img_901 129 | 2003/01/14/big/img_37 130 | 2002/09/02/big/img_15629 131 | 2003/01/14/big/img_58 132 | 2002/08/01/big/img_1364 133 | 2002/07/27/big/img_636 134 | 2003/01/13/big/img_241 135 | 2002/09/01/big/img_16988 136 | 2003/01/13/big/img_560 137 | 2002/08/09/big/img_533 138 | 2002/07/31/big/img_249 139 | 2003/01/17/big/img_1007 140 | 2002/07/21/big/img_64 141 | 2003/01/13/big/img_537 142 | 2003/01/15/big/img_606 143 | 2002/08/18/big/img_651 144 | 2002/08/24/big/img_405 145 | 2002/07/26/big/img_837 146 | 2002/08/09/big/img_562 147 | 2002/08/01/big/img_1983 148 | 2002/08/03/big/img_514 149 | 2002/07/29/big/img_314 150 | 2002/08/12/big/img_493 151 | 2003/01/14/big/img_121 152 | 2003/01/14/big/img_479 153 | 2002/08/04/big/img_410 154 | 2002/07/22/big/img_607 155 | 2003/01/17/big/img_417 156 | 2002/07/20/big/img_547 157 | 2002/08/13/big/img_396 158 | 2002/08/31/big/img_17538 159 | 2002/08/13/big/img_187 160 | 2002/08/12/big/img_328 161 | 2003/01/14/big/img_569 162 | 2002/07/27/big/img_1081 163 | 2002/08/14/big/img_504 164 | 2002/08/23/big/img_785 165 | 2002/07/26/big/img_339 166 | 2002/08/07/big/img_1156 167 | 2002/08/07/big/img_1456 168 | 2002/08/23/big/img_378 169 | 2002/08/27/big/img_19719 170 | 2002/07/31/big/img_39 171 | 2002/07/31/big/img_883 172 | 2003/01/14/big/img_676 173 | 2002/07/29/big/img_214 174 | 2002/07/26/big/img_669 175 | 2002/07/25/big/img_202 176 | 2002/08/08/big/img_259 177 | 2003/01/17/big/img_943 178 | 2003/01/15/big/img_512 179 | 2002/08/05/big/img_3295 180 | 2002/08/27/big/img_19685 181 | 2002/08/08/big/img_277 182 | 2002/08/30/big/img_18154 183 | 2002/07/22/big/img_663 184 | 2002/08/29/big/img_18914 185 | 2002/07/31/big/img_908 186 | 2002/08/27/big/img_19926 187 | 2003/01/13/big/img_791 188 | 2003/01/15/big/img_827 189 | 2002/08/18/big/img_878 190 | 2002/08/14/big/img_670 191 | 2002/07/20/big/img_182 192 | 2002/08/15/big/img_291 193 | 2002/08/06/big/img_2600 194 | 2002/07/23/big/img_587 195 | 2002/08/14/big/img_577 196 | 2003/01/15/big/img_585 197 | 2002/07/30/big/img_310 198 | 2002/08/03/big/img_658 199 | 2002/08/10/big/img_157 200 | 2002/08/19/big/img_811 201 | 2002/07/29/big/img_1318 202 | 2002/08/04/big/img_104 203 | 2002/07/30/big/img_332 204 | 2002/07/24/big/img_789 205 | 2002/07/29/big/img_516 206 | 2002/07/23/big/img_843 207 | 2002/08/01/big/img_1528 208 | 2002/08/13/big/img_798 209 | 2002/08/07/big/img_1729 210 | 2002/08/28/big/img_19448 211 | 2003/01/16/big/img_95 212 | 2002/08/12/big/img_473 213 | 2002/07/27/big/img_269 214 | 2003/01/16/big/img_621 215 | 2002/07/29/big/img_772 216 | 2002/07/24/big/img_171 217 | 2002/07/19/big/img_429 218 | 2002/08/07/big/img_1933 219 | 2002/08/27/big/img_19629 220 | 2002/08/05/big/img_3688 221 | 2002/08/07/big/img_1691 222 | 2002/07/23/big/img_600 223 | 2002/07/29/big/img_666 224 | 2002/08/25/big/img_566 225 | 2002/08/06/big/img_2659 226 | 2002/08/29/big/img_18929 227 | 2002/08/16/big/img_407 228 | 2002/08/18/big/img_774 229 | 2002/08/19/big/img_249 230 | 2002/08/06/big/img_2427 231 | 2002/08/29/big/img_18899 232 | 2002/08/01/big/img_1818 233 | 2002/07/31/big/img_108 234 | 2002/07/29/big/img_500 235 | 2002/08/11/big/img_115 236 | 2002/07/19/big/img_521 237 | 2002/08/02/big/img_1163 238 | 2002/07/22/big/img_62 239 | 2002/08/13/big/img_466 240 | 2002/08/21/big/img_956 241 | 2002/08/23/big/img_602 242 | 2002/08/20/big/img_858 243 | 2002/07/25/big/img_690 244 | 2002/07/19/big/img_130 245 | 2002/08/04/big/img_874 246 | 2002/07/26/big/img_489 247 | 2002/07/22/big/img_548 248 | 2002/08/10/big/img_191 249 | 2002/07/25/big/img_1051 250 | 2002/08/18/big/img_473 251 | 2002/08/12/big/img_755 252 | 2002/08/18/big/img_413 253 | 2002/08/08/big/img_1044 254 | 2002/08/17/big/img_680 255 | 2002/08/26/big/img_235 256 | 2002/08/20/big/img_330 257 | 2002/08/22/big/img_344 258 | 2002/08/09/big/img_593 259 | 2002/07/31/big/img_1006 260 | 2002/08/14/big/img_337 261 | 2002/08/16/big/img_728 262 | 2002/07/24/big/img_834 263 | 2002/08/04/big/img_552 264 | 2002/09/02/big/img_15213 265 | 2002/07/25/big/img_725 266 | 2002/08/30/big/img_18290 267 | 2003/01/01/big/img_475 268 | 2002/07/27/big/img_1083 269 | 2002/08/29/big/img_18955 270 | 2002/08/31/big/img_17232 271 | 2002/08/08/big/img_480 272 | 2002/08/01/big/img_1311 273 | 2002/07/30/big/img_745 274 | 2002/08/03/big/img_649 275 | 2002/08/12/big/img_193 276 | 2002/07/29/big/img_228 277 | 2002/07/25/big/img_836 278 | 2002/08/20/big/img_400 279 | 2002/07/30/big/img_507 280 | 2002/09/02/big/img_15072 281 | 2002/07/26/big/img_658 282 | 2002/07/28/big/img_503 283 | 2002/08/05/big/img_3814 284 | 2002/08/24/big/img_745 285 | 2003/01/13/big/img_817 286 | 2002/08/08/big/img_579 287 | 2002/07/22/big/img_251 288 | 2003/01/13/big/img_689 289 | 2002/07/25/big/img_407 290 | 2002/08/13/big/img_1050 291 | 2002/08/14/big/img_733 292 | 2002/07/24/big/img_82 293 | 2003/01/17/big/img_288 294 | 2003/01/15/big/img_475 295 | 2002/08/14/big/img_620 296 | 2002/08/21/big/img_167 297 | 2002/07/19/big/img_300 298 | 2002/07/26/big/img_219 299 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/FDDB-folds/fileList/FDDB-fold-07.txt: -------------------------------------------------------------------------------- 1 | 2002/08/22/big/img_141 2 | 2002/07/22/big/img_303 3 | 2002/08/09/big/img_393 4 | 2002/07/29/big/img_963 5 | 2002/08/02/big/img_1215 6 | 2002/08/19/big/img_674 7 | 2002/08/12/big/img_690 8 | 2002/08/21/big/img_637 9 | 2002/08/21/big/img_841 10 | 2002/08/24/big/img_71 11 | 2002/07/25/big/img_596 12 | 2002/07/24/big/img_864 13 | 2002/08/18/big/img_293 14 | 2003/01/14/big/img_657 15 | 2002/08/15/big/img_411 16 | 2002/08/16/big/img_348 17 | 2002/08/05/big/img_3157 18 | 2002/07/20/big/img_663 19 | 2003/01/13/big/img_654 20 | 2003/01/16/big/img_433 21 | 2002/08/30/big/img_18200 22 | 2002/08/12/big/img_226 23 | 2003/01/16/big/img_491 24 | 2002/08/08/big/img_666 25 | 2002/07/19/big/img_576 26 | 2003/01/15/big/img_776 27 | 2003/01/16/big/img_899 28 | 2002/07/19/big/img_397 29 | 2002/08/14/big/img_44 30 | 2003/01/15/big/img_762 31 | 2002/08/02/big/img_982 32 | 2002/09/02/big/img_15234 33 | 2002/08/17/big/img_556 34 | 2002/08/21/big/img_410 35 | 2002/08/21/big/img_386 36 | 2002/07/19/big/img_690 37 | 2002/08/05/big/img_3052 38 | 2002/08/14/big/img_219 39 | 2002/08/16/big/img_273 40 | 2003/01/15/big/img_752 41 | 2002/08/08/big/img_184 42 | 2002/07/31/big/img_743 43 | 2002/08/23/big/img_338 44 | 2003/01/14/big/img_1055 45 | 2002/08/05/big/img_3405 46 | 2003/01/15/big/img_17 47 | 2002/08/03/big/img_141 48 | 2002/08/14/big/img_549 49 | 2002/07/27/big/img_1034 50 | 2002/07/31/big/img_932 51 | 2002/08/30/big/img_18487 52 | 2002/09/02/big/img_15814 53 | 2002/08/01/big/img_2086 54 | 2002/09/01/big/img_16535 55 | 2002/07/22/big/img_500 56 | 2003/01/13/big/img_400 57 | 2002/08/25/big/img_607 58 | 2002/08/30/big/img_18384 59 | 2003/01/14/big/img_951 60 | 2002/08/13/big/img_1150 61 | 2002/08/08/big/img_1022 62 | 2002/08/10/big/img_428 63 | 2002/08/28/big/img_19242 64 | 2002/08/05/big/img_3098 65 | 2002/07/23/big/img_400 66 | 2002/08/26/big/img_365 67 | 2002/07/20/big/img_318 68 | 2002/08/13/big/img_740 69 | 2003/01/16/big/img_37 70 | 2002/08/26/big/img_274 71 | 2002/08/02/big/img_205 72 | 2002/08/21/big/img_695 73 | 2002/08/06/big/img_2289 74 | 2002/08/20/big/img_794 75 | 2002/08/18/big/img_438 76 | 2002/08/07/big/img_1380 77 | 2002/08/02/big/img_737 78 | 2002/08/07/big/img_1651 79 | 2002/08/15/big/img_1238 80 | 2002/08/01/big/img_1681 81 | 2002/08/06/big/img_3017 82 | 2002/07/23/big/img_706 83 | 2002/07/31/big/img_392 84 | 2002/08/09/big/img_539 85 | 2002/07/29/big/img_835 86 | 2002/08/26/big/img_723 87 | 2002/08/28/big/img_19235 88 | 2003/01/16/big/img_353 89 | 2002/08/10/big/img_150 90 | 2002/08/29/big/img_19025 91 | 2002/08/21/big/img_310 92 | 2002/08/10/big/img_823 93 | 2002/07/26/big/img_981 94 | 2002/08/11/big/img_288 95 | 2002/08/19/big/img_534 96 | 2002/08/21/big/img_300 97 | 2002/07/31/big/img_49 98 | 2002/07/30/big/img_469 99 | 2002/08/28/big/img_19197 100 | 2002/08/25/big/img_205 101 | 2002/08/10/big/img_390 102 | 2002/08/23/big/img_291 103 | 2002/08/26/big/img_230 104 | 2002/08/18/big/img_76 105 | 2002/07/23/big/img_409 106 | 2002/08/14/big/img_1053 107 | 2003/01/14/big/img_291 108 | 2002/08/10/big/img_503 109 | 2002/08/27/big/img_19928 110 | 2002/08/03/big/img_563 111 | 2002/08/17/big/img_250 112 | 2002/08/06/big/img_2381 113 | 2002/08/17/big/img_948 114 | 2002/08/06/big/img_2710 115 | 2002/07/22/big/img_696 116 | 2002/07/31/big/img_670 117 | 2002/08/12/big/img_594 118 | 2002/07/29/big/img_624 119 | 2003/01/17/big/img_934 120 | 2002/08/03/big/img_584 121 | 2002/08/22/big/img_1003 122 | 2002/08/05/big/img_3396 123 | 2003/01/13/big/img_570 124 | 2002/08/02/big/img_219 125 | 2002/09/02/big/img_15774 126 | 2002/08/16/big/img_818 127 | 2002/08/23/big/img_402 128 | 2003/01/14/big/img_552 129 | 2002/07/29/big/img_71 130 | 2002/08/05/big/img_3592 131 | 2002/08/16/big/img_80 132 | 2002/07/27/big/img_672 133 | 2003/01/13/big/img_470 134 | 2003/01/16/big/img_702 135 | 2002/09/01/big/img_16130 136 | 2002/08/08/big/img_240 137 | 2002/09/01/big/img_16338 138 | 2002/07/26/big/img_312 139 | 2003/01/14/big/img_538 140 | 2002/07/20/big/img_695 141 | 2002/08/30/big/img_18098 142 | 2002/08/25/big/img_259 143 | 2002/08/16/big/img_1042 144 | 2002/08/09/big/img_837 145 | 2002/08/31/big/img_17760 146 | 2002/07/31/big/img_14 147 | 2002/08/09/big/img_361 148 | 2003/01/16/big/img_107 149 | 2002/08/14/big/img_124 150 | 2002/07/19/big/img_463 151 | 2003/01/15/big/img_275 152 | 2002/07/25/big/img_1151 153 | 2002/07/29/big/img_1501 154 | 2002/08/27/big/img_19889 155 | 2002/08/29/big/img_18603 156 | 2003/01/17/big/img_601 157 | 2002/08/25/big/img_355 158 | 2002/08/08/big/img_297 159 | 2002/08/20/big/img_290 160 | 2002/07/31/big/img_195 161 | 2003/01/01/big/img_336 162 | 2002/08/18/big/img_369 163 | 2002/07/25/big/img_621 164 | 2002/08/11/big/img_508 165 | 2003/01/14/big/img_458 166 | 2003/01/15/big/img_795 167 | 2002/08/12/big/img_498 168 | 2002/08/01/big/img_1734 169 | 2002/08/02/big/img_246 170 | 2002/08/16/big/img_565 171 | 2002/08/11/big/img_475 172 | 2002/08/22/big/img_408 173 | 2002/07/28/big/img_78 174 | 2002/07/21/big/img_81 175 | 2003/01/14/big/img_697 176 | 2002/08/14/big/img_661 177 | 2002/08/15/big/img_507 178 | 2002/08/19/big/img_55 179 | 2002/07/22/big/img_152 180 | 2003/01/14/big/img_470 181 | 2002/08/03/big/img_379 182 | 2002/08/22/big/img_506 183 | 2003/01/16/big/img_966 184 | 2002/08/18/big/img_698 185 | 2002/08/24/big/img_528 186 | 2002/08/23/big/img_10 187 | 2002/08/01/big/img_1655 188 | 2002/08/22/big/img_953 189 | 2002/07/19/big/img_630 190 | 2002/07/22/big/img_889 191 | 2002/08/16/big/img_351 192 | 2003/01/16/big/img_83 193 | 2002/07/19/big/img_805 194 | 2002/08/14/big/img_704 195 | 2002/07/19/big/img_389 196 | 2002/08/31/big/img_17765 197 | 2002/07/29/big/img_606 198 | 2003/01/17/big/img_939 199 | 2002/09/02/big/img_15081 200 | 2002/08/21/big/img_181 201 | 2002/07/29/big/img_1321 202 | 2002/07/21/big/img_497 203 | 2002/07/20/big/img_539 204 | 2002/08/24/big/img_119 205 | 2002/08/01/big/img_1281 206 | 2002/07/26/big/img_207 207 | 2002/07/26/big/img_432 208 | 2002/07/27/big/img_1006 209 | 2002/08/05/big/img_3087 210 | 2002/08/14/big/img_252 211 | 2002/08/14/big/img_798 212 | 2002/07/24/big/img_538 213 | 2002/09/02/big/img_15507 214 | 2002/08/08/big/img_901 215 | 2003/01/14/big/img_557 216 | 2002/08/07/big/img_1819 217 | 2002/08/04/big/img_470 218 | 2002/08/01/big/img_1504 219 | 2002/08/16/big/img_1070 220 | 2002/08/16/big/img_372 221 | 2002/08/23/big/img_416 222 | 2002/08/30/big/img_18208 223 | 2002/08/01/big/img_2043 224 | 2002/07/22/big/img_385 225 | 2002/08/22/big/img_466 226 | 2002/08/21/big/img_869 227 | 2002/08/28/big/img_19429 228 | 2002/08/02/big/img_770 229 | 2002/07/23/big/img_433 230 | 2003/01/14/big/img_13 231 | 2002/07/27/big/img_953 232 | 2002/09/02/big/img_15728 233 | 2002/08/01/big/img_1361 234 | 2002/08/29/big/img_18897 235 | 2002/08/26/big/img_534 236 | 2002/08/11/big/img_121 237 | 2002/08/26/big/img_20130 238 | 2002/07/31/big/img_363 239 | 2002/08/13/big/img_978 240 | 2002/07/25/big/img_835 241 | 2002/08/02/big/img_906 242 | 2003/01/14/big/img_548 243 | 2002/07/30/big/img_80 244 | 2002/07/26/big/img_982 245 | 2003/01/16/big/img_99 246 | 2002/08/19/big/img_362 247 | 2002/08/24/big/img_376 248 | 2002/08/07/big/img_1264 249 | 2002/07/27/big/img_938 250 | 2003/01/17/big/img_535 251 | 2002/07/26/big/img_457 252 | 2002/08/08/big/img_848 253 | 2003/01/15/big/img_859 254 | 2003/01/15/big/img_622 255 | 2002/07/30/big/img_403 256 | 2002/07/29/big/img_217 257 | 2002/07/26/big/img_891 258 | 2002/07/24/big/img_70 259 | 2002/08/25/big/img_619 260 | 2002/08/05/big/img_3375 261 | 2002/08/01/big/img_2160 262 | 2002/08/06/big/img_2227 263 | 2003/01/14/big/img_117 264 | 2002/08/14/big/img_227 265 | 2002/08/13/big/img_565 266 | 2002/08/19/big/img_625 267 | 2002/08/03/big/img_812 268 | 2002/07/24/big/img_41 269 | 2002/08/16/big/img_235 270 | 2002/07/29/big/img_759 271 | 2002/07/21/big/img_433 272 | 2002/07/29/big/img_190 273 | 2003/01/16/big/img_435 274 | 2003/01/13/big/img_708 275 | 2002/07/30/big/img_57 276 | 2002/08/22/big/img_162 277 | 2003/01/01/big/img_558 278 | 2003/01/15/big/img_604 279 | 2002/08/16/big/img_935 280 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/FDDB-folds/fileList/FDDB-fold-08.txt: -------------------------------------------------------------------------------- 1 | 2002/08/20/big/img_394 2 | 2002/07/28/big/img_465 3 | 2002/09/02/big/img_15534 4 | 2002/08/16/big/img_87 5 | 2002/07/22/big/img_469 6 | 2002/08/12/big/img_245 7 | 2003/01/13/big/img_236 8 | 2002/08/06/big/img_2736 9 | 2002/08/03/big/img_348 10 | 2003/01/14/big/img_218 11 | 2002/07/26/big/img_232 12 | 2003/01/15/big/img_244 13 | 2002/07/25/big/img_1121 14 | 2002/08/01/big/img_1484 15 | 2002/07/26/big/img_541 16 | 2002/08/07/big/img_1244 17 | 2002/07/31/big/img_3 18 | 2002/08/30/big/img_18437 19 | 2002/08/29/big/img_19094 20 | 2002/08/01/big/img_1355 21 | 2002/08/19/big/img_338 22 | 2002/07/19/big/img_255 23 | 2002/07/21/big/img_76 24 | 2002/08/25/big/img_199 25 | 2002/08/12/big/img_740 26 | 2002/07/30/big/img_852 27 | 2002/08/15/big/img_599 28 | 2002/08/23/big/img_254 29 | 2002/08/19/big/img_125 30 | 2002/07/24/big/img_2 31 | 2002/08/04/big/img_145 32 | 2002/08/05/big/img_3137 33 | 2002/07/28/big/img_463 34 | 2003/01/14/big/img_801 35 | 2002/07/23/big/img_366 36 | 2002/08/26/big/img_600 37 | 2002/08/26/big/img_649 38 | 2002/09/02/big/img_15849 39 | 2002/07/26/big/img_248 40 | 2003/01/13/big/img_200 41 | 2002/08/07/big/img_1794 42 | 2002/08/31/big/img_17270 43 | 2002/08/23/big/img_608 44 | 2003/01/13/big/img_837 45 | 2002/08/23/big/img_581 46 | 2002/08/20/big/img_754 47 | 2002/08/18/big/img_183 48 | 2002/08/20/big/img_328 49 | 2002/07/22/big/img_494 50 | 2002/07/29/big/img_399 51 | 2002/08/28/big/img_19284 52 | 2002/08/08/big/img_566 53 | 2002/07/25/big/img_376 54 | 2002/07/23/big/img_138 55 | 2002/07/25/big/img_435 56 | 2002/08/17/big/img_685 57 | 2002/07/19/big/img_90 58 | 2002/07/20/big/img_716 59 | 2002/08/31/big/img_17458 60 | 2002/08/26/big/img_461 61 | 2002/07/25/big/img_355 62 | 2002/08/06/big/img_2152 63 | 2002/07/27/big/img_932 64 | 2002/07/23/big/img_232 65 | 2002/08/08/big/img_1020 66 | 2002/07/31/big/img_366 67 | 2002/08/06/big/img_2667 68 | 2002/08/21/big/img_465 69 | 2002/08/15/big/img_305 70 | 2002/08/02/big/img_247 71 | 2002/07/28/big/img_46 72 | 2002/08/27/big/img_19922 73 | 2002/08/23/big/img_643 74 | 2003/01/13/big/img_624 75 | 2002/08/23/big/img_625 76 | 2002/08/05/big/img_3787 77 | 2003/01/13/big/img_627 78 | 2002/09/01/big/img_16381 79 | 2002/08/05/big/img_3668 80 | 2002/07/21/big/img_535 81 | 2002/08/27/big/img_19680 82 | 2002/07/22/big/img_413 83 | 2002/07/29/big/img_481 84 | 2003/01/15/big/img_496 85 | 2002/07/23/big/img_701 86 | 2002/08/29/big/img_18670 87 | 2002/07/28/big/img_319 88 | 2003/01/14/big/img_517 89 | 2002/07/26/big/img_256 90 | 2003/01/16/big/img_593 91 | 2002/07/30/big/img_956 92 | 2002/07/30/big/img_667 93 | 2002/07/25/big/img_100 94 | 2002/08/11/big/img_570 95 | 2002/07/26/big/img_745 96 | 2002/08/04/big/img_834 97 | 2002/08/25/big/img_521 98 | 2002/08/01/big/img_2148 99 | 2002/09/02/big/img_15183 100 | 2002/08/22/big/img_514 101 | 2002/08/23/big/img_477 102 | 2002/07/23/big/img_336 103 | 2002/07/26/big/img_481 104 | 2002/08/20/big/img_409 105 | 2002/07/23/big/img_918 106 | 2002/08/09/big/img_474 107 | 2002/08/02/big/img_929 108 | 2002/08/31/big/img_17932 109 | 2002/08/19/big/img_161 110 | 2002/08/09/big/img_667 111 | 2002/07/31/big/img_805 112 | 2002/09/02/big/img_15678 113 | 2002/08/31/big/img_17509 114 | 2002/08/29/big/img_18998 115 | 2002/07/23/big/img_301 116 | 2002/08/07/big/img_1612 117 | 2002/08/06/big/img_2472 118 | 2002/07/23/big/img_466 119 | 2002/08/27/big/img_19634 120 | 2003/01/16/big/img_16 121 | 2002/08/14/big/img_193 122 | 2002/08/21/big/img_340 123 | 2002/08/27/big/img_19799 124 | 2002/08/01/big/img_1345 125 | 2002/08/07/big/img_1448 126 | 2002/08/11/big/img_324 127 | 2003/01/16/big/img_754 128 | 2002/08/13/big/img_418 129 | 2003/01/16/big/img_544 130 | 2002/08/19/big/img_135 131 | 2002/08/10/big/img_455 132 | 2002/08/10/big/img_693 133 | 2002/08/31/big/img_17967 134 | 2002/08/28/big/img_19229 135 | 2002/08/04/big/img_811 136 | 2002/09/01/big/img_16225 137 | 2003/01/16/big/img_428 138 | 2002/09/02/big/img_15295 139 | 2002/07/26/big/img_108 140 | 2002/07/21/big/img_477 141 | 2002/08/07/big/img_1354 142 | 2002/08/23/big/img_246 143 | 2002/08/16/big/img_652 144 | 2002/07/27/big/img_553 145 | 2002/07/31/big/img_346 146 | 2002/08/04/big/img_537 147 | 2002/08/08/big/img_498 148 | 2002/08/29/big/img_18956 149 | 2003/01/13/big/img_922 150 | 2002/08/31/big/img_17425 151 | 2002/07/26/big/img_438 152 | 2002/08/19/big/img_185 153 | 2003/01/16/big/img_33 154 | 2002/08/10/big/img_252 155 | 2002/07/29/big/img_598 156 | 2002/08/27/big/img_19820 157 | 2002/08/06/big/img_2664 158 | 2002/08/20/big/img_705 159 | 2003/01/14/big/img_816 160 | 2002/08/03/big/img_552 161 | 2002/07/25/big/img_561 162 | 2002/07/25/big/img_934 163 | 2002/08/01/big/img_1893 164 | 2003/01/14/big/img_746 165 | 2003/01/16/big/img_519 166 | 2002/08/03/big/img_681 167 | 2002/07/24/big/img_808 168 | 2002/08/14/big/img_803 169 | 2002/08/25/big/img_155 170 | 2002/07/30/big/img_1107 171 | 2002/08/29/big/img_18882 172 | 2003/01/15/big/img_598 173 | 2002/08/19/big/img_122 174 | 2002/07/30/big/img_428 175 | 2002/07/24/big/img_684 176 | 2002/08/22/big/img_192 177 | 2002/08/22/big/img_543 178 | 2002/08/07/big/img_1318 179 | 2002/08/18/big/img_25 180 | 2002/07/26/big/img_583 181 | 2002/07/20/big/img_464 182 | 2002/08/19/big/img_664 183 | 2002/08/24/big/img_861 184 | 2002/09/01/big/img_16136 185 | 2002/08/22/big/img_400 186 | 2002/08/12/big/img_445 187 | 2003/01/14/big/img_174 188 | 2002/08/27/big/img_19677 189 | 2002/08/31/big/img_17214 190 | 2002/08/30/big/img_18175 191 | 2003/01/17/big/img_402 192 | 2002/08/06/big/img_2396 193 | 2002/08/18/big/img_448 194 | 2002/08/21/big/img_165 195 | 2002/08/31/big/img_17609 196 | 2003/01/01/big/img_151 197 | 2002/08/26/big/img_372 198 | 2002/09/02/big/img_15994 199 | 2002/07/26/big/img_660 200 | 2002/09/02/big/img_15197 201 | 2002/07/29/big/img_258 202 | 2002/08/30/big/img_18525 203 | 2003/01/13/big/img_368 204 | 2002/07/29/big/img_1538 205 | 2002/07/21/big/img_787 206 | 2002/08/18/big/img_152 207 | 2002/08/06/big/img_2379 208 | 2003/01/17/big/img_864 209 | 2002/08/27/big/img_19998 210 | 2002/08/01/big/img_1634 211 | 2002/07/25/big/img_414 212 | 2002/08/22/big/img_627 213 | 2002/08/07/big/img_1669 214 | 2002/08/16/big/img_1052 215 | 2002/08/31/big/img_17796 216 | 2002/08/18/big/img_199 217 | 2002/09/02/big/img_15147 218 | 2002/08/09/big/img_460 219 | 2002/08/14/big/img_581 220 | 2002/08/30/big/img_18286 221 | 2002/07/26/big/img_337 222 | 2002/08/18/big/img_589 223 | 2003/01/14/big/img_866 224 | 2002/07/20/big/img_624 225 | 2002/08/01/big/img_1801 226 | 2002/07/24/big/img_683 227 | 2002/08/09/big/img_725 228 | 2003/01/14/big/img_34 229 | 2002/07/30/big/img_144 230 | 2002/07/30/big/img_706 231 | 2002/08/08/big/img_394 232 | 2002/08/19/big/img_619 233 | 2002/08/06/big/img_2703 234 | 2002/08/29/big/img_19034 235 | 2002/07/24/big/img_67 236 | 2002/08/27/big/img_19841 237 | 2002/08/19/big/img_427 238 | 2003/01/14/big/img_333 239 | 2002/09/01/big/img_16406 240 | 2002/07/19/big/img_882 241 | 2002/08/17/big/img_238 242 | 2003/01/14/big/img_739 243 | 2002/07/22/big/img_151 244 | 2002/08/21/big/img_743 245 | 2002/07/25/big/img_1048 246 | 2002/07/30/big/img_395 247 | 2003/01/13/big/img_584 248 | 2002/08/13/big/img_742 249 | 2002/08/13/big/img_1168 250 | 2003/01/14/big/img_147 251 | 2002/07/26/big/img_803 252 | 2002/08/05/big/img_3298 253 | 2002/08/07/big/img_1451 254 | 2002/08/16/big/img_424 255 | 2002/07/29/big/img_1069 256 | 2002/09/01/big/img_16735 257 | 2002/07/21/big/img_637 258 | 2003/01/14/big/img_585 259 | 2002/08/02/big/img_358 260 | 2003/01/13/big/img_358 261 | 2002/08/14/big/img_198 262 | 2002/08/17/big/img_935 263 | 2002/08/04/big/img_42 264 | 2002/08/30/big/img_18245 265 | 2002/07/25/big/img_158 266 | 2002/08/22/big/img_744 267 | 2002/08/06/big/img_2291 268 | 2002/08/05/big/img_3044 269 | 2002/07/30/big/img_272 270 | 2002/08/23/big/img_641 271 | 2002/07/24/big/img_797 272 | 2002/07/30/big/img_392 273 | 2003/01/14/big/img_447 274 | 2002/07/31/big/img_898 275 | 2002/08/06/big/img_2812 276 | 2002/08/13/big/img_564 277 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/FDDB-folds/fileList/FDDB-fold-09.txt: -------------------------------------------------------------------------------- 1 | 2002/07/22/big/img_43 2 | 2002/07/26/big/img_634 3 | 2002/07/19/big/img_843 4 | 2002/08/26/big/img_58 5 | 2002/07/21/big/img_375 6 | 2002/08/25/big/img_729 7 | 2002/07/19/big/img_561 8 | 2003/01/15/big/img_884 9 | 2002/07/25/big/img_891 10 | 2002/08/09/big/img_558 11 | 2002/08/26/big/img_587 12 | 2002/08/13/big/img_1146 13 | 2002/09/02/big/img_15153 14 | 2002/07/26/big/img_316 15 | 2002/08/01/big/img_1940 16 | 2002/08/26/big/img_90 17 | 2003/01/13/big/img_347 18 | 2002/07/25/big/img_520 19 | 2002/08/29/big/img_18718 20 | 2002/08/28/big/img_19219 21 | 2002/08/13/big/img_375 22 | 2002/07/20/big/img_719 23 | 2002/08/31/big/img_17431 24 | 2002/07/28/big/img_192 25 | 2002/08/26/big/img_259 26 | 2002/08/18/big/img_484 27 | 2002/07/29/big/img_580 28 | 2002/07/26/big/img_84 29 | 2002/08/02/big/img_302 30 | 2002/08/31/big/img_17007 31 | 2003/01/15/big/img_543 32 | 2002/09/01/big/img_16488 33 | 2002/08/22/big/img_798 34 | 2002/07/30/big/img_383 35 | 2002/08/04/big/img_668 36 | 2002/08/13/big/img_156 37 | 2002/08/07/big/img_1353 38 | 2002/07/25/big/img_281 39 | 2003/01/14/big/img_587 40 | 2003/01/15/big/img_524 41 | 2002/08/19/big/img_726 42 | 2002/08/21/big/img_709 43 | 2002/08/26/big/img_465 44 | 2002/07/31/big/img_658 45 | 2002/08/28/big/img_19148 46 | 2002/07/23/big/img_423 47 | 2002/08/16/big/img_758 48 | 2002/08/22/big/img_523 49 | 2002/08/16/big/img_591 50 | 2002/08/23/big/img_845 51 | 2002/07/26/big/img_678 52 | 2002/08/09/big/img_806 53 | 2002/08/06/big/img_2369 54 | 2002/07/29/big/img_457 55 | 2002/07/19/big/img_278 56 | 2002/08/30/big/img_18107 57 | 2002/07/26/big/img_444 58 | 2002/08/20/big/img_278 59 | 2002/08/26/big/img_92 60 | 2002/08/26/big/img_257 61 | 2002/07/25/big/img_266 62 | 2002/08/05/big/img_3829 63 | 2002/07/26/big/img_757 64 | 2002/07/29/big/img_1536 65 | 2002/08/09/big/img_472 66 | 2003/01/17/big/img_480 67 | 2002/08/28/big/img_19355 68 | 2002/07/26/big/img_97 69 | 2002/08/06/big/img_2503 70 | 2002/07/19/big/img_254 71 | 2002/08/01/big/img_1470 72 | 2002/08/21/big/img_42 73 | 2002/08/20/big/img_217 74 | 2002/08/06/big/img_2459 75 | 2002/07/19/big/img_552 76 | 2002/08/13/big/img_717 77 | 2002/08/12/big/img_586 78 | 2002/08/20/big/img_411 79 | 2003/01/13/big/img_768 80 | 2002/08/07/big/img_1747 81 | 2002/08/15/big/img_385 82 | 2002/08/01/big/img_1648 83 | 2002/08/15/big/img_311 84 | 2002/08/21/big/img_95 85 | 2002/08/09/big/img_108 86 | 2002/08/21/big/img_398 87 | 2002/08/17/big/img_340 88 | 2002/08/14/big/img_474 89 | 2002/08/13/big/img_294 90 | 2002/08/24/big/img_840 91 | 2002/08/09/big/img_808 92 | 2002/08/23/big/img_491 93 | 2002/07/28/big/img_33 94 | 2003/01/13/big/img_664 95 | 2002/08/02/big/img_261 96 | 2002/08/09/big/img_591 97 | 2002/07/26/big/img_309 98 | 2003/01/14/big/img_372 99 | 2002/08/19/big/img_581 100 | 2002/08/19/big/img_168 101 | 2002/08/26/big/img_422 102 | 2002/07/24/big/img_106 103 | 2002/08/01/big/img_1936 104 | 2002/08/05/big/img_3764 105 | 2002/08/21/big/img_266 106 | 2002/08/31/big/img_17968 107 | 2002/08/01/big/img_1941 108 | 2002/08/15/big/img_550 109 | 2002/08/14/big/img_13 110 | 2002/07/30/big/img_171 111 | 2003/01/13/big/img_490 112 | 2002/07/25/big/img_427 113 | 2002/07/19/big/img_770 114 | 2002/08/12/big/img_759 115 | 2003/01/15/big/img_1360 116 | 2002/08/05/big/img_3692 117 | 2003/01/16/big/img_30 118 | 2002/07/25/big/img_1026 119 | 2002/07/22/big/img_288 120 | 2002/08/29/big/img_18801 121 | 2002/07/24/big/img_793 122 | 2002/08/13/big/img_178 123 | 2002/08/06/big/img_2322 124 | 2003/01/14/big/img_560 125 | 2002/08/18/big/img_408 126 | 2003/01/16/big/img_915 127 | 2003/01/16/big/img_679 128 | 2002/08/07/big/img_1552 129 | 2002/08/29/big/img_19050 130 | 2002/08/01/big/img_2172 131 | 2002/07/31/big/img_30 132 | 2002/07/30/big/img_1019 133 | 2002/07/30/big/img_587 134 | 2003/01/13/big/img_773 135 | 2002/07/30/big/img_410 136 | 2002/07/28/big/img_65 137 | 2002/08/05/big/img_3138 138 | 2002/07/23/big/img_541 139 | 2002/08/22/big/img_963 140 | 2002/07/27/big/img_657 141 | 2002/07/30/big/img_1051 142 | 2003/01/16/big/img_150 143 | 2002/07/31/big/img_519 144 | 2002/08/01/big/img_1961 145 | 2002/08/05/big/img_3752 146 | 2002/07/23/big/img_631 147 | 2003/01/14/big/img_237 148 | 2002/07/28/big/img_21 149 | 2002/07/22/big/img_813 150 | 2002/08/05/big/img_3563 151 | 2003/01/17/big/img_620 152 | 2002/07/19/big/img_523 153 | 2002/07/30/big/img_904 154 | 2002/08/29/big/img_18642 155 | 2002/08/11/big/img_492 156 | 2002/08/01/big/img_2130 157 | 2002/07/25/big/img_618 158 | 2002/08/17/big/img_305 159 | 2003/01/16/big/img_520 160 | 2002/07/26/big/img_495 161 | 2002/08/17/big/img_164 162 | 2002/08/03/big/img_440 163 | 2002/07/24/big/img_441 164 | 2002/08/06/big/img_2146 165 | 2002/08/11/big/img_558 166 | 2002/08/02/big/img_545 167 | 2002/08/31/big/img_18090 168 | 2003/01/01/big/img_136 169 | 2002/07/25/big/img_1099 170 | 2003/01/13/big/img_728 171 | 2003/01/16/big/img_197 172 | 2002/07/26/big/img_651 173 | 2002/08/11/big/img_676 174 | 2003/01/15/big/img_10 175 | 2002/08/21/big/img_250 176 | 2002/08/14/big/img_325 177 | 2002/08/04/big/img_390 178 | 2002/07/24/big/img_554 179 | 2003/01/16/big/img_333 180 | 2002/07/31/big/img_922 181 | 2002/09/02/big/img_15586 182 | 2003/01/16/big/img_184 183 | 2002/07/22/big/img_766 184 | 2002/07/21/big/img_608 185 | 2002/08/07/big/img_1578 186 | 2002/08/17/big/img_961 187 | 2002/07/27/big/img_324 188 | 2002/08/05/big/img_3765 189 | 2002/08/23/big/img_462 190 | 2003/01/16/big/img_382 191 | 2002/08/27/big/img_19838 192 | 2002/08/01/big/img_1505 193 | 2002/08/21/big/img_662 194 | 2002/08/14/big/img_605 195 | 2002/08/19/big/img_816 196 | 2002/07/29/big/img_136 197 | 2002/08/20/big/img_719 198 | 2002/08/06/big/img_2826 199 | 2002/08/10/big/img_630 200 | 2003/01/17/big/img_973 201 | 2002/08/14/big/img_116 202 | 2002/08/02/big/img_666 203 | 2002/08/21/big/img_710 204 | 2002/08/05/big/img_55 205 | 2002/07/31/big/img_229 206 | 2002/08/01/big/img_1549 207 | 2002/07/23/big/img_432 208 | 2002/07/21/big/img_430 209 | 2002/08/21/big/img_549 210 | 2002/08/08/big/img_985 211 | 2002/07/20/big/img_610 212 | 2002/07/23/big/img_978 213 | 2002/08/23/big/img_219 214 | 2002/07/25/big/img_175 215 | 2003/01/15/big/img_230 216 | 2002/08/23/big/img_385 217 | 2002/07/31/big/img_879 218 | 2002/08/12/big/img_495 219 | 2002/08/22/big/img_499 220 | 2002/08/30/big/img_18322 221 | 2002/08/15/big/img_795 222 | 2002/08/13/big/img_835 223 | 2003/01/17/big/img_930 224 | 2002/07/30/big/img_873 225 | 2002/08/11/big/img_257 226 | 2002/07/31/big/img_593 227 | 2002/08/21/big/img_916 228 | 2003/01/13/big/img_814 229 | 2002/07/25/big/img_722 230 | 2002/08/16/big/img_379 231 | 2002/07/31/big/img_497 232 | 2002/07/22/big/img_602 233 | 2002/08/21/big/img_642 234 | 2002/08/21/big/img_614 235 | 2002/08/23/big/img_482 236 | 2002/07/29/big/img_603 237 | 2002/08/13/big/img_705 238 | 2002/07/23/big/img_833 239 | 2003/01/14/big/img_511 240 | 2002/07/24/big/img_376 241 | 2002/08/17/big/img_1030 242 | 2002/08/05/big/img_3576 243 | 2002/08/16/big/img_540 244 | 2002/07/22/big/img_630 245 | 2002/08/10/big/img_180 246 | 2002/08/14/big/img_905 247 | 2002/08/29/big/img_18777 248 | 2002/08/22/big/img_693 249 | 2003/01/16/big/img_933 250 | 2002/08/20/big/img_555 251 | 2002/08/15/big/img_549 252 | 2003/01/14/big/img_830 253 | 2003/01/16/big/img_64 254 | 2002/08/27/big/img_19670 255 | 2002/08/22/big/img_729 256 | 2002/07/27/big/img_981 257 | 2002/08/09/big/img_458 258 | 2003/01/17/big/img_884 259 | 2002/07/25/big/img_639 260 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/FDDB-folds/fileList/FDDB-fold-10.txt: -------------------------------------------------------------------------------- 1 | 2002/08/31/big/img_18008 2 | 2002/08/22/big/img_249 3 | 2002/08/17/big/img_971 4 | 2002/08/04/big/img_308 5 | 2002/07/28/big/img_362 6 | 2002/08/12/big/img_142 7 | 2002/08/26/big/img_61 8 | 2002/08/14/big/img_422 9 | 2002/07/19/big/img_607 10 | 2003/01/15/big/img_717 11 | 2002/08/01/big/img_1475 12 | 2002/08/29/big/img_19061 13 | 2003/01/01/big/img_346 14 | 2002/07/20/big/img_315 15 | 2003/01/15/big/img_756 16 | 2002/08/15/big/img_879 17 | 2002/08/08/big/img_615 18 | 2003/01/13/big/img_431 19 | 2002/08/05/big/img_3233 20 | 2002/08/24/big/img_526 21 | 2003/01/13/big/img_717 22 | 2002/09/01/big/img_16408 23 | 2002/07/22/big/img_217 24 | 2002/07/31/big/img_960 25 | 2002/08/21/big/img_610 26 | 2002/08/05/big/img_3753 27 | 2002/08/03/big/img_151 28 | 2002/08/21/big/img_267 29 | 2002/08/01/big/img_2175 30 | 2002/08/04/big/img_556 31 | 2002/08/21/big/img_527 32 | 2002/09/02/big/img_15800 33 | 2002/07/27/big/img_156 34 | 2002/07/20/big/img_590 35 | 2002/08/15/big/img_700 36 | 2002/08/08/big/img_444 37 | 2002/07/25/big/img_94 38 | 2002/07/24/big/img_778 39 | 2002/08/14/big/img_694 40 | 2002/07/20/big/img_666 41 | 2002/08/02/big/img_200 42 | 2002/08/02/big/img_578 43 | 2003/01/17/big/img_332 44 | 2002/09/01/big/img_16352 45 | 2002/08/27/big/img_19668 46 | 2002/07/23/big/img_823 47 | 2002/08/13/big/img_431 48 | 2003/01/16/big/img_463 49 | 2002/08/27/big/img_19711 50 | 2002/08/23/big/img_154 51 | 2002/07/31/big/img_360 52 | 2002/08/23/big/img_555 53 | 2002/08/10/big/img_561 54 | 2003/01/14/big/img_550 55 | 2002/08/07/big/img_1370 56 | 2002/07/30/big/img_1184 57 | 2002/08/01/big/img_1445 58 | 2002/08/23/big/img_22 59 | 2002/07/30/big/img_606 60 | 2003/01/17/big/img_271 61 | 2002/08/31/big/img_17316 62 | 2002/08/16/big/img_973 63 | 2002/07/26/big/img_77 64 | 2002/07/20/big/img_788 65 | 2002/08/06/big/img_2426 66 | 2002/08/07/big/img_1498 67 | 2002/08/16/big/img_358 68 | 2002/08/06/big/img_2851 69 | 2002/08/12/big/img_359 70 | 2002/08/01/big/img_1521 71 | 2002/08/02/big/img_709 72 | 2002/08/20/big/img_935 73 | 2002/08/12/big/img_188 74 | 2002/08/24/big/img_411 75 | 2002/08/22/big/img_680 76 | 2002/08/06/big/img_2480 77 | 2002/07/20/big/img_627 78 | 2002/07/30/big/img_214 79 | 2002/07/25/big/img_354 80 | 2002/08/02/big/img_636 81 | 2003/01/15/big/img_661 82 | 2002/08/07/big/img_1327 83 | 2002/08/01/big/img_2108 84 | 2002/08/31/big/img_17919 85 | 2002/08/29/big/img_18768 86 | 2002/08/05/big/img_3840 87 | 2002/07/26/big/img_242 88 | 2003/01/14/big/img_451 89 | 2002/08/20/big/img_923 90 | 2002/08/27/big/img_19908 91 | 2002/08/16/big/img_282 92 | 2002/08/19/big/img_440 93 | 2003/01/01/big/img_230 94 | 2002/08/08/big/img_212 95 | 2002/07/20/big/img_443 96 | 2002/08/25/big/img_635 97 | 2003/01/13/big/img_1169 98 | 2002/07/26/big/img_998 99 | 2002/08/15/big/img_995 100 | 2002/08/06/big/img_3002 101 | 2002/07/29/big/img_460 102 | 2003/01/14/big/img_925 103 | 2002/07/23/big/img_539 104 | 2002/08/16/big/img_694 105 | 2003/01/13/big/img_459 106 | 2002/07/23/big/img_249 107 | 2002/08/20/big/img_539 108 | 2002/08/04/big/img_186 109 | 2002/08/26/big/img_264 110 | 2002/07/22/big/img_704 111 | 2002/08/25/big/img_277 112 | 2002/08/22/big/img_988 113 | 2002/07/29/big/img_504 114 | 2002/08/05/big/img_3600 115 | 2002/08/30/big/img_18380 116 | 2003/01/14/big/img_937 117 | 2002/08/21/big/img_254 118 | 2002/08/10/big/img_130 119 | 2002/08/20/big/img_339 120 | 2003/01/14/big/img_428 121 | 2002/08/20/big/img_889 122 | 2002/08/31/big/img_17637 123 | 2002/07/26/big/img_644 124 | 2002/09/01/big/img_16776 125 | 2002/08/06/big/img_2239 126 | 2002/08/06/big/img_2646 127 | 2003/01/13/big/img_491 128 | 2002/08/10/big/img_579 129 | 2002/08/21/big/img_713 130 | 2002/08/22/big/img_482 131 | 2002/07/22/big/img_167 132 | 2002/07/24/big/img_539 133 | 2002/08/14/big/img_721 134 | 2002/07/25/big/img_389 135 | 2002/09/01/big/img_16591 136 | 2002/08/13/big/img_543 137 | 2003/01/14/big/img_432 138 | 2002/08/09/big/img_287 139 | 2002/07/26/big/img_126 140 | 2002/08/23/big/img_412 141 | 2002/08/15/big/img_1034 142 | 2002/08/28/big/img_19485 143 | 2002/07/31/big/img_236 144 | 2002/07/30/big/img_523 145 | 2002/07/19/big/img_141 146 | 2003/01/17/big/img_957 147 | 2002/08/04/big/img_81 148 | 2002/07/25/big/img_206 149 | 2002/08/15/big/img_716 150 | 2002/08/13/big/img_403 151 | 2002/08/15/big/img_685 152 | 2002/07/26/big/img_884 153 | 2002/07/19/big/img_499 154 | 2002/07/23/big/img_772 155 | 2002/07/27/big/img_752 156 | 2003/01/14/big/img_493 157 | 2002/08/25/big/img_664 158 | 2002/07/31/big/img_334 159 | 2002/08/26/big/img_678 160 | 2002/09/01/big/img_16541 161 | 2003/01/14/big/img_347 162 | 2002/07/23/big/img_187 163 | 2002/07/30/big/img_1163 164 | 2002/08/05/big/img_35 165 | 2002/08/22/big/img_944 166 | 2002/08/07/big/img_1239 167 | 2002/07/29/big/img_1215 168 | 2002/08/03/big/img_312 169 | 2002/08/05/big/img_3523 170 | 2002/07/29/big/img_218 171 | 2002/08/13/big/img_672 172 | 2002/08/16/big/img_205 173 | 2002/08/17/big/img_594 174 | 2002/07/29/big/img_1411 175 | 2002/07/30/big/img_942 176 | 2003/01/16/big/img_312 177 | 2002/08/08/big/img_312 178 | 2002/07/25/big/img_15 179 | 2002/08/09/big/img_839 180 | 2002/08/01/big/img_2069 181 | 2002/08/31/big/img_17512 182 | 2002/08/01/big/img_3 183 | 2002/07/31/big/img_320 184 | 2003/01/15/big/img_1265 185 | 2002/08/14/big/img_563 186 | 2002/07/31/big/img_167 187 | 2002/08/20/big/img_374 188 | 2002/08/13/big/img_406 189 | 2002/08/08/big/img_625 190 | 2002/08/02/big/img_314 191 | 2002/08/27/big/img_19964 192 | 2002/09/01/big/img_16670 193 | 2002/07/31/big/img_599 194 | 2002/08/29/big/img_18906 195 | 2002/07/24/big/img_373 196 | 2002/07/26/big/img_513 197 | 2002/09/02/big/img_15497 198 | 2002/08/19/big/img_117 199 | 2003/01/01/big/img_158 200 | 2002/08/24/big/img_178 201 | 2003/01/13/big/img_935 202 | 2002/08/13/big/img_609 203 | 2002/08/30/big/img_18341 204 | 2002/08/25/big/img_674 205 | 2003/01/13/big/img_209 206 | 2002/08/13/big/img_258 207 | 2002/08/05/big/img_3543 208 | 2002/08/07/big/img_1970 209 | 2002/08/06/big/img_3004 210 | 2003/01/17/big/img_487 211 | 2002/08/24/big/img_873 212 | 2002/08/29/big/img_18730 213 | 2002/08/09/big/img_375 214 | 2003/01/16/big/img_751 215 | 2002/08/02/big/img_603 216 | 2002/08/19/big/img_325 217 | 2002/09/01/big/img_16420 218 | 2002/08/05/big/img_3633 219 | 2002/08/21/big/img_516 220 | 2002/07/19/big/img_501 221 | 2002/07/26/big/img_688 222 | 2002/07/24/big/img_256 223 | 2002/07/25/big/img_438 224 | 2002/07/31/big/img_1017 225 | 2002/08/22/big/img_512 226 | 2002/07/21/big/img_543 227 | 2002/08/08/big/img_223 228 | 2002/08/19/big/img_189 229 | 2002/08/12/big/img_630 230 | 2002/07/30/big/img_958 231 | 2002/07/28/big/img_208 232 | 2002/08/31/big/img_17691 233 | 2002/07/22/big/img_542 234 | 2002/07/19/big/img_741 235 | 2002/07/19/big/img_158 236 | 2002/08/15/big/img_399 237 | 2002/08/01/big/img_2159 238 | 2002/08/14/big/img_455 239 | 2002/08/17/big/img_1011 240 | 2002/08/26/big/img_744 241 | 2002/08/12/big/img_624 242 | 2003/01/17/big/img_821 243 | 2002/08/16/big/img_980 244 | 2002/07/28/big/img_281 245 | 2002/07/25/big/img_171 246 | 2002/08/03/big/img_116 247 | 2002/07/22/big/img_467 248 | 2002/07/31/big/img_750 249 | 2002/07/26/big/img_435 250 | 2002/07/19/big/img_822 251 | 2002/08/13/big/img_626 252 | 2002/08/11/big/img_344 253 | 2002/08/02/big/img_473 254 | 2002/09/01/big/img_16817 255 | 2002/08/01/big/img_1275 256 | 2002/08/28/big/img_19270 257 | 2002/07/23/big/img_607 258 | 2002/08/09/big/img_316 259 | 2002/07/29/big/img_626 260 | 2002/07/24/big/img_824 261 | 2002/07/22/big/img_342 262 | 2002/08/08/big/img_794 263 | 2002/08/07/big/img_1209 264 | 2002/07/19/big/img_18 265 | 2002/08/25/big/img_634 266 | 2002/07/24/big/img_730 267 | 2003/01/17/big/img_356 268 | 2002/07/23/big/img_305 269 | 2002/07/30/big/img_453 270 | 2003/01/13/big/img_972 271 | 2002/08/06/big/img_2610 272 | 2002/08/29/big/img_18920 273 | 2002/07/31/big/img_123 274 | 2002/07/26/big/img_979 275 | 2002/08/24/big/img_635 276 | 2002/08/05/big/img_3704 277 | 2002/08/07/big/img_1358 278 | 2002/07/22/big/img_306 279 | 2002/08/13/big/img_619 280 | 2002/08/02/big/img_366 281 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/FDDB-folds/merge_txt.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | #cat MTCNN/*.txt > MTCNN.txt 3 | cat MTCNN_20/*.txt > MTCNN_20.txt 4 | #cat /home/xileli/Documents/program/CascadeCNN/result/FDDB_evaluation/FDDB-folds/fileList/*.txt > /home/xileli/Documents/program/CascadeCNN/result/FDDB_evaluation/FDDB-folds/fileList.txt 5 | #cat /home/xileli/Documents/program/CascadeCNN/result/FDDB_evaluation/FDDB-folds/ellipseList/*.txt > /home/xileli/Documents/program/CascadeCNN/result/FDDB_evaluation/FDDB-folds/ellipseList.txt 6 | #cat /home/xileli/Documents/program/CascadeCNN/result/FDDB_evaluation/FDDB-folds/CascadeCNN/*.txt > /home/xileli/Documents/program/CascadeCNN/result/FDDB_evaluation/FDDB-folds/CascadeCNN.txt 7 | 8 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/compare/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/FDDB_evaluation/compare/.DS_Store -------------------------------------------------------------------------------- /result/FDDB_evaluation/compare/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.6) 2 | project(compare) 3 | 4 | set(CMAKE_CXX_STANDARD 11) 5 | 6 | set(OpenCV_DIR "/usr/local/lib") 7 | find_package(OpenCV) 8 | 9 | set(SOURCE_FILES main.cpp compare.cpp compare.h) 10 | add_executable(compare ${SOURCE_FILES}) 11 | target_link_libraries(compare ${OpenCV_LIBS} ) -------------------------------------------------------------------------------- /result/FDDB_evaluation/compare/compare.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by 刘阳 on 2016/12/6. 3 | // 4 | 5 | #include "compare.h" 6 | 7 | 8 | bool Compare::img_path_read(string path) 9 | { 10 | img_path_.clear(); 11 | std::ifstream img_path_file(path); 12 | while(!img_path_file.eof()) 13 | { 14 | string line; 15 | getline(img_path_file, line); 16 | if(line == "") 17 | continue; 18 | img_path_.push_back(line); 19 | } 20 | 21 | if(img_path_.size() != 0) 22 | return true; 23 | else 24 | return false; 25 | } 26 | 27 | bool Compare::ellipse_read(string path) 28 | { 29 | int index = 0; 30 | std::ifstream img_path_file(path);// ??? 31 | while(!img_path_file.eof()) 32 | { 33 | string cur_img_path = img_path_[index]; 34 | string line; 35 | getline(img_path_file, line); 36 | if(cur_img_path == line) 37 | { 38 | string line_count; 39 | getline(img_path_file, line_count); 40 | int count = atoi(line_count.c_str()); 41 | 42 | vector cur_ellip; 43 | for(int i = 0; i < count; i ++) 44 | { 45 | string line_ellipse; 46 | getline(img_path_file, line_ellipse); 47 | cur_ellip.push_back(line_ellipse); 48 | } 49 | ellipse_.push_back(cur_ellip); 50 | } 51 | 52 | index++; 53 | } 54 | ellipse_.pop_back(); 55 | //vector cur_ellip = ellipse_[2845]; 56 | if(ellipse_.size() != 0) 57 | return true; 58 | else 59 | return false; 60 | } 61 | 62 | bool Compare::rect_read(string path) 63 | { 64 | int index = 0; 65 | std::ifstream img_path_file(path); 66 | while(!img_path_file.eof()) 67 | { 68 | string cur_img_path = img_path_[index]; 69 | string line; 70 | getline(img_path_file, line); 71 | if (cur_img_path == line) 72 | { 73 | string line_count; 74 | getline(img_path_file, line_count); 75 | int count = atoi(line_count.c_str()); 76 | 77 | vector cascade_cur_rect; 78 | vector confidence; 79 | for (int i = 0; i < count; i++) 80 | { 81 | string line_rect; 82 | getline(img_path_file, line_rect); 83 | char *cstr = new char[line_rect.length() + 1]; 84 | strcpy(cstr, line_rect.c_str()); 85 | char *p = strtok(cstr, " "); 86 | vector cur_rect_list; 87 | while (p != 0) { 88 | float pos = atof(p); 89 | cur_rect_list.push_back(pos); 90 | p = strtok(NULL, " "); 91 | } 92 | Rect cur_rect = Rect(cur_rect_list[0], cur_rect_list[1], cur_rect_list[2], cur_rect_list[3]); 93 | cascade_cur_rect.push_back(cur_rect); 94 | confidence.push_back(cur_rect_list[4]); 95 | } 96 | rect_.push_back(cascade_cur_rect); 97 | confidence_.push_back(confidence); 98 | } 99 | index++; 100 | } 101 | 102 | if(rect_.size() != 0) 103 | return true; 104 | else 105 | return false; 106 | } 107 | 108 | bool Compare::ellipse_trans(vector ellipses) 109 | { 110 | cur_ellipse_.clear(); 111 | for(int i = 0; i < ellipses.size(); i++) { 112 | char *cstr = new char[ellipses[i].length() + 1]; 113 | strcpy(cstr, ellipses[i].c_str()); 114 | char *p = strtok(cstr, " "); 115 | vector ellip; 116 | while (p != 0) { 117 | float pos = atof(p); 118 | ellip.push_back(pos); 119 | p = strtok(NULL, " "); 120 | } 121 | 122 | cur_ellipse_.push_back(ellip); 123 | } 124 | 125 | if(cur_ellipse_.size() != 0) 126 | return true; 127 | else 128 | return false; 129 | 130 | } 131 | 132 | bool Compare::img_write(std::vector> groundTruth,std::vector rects, std::vector confidence, std::string img_path) 133 | { 134 | string cur_img_path = root_img_path_ + img_path + ".jpg"; 135 | cv::Mat img; 136 | img_read(cur_img_path); 137 | cur_img_.copyTo(img); 138 | 139 | //cv::imwrite("/home/xileli/Documents/program/CascadeCNN/" + name + "test.jpg", img); 140 | for(int i = 0; i < rects.size(); i++) 141 | { 142 | rectangle(img, rects[i], cv::Scalar(255, 0, 0)); 143 | cv::putText(img, std::to_string(confidence[i]), cvPoint(rects[i].x + 3, rects[i].y + 13), 144 | cv::FONT_HERSHEY_COMPLEX_SMALL, 0.8, cvScalar(255, 0, 0), 1, CV_AA); 145 | } 146 | 147 | for(int i = 0; i < groundTruth.size(); i++) 148 | { 149 | ellipse(img, cvPointFrom32f(cvPoint2D32f(groundTruth[i][3], groundTruth[i][4])), cvSize((int)groundTruth[i][1], (int)groundTruth[i][0]), 180-groundTruth[i][2], 0,360, cvScalar(0, 0, 255), 1); 150 | } 151 | 152 | cv::imwrite(root_img_path_ + "compare/" + img_path + "-compare.jpg", img); 153 | //imshow("test", img); 154 | //waitKey(0); 155 | return true; 156 | } 157 | 158 | bool Compare::img_read(string path) 159 | { 160 | cur_img_ = cv::imread(path); 161 | if(cur_img_.rows) 162 | return true; 163 | else 164 | return false; 165 | } 166 | 167 | void Compare::run(vector path) 168 | { 169 | img_path_read(path[0]); 170 | ellipse_read(path[1]); 171 | rect_read(path[2]); 172 | 173 | for(int i = 0; i < img_path_.size(); i++) 174 | { 175 | cur_rect_ = rect_[i]; 176 | ellipse_trans(ellipse_[i]); // ellipse convert to rectangles 177 | img_write(cur_ellipse_, cur_rect_, confidence_[i], img_path_[i]); 178 | } 179 | } -------------------------------------------------------------------------------- /result/FDDB_evaluation/compare/compare.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by 刘阳 on 2016/12/6. 3 | // 4 | 5 | #ifndef COMPARE_COMPARE_H 6 | #define COMPARE_COMPARE_H 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | using namespace std; 13 | using namespace cv; 14 | 15 | class Compare { 16 | 17 | public: 18 | 19 | bool img_path_read(std::string path); 20 | bool ellipse_read(std::string path); 21 | bool rect_read(std::string path); 22 | bool ellipse_trans(vector ellipses); 23 | bool img_read(string path); 24 | //void img_write(); 25 | bool img_write(std::vector> groundTruth,std::vector rects, std::vector confidence, std::string img_path); 26 | 27 | void run(vector path); 28 | 29 | vector img_path_; 30 | vector> ellipse_; 31 | vector> rect_; 32 | vector> confidence_; 33 | 34 | cv::Mat cur_img_; 35 | vector cur_rect_; 36 | vector> cur_ellipse_; 37 | 38 | string root_img_path_ = "/Users/Young/projects/FDDB/"; 39 | 40 | 41 | }; 42 | 43 | 44 | #endif //COMPARE_COMPARE_H 45 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/compare/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "compare.h" 3 | 4 | int main() { 5 | 6 | vector result= { 7 | "/Users/Young/projects/MTCNN/result/FDDB_evaluation/FDDB-folds/fileList.txt", 8 | "/Users/Young/projects/MTCNN/result/FDDB_evaluation/FDDB-folds/ellipseList.txt", 9 | "/Users/Young/projects/MTCNN/result/FDDB_evaluation/FDDB-folds/MTCNN.txt" 10 | }; 11 | 12 | Compare program; 13 | 14 | program.run(result); 15 | 16 | return 0; 17 | } -------------------------------------------------------------------------------- /result/FDDB_evaluation/controc_Cascade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/FDDB_evaluation/controc_Cascade.png -------------------------------------------------------------------------------- /result/FDDB_evaluation/controc_MTCNN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/FDDB_evaluation/controc_MTCNN.png -------------------------------------------------------------------------------- /result/FDDB_evaluation/controc_MTCNN_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/FDDB_evaluation/controc_MTCNN_20.png -------------------------------------------------------------------------------- /result/FDDB_evaluation/controc_MTCNN_num.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/FDDB_evaluation/controc_MTCNN_num.png -------------------------------------------------------------------------------- /result/FDDB_evaluation/discroc_Cascade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/FDDB_evaluation/discroc_Cascade.png -------------------------------------------------------------------------------- /result/FDDB_evaluation/discroc_MTCNN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/FDDB_evaluation/discroc_MTCNN.png -------------------------------------------------------------------------------- /result/FDDB_evaluation/discroc_MTCNN_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/FDDB_evaluation/discroc_MTCNN_20.png -------------------------------------------------------------------------------- /result/FDDB_evaluation/discroc_MTCNN_num.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/FDDB_evaluation/discroc_MTCNN_num.png -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/EllipseR.cpp: -------------------------------------------------------------------------------- 1 | #include "EllipseR.hpp" 2 | #ifndef __XCODE__ 3 | #include 4 | #endif 5 | #include 6 | #include 7 | #include "OpenCVUtils.hpp" 8 | 9 | EllipseR::EllipseR(IplImage *I, std::vector *v) : Region(I) { 10 | cx = v->at(0); 11 | cy = v->at(1); 12 | angle = v->at(2); 13 | ra = v->at(3); 14 | rb = v->at(4); 15 | detScore = v->at(5); 16 | } 17 | 18 | IplImage *EllipseR::display(IplImage *mask, CvScalar color, int lineWidth, const char *text){ 19 | // draw the ellipse on the mask image 20 | cvEllipse(mask, cvPointFrom32f(cvPoint2D32f(cx, cy)), cvSize((int)ra, (int)rb), 180-angle, 0,360, color, lineWidth); 21 | 22 | if(text != NULL){ 23 | // add text 24 | CvFont font; 25 | cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0, 0, 1, CV_AA); 26 | cvPutText(mask, text, cvPointFrom32f(cvPoint2D32f(cx, cy)), &font, color); 27 | } 28 | return mask; 29 | } 30 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/EllipseR.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __ELLIPSER_HPP__ 2 | #define __ELLIPSER_HPP__ 3 | 4 | #include "common.hpp" 5 | 6 | #include 7 | #ifndef __XCODE__ 8 | #include 9 | #endif 10 | 11 | #include "Region.hpp" 12 | /** 13 | * Specification of an elliptical region 14 | * */ 15 | class EllipseR : public Region{ 16 | private: 17 | /// x-position of the center 18 | double cx; 19 | /// y-position of the center 20 | double cy; 21 | /// orientation of the major axis 22 | double angle; 23 | /// half-length of the major axis 24 | double ra; 25 | /// half-length of the minor axis 26 | double rb; 27 | public: 28 | /// Constructor 29 | EllipseR(IplImage *, std::vector *); 30 | /// Method to add this ellipse of a given color and 31 | /// line width to an image. If the 32 | /// last parameter is not NULL, display the text also. 33 | virtual IplImage *display(IplImage *I, CvScalar color, int lineWidth, const char *text); 34 | }; 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/EllipsesSingleImage.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include "EllipsesSingleImage.hpp" 6 | 7 | #ifndef __XCODE__ 8 | #include 9 | #include 10 | #include "OpenCVUtils.hpp" 11 | #else 12 | #include 13 | #endif 14 | 15 | #ifndef M_PI 16 | #define M_PI 3.14156 17 | #endif 18 | 19 | using std::string; 20 | using std::vector; 21 | using std::ifstream; 22 | using std::stringstream; 23 | 24 | EllipsesSingleImage::EllipsesSingleImage(string fName) : RegionsSingleImage(fName){ 25 | } 26 | 27 | EllipsesSingleImage::EllipsesSingleImage(IplImage *I) : RegionsSingleImage(I){ 28 | } 29 | 30 | EllipsesSingleImage::~EllipsesSingleImage(){ 31 | } 32 | 33 | void EllipsesSingleImage::read(string rectFile) 34 | { 35 | ifstream fin(rectFile.c_str()); 36 | if(fin.is_open()){ 37 | double x,y,t,w,h; 38 | 39 | while(fin >> w >> h >> t >> x >> y){ 40 | t = (M_PI-t) *180/M_PI; 41 | vector *r = new vector(5); 42 | double myarray [] = {x,y,t,w,h}; 43 | r->insert (r->begin(), myarray, myarray+5); 44 | EllipseR *ell = new EllipseR(NULL, r); 45 | list->push_back((Region *)ell); 46 | delete(r); 47 | } 48 | } 49 | fin.close(); 50 | } 51 | 52 | void EllipsesSingleImage::read(ifstream &fin, int n) 53 | { 54 | for(int i=0; i< n; i++){ 55 | double x,y,t,w,h, sc; 56 | 57 | string line; 58 | getline(fin, line); 59 | stringstream ss(line); 60 | ss >> w >> h >> t >> x >> y >> sc; 61 | 62 | t = (M_PI-t) *180/M_PI; 63 | vector *r = new vector(6); 64 | double myarray [] = {x,y,t,w,h,sc}; 65 | r->insert (r->begin(), myarray, myarray+6); 66 | EllipseR *ell = new EllipseR(NULL, r); 67 | list->push_back((Region *)ell); 68 | delete(r); 69 | } 70 | } 71 | 72 | void EllipsesSingleImage::show() 73 | { 74 | IplImage *mask = cvCreateImage(cvGetSize(im), im->depth, im->nChannels); 75 | cvCopy(im, mask, 0); 76 | for(unsigned int i=0; isize(); i++) 77 | mask = ((EllipseR *)(list->at(i)))->display(mask, CV_RGB(255,0,0), 3, NULL); 78 | 79 | showImage("Ellipses", mask); 80 | cvReleaseImage(&mask); 81 | } 82 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/EllipsesSingleImage.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __ELLIPSESSINGLEIMAGE_HPP__ 2 | #define __ELLIPSESSINGLEIMAGE_HPP__ 3 | 4 | #include 5 | #include 6 | #include 7 | #include "RegionsSingleImage.hpp" 8 | #include "EllipseR.hpp" 9 | 10 | #ifndef __XCODE__ 11 | #include 12 | #else 13 | #include 14 | #endif 15 | 16 | /** 17 | * Specifies a set of elliptical regions for an image 18 | * */ 19 | class EllipsesSingleImage : public RegionsSingleImage{ 20 | 21 | public: 22 | /// Constructor: read an image from a file 23 | EllipsesSingleImage(std::string); 24 | /// Constructor: intialize the image for this set of ellipses as I 25 | EllipsesSingleImage(IplImage *I); 26 | /// Destructor 27 | ~EllipsesSingleImage(); 28 | /// Read the annotaion from the file fName 29 | virtual void read(std::string fName); 30 | /// Read N annotaion from the file stream fs 31 | virtual void read(std::ifstream &fs, int N); 32 | /// Display all ellipses 33 | virtual void show(); 34 | }; 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/Hungarian.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * C Implementation of Kuhn's Hungarian Method 3 | * Copyright (C) 2003 Brian Gerkey 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program; if not, write to the Free Software 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 | * 19 | */ 20 | 21 | /* 22 | * A C implementation of the Hungarian method for solving Optimal Assignment 23 | * Problems. Theoretically runs in O(mn^2) time for an m X n problem; this 24 | * implementation is certainly not as fast as it could be. 25 | * 26 | * $Id: hungarian.h,v 1.8 2003/03/14 22:07:42 gerkey Exp $ 27 | */ 28 | 29 | #ifndef HUNGARIAN_H 30 | #define HUNGARIAN_H 31 | 32 | #ifdef __cplusplus 33 | extern "C" { 34 | #endif 35 | 36 | #include // for size_t 37 | #include 38 | 39 | /* bzero is not always available (e.g., in Win32) */ 40 | #ifndef bzero 41 | #define bzero(b,len) (memset((b), '\0', (len)), (void) 0) 42 | #endif 43 | 44 | /* are we maximizing or minimizing? */ 45 | #define HUNGARIAN_MIN (0) 46 | #define HUNGARIAN_MAX (1) 47 | #define HUNGARIAN_EPS (1e-15) 48 | 49 | /* 50 | * a simple linked list 51 | */ 52 | typedef struct 53 | { 54 | unsigned int* i; 55 | unsigned int* j; 56 | unsigned int k; 57 | } hungarian_sequence_t; 58 | 59 | /* 60 | * we'll use objects of this type to keep track of the state of the problem 61 | * and its solution 62 | */ 63 | typedef struct 64 | { 65 | size_t m,n; // problem dimensions 66 | double** r; // the rating (utility) matrix 67 | int** q; // the Q matrix 68 | double* u; // the U vector 69 | double* v; // the V vector 70 | int* ess_rows; // list of essential rows 71 | int* ess_cols; // list of essential columns 72 | hungarian_sequence_t seq; // sequence of i's and j's 73 | double row_total, col_total; // row and column totals 74 | int* a; // assignment vector 75 | double maxutil; // maximum utility 76 | int mode; // are we maximizing or minimizing? 77 | } hungarian_t; 78 | 79 | /* 80 | * initialize the given object as an mXn problem. allocates storage, which 81 | * should be freed with hungarian_fini(). 82 | */ 83 | void hungarian_init(hungarian_t* prob, double** r, size_t m, size_t n, int mode); 84 | 85 | /* 86 | * frees storage associated with the given problem object. you must have 87 | * called hungarian_init() first. 88 | */ 89 | void hungarian_fini(hungarian_t* prob); 90 | 91 | /* 92 | * solve the given problem. runs the Hungarian Method on the rating matrix 93 | * to produce optimal assignment, which is stored in the vector prob->a. 94 | * you must have called hungarian_init() first. 95 | */ 96 | void hungarian_solve(hungarian_t* prob); 97 | 98 | /* 99 | * prints out the resultant assignment in a 0-1 matrix form. also computes 100 | * and prints out the benefit from the assignment. you must have called 101 | * hungarian_solve() first. 102 | */ 103 | void hungarian_print_assignment(hungarian_t* prob); 104 | 105 | /* 106 | * prints out the rating matrix for the given problem. you must have called 107 | * hungarian_solve() first. 108 | */ 109 | void hungarian_print_rating(hungarian_t* prob); 110 | 111 | /* 112 | * check whether an assigment is feasible. returns 1 if the assigment is 113 | * feasible, 0 otherwise. you must have called hungarian_solve() first. 114 | */ 115 | int hungarian_check_feasibility(hungarian_t* prob); 116 | 117 | /* 118 | * computes and returns the benefit from the assignment. you must have 119 | * called hungarian_solve() first. 120 | */ 121 | double hungarian_benefit(hungarian_t* prob); 122 | 123 | #ifdef __cplusplus 124 | } 125 | #endif 126 | 127 | #endif 128 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/Makefile: -------------------------------------------------------------------------------- 1 | CC= g++ 2 | CFLAGS = -O3 3 | #CFLAGS = -ggdb 4 | 5 | INCS = `pkg-config --cflags opencv` 6 | LIBS = `pkg-config --libs opencv` 7 | 8 | OBJS = OpenCVUtils.o Region.o RegionsSingleImage.o EllipseR.o EllipsesSingleImage.o RectangleR.o RectanglesSingleImage.o Hungarian.o MatchPair.o Matching.o Results.o evaluate.o 9 | BIN = evaluate 10 | 11 | all : $(BIN) 12 | 13 | evaluate: $(OBJS) 14 | $(CC) $(LIBS) $(OBJS) -o $@ 15 | 16 | %.o:%.cpp 17 | $(CC) $(CFLAGS) $(INCS) -c $< 18 | 19 | %.cpp:%.hpp 20 | touch $@ 21 | 22 | Matching.hpp: RegionsSingleImage.hpp MatchPair.hpp 23 | touch $@ 24 | 25 | evaluate.cpp: RegionsSingleImage.hpp Matching.hpp common.hpp 26 | touch $@ 27 | 28 | RegionsSingleImage.hpp: common.hpp 29 | touch $@ 30 | 31 | clean: 32 | rm -f $(OBJS) $(BIN) 33 | 34 | tarFile: 35 | mkdir evaluation 36 | cp EllipseR.hpp EllipseR.cpp evaluation 37 | cp EllipsesSingleImage.hpp EllipsesSingleImage.cpp evaluation 38 | cp Hungarian.hpp Hungarian.cpp evaluation 39 | cp MatchPair.hpp MatchPair.cpp evaluation 40 | cp Matching.hpp Matching.cpp evaluation 41 | cp OpenCVUtils.hpp OpenCVUtils.cpp evaluation 42 | cp RectangleR.hpp RectangleR.cpp evaluation 43 | cp RectanglesSingleImage.hpp RectanglesSingleImage.cpp evaluation 44 | cp Region.hpp Region.cpp evaluation 45 | cp RegionsSingleImage.hpp RegionsSingleImage.cpp evaluation 46 | cp Results.hpp Results.cpp evaluation 47 | cp common.hpp evaluate.cpp evaluation 48 | cp runEvaluate.pl Makefile evaluation 49 | cp README.txt evaluation 50 | tar -czf evaluation.tgz evaluation 51 | rm -rf evaluation 52 | 53 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/MatchPair.cpp: -------------------------------------------------------------------------------- 1 | #include "MatchPair.hpp" 2 | 3 | MatchPair::MatchPair(Region *a, Region *b, double s) 4 | { 5 | r1=a; r2=b; score=s; 6 | } 7 | 8 | MatchPair::~MatchPair() 9 | { 10 | } 11 | 12 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/MatchPair.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __MATCHPAIR_HPP__ 2 | #define __MATCHPAIR_HPP__ 3 | 4 | #include "Region.hpp" 5 | 6 | /** 7 | * Specifies a pair for two regions as matched regions 8 | * */ 9 | class MatchPair{ 10 | public: 11 | // First region in the pair 12 | Region *r1; 13 | // Second region in the pair 14 | Region *r2; 15 | // Match score 16 | double score; 17 | // Constructor 18 | MatchPair(Region *a, Region *b, double s); 19 | // Destructor 20 | ~MatchPair(); 21 | }; 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/Matching.cpp: -------------------------------------------------------------------------------- 1 | #include "Matching.hpp" 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | using std::cerr; 8 | using std::endl; 9 | using std::vector; 10 | 11 | Matching::Matching(std::string s, RegionsSingleImage *a, RegionsSingleImage *d){ 12 | matchingAlgoStr = s; 13 | Matching(a, d); 14 | } 15 | 16 | Matching::Matching(RegionsSingleImage *a, RegionsSingleImage *d){ 17 | annot = a; 18 | det = d; 19 | pairWiseScores = NULL; 20 | } 21 | 22 | Matching::~Matching(){ 23 | // free memory for the score matrix 24 | clearPairWiseScores(); 25 | } 26 | 27 | double Matching::computeScore(Region *r1, Region *r2) 28 | { 29 | double score = (r1->setIntersect(r2)) / (r1->setUnion(r2)); 30 | return score; 31 | } 32 | 33 | void Matching::computePairWiseScores(){ 34 | int nAnnot = annot->length(); 35 | int nDet = det->length(); 36 | 37 | if(pairWiseScores == NULL) 38 | { 39 | // first-time access of the score matrix, so initialize it 40 | pairWiseScores = new vector *>; 41 | pairWiseScores->reserve(nAnnot); 42 | for(int ai=0; aipush_back(NULL); 44 | } 45 | 46 | for(int ai=0; aigetImage(); 50 | assert(im != NULL); 51 | IplImage *maskA = cvCreateImage(cvGetSize((IplImage *)im), IPL_DEPTH_8U, 1); 52 | cvSetZero(maskA); 53 | 54 | // Create the mask image corresponding to the annotated region 55 | Region *ar = annot->get(ai); 56 | maskA = ar->display(maskA, cvScalar(REGION_MASK_VALUE), CV_FILLED, NULL); 57 | ar->mask = maskA; 58 | 59 | vector *v; 60 | if( pairWiseScores->at(ai) != NULL) 61 | v = pairWiseScores->at(ai); 62 | else 63 | v = new vector(nDet, -1); 64 | 65 | for(int di=0; diget(di); 68 | if( dr->isValid() && v->at(di) == -1) 69 | { 70 | // Create the mask image corresponding to the detected region 71 | IplImage *maskD = cvCreateImage(cvGetSize((IplImage *)im), IPL_DEPTH_8U, 1); 72 | cvSetZero(maskD); 73 | maskD = dr->display(maskD, cvScalar(REGION_MASK_VALUE), CV_FILLED, NULL); 74 | dr->mask = maskD; 75 | v->at(di) = computeScore(ar, dr); 76 | cvReleaseImage(&maskD); 77 | dr->mask = NULL; 78 | } 79 | } 80 | pairWiseScores->at(ai) = v; 81 | 82 | cvReleaseImage(&maskA); 83 | ar->mask = NULL; 84 | } 85 | 86 | } 87 | 88 | void Matching::clearPairWiseScores(){ 89 | if(pairWiseScores == NULL) 90 | return; 91 | 92 | for(unsigned int ai=0; aisize(); ai++) 93 | delete(pairWiseScores->at(ai)); 94 | delete(pairWiseScores); 95 | } 96 | 97 | vector* Matching::runHungarian() 98 | { 99 | 100 | int nAnnot = annot->length(); 101 | int nDet = det->length(); 102 | 103 | 104 | // Remove the annotations with no matching detections 105 | int *mapI = (int *)calloc(nAnnot, sizeof(int)); 106 | int mI = 0; 107 | for(unsigned int i=0; i < nAnnot; i++) 108 | { 109 | double sum = 0; 110 | for(unsigned int j=0; j < nDet; j++) 111 | if(det->get(j)->isValid()) 112 | sum += pairWiseScores->at(i)->at(j); 113 | if(sum != 0) 114 | mapI[mI++] = i; 115 | } 116 | 117 | // Remove the detections with no matching annotations 118 | int *mapJ = (int *)calloc(nDet, sizeof(int)); 119 | int mJ = 0; 120 | for(unsigned int j=0; j < nDet; j++) 121 | { 122 | if(det->get(j)->isValid()) 123 | { 124 | double sum = 0; 125 | for(unsigned int i=0; i < nAnnot; i++) 126 | sum += pairWiseScores->at(i)->at(j); 127 | if(sum != 0) 128 | mapJ[mJ++] = j; 129 | } 130 | } 131 | 132 | int nRow, nCol; 133 | bool useTranspose = (mI > mJ); 134 | if(useTranspose) 135 | { 136 | nCol = mI; nRow = mJ; 137 | } 138 | else 139 | { 140 | nRow = mI; nCol = mJ; 141 | } 142 | 143 | // Initialize the match matrix used in the hungarian algorithm 144 | double **matchMat = (double **)calloc(nRow, sizeof(double *)); 145 | for(unsigned int i=0; i< nRow; i++){ 146 | matchMat[i] = (double *)calloc(nCol, sizeof(double)); 147 | } 148 | 149 | if(useTranspose) 150 | { 151 | for(unsigned int i=0; i< nRow; i++) 152 | for(unsigned int j=0; j< nCol; j++) 153 | matchMat[i][j] = pairWiseScores->at(mapI[j])->at(mapJ[i]); 154 | } 155 | else 156 | { 157 | for(unsigned int i=0; i< nRow; i++) 158 | for(unsigned int j=0; j< nCol; j++) 159 | matchMat[i][j] = pairWiseScores->at(mapI[i])->at(mapJ[j]); 160 | } 161 | 162 | hungarian_t prob; 163 | 164 | hungarian_init(&prob,matchMat,nRow,nCol,HUNGARIAN_MAX); 165 | //hungarian_init(&prob,matchMat,nAnnot,nDet,HUNGARIAN_MAX); 166 | //hungarian_print_rating(&prob); 167 | hungarian_solve(&prob); 168 | //hungarian_print_assignment(&prob); 169 | 170 | // Create the set of match pairs from the assignment matrix from the Hungarian algo 171 | vector *mps = NULL; 172 | if(hungarian_check_feasibility(&prob)) 173 | { 174 | mps = new vector; 175 | if(useTranspose) 176 | { 177 | for(unsigned int i=0; i < nRow; i++) 178 | for(unsigned int j=0; j < nCol; j++) 179 | { 180 | double score = pairWiseScores->at(mapI[j])->at(mapJ[i]); 181 | if(prob.a[i] == j && score > 0) 182 | { 183 | Region *dr = det->get(mapJ[i]); 184 | Region *ar = annot->get(mapI[j]); 185 | mps->push_back( new MatchPair(ar, dr, score) ); 186 | //ar->setValid(false); 187 | //dr->setValid(false); 188 | } 189 | } 190 | } 191 | else 192 | { 193 | for(unsigned int i=0; i < nRow; i++) 194 | { 195 | vector *pwsI = pairWiseScores->at(mapI[i]); 196 | for(unsigned int j=0; j < nCol; j++) 197 | { 198 | double score = pwsI->at(mapJ[j]); 199 | if(prob.a[i] == j && score > 0) 200 | { 201 | Region *dr = det->get(mapJ[j]); 202 | Region *ar = annot->get(mapI[i]); 203 | mps->push_back( new MatchPair(ar, dr, score) ); 204 | //ar->setValid(false); 205 | //dr->setValid(false); 206 | } 207 | } 208 | } 209 | } 210 | } 211 | else 212 | { 213 | cerr << "Not yet implemented" << endl; 214 | assert(false); 215 | } 216 | 217 | // free memory used by hungarian algorithm 218 | hungarian_fini(&prob); 219 | 220 | free(mapI); 221 | free(mapJ); 222 | for(unsigned int i=0; i* Matching::getMatchPairs() 230 | { 231 | computePairWiseScores(); 232 | return runHungarian(); 233 | } 234 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/Matching.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __MATCHING_HPP__ 2 | #define __MATCHING_HPP__ 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include "Region.hpp" 9 | #include "RegionsSingleImage.hpp" 10 | #include "MatchPair.hpp" 11 | #include "Results.hpp" 12 | #include "Hungarian.hpp" 13 | 14 | using std::vector; 15 | 16 | /** 17 | * Class that computes the matching between annotated and 18 | * detected regions 19 | * */ 20 | class Matching{ 21 | public: 22 | /// Name of the algorithm used for matching 23 | std::string matchingAlgoStr; 24 | /// Constructor 25 | Matching(RegionsSingleImage *, RegionsSingleImage *); 26 | /// Constructor 27 | Matching(std::string, RegionsSingleImage *, RegionsSingleImage *); 28 | /// Destructor 29 | ~Matching(); 30 | /// Compute the matching pairs. 31 | /// Returns a vector of MatchPair pointers 32 | vector * getMatchPairs(); 33 | 34 | private: 35 | /// Set of annotated regions 36 | RegionsSingleImage *annot; 37 | /// Set of detected regions 38 | RegionsSingleImage *det; 39 | /// Matrix of matching scores for annnotation and detections 40 | vector *> * pairWiseScores; 41 | 42 | /// Computes the score for a single pair of regions 43 | double computeScore(Region *, Region *); 44 | /// populate the pairWiseScores matrix 45 | void computePairWiseScores(); 46 | /// Free the memory for the pairWiseScores matrix 47 | void clearPairWiseScores(); 48 | /// Runs the Hungarian algorithm 49 | vector * runHungarian(); 50 | }; 51 | 52 | #endif 53 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/OpenCVUtils.cpp: -------------------------------------------------------------------------------- 1 | #ifndef __OPENCVUTILS_HPP__ 2 | #define __OPENCVUTILS_HPP__ 3 | 4 | #include "OpenCVUtils.hpp" 5 | 6 | using namespace std; 7 | 8 | void matPrint(string s, const CvArr *M){ 9 | assert(M != NULL); 10 | 11 | if(!s.empty()) 12 | cerr << s; 13 | 14 | CvTypeInfo *info = cvTypeOf(M); 15 | if(!strcmp(info->type_name, CV_TYPE_NAME_IMAGE)){ 16 | CvScalar s; 17 | IplImage *I = (IplImage *)M; 18 | for(int i=0; i< I->height; i++){ 19 | for(int j=0; j< I->width; j++){ 20 | s = cvGet2D(I,i,j); 21 | cerr << s.val[0] << " "; 22 | } 23 | cerr << endl; 24 | } 25 | }else if(!strcmp(info->type_name, CV_TYPE_NAME_MAT)){ 26 | CvMat *M1 = (CvMat *)M; 27 | for(int i=0; i< M1->height; i++){ 28 | for(int j=0; j< M1->width; j++) 29 | cerr << cvmGet(M1, i, j) << " "; 30 | cerr << endl; 31 | } 32 | }else{ 33 | assert(false); 34 | } 35 | } 36 | 37 | void matRotate(const CvArr * src, CvArr * dst, double angle){ 38 | float m[6]; 39 | //double factor = (cos(angle*CV_PI/180.) + 1.1)*3; 40 | double factor = 1; 41 | CvMat M = cvMat( 2, 3, CV_32F, m ); 42 | int w = ((CvMat *)src)->width; 43 | int h = ((CvMat *)src)->height; 44 | 45 | m[0] = (float)(factor*cos(-angle*CV_PI/180.)); 46 | m[1] = (float)(factor*sin(-angle*CV_PI/180.)); 47 | m[2] = (w-1)*0.5f; 48 | m[3] = -m[1]; 49 | m[4] = m[0]; 50 | m[5] = (h-1)*0.5f; 51 | 52 | cvGetQuadrangleSubPix( src, dst, &M); 53 | } 54 | 55 | void matCopyStuffed(const CvArr *src, CvArr *dst){ 56 | 57 | // TODO: get a flag for default value 58 | //double tMin, tMax; 59 | //cvMinMaxLoc(src, &tMin, &tMax); 60 | cvSet(dst, cvScalar(0)); 61 | CvMat *SMat = (CvMat *)src; 62 | CvMat *DMat = (CvMat *)dst; 63 | int sRow, dRow, sCol, dCol; 64 | 65 | if(SMat->rows >= DMat->rows){ 66 | sRow = (SMat->rows - DMat->rows)/2; 67 | dRow = 0; 68 | }else{ 69 | sRow = 0; 70 | dRow = (DMat->rows - SMat->rows)/2; 71 | } 72 | 73 | if(SMat->cols >= DMat->cols){ 74 | sCol = (SMat->cols - DMat->cols)/2; 75 | dCol = 0; 76 | }else{ 77 | sCol = 0; 78 | dCol = (DMat->cols - SMat->cols)/2; 79 | } 80 | 81 | //cerr << "src start " << sRow << " " << sCol << " dst " << dRow << " " << dCol << endl; 82 | 83 | /* 84 | for(int di =0; di < dRow; di++) 85 | for(int dj = 0; (dj < DMat->cols) && (dj < SMat->cols) ; dj++) 86 | cvmSet(DMat, di, dj, cvmGet(SMat, sRow, dj)); 87 | 88 | for(int dj =0; dj < dCol; dj++) 89 | for(int di = 0; (di < DMat->rows) && (di < SMat->rows) ; di++) 90 | cvmSet(DMat, di, dj, cvmGet(SMat, di, sCol)); 91 | */ 92 | 93 | for( int si = sRow, di = dRow ; (sirows && dirows); si++, di++) 94 | for( int sj = sCol, dj = dCol ; (sjcols && djcols); sj++, dj++) 95 | cvmSet(DMat, di, dj, cvmGet(SMat, si, sj)); 96 | 97 | } 98 | 99 | void matNormalize(const CvArr * src, CvArr *dst, double minVal, double maxVal){ 100 | double tMin, tMax; 101 | cvMinMaxLoc(src, &tMin, &tMax); 102 | double scaleFactor = (maxVal-minVal)/(tMax-tMin); 103 | cvSubS(src, cvScalar(tMin), dst); 104 | cvConvertScale(dst, dst, scaleFactor, minVal); 105 | } 106 | 107 | double matMedian(const CvArr *M){ 108 | 109 | int starti=0, startj=0, height, width; 110 | CvTypeInfo *info = cvTypeOf(M); 111 | if(!strcmp(info->type_name, CV_TYPE_NAME_IMAGE)){ 112 | CvRect r = cvGetImageROI((IplImage *)M); 113 | height = r.height; 114 | width = r.width; 115 | startj = r.x; 116 | starti = r.y; 117 | }else if(!strcmp(info->type_name, CV_TYPE_NAME_MAT)){ 118 | height = ((CvMat *)M)->height; 119 | width = ((CvMat *)M)->width; 120 | }else{ 121 | assert(false); 122 | } 123 | 124 | // push elements into a vector 125 | vector v; 126 | for(int i=0; i< height; i++) 127 | for(int j=0; jtype_name, CV_TYPE_NAME_IMAGE)){ 153 | I1 = (IplImage *)M; 154 | }else if(!strcmp(info->type_name, CV_TYPE_NAME_MAT)){ 155 | CvMat *M2 = cvCloneMat((CvMat *)M); 156 | matNormalize(M, M2, 0, 255); 157 | double tMin, tMax; 158 | cvMinMaxLoc(M2, &tMin, &tMax); 159 | I1 = cvCreateImage(cvGetSize(M2), IPL_DEPTH_8U,1); 160 | cvConvertScale(M2, I1); 161 | }else{ 162 | assert(false); 163 | } 164 | 165 | IplImage *I = cvCreateImage(cvSize(height, width), I1->depth,1); 166 | cvResize(I1, I); 167 | cvNamedWindow(s, 0); 168 | cvMoveWindow(s, 100, 400); 169 | cvShowImage(s, I); 170 | cvWaitKey(0); 171 | cvDestroyWindow(s); 172 | cvReleaseImage(&I); 173 | cvReleaseImage(&I1); 174 | } 175 | 176 | IplImage *readImage(const char *fileName, int useColorImage){ 177 | 178 | #ifdef _WIN32 179 | IplImage *img = cvLoadImage(fileName, useColorImage); 180 | #else 181 | // check the extension for jpg files; OpenCV has issues with reading jpg files. 182 | int randInt = rand(); 183 | char randIntStr[128]; 184 | sprintf(randIntStr, "%d", randInt); 185 | 186 | string tmpPPMFile("cacheReadImage"); 187 | tmpPPMFile += randIntStr; 188 | tmpPPMFile += ".ppm"; 189 | 190 | string sysCommand = "convert "; 191 | sysCommand += fileName; 192 | sysCommand += " " + tmpPPMFile; 193 | system(sysCommand.c_str()); 194 | 195 | IplImage *img = cvLoadImage(tmpPPMFile.c_str(), useColorImage); 196 | if(img == NULL) 197 | { 198 | cerr << " Could not read image" << endl; 199 | } 200 | 201 | sysCommand = "rm -f "; 202 | sysCommand += tmpPPMFile; 203 | system(sysCommand.c_str()); 204 | #endif 205 | return img; 206 | } 207 | 208 | #endif 209 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/OpenCVUtils.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __OPENCVUTILS_H_ 2 | #define __OPENCVUTILS_H_ 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #include "common.hpp" 10 | #ifndef __XCODE__ 11 | #include "cv.h" 12 | #include "highgui.h" 13 | #else 14 | #include 15 | #endif 16 | 17 | // matPrint(prefixString, M) 18 | void matPrint(std::string, const CvArr *); 19 | 20 | double matMedian(const CvArr *M); 21 | 22 | void matRotate(const CvArr *src, CvArr *dst, double); 23 | 24 | void matCopyStuffed(const CvArr *src, CvArr *dst); 25 | 26 | void matNormalize(CvArr *, CvArr *, double, double); 27 | 28 | // showImage(titleString, M) 29 | void showImage(std::string, const CvArr *); 30 | 31 | // showImageSc(titleString, M), like imagesc in MATLAB 32 | void showImageSc(std::string, const CvArr *, int width, int height); 33 | 34 | IplImage *readImage(const char *fileName, int useColorImage); 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/README.txt: -------------------------------------------------------------------------------- 1 | FACE DETECTION EVALUATION 2 | ------------------------- 3 | 4 | Author: Vidit Jain < vidit@cs.umass.edu > 5 | 6 | This document describes the face detection evaluation toolkit developed as 7 | part of the FDDB benchmark ( http://vis-www.cs.umass.edu/fddb/ ). This 8 | source-code can be used as long as the following reference is cited: 9 | 10 | Vidit Jain and Erik Learned-Miller. FDDB: A benchmark for Face Detection in 11 | Unconstrained Settings. Technical Report. University of Massachusetts Amherst. 2010. 12 | 13 | Bibtex entry: 14 | 15 | @TECHREPORT{fddbTechReport, 16 | author = {Jain, Vidit and Learned-Miller, Erik}, 17 | title = {FDDB: A benchmark for Face Detection in Unconstrained Settings.}, 18 | institution = {University of Massachusetts Amherst}, 19 | year = {2010} 20 | } 21 | 22 | 23 | Compiling the evaluation code (C++): 24 | ------------------------------------ 25 | 26 | 1. Requires OpenCV library (http://sourceforge.net/projects/opencvlibrary/) 27 | 28 | 2. If the utility 'pkg-config' is not available for your operating system, 29 | edit the Makefile to manually specify the OpenCV flags as following: 30 | INCS = -I/usr/local/include/opencv 31 | LIBS = -L/usr/local/lib -lcxcore -lcv -lhighgui -lcvaux -lml 32 | 33 | 3. The project is compiled by running 'make' in the project directory. 34 | 35 | 4. Known issue with OpenCV: 36 | 37 | There is an issue with reading some JPG files using cvLoadImage in OpenCV. 38 | To avoid this issue in this software, the system utility "convert" is used 39 | to convert a JPG file to a temporary PPM file, which is then read using OpenCV. 40 | 41 | If you are certain that the OpenCV cvLoadImage works fine on your machine, 42 | uncomment line 15 in common.hpp to avoid the expensive conversion to PPM files. 43 | Alternatively, convert all the .jpg files to .ppm and modify the common.hpp 44 | to use ".ppm" for the __IMAGE_FORMAT__ 45 | 46 | 47 | Usage for the evaluation binary: 48 | ------------------------------ 49 | 50 | ./evaluate [OPTIONS] 51 | -h : print usage 52 | -a fileName : file with face annotations (default: ellipseList.txt) 53 | -d fileName : file with detections (default: faceList.txt) 54 | -f format : representation of faces in the detection file (default: 0) 55 | [ 0 (rectangle), 1 (ellipse), or 2 (pixels) ] 56 | -i dirName : directory where the original images are stored 57 | (default: ~/scratch/Data/facesInTheWild/) 58 | -l fileName : file with list of images to be evaluated (default: temp.txt) 59 | -r fileName : prefix for files to store the ROC curves (default: temp) 60 | -s : display the matching detection-annotation pairs. 61 | -z imageFormat : image format used for reading images for the annotation set 62 | (default: .jpg ) 63 | 64 | 65 | Perl wrapper for FDDB evaluation: 66 | --------------------------------- 67 | Requires: GNUPLOT 68 | 69 | The wrapper 'runEvaluate.pl' executes the following in a sequence: 70 | 71 | 1. reads the detection output for different folds from a directory 72 | 2. reads the annotations from a file 73 | 3. performs the evaluation 74 | 4. use GNUplot to create the discrete and continuous versions of ROC curves. 75 | 76 | Edit the Perl code to modify the following variables: 77 | 1. $GNUPLOT -- path to gnuplot 78 | 2. $evaluateBin -- the evaluation binary compiled as above 79 | 3. $imDir -- where the image files are stored 80 | 4. $fddbDir -- where the FDDB folds are stored 81 | 5. $detDir -- the directory containing detection results for different folds. In this 82 | directory, the outputs for different folds are expected to be in files 83 | 'fold-%02d-out.txt' 84 | 6. $detFormat -- the specification for the detection output (See -f option for the evaluation binary) 85 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/RectangleR.cpp: -------------------------------------------------------------------------------- 1 | #include "RectangleR.hpp" 2 | #ifndef __XCODE__ 3 | #include 4 | #endif 5 | 6 | #include 7 | using std::vector; 8 | 9 | RectangleR::RectangleR(IplImage *I, vector *v) : Region(I){ 10 | x = v->at(0); 11 | y = v->at(1); 12 | w = v->at(2); 13 | h = v->at(3); 14 | detScore = v->at(4); 15 | } 16 | 17 | IplImage *RectangleR::display(IplImage *mask, CvScalar color, int lineWidth, const char *text){ 18 | // Draw the rectangle 19 | cvRectangle(mask, cvPointFrom32f(cvPoint2D32f(x, y)), cvPointFrom32f(cvPoint2D32f(x+w, y+h)), color, lineWidth); 20 | 21 | if(text != NULL){ 22 | // Add text 23 | CvFont font; 24 | cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0, 0, 1, CV_AA); 25 | cvPutText(mask, text, cvPointFrom32f(cvPoint2D32f(x, y)), &font, color); 26 | } 27 | return mask; 28 | } 29 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/RectangleR.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __RECTANGLE_HPP__ 2 | #define __RECTANGLE_HPP__ 3 | 4 | #include "Region.hpp" 5 | #include 6 | 7 | #ifndef __XCODE__ 8 | #include 9 | #endif 10 | 11 | /** 12 | * Specification of a rectangular region 13 | * */ 14 | class RectangleR : public Region{ 15 | private: 16 | /// x-position of the left-top corner 17 | double x; 18 | /// y-position of the left-top corner 19 | double y; 20 | /// width 21 | double w; 22 | /// height 23 | double h; 24 | public: 25 | /// Constructor 26 | RectangleR(IplImage *, std::vector *); 27 | /// Method to add this rectangle of a given color and 28 | /// line width to an image. If the 29 | /// last parameter is not NULL, display the text also. 30 | virtual IplImage *display(IplImage *, CvScalar color, int lineWidth, const char *text); 31 | }; 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/RectanglesSingleImage.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | #include "OpenCVUtils.hpp" 7 | #include "RectanglesSingleImage.hpp" 8 | 9 | #ifndef __XCODE__ 10 | #include 11 | #include 12 | #endif 13 | 14 | using std::string; 15 | using std::vector; 16 | using std::ifstream; 17 | using std::stringstream; 18 | 19 | RectanglesSingleImage::RectanglesSingleImage(string fName) : RegionsSingleImage(fName) 20 | { 21 | } 22 | 23 | RectanglesSingleImage::RectanglesSingleImage(IplImage *I) : RegionsSingleImage(I) 24 | { 25 | } 26 | 27 | RectanglesSingleImage::~RectanglesSingleImage() 28 | { 29 | } 30 | 31 | void RectanglesSingleImage::read(string rectFile) 32 | { 33 | 34 | ifstream fin(rectFile.c_str()); 35 | if(fin.is_open()){ 36 | double x,y,w,h, sc; 37 | 38 | while(fin >> x >> y >> w >> h >> sc){ 39 | vector *r = new vector(5); 40 | double myarray [] = {x,y,w,h,sc}; 41 | r->insert (r->begin(), myarray, myarray+5); 42 | RectangleR *rect = new RectangleR(NULL, r); 43 | delete(r); 44 | list->push_back( (Region *)rect ); 45 | } 46 | }else{ 47 | std::cerr << "Could not open file " << rectFile << std::endl; 48 | assert(false); 49 | } 50 | fin.close(); 51 | } 52 | 53 | void RectanglesSingleImage::read(ifstream &fin, int n) 54 | { 55 | 56 | for(int i=0; i> x >> y >> w >> h >> sc; 63 | 64 | vector *r = new vector(5); 65 | double myarray [] = {x,y,w,h, sc}; 66 | r->insert (r->begin(), myarray, myarray+5); 67 | RectangleR *rect = new RectangleR(NULL, r); 68 | delete(r); 69 | list->push_back( (Region *)rect ); 70 | } 71 | } 72 | 73 | void RectanglesSingleImage::show(){ 74 | IplImage *mask = cvCreateImage(cvGetSize(im), im->depth, im->nChannels); 75 | cvCopy(im, mask, 0); 76 | for(unsigned int i=0; isize(); i++){ 77 | ((RectangleR *)(list->at(i)))->display(mask, CV_RGB(255,0,0), 3, NULL); 78 | } 79 | 80 | showImage("Rectangles", mask); 81 | cvReleaseImage(&mask); 82 | } 83 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/RectanglesSingleImage.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __RECTANGLESSINGLEIMAGE_HPP__ 2 | #define __RECTANGLESSINGLEIMAGE_HPP__ 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #ifndef __XCODE__ 9 | #include 10 | #endif 11 | #include "RegionsSingleImage.hpp" 12 | #include "RectangleR.hpp" 13 | 14 | /** 15 | * Specifies a set of rectangular regions for an image 16 | * */ 17 | class RectanglesSingleImage : public RegionsSingleImage{ 18 | 19 | public: 20 | /// Constructor: read an image from a file 21 | RectanglesSingleImage(std::string); 22 | /// Constructor: intialize the image for this set of ellipses as I 23 | RectanglesSingleImage(IplImage *); 24 | /// Destructor 25 | ~RectanglesSingleImage(); 26 | /// Read the annotaion from the file fName 27 | virtual void read(std::string); 28 | /// Read N annotaion from the file stream fs 29 | virtual void read(std::ifstream &, int); 30 | /// Display all ellipses 31 | virtual void show(); 32 | }; 33 | 34 | #endif 35 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/Region.cpp: -------------------------------------------------------------------------------- 1 | #include "Region.hpp" 2 | 3 | //#define REGION_DEBUG 4 | 5 | #include "OpenCVUtils.hpp" 6 | 7 | #ifdef REGION_DEBUG 8 | #include 9 | using std::cout; 10 | using std::cerr; 11 | using std::endl; 12 | #endif 13 | 14 | Region::Region(IplImage *I){ 15 | // TODO: make sure this image is a mask images 16 | mask = I; 17 | valid = true; 18 | } 19 | 20 | Region::~Region(){ 21 | if(mask != NULL) 22 | cvReleaseImage(&mask); 23 | } 24 | 25 | void Region::setValid(bool v){ 26 | valid = v; 27 | } 28 | 29 | bool Region::isValid(){ 30 | return valid; 31 | } 32 | 33 | double Region::setIntersect(Region *r){ 34 | //TODO: check if mask and r->mask are compatible 35 | IplImage *temp = cvCreateImage(cvGetSize(mask), mask->depth, mask->nChannels); 36 | cvSetZero(temp); 37 | cvAnd(mask, r->mask, temp); 38 | int nNZ = cvCountNonZero(temp); 39 | double areaDbl = (double) nNZ; 40 | 41 | #ifdef REGION_DEBUG 42 | showImage("Mask Intersect", temp); 43 | cout << "Intersect " << areaDbl << endl; 44 | #endif 45 | cvReleaseImage(&temp); 46 | 47 | return areaDbl; 48 | } 49 | 50 | double Region::setUnion(Region *r){ 51 | //TODO:i check if mask and r->mask are compatible 52 | IplImage *temp = cvCreateImage(cvGetSize(mask), mask->depth, mask->nChannels); 53 | cvSetZero(temp); 54 | cvOr(mask, r->mask, temp); 55 | int nNZ = cvCountNonZero(temp); 56 | double areaDbl = (double) nNZ; 57 | 58 | #ifdef REGION_DEBUG 59 | cvConvertScale(temp, temp, 255/REGION_MASK_VALUE, 0); 60 | showImage("Mask Union", temp); 61 | cout << "Union " << areaDbl << " " << nNZ << endl; 62 | #endif 63 | cvReleaseImage(&temp); 64 | 65 | return areaDbl; 66 | } 67 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/Region.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __REGION_HPP__ 2 | #define __REGION_HPP__ 3 | 4 | #define REGION_MASK_VALUE 10 5 | 6 | #include "common.hpp" 7 | 8 | #ifdef __XCODE__ 9 | #include 10 | #else 11 | #include 12 | #endif 13 | 14 | /** 15 | * Abstract class for the specification of a region 16 | * */ 17 | class Region{ 18 | private: 19 | /// Flag to specify if this region should be used 20 | bool valid; 21 | 22 | public: 23 | /// Image used for display and set operations 24 | IplImage *mask; 25 | /// Score assigned by an external detector 26 | double detScore; 27 | /// Constructor 28 | Region(IplImage *I); 29 | /// Destructor 30 | ~Region(); 31 | 32 | /// Returns if the region is valid for use 33 | bool isValid(); 34 | /// Assigns the validity flag 35 | void setValid(bool); 36 | /// Computes the set-intersection between this->mask and r->mask 37 | double setIntersect(Region *r); 38 | /// Computes the set-union between this->mask and r->mask 39 | double setUnion(Region *r); 40 | /// Display this region -- Not implemented in this abstract class 41 | virtual IplImage *display(IplImage *, CvScalar color, int lineWidth, const char *text) =0; 42 | }; 43 | 44 | #endif 45 | 46 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/RegionsSingleImage.cpp: -------------------------------------------------------------------------------- 1 | #include "RegionsSingleImage.hpp" 2 | 3 | #include 4 | #include 5 | 6 | using std::vector; 7 | using std::cerr; 8 | using std::cout; 9 | using std::endl; 10 | 11 | RegionsSingleImage::RegionsSingleImage(std::string fName){ 12 | #ifdef __CVLOADIMAGE_WORKING__ 13 | //std::string a = fName.c_str(); 14 | im = cvLoadImage(fName.c_str(), CV_LOAD_IMAGE_COLOR); 15 | #else 16 | im = readImage(fName.c_str(), CV_LOAD_IMAGE_COLOR); 17 | #endif 18 | if(im == NULL) 19 | { 20 | cerr << "Could not read image from " << fName << endl; 21 | assert(false); 22 | } 23 | list = new std::vector; 24 | } 25 | 26 | RegionsSingleImage::RegionsSingleImage(IplImage *I) 27 | { 28 | assert(I != NULL); 29 | im = cvCreateImage(cvGetSize(I), I->depth, I->nChannels); 30 | cvCopy(I, im, 0); 31 | list = new std::vector; 32 | } 33 | 34 | RegionsSingleImage::~RegionsSingleImage() 35 | { 36 | if(list) 37 | for(unsigned int i=0; i< list->size(); i++) 38 | if(list->at(i)) 39 | delete(list->at(i)); 40 | delete(list); 41 | cvReleaseImage(&im); 42 | } 43 | 44 | unsigned int RegionsSingleImage::length() 45 | { 46 | return (unsigned int)(list->size()); 47 | } 48 | 49 | Region * RegionsSingleImage::get(int i) 50 | { 51 | return list->at(i); 52 | } 53 | 54 | void RegionsSingleImage::set(int i, Region *r) 55 | { 56 | list->at(i) = r; 57 | } 58 | 59 | const IplImage *RegionsSingleImage::getImage(){ 60 | return (const IplImage *)im; 61 | } 62 | 63 | std::vector * RegionsSingleImage::getUniqueScores(){ 64 | vector *v = new vector; 65 | v->reserve(list->size()); 66 | for(unsigned int i=0; isize(); i++) 67 | v->push_back(list->at(i)->detScore); 68 | 69 | sort(v->begin(), v->end()); 70 | vector::iterator uniElem = unique(v->begin(), v->end()); 71 | v->erase(uniElem, v->end()); 72 | return v; 73 | } 74 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/RegionsSingleImage.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __REGIONSSINGLEIMAGE_HPP__ 2 | #define __REGIONSSINGLEIMAGE_HPP__ 3 | 4 | #include 5 | #include 6 | 7 | #include "common.hpp" 8 | 9 | #ifndef __XCODE__ 10 | #include 11 | #endif 12 | 13 | #include 14 | #include 15 | #include "Region.hpp" 16 | #include "OpenCVUtils.hpp" 17 | 18 | using std::cout; 19 | using std::cerr; 20 | using std::endl; 21 | using std::vector; 22 | 23 | /** 24 | * Abstract class that specifies a set of regions for an image 25 | * */ 26 | class RegionsSingleImage{ 27 | protected: 28 | /// Image associated with this set of regions 29 | IplImage *im; 30 | /// Vector to hold the list of regions 31 | std::vector *list; 32 | public: 33 | /// Constructor: read an image from a file 34 | RegionsSingleImage(std::string fName); 35 | /// Constructor: intialize the image for this set of ellipses as I 36 | RegionsSingleImage(IplImage *I); 37 | /// Destructor 38 | ~RegionsSingleImage(); 39 | 40 | /// Read the annotaion from the file fName -- Pure virtual 41 | virtual void read(std::string)=0; 42 | /// Read N annotaion from the file stream fs -- Pure virtual 43 | virtual void read(std::ifstream &, int)=0; 44 | /// Display all ellipses -- Pure virtual 45 | virtual void show() =0; 46 | 47 | /// Returns the number of regions 48 | unsigned int length(); 49 | /// Returns the pointer to the i-th region 50 | Region *get(int i); 51 | /// Adds the region r at the i-th position in the list 52 | void set(int i, Region *r); 53 | /// Returns a const pointer to the image associated with this set of regions 54 | const IplImage *getImage(); 55 | /// Returns the set of unique detection scores for the regions in this set 56 | std::vector *getUniqueScores(); 57 | }; 58 | 59 | #endif 60 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/Results.cpp: -------------------------------------------------------------------------------- 1 | #include "Results.hpp" 2 | 3 | #include 4 | #include 5 | 6 | using std::endl; 7 | using std::ofstream; 8 | 9 | #ifndef _WIN32 10 | #include 11 | #endif 12 | 13 | Results::Results(){ 14 | } 15 | 16 | Results::Results(Results *r){ 17 | if(r) 18 | { 19 | N = r->N; 20 | TPCont = r->TPCont; 21 | TPDisc = r->TPDisc; 22 | FP = r->FP; 23 | scoreThreshold = r->scoreThreshold; 24 | } 25 | } 26 | 27 | Results::Results(Results *r, int N2) 28 | { 29 | if(r) 30 | { 31 | N = r->N + N2; 32 | TPCont = r->TPCont; 33 | TPDisc = r->TPDisc; 34 | FP = r->FP; 35 | scoreThreshold = r->scoreThreshold; 36 | } 37 | } 38 | 39 | Results::Results(Results *r1, Results *r2){ 40 | N = 0; TPDisc = 0; TPCont = 0; FP =0; 41 | #ifdef _WIN32 42 | scoreThreshold = 1e20; 43 | #else 44 | scoreThreshold = std::numeric_limits::max(); 45 | #endif 46 | 47 | if(r1) 48 | { 49 | N += r1->N; 50 | TPCont += r1->TPCont; 51 | TPDisc += r1->TPDisc; 52 | FP += r1->FP; 53 | if(r1->scoreThreshold < scoreThreshold) 54 | scoreThreshold = r1->scoreThreshold; 55 | } 56 | 57 | if(r2) 58 | { 59 | N += r2->N; 60 | TPCont += r2->TPCont; 61 | TPDisc += r2->TPDisc; 62 | FP += r2->FP; 63 | if(r2->scoreThreshold < scoreThreshold) 64 | scoreThreshold = r2->scoreThreshold; 65 | } 66 | } 67 | 68 | Results::Results(string s, double scoreThresh, vector *mp, RegionsSingleImage *annot, RegionsSingleImage *det){ 69 | imName = s; 70 | scoreThreshold = scoreThresh; 71 | 72 | N = annot->length(); 73 | 74 | FP = 0; 75 | for(unsigned int i=0; i< det->length(); i++) 76 | if( (det->get(i))->isValid() ) 77 | FP++; 78 | 79 | TPCont = 0; 80 | TPDisc = 0; 81 | if(mp) 82 | for(unsigned int i=0; i< mp->size(); i++){ 83 | double score = mp->at(i)->score; 84 | TPCont += score; 85 | if( score>0.5 ) 86 | { 87 | TPDisc++; 88 | FP--; 89 | } 90 | } 91 | 92 | } 93 | 94 | vector * Results::merge(vector *rv1, vector *rv2){ 95 | 96 | vector *mergeV = new vector; 97 | unsigned int n1 = 0; 98 | if(rv1) 99 | n1 = rv1->size(); 100 | unsigned int n2 = 0; 101 | if(rv2) 102 | n2 = rv2->size(); 103 | 104 | unsigned int nAnnot1=0, nAnnot2=0; 105 | 106 | if(n1) 107 | { 108 | nAnnot1 = rv1->at(0)->getN(); 109 | if(n2) 110 | nAnnot2 = rv2->at(0)->getN(); 111 | 112 | unsigned int i1=0, i2=0; 113 | double score1, score2; 114 | 115 | Results *r1 = NULL; 116 | Results *r2 = NULL; 117 | 118 | while(i1 < n1) 119 | { 120 | r1 = rv1->at(i1); 121 | score1 = rv1->at(i1)->scoreThreshold; 122 | if(i2 < n2) 123 | { 124 | r2 = rv2->at(i2); 125 | score2 = rv2->at(i2)->scoreThreshold; 126 | Results *newR = new Results(r1,r2); 127 | mergeV->push_back( newR ); 128 | if(score1 < score2) 129 | { 130 | i1++; 131 | } 132 | else if(score1 == score2) 133 | { 134 | i1++; 135 | i2++; 136 | } 137 | else 138 | { 139 | i2++; 140 | } 141 | } 142 | else 143 | { 144 | while(i1 < n1) 145 | { 146 | // add from rv1 147 | r1 = rv1->at(i1); 148 | 149 | Results *newR = new Results(r1,nAnnot2); 150 | mergeV->push_back( newR ); 151 | i1++; 152 | } 153 | } 154 | } 155 | 156 | while(i2 < n2) 157 | { 158 | // add from rv2 159 | r2 = rv2->at(i2); 160 | Results *newR = new Results(r2, nAnnot1); 161 | mergeV->push_back( newR ); 162 | i2++; 163 | } 164 | } 165 | else 166 | { 167 | if(n2) 168 | { 169 | for(unsigned int i=0; i< n2; i++) 170 | mergeV->push_back(new Results(rv2->at(i))); 171 | } 172 | } 173 | return mergeV; 174 | } 175 | 176 | void Results::print(std::ostream &os){ 177 | os << imName << " Threshold = " << scoreThreshold << " N = " << N << " TP cont = " << TPCont << " TP disc = " << TPDisc << " FP = " << FP << endl; 178 | } 179 | 180 | void Results::saveROC(string outFile, vector *rv){ 181 | string s = outFile + "ContROC.txt"; 182 | ofstream osc(s.c_str()); 183 | 184 | s = outFile + "DiscROC.txt"; 185 | ofstream osd(s.c_str()); 186 | 187 | for(unsigned int i=0; i< rv->size(); i++) 188 | { 189 | Results *r = rv->at(i); 190 | if(r->N) 191 | { 192 | osc << (r->TPCont / r->N) << " " << r->FP << endl; 193 | osd << (r->TPDisc / r->N) << " " << r->FP << " " << r->scoreThreshold<< endl; 194 | } 195 | else 196 | { 197 | osc << "0 0" << endl; 198 | osd << "0 0 " << r->scoreThreshold<< endl; 199 | } 200 | } 201 | osc.close(); 202 | osd.close(); 203 | } 204 | 205 | unsigned int Results::getN() 206 | { 207 | return N; 208 | } 209 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/Results.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __RESULTS_HPP__ 2 | #define __RESULTS_HPP__ 3 | 4 | #include 5 | #include 6 | #include 7 | #include "MatchPair.hpp" 8 | #include "RegionsSingleImage.hpp" 9 | 10 | using std::vector; 11 | using std::string; 12 | 13 | /** 14 | * Specifies the cumulative result statistics 15 | * */ 16 | class Results{ 17 | private: 18 | /// number of annotated regions (TP+FN) 19 | unsigned int N; 20 | /// threshold used for computing this result 21 | double scoreThreshold; 22 | /// True positives -- continuous 23 | double TPCont; 24 | /// True positives -- discrete 25 | double TPDisc; 26 | /// False positives -- discrete 27 | double FP; 28 | /// Name of the image 29 | string imName; 30 | 31 | public: 32 | /// Constructor 33 | Results(); 34 | /// Constructor -- copy the contents of *r 35 | Results(Results *r); 36 | /// Constructor -- copy the contents of *r and add N2 to N 37 | Results(Results *r, int N2); 38 | /// Constructor -- merge r1 and r2 39 | Results(Results *r1, Results *r2); 40 | /// Constructor 41 | Results(string imName, double threshold, vector *matchPairs, RegionsSingleImage *annot, RegionsSingleImage *det); 42 | /// Return a vector of results with combined statistics from the two 43 | /// vectors rv1 and rv2 44 | vector * merge(vector *rv1, vector *rv2); 45 | /// print this result into the ostream os 46 | void print(std::ostream &os); 47 | /// save the ROC curve computed from rv into the file outFile 48 | void saveROC(string outFile, vector *rv); 49 | 50 | /// get N 51 | unsigned int getN(); 52 | }; 53 | 54 | #endif 55 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/common.hpp: -------------------------------------------------------------------------------- 1 | #ifndef __COMMON_HPP__ 2 | #define __COMMON_HPP__ 3 | 4 | //#define __XCODE__ 5 | 6 | #ifdef _WIN32 7 | 8 | #define __IMAGE_FORMAT__ ".jpg" 9 | #define __CVLOADIMAGE_WORKING__ 10 | 11 | #else 12 | // __CVLOADIMAGE_WORKING__ should not be defined for ".jpg" format 13 | #define __IMAGE_FORMAT__ ".jpg" 14 | //#define __IMAGE_FORMAT__ ".ppm" 15 | #define __CVLOADIMAGE_WORKING__ 16 | 17 | #endif 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/evaluation/runEvaluate.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | 3 | use strict; 4 | 5 | #### VARIABLES TO EDIT #### 6 | # where gnuplot is 7 | my $GNUPLOT = "/sw/bin/gnuplot"; 8 | # where the binary is 9 | my $evaluateBin = "evaluate"; 10 | # where the images are 11 | my $imDir = "facesInTheWild/"; 12 | # where the folds are 13 | my $fddbDir = "FDDB-folds"; 14 | # where the detections are 15 | my $detDir = "yourDetectionOutputDirectory"; 16 | ########################### 17 | 18 | my $detFormat = 0; # 0: rectangle, 1: ellipse 2: pixels 19 | 20 | sub makeGNUplotFile 21 | { 22 | my $rocFile = shift; 23 | my $gnuplotFile = shift; 24 | my $title = shift; 25 | my $pngFile = shift; 26 | 27 | open(GF, ">$gnuplotFile") or die "Can not open $gnuplotFile for writing\n"; 28 | #print GF "$GNUPLOT\n"; 29 | print GF "set term png\n"; 30 | print GF "set size .75,1\n"; 31 | print GF "set output \"$pngFile\"\n"; 32 | #print GF "set xtics 500\n"; 33 | #print GF "set logscale x\n"; 34 | print GF "set ytics .1\n"; 35 | print GF "set grid\n"; 36 | #print GF "set size ratio -1\n"; 37 | print GF "set ylabel \"True positive rate\"\n"; 38 | print GF "set xlabel \"False positives\"\n"; 39 | #print GF "set xr [0:50000]\n"; 40 | print GF "set yr [0:1]\n"; 41 | print GF "set key right bottom\n"; 42 | print GF "plot \"$rocFile\" using 2:1 with linespoints title \"$title\"\n"; 43 | close(GF); 44 | } 45 | 46 | my $annotFile = "ellipseList.txt"; 47 | my $listFile = "imList.txt"; 48 | my $gpFile = "createROC.p"; 49 | 50 | # read all the folds into a single file for evaluation 51 | my $detFile = $detDir; 52 | $detFile =~ s/\//_/g; 53 | $detFile = $detFile."Dets.txt"; 54 | 55 | if(-e $detFile){ 56 | system("rm", $detFile); 57 | } 58 | 59 | if(-e $listFile){ 60 | system("rm", $listFile); 61 | } 62 | 63 | if(-e $annotFile){ 64 | system("rm", $annotFile); 65 | } 66 | 67 | foreach my $fi (1..10){ 68 | my $foldFile = sprintf("%s/fold-%02d-out.txt", $detDir, $fi); 69 | system("cat $foldFile >> $detFile"); 70 | $foldFile = sprintf("%s/FDDB-fold-%02d.txt", $fddbDir, $fi); 71 | system("cat $foldFile >> $listFile"); 72 | $foldFile = sprintf("%s/FDDB-fold-%02d-ellipseList.txt", $fddbDir, $fi); 73 | system("cat $foldFile >> $annotFile"); 74 | } 75 | 76 | #die; 77 | # run the actual evaluation code to obtain different points on the ROC curves 78 | #system($evaluateBin, "-a", $annotFile, "-d", $detFile, "-f", $detFormat, "-i", $imDir, "-l", $listFile, "-r", $detDir, "-s"); 79 | system($evaluateBin, "-a", $annotFile, "-d", $detFile, "-f", $detFormat, "-i", $imDir, "-l", $listFile, "-r", $detDir); 80 | 81 | # plot the two ROC curves using GNUplot 82 | makeGNUplotFile($detDir."ContROC.txt", $gpFile, $detDir, $detDir."ContROC.png"); 83 | system("echo \"load '$gpFile'\" | $GNUPLOT"); 84 | 85 | makeGNUplotFile($detDir."DiscROC.txt", $gpFile, $detDir, $detDir."DiscROC.png"); 86 | system("echo \"load '$gpFile'\" | $GNUPLOT"); 87 | 88 | # remove intermediate files 89 | system("rm", $annotFile, $listFile, $gpFile, $detFile); 90 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/face_detection/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/FDDB_evaluation/face_detection/.DS_Store -------------------------------------------------------------------------------- /result/FDDB_evaluation/face_detection/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.6) 2 | project(face_detection) 3 | 4 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 5 | 6 | find_package(Caffe) 7 | include_directories(${Caffe_INCLUDE_DIRS}) 8 | 9 | set(SOURCE_FILES main.cpp ../../../detection/MTCNN.cpp ../../../detection/MTCNN.h fddb_detection.cpp fddb_detection.h GenSample.cpp GenSample.h) 10 | add_executable(face_detection ${SOURCE_FILES}) 11 | 12 | target_link_libraries(face_detection ${Caffe_LIBRARIES}) -------------------------------------------------------------------------------- /result/FDDB_evaluation/face_detection/GenSample.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by xileli on 11/3/16. 3 | // 4 | 5 | #include "GenSample.h" 6 | 7 | 8 | void GenSample::run(vector path) 9 | { 10 | read_in_param(path); 11 | 12 | for(int i = 0; i < img_path_.size(); i++) 13 | { 14 | read_in_cur_img(i); 15 | } 16 | 17 | } 18 | 19 | void GenSample::read_in_param(vector path) 20 | { 21 | img_path_read(path[0], img_path_); 22 | ellipse_read(path[1]); 23 | rectangle_read(path[2]); 24 | dataset_dir_ = path[3]; 25 | write_dir_ = path[4]; 26 | } 27 | 28 | void GenSample::img_path_read(string path, vector& img_paths) 29 | { 30 | img_paths.clear(); 31 | std::ifstream img_path_file(path); 32 | while(!img_path_file.eof()) 33 | { 34 | string line; 35 | getline(img_path_file, line); 36 | if (line == "") 37 | continue; 38 | img_paths.push_back(line); 39 | } 40 | } 41 | 42 | void GenSample::ellipse_read(string path) 43 | { 44 | rect_info_read(path, img_path_, benchmark_); 45 | } 46 | 47 | void GenSample::rectangle_read(string path) 48 | { 49 | rect_info_read(path, img_path_, testResult_); 50 | } 51 | 52 | void GenSample::rect_info_read(string path, vector img_path, vector>& rect_info) 53 | { 54 | int index = 0; 55 | std::ifstream img_path_file(path);// ??? 56 | while(!img_path_file.eof()) 57 | { 58 | string cur_img_path = img_path[index]; 59 | string line; 60 | getline(img_path_file, line); 61 | if(cur_img_path == line) 62 | { 63 | string line_count; 64 | getline(img_path_file, line_count); 65 | 66 | //the num for the rect info 67 | int count = atoi(line_count.c_str()); 68 | 69 | vector cur_ellip; 70 | for(int i = 0; i < count; i ++) 71 | { 72 | string line_ellipse; 73 | getline(img_path_file, line_ellipse); 74 | cur_ellip.push_back(line_ellipse); 75 | } 76 | rect_info.push_back(cur_ellip); 77 | } 78 | 79 | index++; 80 | } 81 | } 82 | 83 | void GenSample::read_in_cur_img(int index) 84 | { 85 | cur_img_path_ = img_path_[index]; 86 | 87 | string img_path = dataset_dir_ + cur_img_path_ + ".jpg"; 88 | img_read(img_path, img_); 89 | 90 | rect_read(benchmark_[index], cur_test_); 91 | ellipse_read(benchmark_[index], cur_bench_); 92 | } 93 | 94 | void GenSample::img_read(string img_path, Mat & img) 95 | { 96 | img = imread(img_path); 97 | } 98 | 99 | void GenSample::rect_read(vector info, vector & rect) 100 | { 101 | rect.clear(); 102 | for (int i = 0; i < info.size(); i++) 103 | { 104 | char *cstr = new char[info[i].length() + 1]; 105 | strcpy(cstr, info[i].c_str()); 106 | char *p = strtok(cstr, " "); 107 | vector cur_rect_list; 108 | while (p != 0) { 109 | float pos = atof(p); 110 | cur_rect_list.push_back(pos); 111 | p = strtok(NULL, " "); 112 | } 113 | Rect cur_rect = Rect(cur_rect_list[0], cur_rect_list[1], cur_rect_list[2], cur_rect_list[3]); 114 | rect.push_back(cur_rect); 115 | } 116 | } 117 | 118 | void GenSample::ellipse_read(vector info, vector & rects) 119 | { 120 | rects.clear(); 121 | for(int i = 0; i < info.size(); i++) 122 | { 123 | char *cstr = new char[info[i].length() + 1]; 124 | strcpy(cstr, info[i].c_str()); 125 | char *p = strtok(cstr, " "); 126 | vector ellip; 127 | while(p != 0) 128 | { 129 | float pos = atof(p); 130 | ellip.push_back(pos); 131 | p = strtok(NULL, " "); 132 | } 133 | 134 | //transfer ellipse to rect 135 | Rect rect; 136 | float sin2 = sin(ellip[2] * PI / 180.0 ) * sin(ellip[2] * PI / 180.0 ); 137 | float cos2 = cos(ellip[2] * PI / 180.0 ) * cos(ellip[2] * PI / 180.0 ); 138 | float A2 = ellip[0] * ellip[0] ; 139 | float B2 = ellip[1] * ellip[1] ; 140 | 141 | rect.width = sqrt(1 / (sin2 / A2 + cos2 / B2)) * 2; 142 | rect.height = sqrt(1 / (cos2 / A2 + sin2 / B2)) * 2; 143 | 144 | rect.x = ellip[3] - rect.width / 2 ; 145 | rect.y = ellip[4] - rect.height / 2; 146 | rects.push_back(rect); 147 | } 148 | } 149 | 150 | void GenSample::sample() 151 | { 152 | generate_positive(); 153 | generate_negtive(); 154 | } 155 | 156 | void GenSample::generate_positive() 157 | { 158 | img_path_write(); 159 | img_crop_write(img_, cur_bench_, cur_img_path_); 160 | } 161 | 162 | void GenSample::generate_negtive() 163 | { 164 | vector wrong_rect = cur_test_; 165 | 166 | for (int i = 0; i < wrong_rect.size(); i++) { 167 | float score = 0; 168 | for (int j = 0; j < cur_bench_.size(); j++) { 169 | score = max(score, IoM(wrong_rect[i], cur_bench_[j])); 170 | } 171 | if(score > threshold_) 172 | { 173 | wrong_rect.erase(wrong_rect.begin() + i); 174 | i--; 175 | } 176 | } 177 | 178 | img_path_write(); 179 | img_crop_write(img_, wrong_rect, cur_img_path_); 180 | } 181 | 182 | float GenSample::IoM(cv::Rect rect1, cv::Rect rect2) 183 | { 184 | int x_overlap, y_overlap, intersection, min_area; 185 | x_overlap = std::max(0, std::min((rect1.x + rect1.width), (rect2.x + rect2.width)) - std::max(rect1.x, rect2.x)); 186 | y_overlap = std::max(0, std::min((rect1.y + rect1.height), (rect2.y + rect2.height)) - std::max(rect1.y, rect2.y)); 187 | intersection = x_overlap * y_overlap; 188 | min_area = std::min((rect1.width * rect1.height), (rect2.width * rect2.height)); 189 | return float(intersection)/min_area; 190 | } 191 | 192 | void GenSample::draw_rectangles(Mat img, vector rectangles, Scalar color) 193 | { 194 | for(int i = 0; i < rectangles.size(); i++) 195 | { 196 | correct_rect(rectangles[i], img); 197 | rectangle(img, rectangles[i], color); 198 | } 199 | } 200 | 201 | void GenSample::correct_rect(Rect rect, Mat img) 202 | { 203 | rect.x = max(0, rect.x); 204 | rect.y = max(0, rect.y); 205 | rect.width = min(rect.width, img.cols); 206 | rect.height = min(rect.height, img.rows); 207 | } 208 | 209 | void GenSample::img_write(Mat img, vector rectangles, string img_path) 210 | { 211 | 212 | } 213 | 214 | void GenSample::img_path_write() 215 | { 216 | 217 | } 218 | 219 | void GenSample::img_crop_write(Mat img, vector rectangles, string img_path) 220 | { 221 | 222 | } -------------------------------------------------------------------------------- /result/FDDB_evaluation/face_detection/GenSample.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by xileli on 11/3/16. 3 | // 4 | 5 | #ifndef FACE_DETECTION_GENSAMPLE_H 6 | #define FACE_DETECTION_GENSAMPLE_H 7 | 8 | #include "opencv2/opencv.hpp" 9 | #define PI 3.14159265 10 | 11 | using namespace std; 12 | using namespace cv; 13 | 14 | class GenSample { 15 | 16 | 17 | 18 | void run(vector path); 19 | 20 | void read_in_param(vector path); 21 | void img_path_read(string path, vector& img_paths); 22 | void rect_info_read(string path, vector img_path, vector>& rect_info); 23 | void ellipse_read(string path); 24 | void rectangle_read(string path); 25 | 26 | void read_in_cur_img(int index); 27 | void img_read(string img_path, Mat & img); 28 | void rect_read(vector info, vector & rect); 29 | void ellipse_read(vector info, vector & rects); 30 | 31 | void sample(); 32 | void generate_positive(); 33 | void generate_negtive(); 34 | float IoM(cv::Rect rect1, cv::Rect rect2); 35 | void img_path_write(); 36 | void img_info_write(string img_path, vector rectangles); 37 | void img_crop_write(Mat img, vector rectangles, string img_path); 38 | void img_write(Mat img, vector rectangles, string img_path); 39 | void img_show(Mat img, string name); 40 | void draw_rectangles(Mat img, vector rectangles, Scalar color); 41 | void correct_rect(Rect rect, Mat img); 42 | 43 | vector> benchmark_, testResult_; 44 | vector img_path_; 45 | string dataset_dir_, write_dir_; 46 | vector cur_bench_, cur_test_; 47 | string cur_img_path_; 48 | Mat img_; 49 | float threshold_; 50 | 51 | }; 52 | 53 | 54 | #endif //FACE_DETECTION_GENSAMPLE_H 55 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/face_detection/ellipse_transform.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by xileli on 11/1/16. 3 | // 4 | 5 | #ifndef FACE_DETECTION_ELLIPSE_TRANSFORM_H 6 | #define FACE_DETECTION_ELLIPSE_TRANSFORM_H 7 | 8 | #include "opencv2/opencv.hpp" 9 | #include 10 | 11 | using namespace std; 12 | using namespace cv; 13 | class ellipse_transform { 14 | public: 15 | void img_path_read(string path); 16 | void ellipse_read(string path); 17 | void ellipse_trans(int index); 18 | void rectangle_show(int index); 19 | void correct_rect(Rect rect, Mat img); 20 | void cascade_rect_read(string path); 21 | float IoM(cv::Rect rect1, cv::Rect rect2); 22 | void img_crop_create(int index); 23 | void run(vector path); 24 | void txt_write(string type, string img_path, vector rectangles); 25 | void img_write(int index, string type, string img_path, vector rectangles); 26 | bool create_folder(string dir_path); 27 | 28 | vector> ellipses_; 29 | vector> cascade_rects_; 30 | vector img_path_; 31 | vector cur_rect_; 32 | string root_path_ = "/home/xileli/Documents/dateset/FDDB/modify_crop/"; 33 | string root_img_path_ = "/home/xileli/Documents/dateset/FDDB/"; 34 | int file_num_ = 0; 35 | 36 | 37 | 38 | 39 | }; 40 | 41 | 42 | #endif //FACE_DETECTION_ELLIPSE_TRANSFORM_H 43 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/face_detection/fddb_detection.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // Created by xileli on 10/31/16. 3 | // 4 | 5 | #include "fddb_detection.h" 6 | 7 | fddb_detection::fddb_detection() {} 8 | 9 | fddb_detection::fddb_detection(std::string dataset_path) 10 | { 11 | cascadeCNN_ = new MTCNN(model_file, trained_file); 12 | 13 | dataset_path_ = dataset_path; 14 | } 15 | 16 | fddb_detection::fddb_detection(std::string dataset_path, MTCNN * cascadeCNN) 17 | { 18 | cascadeCNN_ = cascadeCNN; 19 | 20 | dataset_path_ = dataset_path; 21 | } 22 | 23 | void fddb_detection::run() 24 | { 25 | if(!file_list_read()) 26 | { 27 | std::cout << "Cannot find file_list.txt!" << std::endl; 28 | return; 29 | } 30 | 31 | 32 | for(int i = 0; i < file_list_.size(); i++) 33 | { 34 | i_ = i; 35 | 36 | std::cout << "Generating Fold: " << i_ + 1 << std::endl; 37 | 38 | 39 | if(!img_path_read(i)) 40 | { 41 | std::cout << "Cannot find image path file!" << std::endl; 42 | return; 43 | } 44 | 45 | if(!generate_txt()) 46 | { 47 | return; 48 | } 49 | } 50 | } 51 | 52 | bool fddb_detection::file_list_read() 53 | { 54 | return file_list_read(dataset_path_ + "FDDB-folds/fileList.txt"); 55 | } 56 | 57 | bool fddb_detection::file_list_read(string path) 58 | { 59 | std::ifstream in(path); 60 | while(!in.eof()) 61 | { 62 | string line; 63 | getline(in, line); 64 | if(line == "") 65 | continue; 66 | file_list_.push_back(line); 67 | } 68 | 69 | if(file_list_.size() != 0) 70 | return true; 71 | else 72 | return false; 73 | } 74 | 75 | 76 | 77 | bool fddb_detection::img_path_read(int i) 78 | { 79 | return img_path_read(dataset_path_ + "FDDB-folds/fileList/" + file_list_[i]); 80 | } 81 | 82 | bool fddb_detection::img_path_read(string path) 83 | { 84 | img_path_.clear(); 85 | std::ifstream img_path_file(path); 86 | while(!img_path_file.eof()) 87 | { 88 | string line; 89 | getline(img_path_file, line); 90 | if(line == "") 91 | continue; 92 | img_path_.push_back(line); 93 | } 94 | 95 | if(img_path_.size() != 0) 96 | return true; 97 | else 98 | return false; 99 | } 100 | 101 | bool fddb_detection::generate_txt() 102 | { 103 | std::string cur_img_path; 104 | // int break_point = 100000; 105 | for(int j = 0; j < img_path_.size(); j++) 106 | { 107 | // if(img_path_[j] == "2002/08/03/big/img_462") 108 | // { 109 | // break_point = j; 110 | // } 111 | 112 | // if(j > break_point) 113 | { 114 | cur_img_path = dataset_path_ + img_path_[j] + ".jpg"; 115 | if(!img_read(cur_img_path)) 116 | { 117 | std::cout << "Cannot open " << cur_img_path << std::endl; 118 | continue; 119 | } 120 | 121 | std::vector cur_rect; 122 | std::vector confidence; 123 | cascadeCNN_->detection(cur_img_, cur_rect, confidence); 124 | 125 | if(txt_write_state_ == 1) 126 | { 127 | txt_write(cur_rect, confidence, img_path_[j]); 128 | } 129 | 130 | if(img_write_state_ == 1) 131 | { 132 | img_write(cur_rect, confidence, img_path_[j]); 133 | } 134 | std::cout << "Successful Detect Image:" << cur_img_path << std::endl; 135 | } 136 | } 137 | 138 | return true; 139 | } 140 | 141 | bool fddb_detection::img_read(string path) 142 | { 143 | cur_img_ = cv::imread(path); 144 | if(cur_img_.rows) 145 | return true; 146 | else 147 | return false; 148 | } 149 | 150 | bool fddb_detection::txt_write(std::vector rects, std::vector confidence, std::string img_path) 151 | { 152 | string write_path = img_path_convert(dataset_path_ + "FDDB-folds/fileList/" + file_list_[i_]); 153 | std::fstream file(write_path + "-MTCNN.txt", ios::app); 154 | file << img_path << std::endl 155 | << rects.size() << std::endl; 156 | 157 | for(int k = 0; k < rects.size(); k++) 158 | { 159 | file << rects[k].x << " " 160 | << rects[k].y << " " 161 | << rects[k].width << " " 162 | << rects[k].height << " " 163 | << confidence[k] << std::endl; 164 | } 165 | 166 | // for(int k = 0; k < rects.size(); k++) 167 | // { 168 | // file << rects[k].x << " " 169 | // << rects[k].y << " " 170 | // << rects[k].width << " " 171 | // << rects[k].width << " " 172 | // << "1.0" << std::endl; 173 | // } 174 | 175 | return true; 176 | 177 | } 178 | 179 | bool fddb_detection::img_write(std::vector rects, std::vector confidence, std::string img_path) 180 | { 181 | cv::Mat img; 182 | cur_img_.copyTo(img); 183 | //cv::imwrite("/home/xileli/Documents/program/CascadeCNN/" + name + "test.jpg", img); 184 | for(int i = 0; i < rects.size(); i++) 185 | { 186 | rectangle(img, rects[i], cv::Scalar(255, 0, 0)); 187 | cv::putText(img, std::to_string(confidence[i]), cvPoint(rects[i].x + 3, rects[i].y + 13), 188 | cv::FONT_HERSHEY_COMPLEX_SMALL, 0.8, cvScalar(255, 0, 0), 1, CV_AA); 189 | } 190 | 191 | cv::imwrite(dataset_path_ + "MTCNN/" + img_path + "-CascadeCNN.jpg", img); 192 | 193 | return true; 194 | } 195 | 196 | string fddb_detection::img_path_convert(string path) 197 | { 198 | char * cstr = new char[path.length()+1]; 199 | strcpy(cstr, path.c_str()); 200 | char * p = strtok(cstr, "."); 201 | return p; 202 | } -------------------------------------------------------------------------------- /result/FDDB_evaluation/face_detection/fddb_detection.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by xileli on 10/31/16. 3 | // 4 | 5 | #ifndef FACE_DETECTION_FDDB_DETECTION_H 6 | #define FACE_DETECTION_FDDB_DETECTION_H 7 | 8 | #include 9 | #include 10 | #include 11 | #include "../../../detection/MTCNN.h" 12 | 13 | class fddb_detection { 14 | 15 | public: 16 | fddb_detection(); 17 | fddb_detection(std::string path); 18 | fddb_detection(std::string dataset_path, MTCNN * cascadeCNN); 19 | 20 | void run(); 21 | 22 | bool file_list_read(); 23 | bool file_list_read(string dataset_path); 24 | bool img_path_read(int i); 25 | bool img_path_read(string path); 26 | bool img_read(std::string path); 27 | bool generate_txt(); 28 | bool txt_write(std::vector rects, std::vector confidence, std::string img_path); 29 | bool img_write(std::vector rects, std::vector confidence, std::string img_path); 30 | std::string img_path_convert(std::string path); 31 | 32 | MTCNN * cascadeCNN_; 33 | std::string dataset_path_; 34 | std::vector file_list_; 35 | std::vector img_path_; 36 | cv::Mat cur_img_; 37 | int i_; 38 | int txt_write_state_ = 1; 39 | int img_write_state_ = 1; 40 | 41 | // std::string mean_file = "/home/xileli/Documents/library/caffe/data/ilsvrc12/imagenet_mean.binaryproto"; 42 | 43 | std::vector model_file = { 44 | "../../../model/det1.prototxt", 45 | "../../../model/det2.prototxt", 46 | "../../../model/det3.prototxt" 47 | }; 48 | 49 | std::vector trained_file = { 50 | "../../../model/det1.caffemodel", 51 | "../../../model/det2.caffemodel", 52 | "../../../model/det3.caffemodel" 53 | }; 54 | }; 55 | 56 | 57 | #endif //FACE_DETECTION_FDDB_DETECTION_H 58 | -------------------------------------------------------------------------------- /result/FDDB_evaluation/face_detection/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "fddb_detection.h" 3 | //#include "ellipse_transform.h" 4 | int main() { 5 | 6 | std::vector model_file = { 7 | "../../../model/det1.prototxt", 8 | "../../../model/det2.prototxt", 9 | "../../../model/det3.prototxt" 10 | }; 11 | 12 | std::vector trained_file = { 13 | "../../../model/det1.caffemodel", 14 | "../../../model/det2.caffemodel", 15 | "../../../model/det3.caffemodel" 16 | }; 17 | 18 | MTCNN * cascadeCNN; 19 | cascadeCNN = new MTCNN(model_file, trained_file); 20 | 21 | string dataset_path = "/Users/Young/projects/FDDB/"; 22 | 23 | fddb_detection detection(dataset_path, cascadeCNN); 24 | 25 | detection.run(); 26 | } 27 | 28 | //int main() 29 | //{ 30 | // vector path = { 31 | // "/home/xileli/Documents/program/CascadeCNN/result/FDDB_evaluation/FDDB-folds/fileList.txt", 32 | // "/home/xileli/Documents/program/CascadeCNN/result/FDDB_evaluation/FDDB-folds/ellipseList.txt", 33 | // "/home/xileli/Documents/program/CascadeCNN/result/FDDB_evaluation/FDDB-folds/CascadeCNN.txt" 34 | // }; 35 | // ellipse_transform ellipse; 36 | // ellipse.run(path); 37 | //} -------------------------------------------------------------------------------- /result/img_838-compare.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/img_838-compare.jpg -------------------------------------------------------------------------------- /result/img_906-compare.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/img_906-compare.jpg -------------------------------------------------------------------------------- /result/normal.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/normal.bmp -------------------------------------------------------------------------------- /result/record_gpu_1.txt: -------------------------------------------------------------------------------- 1 | 0.021 2 | 0.015 3 | 0.018 4 | 0.013 5 | 0.014 6 | 0.012 7 | 0.012 8 | 0.012 9 | 0.013 10 | 0.011 11 | 0.012 12 | 0.013 13 | 0.012 14 | 0.02 15 | 0.024 16 | 0.022 17 | 0.019 18 | 0.018 19 | 0.021 20 | 0.022 21 | 0.022 22 | 0.02 23 | 0.024 24 | 0.022 25 | 0.02 26 | 0.021 27 | 0.021 28 | 0.029 29 | 0.028 30 | 0.023 31 | 0.031 32 | 0.033 33 | 0.029 34 | 0.025 35 | 0.025 36 | 0.022 37 | 0.027 38 | 0.02 39 | 0.021 40 | 0.029 41 | 0.024 42 | 0.043 43 | 0.022 44 | 0.021 45 | 0.02 46 | 0.027 47 | 0.023 48 | 0.022 49 | 0.02 50 | 0.017 51 | 0.025 52 | 0.02 53 | 0.019 54 | 0.017 55 | 0.019 56 | 0.018 57 | 0.03 58 | 0.024 59 | 0.022 60 | 0.019 61 | 0.019 62 | 0.02 63 | 0.019 64 | 0.018 65 | 0.018 66 | 0.021 67 | 0.02 68 | 0.026 69 | 0.024 70 | 0.02 71 | 0.02 72 | 0.02 73 | 0.019 74 | 0.017 75 | 0.016 76 | 0.015 77 | 0.015 78 | 0.022 79 | 0.018 80 | 0.027 81 | 0.021 82 | 0.018 83 | 0.019 84 | 0.026 85 | 0.024 86 | 0.02 87 | 0.018 88 | 0.026 89 | 0.026 90 | 0.036 91 | 0.036 92 | 0.029 93 | 0.022 94 | 0.02 95 | 0.023 96 | 0.018 97 | 0.018 98 | 0.016 99 | 0.016 100 | 0.017 101 | 0.015 102 | 0.015 103 | 0.015 104 | 0.015 105 | 0.025 106 | 0.022 107 | 0.027 108 | 0.028 109 | 0.027 110 | 0.022 111 | 0.019 112 | 0.02 113 | 0.025 114 | 0.026 115 | 0.027 116 | 0.024 117 | 0.02 118 | 0.019 119 | 0.018 120 | 0.019 121 | 0.028 122 | 0.026 123 | 0.024 124 | 0.022 125 | 0.021 126 | 0.023 127 | 0.02 128 | 0.023 129 | 0.02 130 | 0.024 131 | 0.026 132 | 0.02 133 | 0.018 134 | 0.021 135 | 0.02 136 | 0.026 137 | 0.024 138 | 0.018 139 | 0.021 140 | 0.025 141 | 0.025 142 | 0.025 143 | 0.021 144 | 0.018 145 | 0.022 146 | 0.017 147 | 0.018 148 | 0.017 149 | 0.016 150 | 0.014 151 | 0.013 152 | 0.011 153 | 0.012 154 | 0.011 155 | 0.011 156 | 0.013 157 | 0.013 158 | 0.012 159 | 0.012 160 | 0.014 161 | 0.013 162 | 0.013 163 | 0.015 164 | 0.022 165 | 0.018 166 | 0.024 167 | 0.02 168 | 0.018 169 | 0.018 170 | 0.024 171 | 0.019 172 | 0.024 173 | 0.022 174 | 0.019 175 | 0.025 176 | 0.022 177 | 0.02 178 | 0.022 179 | 0.02 180 | 0.022 181 | 0.021 182 | 0.02 183 | 0.021 184 | 0.019 185 | 0.019 186 | 0.021 187 | 0.021 188 | 0.028 189 | 0.029 190 | 0.023 191 | 0.024 192 | 0.021 193 | 0.021 194 | 0.02 195 | 0.022 196 | 0.02 197 | 0.019 198 | 0.02 199 | 0.021 200 | 0.022 201 | 0.021 202 | 0.018 203 | 0.021 204 | 0.019 205 | 0.017 206 | 0.016 207 | 0.018 208 | 0.017 209 | 0.018 210 | 0.022 211 | 0.02 212 | 0.024 213 | 0.021 214 | 0.018 215 | 0.015 216 | 0.017 217 | 0.023 218 | 0.02 219 | 0.018 220 | 0.022 221 | 0.023 222 | 0.02 223 | 0.017 224 | 0.025 225 | 0.023 226 | 0.019 227 | 0.018 228 | 0.025 229 | 0.022 230 | 0.02 231 | 0.02 232 | 0.018 233 | 0.016 234 | 0.018 235 | 0.024 236 | 0.026 237 | 0.019 238 | 0.019 239 | 0.02 240 | 0.019 241 | 0.019 242 | 0.018 243 | 0.018 244 | 0.019 245 | 0.017 246 | 0.015 247 | 0.021 248 | 0.021 249 | 0.018 250 | 0.017 251 | 0.015 252 | 0.021 253 | 0.022 254 | 0.02 255 | 0.024 256 | 0.022 257 | 0.02 258 | 0.021 259 | 0.022 260 | 0.023 261 | 0.025 262 | 0.02 263 | 0.019 264 | 0.021 265 | 0.022 266 | 0.022 267 | 0.02 268 | 0.023 269 | 0.023 270 | 0.022 271 | 0.021 272 | 0.019 273 | 0.022 274 | 0.023 275 | 0.022 276 | 0.018 277 | 0.021 278 | 0.02 279 | 0.018 280 | 0.02 281 | 0.016 282 | 0.015 283 | 0.015 284 | 0.016 285 | 0.031 286 | 0.024 287 | 0.021 288 | 0.023 289 | 0.023 290 | 0.021 291 | 0.029 292 | 0.024 293 | 0.022 294 | 0.02 295 | 0.018 296 | 0.027 297 | 0.024 298 | 0.024 299 | 0.025 300 | 0.021 301 | 0.019 302 | 0.026 303 | 0.022 304 | 0.022 305 | 0.025 306 | 0.024 307 | 0.02 308 | 0.019 309 | 0.02 310 | 0.018 311 | 0.017 312 | 0.019 313 | 0.025 314 | 0.024 315 | 0.023 316 | 0.02 317 | 0.02 318 | 0.021 319 | 0.023 320 | 0.021 321 | 0.021 322 | 0.021 323 | 0.02 324 | 0.022 325 | 0.022 326 | 0.022 327 | 0.021 328 | 0.019 329 | 0.018 330 | 0.018 331 | 0.02 332 | 0.023 333 | 0.02 334 | 0.018 335 | 0.018 336 | 0.017 337 | 0.016 338 | 0.021 339 | 0.025 340 | 0.021 341 | 0.019 342 | 0.017 343 | 0.018 344 | 0.016 345 | 0.015 346 | 0.024 347 | 0.021 348 | 0.022 349 | 0.025 350 | 0.021 351 | 0.019 352 | 0.016 353 | 0.016 354 | 0.018 355 | 0.018 356 | 0.025 357 | 0.021 358 | 0.017 359 | 0.021 360 | 0.02 361 | 0.014 362 | 0.012 363 | 0.013 364 | 0.023 365 | 0.02 366 | 0.017 367 | 0.016 368 | 0.015 369 | 0.022 370 | 0.02 371 | 0.025 372 | 0.028 373 | 0.018 374 | 0.016 375 | 0.014 376 | 0.02 377 | 0.023 378 | 0.024 379 | 0.023 380 | 0.02 381 | 0.021 382 | 0.021 383 | 0.022 384 | 0.022 385 | 0.018 386 | 0.018 387 | 0.017 388 | 0.024 389 | 0.02 390 | 0.018 391 | 0.016 392 | 0.015 393 | 0.02 394 | 0.019 395 | 0.017 396 | 0.029 397 | 0.021 398 | 0.025 399 | 0.022 400 | 0.024 401 | 0.017 402 | 0.017 403 | 0.018 404 | 0.017 405 | 0.015 406 | 0.013 407 | 0.011 408 | 0.011 409 | 0.011 410 | 0.021 411 | 0.023 412 | 0.024 413 | 0.021 414 | 0.027 415 | 0.024 416 | 0.023 417 | 0.023 418 | 0.02 419 | 0.018 420 | 0.016 421 | 0.018 422 | 0.025 423 | 0.021 424 | 0.018 425 | 0.017 426 | 0.017 427 | 0.016 428 | 0.015 429 | 0.015 430 | 0.014 431 | 0.015 432 | 0.015 433 | 0.015 434 | 0.025 435 | 0.028 436 | 0.029 437 | 0.026 438 | 0.028 439 | 0.023 440 | 0.027 441 | 0.026 442 | 0.022 443 | 0.024 444 | 0.026 445 | 0.027 446 | 0.022 447 | 0.019 448 | 0.023 449 | 0.02 450 | 0.017 451 | 0.024 452 | 0.026 453 | 0.029 454 | 0.025 455 | 0.024 456 | 0.026 457 | 0.022 458 | 0.023 459 | 0.024 460 | 0.028 461 | 0.024 462 | 0.023 463 | 0.022 464 | 0.021 465 | 0.028 466 | 0.031 467 | 0.024 468 | 0.025 469 | 0.026 470 | 0.022 471 | 0.021 472 | 0.023 473 | 0.023 474 | 0.024 475 | 0.027 476 | 0.024 477 | 0.022 478 | 0.02 479 | 0.028 480 | 0.029 481 | 0.023 482 | 0.019 483 | 0.017 484 | 0.02 485 | 0.019 486 | 0.022 487 | 0.021 488 | 0.019 489 | 0.017 490 | 0.023 491 | 0.022 492 | 0.02 493 | 0.02 494 | 0.018 495 | 0.02 496 | 0.027 497 | 0.022 498 | 0.019 499 | 0.018 500 | 0.019 501 | 0.017 502 | 0.021 503 | 0.018 504 | 0.017 505 | 0.016 506 | 0.021 507 | 0.028 508 | 0.027 509 | 0.022 510 | 0.02 511 | 0.018 512 | 0.027 513 | 0.023 514 | 0.021 515 | 0.019 516 | 0.017 517 | 0.025 518 | 0.021 519 | 0.022 520 | 0.021 521 | 0.019 522 | 0.027 523 | 0.023 524 | 0.021 525 | 0.027 526 | 0.027 527 | 0.019 528 | 0.019 529 | 0.022 530 | 0.021 531 | 0.019 532 | 0.018 533 | 0.017 534 | 0.018 535 | 0.016 536 | 0.015 537 | 0.026 538 | 0.028 539 | 0.019 540 | 0.019 541 | 0.02 542 | 0.02 543 | 0.029 544 | 0.027 545 | 0.022 546 | 0.02 547 | 0.022 548 | 0.02 549 | 0.018 550 | 0.017 551 | 0.017 552 | 0.016 553 | 0.015 554 | 0.015 555 | 0.014 556 | 0.016 557 | 0.015 558 | 0.015 559 | 0.026 560 | 0.023 561 | 0.023 562 | 0.021 563 | 0.018 564 | 0.019 565 | 0.021 566 | 0.029 567 | 0.025 568 | 0.021 569 | 0.02 570 | 0.02 571 | 0.03 572 | 0.024 573 | 0.03 574 | 0.027 575 | 0.023 576 | 0.022 577 | 0.02 578 | 0.018 579 | 0.027 580 | 0.023 581 | 0.021 582 | 0.019 583 | 0.018 584 | 0.017 585 | 0.016 586 | 0.014 587 | 0.018 588 | 0.016 589 | 0.015 590 | 0.019 591 | 0.018 592 | 0.017 593 | 0.016 594 | 0.015 595 | 0.024 596 | 0.021 597 | 0.018 598 | 0.02 599 | 0.026 600 | 0.024 601 | 0.024 602 | 0.027 603 | 0.026 604 | 0.025 605 | 0.021 606 | 0.018 607 | 0.018 608 | 0.017 609 | 0.014 610 | 0.014 611 | 0.021 612 | 0.018 613 | 0.015 614 | 0.014 615 | 0.017 616 | 0.015 617 | 0.016 618 | 0.017 619 | 0.024 620 | 0.021 621 | 0.018 622 | 0.026 623 | 0.023 624 | 0.023 625 | 0.019 626 | 0.023 627 | 0.024 628 | 0.021 629 | 0.017 630 | 0.015 631 | 0.019 632 | 0.019 633 | 0.019 634 | 0.027 635 | 0.021 636 | 0.02 637 | 0.027 638 | 0.022 639 | 0.018 640 | 0.016 641 | 0.016 642 | 0.015 643 | 0.018 644 | 0.016 645 | 0.015 646 | 0.015 647 | 0.023 648 | 0.024 649 | 0.028 650 | 0.02 651 | 0.025 652 | 0.019 653 | 0.025 654 | 0.023 655 | 0.021 656 | 0.022 657 | 0.022 658 | 0.022 659 | 0.022 660 | 0.021 661 | 0.021 662 | 0.02 663 | 0.022 664 | 0.021 665 | 0.022 666 | 0.024 667 | 0.02 668 | 0.021 669 | 0.021 670 | 0.022 671 | 0.02 672 | 0.018 673 | 0.021 674 | 0.02 675 | 0.02 676 | 0.024 677 | 0.024 678 | 0.02 679 | 0.021 680 | 0.02 681 | 0.022 682 | 0.022 683 | 0.019 684 | 0.019 685 | 0.025 686 | 0.021 687 | 0.021 688 | 0.021 689 | 0.021 690 | 0.022 691 | 0.02 692 | 0.019 693 | 0.019 694 | 0.022 695 | 0.023 696 | 0.018 697 | 0.018 698 | 0.017 699 | 0.017 700 | 0.015 701 | 0.013 702 | 0.024 703 | 0.023 704 | 0.025 705 | 0.026 706 | 0.02 707 | 0.018 708 | 0.016 709 | 0.016 710 | 0.018 711 | 0.016 712 | 0.016 713 | 0.015 714 | 0.022 715 | 0.026 716 | 0.019 717 | 0.025 718 | 0.018 719 | 0.019 720 | 0.018 721 | 0.018 722 | 0.018 723 | 0.02 724 | 0.017 725 | 0.019 726 | 0.019 727 | 0.022 728 | 0.017 729 | 0.017 730 | 0.014 731 | 0.017 732 | 0.023 733 | 0.02 734 | 0.02 735 | -------------------------------------------------------------------------------- /result/record_gpu_2.txt: -------------------------------------------------------------------------------- 1 | 0.027 2 | 0.021 3 | 0.026 4 | 0.016 5 | 0.015 6 | 0.016 7 | 0.017 8 | 0.022 9 | 0.026 10 | 0.023 11 | 0.025 12 | 0.023 13 | 0.022 14 | 0.019 15 | 0.026 16 | 0.022 17 | 0.02 18 | 0.022 19 | 0.021 20 | 0.018 21 | 0.017 22 | 0.016 23 | 0.017 24 | 0.015 25 | 0.018 26 | 0.016 27 | 0.016 28 | 0.015 29 | 0.016 30 | 0.014 31 | 0.021 32 | 0.019 33 | 0.022 34 | 0.021 35 | 0.027 36 | 0.024 37 | 0.023 38 | 0.023 39 | 0.022 40 | 0.026 41 | 0.022 42 | 0.019 43 | 0.017 44 | 0.017 45 | 0.024 46 | 0.021 47 | 0.025 48 | 0.026 49 | 0.023 50 | 0.024 51 | 0.02 52 | 0.027 53 | 0.022 54 | 0.021 55 | 0.017 56 | 0.022 57 | 0.019 58 | 0.019 59 | 0.018 60 | 0.016 61 | 0.018 62 | 0.016 63 | 0.024 64 | 0.025 65 | 0.019 66 | 0.021 67 | 0.02 68 | 0.021 69 | 0.02 70 | 0.02 71 | 0.03 72 | 0.026 73 | 0.024 74 | 0.025 75 | 0.022 76 | 0.021 77 | 0.023 78 | 0.022 79 | 0.022 80 | 0.023 81 | 0.023 82 | 0.023 83 | 0.023 84 | 0.023 85 | 0.023 86 | 0.022 87 | 0.022 88 | 0.02 89 | 0.02 90 | 0.023 91 | 0.021 92 | 0.022 93 | 0.019 94 | 0.017 95 | 0.015 96 | 0.013 97 | 0.012 98 | 0.012 99 | 0.013 100 | 0.012 101 | 0.013 102 | 0.012 103 | 0.012 104 | 0.014 105 | 0.013 106 | 0.014 107 | 0.013 108 | 0.012 109 | 0.012 110 | 0.013 111 | 0.013 112 | 0.012 113 | 0.012 114 | 0.012 115 | 0.012 116 | 0.013 117 | 0.017 118 | 0.023 119 | 0.021 120 | 0.019 121 | 0.026 122 | 0.027 123 | 0.021 124 | 0.022 125 | 0.02 126 | 0.02 127 | 0.024 128 | 0.023 129 | 0.017 130 | 0.018 131 | 0.026 132 | 0.023 133 | 0.018 134 | -------------------------------------------------------------------------------- /result/result_gpu_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/result_gpu_1.png -------------------------------------------------------------------------------- /result/result_gpu_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/result_gpu_2.png -------------------------------------------------------------------------------- /result/trump.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/result/trump.jpg -------------------------------------------------------------------------------- /script/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/script/.DS_Store -------------------------------------------------------------------------------- /script/PRCurve.py: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | import numpy as np 3 | 4 | def PRCurve(logfile): 5 | data = np.loadtxt(logfile) 6 | x = np.linspace(0, 30, data.size) 7 | with plt.style.context('ggplot'): 8 | plt.plot(x, data) 9 | 10 | #main 11 | PRCurve('/home/xileli/Documents/dateset/AFW/log/loss48c.log') 12 | PRCurve('/home/xileli/Documents/dateset/AFW/log/loss48c_test.log') 13 | PRCurve('/home/xileli/Documents/dateset/AFW/log/accuracy48c_test.log') 14 | plt.show() 15 | 16 | -------------------------------------------------------------------------------- /script/plot_ROC_curve.py: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | 3 | 4 | listX=[] 5 | listY=[] 6 | listLeg=[] 7 | file = open("/Users/Young/projects/MTCNN/result/FDDB_evaluation/FDDB-folds/tempDiscROC.txt") 8 | 9 | with plt.style.context('ggplot'): 10 | plt.figure("DiscRoc") 11 | plt.xlabel("False Positive Per Frame") 12 | plt.ylabel("True Positive Rate") 13 | for point in file: 14 | xy = point.split() 15 | if (float(xy[1]) < 8000): 16 | listX.append(int(xy[1])) # / float(2844)) 17 | listY.append(xy[0]) 18 | plt.plot(listX,listY) 19 | plt.legend(listLeg, prop={'size': 9}) 20 | 21 | listY=[] 22 | listX=[] 23 | listLeg=[] 24 | 25 | 26 | 27 | #====================================== 28 | 29 | 30 | file = open("/Users/Young/projects/MTCNN/result/FDDB_evaluation/FDDB-folds/tempContROC.txt") 31 | 32 | 33 | with plt.style.context('ggplot'): 34 | plt.figure("ContRoc") 35 | plt.xlabel("False Positive Per Frame") 36 | plt.ylabel("True Positive Rate") 37 | for point in file: 38 | xy = point.split() 39 | if (float(xy[1]) < 3000): 40 | listX.append(int(xy[1])) # / float(2844)) 41 | listY.append(xy[0]) 42 | plt.plot(listX,listY) 43 | plt.legend(listLeg, prop={'size': 10}) 44 | 45 | 46 | 47 | plt.show() -------------------------------------------------------------------------------- /script/test_time.py: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | import numpy as np 3 | 4 | 5 | data = np.loadtxt('./result/record-cpu.txt') 6 | x = np.linspace(0, 30, data.size) 7 | data_mean = [np.mean(data) for i in x] 8 | with plt.style.context('ggplot'): 9 | plt.plot(x, data, label='Data_CPU') 10 | plt.plot(x, data_mean, label='Mean_CPU') 11 | plt.text(-1, 0.28, 0.2813, fontsize=12) 12 | 13 | data = np.loadtxt('./result/record-gpu.txt') 14 | x = np.linspace(0, 30, data.size) 15 | data_mean = [np.mean(data) for i in x] 16 | with plt.style.context('ggplot'): 17 | plt.plot(x, data, label='Data_GPU') 18 | plt.plot(x, data_mean, label='Mean_GPU') 19 | plt.text(-1, 0.02, 0.0209, fontsize=12) 20 | 21 | plt.show() -------------------------------------------------------------------------------- /script/train_process.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/script/train_process.png -------------------------------------------------------------------------------- /script/train_sh/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/script/train_sh/.DS_Store -------------------------------------------------------------------------------- /script/train_sh/ONet_solver.prototxt: -------------------------------------------------------------------------------- 1 | net: "/Users/Young/Documents/Programming/MTCNN/MTCNN_train/ONet_train.prototxt" 2 | test_iter: 40 3 | test_interval:2500 4 | # The base learning rate, momentum and the weight decay of the network. 5 | base_lr: 0.00000675 #0.01 6 | momentum: 0.9 7 | weight_decay: 0.008 8 | # The learning rate policy 9 | lr_policy: "step" 10 | stepsize: 1000 #40000 11 | gamma: 0.0001 12 | display: 500 13 | max_iter: 1000 14 | snapshot: 500 #100000 15 | snapshot_prefix: "/Users/Young/Documents/Programming/MTCNN/MTCNN_train" 16 | solver_mode: CPU 17 | -------------------------------------------------------------------------------- /script/train_sh/ONet_train.prototxt: -------------------------------------------------------------------------------- 1 | name: "ONet" 2 | 3 | layer { 4 | name: "Odata" 5 | type: "HDF5Data" 6 | top: "data" 7 | top: "labels" 8 | include { 9 | phase: TRAIN 10 | } 11 | hdf5_data_param { 12 | source: "/Users/Young/Documents/Programming/MTCNN/MTCNN_train/train_48.txt" 13 | batch_size: 100 14 | } 15 | } 16 | 17 | layer { 18 | name: "Odata" 19 | type: "HDF5Data" 20 | top: "data" 21 | top: "labels" 22 | include { 23 | phase: TEST 24 | } 25 | hdf5_data_param { 26 | source: "/Users/Young/Documents/Programming/MTCNN/MTCNN_train/test_48.txt" 27 | batch_size: 100 28 | } 29 | } 30 | 31 | layer { 32 | name: "slicer_data" 33 | type: "Slice" 34 | bottom: "labels" 35 | top: "label" 36 | top: "regression" 37 | top: "landmark" 38 | slice_param { 39 | axis: 1 40 | slice_point: 1 41 | slice_point: 5 42 | } 43 | } 44 | 45 | layer { 46 | name: "conv1" 47 | type: "Convolution" 48 | bottom: "data" 49 | top: "conv1" 50 | param { 51 | lr_mult: 1 52 | decay_mult: 1 53 | } 54 | param { 55 | lr_mult: 2 56 | decay_mult: 1 57 | } 58 | convolution_param { 59 | num_output: 32 60 | kernel_size: 3 61 | stride: 1 62 | weight_filler { 63 | type: "xavier" 64 | } 65 | bias_filler { 66 | type: "constant" 67 | value: 0 68 | } 69 | } 70 | } 71 | layer { 72 | name: "prelu1" 73 | type: "PReLU" 74 | bottom: "conv1" 75 | top: "conv1" 76 | } 77 | layer { 78 | name: "pool1" 79 | type: "Pooling" 80 | bottom: "conv1" 81 | top: "pool1" 82 | pooling_param { 83 | pool: MAX 84 | kernel_size: 3 85 | stride: 2 86 | } 87 | } 88 | layer { 89 | name: "conv2" 90 | type: "Convolution" 91 | bottom: "pool1" 92 | top: "conv2" 93 | param { 94 | lr_mult: 1 95 | decay_mult: 1 96 | } 97 | param { 98 | lr_mult: 2 99 | decay_mult: 1 100 | } 101 | convolution_param { 102 | num_output: 64 103 | kernel_size: 3 104 | stride: 1 105 | weight_filler { 106 | type: "xavier" 107 | } 108 | bias_filler { 109 | type: "constant" 110 | value: 0 111 | } 112 | } 113 | } 114 | 115 | layer { 116 | name: "prelu2" 117 | type: "PReLU" 118 | bottom: "conv2" 119 | top: "conv2" 120 | } 121 | layer { 122 | name: "pool2" 123 | type: "Pooling" 124 | bottom: "conv2" 125 | top: "pool2" 126 | pooling_param { 127 | pool: MAX 128 | kernel_size: 3 129 | stride: 2 130 | } 131 | } 132 | 133 | layer { 134 | name: "conv3" 135 | type: "Convolution" 136 | bottom: "pool2" 137 | top: "conv3" 138 | param { 139 | lr_mult: 1 140 | decay_mult: 1 141 | } 142 | param { 143 | lr_mult: 2 144 | decay_mult: 1 145 | } 146 | convolution_param { 147 | num_output: 64 148 | kernel_size: 3 149 | weight_filler { 150 | type: "xavier" 151 | } 152 | bias_filler { 153 | type: "constant" 154 | value: 0 155 | } 156 | } 157 | } 158 | layer { 159 | name: "prelu3" 160 | type: "PReLU" 161 | bottom: "conv3" 162 | top: "conv3" 163 | } 164 | layer { 165 | name: "pool3" 166 | type: "Pooling" 167 | bottom: "conv3" 168 | top: "pool3" 169 | pooling_param { 170 | pool: MAX 171 | kernel_size: 2 172 | stride: 2 173 | } 174 | } 175 | layer { 176 | name: "conv4" 177 | type: "Convolution" 178 | bottom: "pool3" 179 | top: "conv4" 180 | param { 181 | lr_mult: 1 182 | decay_mult: 1 183 | } 184 | param { 185 | lr_mult: 2 186 | decay_mult: 1 187 | } 188 | convolution_param { 189 | num_output: 128 190 | kernel_size: 2 191 | weight_filler { 192 | type: "xavier" 193 | } 194 | bias_filler { 195 | type: "constant" 196 | value: 0 197 | } 198 | } 199 | } 200 | layer { 201 | name: "prelu4" 202 | type: "PReLU" 203 | bottom: "conv4" 204 | top: "conv4" 205 | } 206 | 207 | 208 | layer { 209 | name: "conv5" 210 | type: "InnerProduct" 211 | bottom: "conv4" 212 | top: "conv5" 213 | param { 214 | lr_mult: 1 215 | decay_mult: 1 216 | } 217 | param { 218 | lr_mult: 2 219 | decay_mult: 1 220 | } 221 | inner_product_param { 222 | #kernel_size: 3 223 | num_output: 256 224 | weight_filler { 225 | type: "xavier" 226 | } 227 | bias_filler { 228 | type: "constant" 229 | value: 0 230 | } 231 | } 232 | } 233 | 234 | layer { 235 | name: "drop5" 236 | type: "Dropout" 237 | bottom: "conv5" 238 | top: "conv5" 239 | dropout_param { 240 | dropout_ratio: 0.25 241 | } 242 | } 243 | layer { 244 | name: "prelu5" 245 | type: "PReLU" 246 | bottom: "conv5" 247 | top: "conv5" 248 | } 249 | 250 | 251 | layer { 252 | name: "conv6-1" 253 | type: "InnerProduct" 254 | bottom: "conv5" 255 | top: "conv6-1" 256 | param { 257 | lr_mult: 1 258 | decay_mult: 1 259 | } 260 | param { 261 | lr_mult: 2 262 | decay_mult: 1 263 | } 264 | inner_product_param { 265 | #kernel_size: 1 266 | num_output: 2 267 | weight_filler { 268 | type: "xavier" 269 | } 270 | bias_filler { 271 | type: "constant" 272 | value: 0 273 | } 274 | } 275 | } 276 | layer { 277 | name: "conv6-2" 278 | type: "InnerProduct" 279 | bottom: "conv5" 280 | top: "conv6-2" 281 | param { 282 | lr_mult: 1 283 | decay_mult: 1 284 | } 285 | param { 286 | lr_mult: 2 287 | decay_mult: 1 288 | } 289 | inner_product_param { 290 | #kernel_size: 1 291 | num_output: 4 292 | weight_filler { 293 | type: "xavier" 294 | } 295 | bias_filler { 296 | type: "constant" 297 | value: 0 298 | } 299 | } 300 | } 301 | layer { 302 | name: "conv6-3" 303 | type: "InnerProduct" 304 | bottom: "conv5" 305 | top: "conv6-3" 306 | param { 307 | lr_mult: 1 308 | decay_mult: 1 309 | } 310 | param { 311 | lr_mult: 2 312 | decay_mult: 1 313 | } 314 | inner_product_param { 315 | #kernel_size: 1 316 | num_output: 10 317 | weight_filler { 318 | type: "xavier" 319 | } 320 | bias_filler { 321 | type: "constant" 322 | value: 0 323 | } 324 | } 325 | } 326 | 327 | layer { 328 | name: "loss_label" 329 | type: "SoftmaxWithLoss" 330 | bottom: "conv6-1" 331 | bottom: "label" 332 | top: "loss_label" 333 | } 334 | layer { 335 | name: "loss_regression_box" 336 | type: "EuclideanLoss" 337 | bottom: "conv6-2" 338 | bottom: "regression" 339 | top: "loss_regression_box" 340 | } 341 | 342 | 343 | layer { 344 | name: "loss_landmark" 345 | type: "EuclideanLoss" 346 | bottom: "conv6-3" 347 | bottom: "landmark" 348 | top: "loss_landmark" 349 | } 350 | 351 | 352 | 353 | 354 | -------------------------------------------------------------------------------- /script/train_sh/ONet_train.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | set -e 3 | 4 | /Users/Young/caffe/.build_release/tools/caffe train -solver /Users/Young/Documents/Programming/MTCNN/MTCNN_train/ONet_solver.prototxt -weights /Users/Young/Documents/Programming/MTCNN/model/det3.caffemodel -------------------------------------------------------------------------------- /script/train_sh/PNet_solver.prototxt: -------------------------------------------------------------------------------- 1 | net: "/Users/Young/Documents/Programming/MTCNN/MTCNN_train/PNet_train.prototxt" 2 | test_iter: 40 3 | test_interval:2500 4 | # The base learning rate, momentum and the weight decay of the network. 5 | base_lr: 0.00000675 #0.01 6 | momentum: 0.9 7 | weight_decay: 0.008 8 | # The learning rate policy 9 | lr_policy: "step" 10 | stepsize: 1000 #40000 11 | gamma: 0.0001 12 | display: 500 13 | max_iter: 1000 14 | snapshot: 500 #100000 15 | snapshot_prefix: "/Users/Young/Documents/Programming/MTCNN/MTCNN_train" 16 | solver_mode: CPU 17 | -------------------------------------------------------------------------------- /script/train_sh/PNet_train.prototxt: -------------------------------------------------------------------------------- 1 | # Enter your network definition here. 2 | # Use Shift+Enter to update the visualization.name: "PNet" 3 | layer { 4 | name: "Pdata" 5 | type: "HDF5Data" 6 | top: "data" 7 | top: "labels" 8 | include { 9 | phase: TRAIN 10 | } 11 | hdf5_data_param { 12 | source: "/Users/Young/Documents/Programming/MTCNN/MTCNN_train/train_12.txt" 13 | batch_size: 100 14 | } 15 | } 16 | 17 | layer { 18 | name: "Pdata" 19 | type: "HDF5Data" 20 | top: "data" 21 | top: "labels" 22 | include { 23 | phase: TEST 24 | } 25 | hdf5_data_param { 26 | source: "/Users/Young/Documents/Programming/MTCNN/MTCNN_train/test_12.txt" 27 | batch_size: 100 28 | } 29 | } 30 | 31 | layer { 32 | name: "slicer_data" 33 | type: "Slice" 34 | bottom: "labels" 35 | top: "label" 36 | top: "regression" 37 | top: "landmark" 38 | slice_param { 39 | axis: 1 40 | slice_point: 1 41 | slice_point: 5 42 | } 43 | } 44 | 45 | layer { 46 | name: "conv1" 47 | type: "Convolution" 48 | bottom: "data" 49 | top: "conv1" 50 | param { 51 | lr_mult: 1 52 | decay_mult: 1 53 | } 54 | param { 55 | lr_mult: 2 56 | decay_mult: 0 57 | } 58 | convolution_param { 59 | num_output: 10 60 | kernel_size: 3 61 | stride: 1 62 | weight_filler { 63 | type: "xavier" 64 | } 65 | bias_filler { 66 | type: "constant" 67 | value: 0 68 | } 69 | } 70 | } 71 | layer { 72 | name: "PReLU1" 73 | type: "PReLU" 74 | bottom: "conv1" 75 | top: "conv1" 76 | } 77 | layer { 78 | name: "pool1" 79 | type: "Pooling" 80 | bottom: "conv1" 81 | top: "pool1" 82 | pooling_param { 83 | pool: MAX 84 | kernel_size: 2 85 | stride: 2 86 | } 87 | } 88 | 89 | layer { 90 | name: "conv2" 91 | type: "Convolution" 92 | bottom: "pool1" 93 | top: "conv2" 94 | param { 95 | lr_mult: 1 96 | decay_mult: 1 97 | } 98 | param { 99 | lr_mult: 2 100 | decay_mult: 0 101 | } 102 | convolution_param { 103 | num_output: 16 104 | kernel_size: 3 105 | stride: 1 106 | weight_filler { 107 | type: "xavier" 108 | } 109 | bias_filler { 110 | type: "constant" 111 | value: 0 112 | } 113 | } 114 | } 115 | layer { 116 | name: "PReLU2" 117 | type: "PReLU" 118 | bottom: "conv2" 119 | top: "conv2" 120 | } 121 | 122 | layer { 123 | name: "conv3" 124 | type: "Convolution" 125 | bottom: "conv2" 126 | top: "conv3" 127 | param { 128 | lr_mult: 1 129 | decay_mult: 1 130 | } 131 | param { 132 | lr_mult: 2 133 | decay_mult: 0 134 | } 135 | convolution_param { 136 | num_output: 32 137 | kernel_size: 3 138 | stride: 1 139 | weight_filler { 140 | type: "xavier" 141 | } 142 | bias_filler { 143 | type: "constant" 144 | value: 0 145 | } 146 | } 147 | } 148 | layer { 149 | name: "PReLU3" 150 | type: "PReLU" 151 | bottom: "conv3" 152 | top: "conv3" 153 | } 154 | 155 | 156 | layer { 157 | name: "conv4-1" 158 | type: "Convolution" 159 | bottom: "conv3" 160 | top: "conv4-1" 161 | param { 162 | lr_mult: 1 163 | decay_mult: 1 164 | } 165 | param { 166 | lr_mult: 2 167 | decay_mult: 0 168 | } 169 | convolution_param { 170 | num_output: 2 171 | kernel_size: 1 172 | stride: 1 173 | weight_filler { 174 | type: "xavier" 175 | } 176 | bias_filler { 177 | type: "constant" 178 | value: 0 179 | } 180 | } 181 | } 182 | 183 | layer { 184 | name: "conv4-2" 185 | type: "Convolution" 186 | bottom: "conv3" 187 | top: "conv4-2" 188 | param { 189 | lr_mult: 1 190 | decay_mult: 1 191 | } 192 | param { 193 | lr_mult: 2 194 | decay_mult: 0 195 | } 196 | convolution_param { 197 | num_output: 4 198 | kernel_size: 1 199 | stride: 1 200 | weight_filler { 201 | type: "xavier" 202 | } 203 | bias_filler { 204 | type: "constant" 205 | value: 0 206 | } 207 | } 208 | } 209 | 210 | layer { 211 | name: "conv4-3" 212 | type: "Convolution" 213 | bottom: "conv3" 214 | top: "conv4-3" 215 | param { 216 | lr_mult: 1 217 | decay_mult: 1 218 | } 219 | param { 220 | lr_mult: 2 221 | decay_mult: 0 222 | } 223 | convolution_param { 224 | num_output: 10 225 | kernel_size: 1 226 | stride: 1 227 | weight_filler { 228 | type: "xavier" 229 | } 230 | bias_filler { 231 | type: "constant" 232 | value: 0 233 | } 234 | } 235 | } 236 | 237 | 238 | layer { 239 | name: "loss_label" 240 | type: "SoftmaxWithLoss" 241 | bottom: "conv4-1" 242 | bottom: "label" 243 | top: "loss_label" 244 | } 245 | layer { 246 | name: "loss_regression_box" 247 | type: "EuclideanLoss" 248 | bottom: "conv4-2" 249 | bottom: "regression" 250 | top: "loss_regression_box" 251 | } 252 | 253 | 254 | layer { 255 | name: "loss_landmark" 256 | type: "EuclideanLoss" 257 | bottom: "conv4-3" 258 | bottom: "landmark" 259 | top: "loss_landmark" 260 | } 261 | 262 | -------------------------------------------------------------------------------- /script/train_sh/PNet_train.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | set -e 3 | 4 | /Users/Young/caffe/.build_release/tools/caffe train -solver /Users/Young/Documents/Programming/MTCNN/MTCNN_train/PNet_solver.prototxt -weights /Users/Young/Documents/Programming/MTCNN/model/det1.caffemodel -------------------------------------------------------------------------------- /script/train_sh/RNet_solver.prototxt: -------------------------------------------------------------------------------- 1 | net: "/Users/Young/Documents/Programming/MTCNN/MTCNN_train/RNet_train.prototxt" 2 | test_iter: 40 3 | test_interval:2500 4 | # The base learning rate, momentum and the weight decay of the network. 5 | base_lr: 0.00000675 #0.01 6 | momentum: 0.9 7 | weight_decay: 0.008 8 | # The learning rate policy 9 | lr_policy: "step" 10 | stepsize: 1000 #40000 11 | gamma: 0.0001 12 | display: 500 13 | max_iter: 1000 14 | snapshot: 500 #100000 15 | snapshot_prefix: "/Users/Young/Documents/Programming/MTCNN/MTCNN_train" 16 | solver_mode: CPU 17 | -------------------------------------------------------------------------------- /script/train_sh/RNet_train.prototxt: -------------------------------------------------------------------------------- 1 | # Enter your network definition here. 2 | # Use Shift+Enter to update the visualization.name: "RNet" 3 | layer { 4 | name: "Odata" 5 | type: "HDF5Data" 6 | top: "data" 7 | top: "labels" 8 | include { 9 | phase: TRAIN 10 | } 11 | hdf5_data_param { 12 | source: "/Users/Young/Documents/Programming/MTCNN/MTCNN_train/train_24.txt" 13 | batch_size: 100 14 | } 15 | } 16 | 17 | layer { 18 | name: "Odata" 19 | type: "HDF5Data" 20 | top: "data" 21 | top: "labels" 22 | include { 23 | phase: TEST 24 | } 25 | hdf5_data_param { 26 | source: "/Users/Young/Documents/Programming/MTCNN/MTCNN_train/test_24.txt" 27 | batch_size: 100 28 | } 29 | } 30 | 31 | layer { 32 | name: "slicer_data" 33 | type: "Slice" 34 | bottom: "labels" 35 | top: "label" 36 | top: "regression" 37 | top: "landmark" 38 | slice_param { 39 | axis: 1 40 | slice_point: 1 41 | slice_point: 5 42 | } 43 | } 44 | 45 | 46 | ########################## 47 | ###################### 48 | layer { 49 | name: "conv1" 50 | type: "Convolution" 51 | bottom: "data" 52 | top: "conv1" 53 | param { 54 | lr_mult: 0 55 | decay_mult: 0 56 | } 57 | param { 58 | lr_mult: 0 59 | decay_mult: 0 60 | } 61 | convolution_param { 62 | num_output: 28 63 | kernel_size: 3 64 | stride: 1 65 | weight_filler { 66 | type: "xavier" 67 | } 68 | bias_filler { 69 | type: "constant" 70 | value: 0 71 | } 72 | } 73 | } 74 | layer { 75 | name: "prelu1" 76 | type: "PReLU" 77 | bottom: "conv1" 78 | top: "conv1" 79 | propagate_down: true 80 | } 81 | layer { 82 | name: "pool1" 83 | type: "Pooling" 84 | bottom: "conv1" 85 | top: "pool1" 86 | pooling_param { 87 | pool: MAX 88 | kernel_size: 3 89 | stride: 2 90 | } 91 | } 92 | 93 | layer { 94 | name: "conv2" 95 | type: "Convolution" 96 | bottom: "pool1" 97 | top: "conv2" 98 | param { 99 | lr_mult: 0 100 | decay_mult: 0 101 | } 102 | param { 103 | lr_mult: 0 104 | decay_mult: 0 105 | } 106 | convolution_param { 107 | num_output: 48 108 | kernel_size: 3 109 | stride: 1 110 | weight_filler { 111 | type: "xavier" 112 | } 113 | bias_filler { 114 | type: "constant" 115 | value: 0 116 | } 117 | } 118 | } 119 | layer { 120 | name: "prelu2" 121 | type: "PReLU" 122 | bottom: "conv2" 123 | top: "conv2" 124 | propagate_down: true 125 | } 126 | layer { 127 | name: "pool2" 128 | type: "Pooling" 129 | bottom: "conv2" 130 | top: "pool2" 131 | pooling_param { 132 | pool: MAX 133 | kernel_size: 3 134 | stride: 2 135 | } 136 | } 137 | #################################### 138 | 139 | ################################## 140 | layer { 141 | name: "conv3" 142 | type: "Convolution" 143 | bottom: "pool2" 144 | top: "conv3" 145 | param { 146 | lr_mult: 0 147 | decay_mult: 0 148 | } 149 | param { 150 | lr_mult: 0 151 | decay_mult: 0 152 | } 153 | convolution_param { 154 | num_output: 64 155 | kernel_size: 2 156 | stride: 1 157 | weight_filler { 158 | type: "xavier" 159 | } 160 | bias_filler { 161 | type: "constant" 162 | value: 0 163 | } 164 | } 165 | } 166 | layer { 167 | name: "prelu3" 168 | type: "PReLU" 169 | bottom: "conv3" 170 | top: "conv3" 171 | propagate_down: true 172 | } 173 | ############################### 174 | 175 | ############################### 176 | 177 | layer { 178 | name: "conv4" 179 | type: "InnerProduct" 180 | bottom: "conv3" 181 | top: "conv4" 182 | param { 183 | lr_mult: 0 184 | decay_mult: 0 185 | } 186 | param { 187 | lr_mult: 0 188 | decay_mult: 0 189 | } 190 | inner_product_param { 191 | num_output: 128 192 | weight_filler { 193 | type: "xavier" 194 | } 195 | bias_filler { 196 | type: "constant" 197 | value: 0 198 | } 199 | } 200 | } 201 | layer { 202 | name: "prelu4" 203 | type: "PReLU" 204 | bottom: "conv4" 205 | top: "conv4" 206 | } 207 | 208 | layer { 209 | name: "conv5-1" 210 | type: "InnerProduct" 211 | bottom: "conv4" 212 | top: "conv5-1" 213 | param { 214 | lr_mult: 0 215 | decay_mult: 0 216 | } 217 | param { 218 | lr_mult: 0 219 | decay_mult: 0 220 | } 221 | inner_product_param { 222 | num_output: 2 223 | #kernel_size: 1 224 | #stride: 1 225 | weight_filler { 226 | type: "xavier" 227 | } 228 | bias_filler { 229 | type: "constant" 230 | value: 0 231 | } 232 | } 233 | } 234 | layer { 235 | name: "conv5-2" 236 | type: "InnerProduct" 237 | bottom: "conv4" 238 | top: "conv5-2" 239 | param { 240 | lr_mult: 1 241 | decay_mult: 1 242 | } 243 | param { 244 | lr_mult: 2 245 | decay_mult: 1 246 | } 247 | inner_product_param { 248 | num_output: 4 249 | #kernel_size: 1 250 | #stride: 1 251 | weight_filler { 252 | type: "xavier" 253 | } 254 | bias_filler { 255 | type: "constant" 256 | value: 0 257 | } 258 | } 259 | } 260 | 261 | layer { 262 | name: "conv5-3" 263 | type: "InnerProduct" 264 | bottom: "conv4" 265 | top: "conv5-3" 266 | param { 267 | lr_mult: 1 268 | decay_mult: 1 269 | } 270 | param { 271 | lr_mult: 2 272 | decay_mult: 1 273 | } 274 | inner_product_param { 275 | num_output: 10 276 | #kernel_size: 1 277 | #stride: 1 278 | weight_filler { 279 | type: "xavier" 280 | } 281 | bias_filler { 282 | type: "constant" 283 | value: 0 284 | } 285 | } 286 | } 287 | 288 | layer { 289 | name: "loss_label" 290 | type: "SoftmaxWithLoss" 291 | bottom: "conv5-1" 292 | bottom: "label" 293 | top: "loss_label" 294 | } 295 | layer { 296 | name: "loss_regression_box" 297 | type: "EuclideanLoss" 298 | bottom: "conv5-2" 299 | bottom: "regression" 300 | top: "loss_regression_box" 301 | } 302 | 303 | 304 | layer { 305 | name: "loss_landmark" 306 | type: "EuclideanLoss" 307 | bottom: "conv5-3" 308 | bottom: "landmark" 309 | top: "loss_landmark" 310 | } -------------------------------------------------------------------------------- /script/train_sh/RNet_train.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | set -e 3 | 4 | /Users/Young/caffe/.build_release/tools/caffe train -solver /Users/Young/Documents/Programming/MTCNN/MTCNN_train/RNet_solver.prototxt -weights /Users/Young/Documents/Programming/MTCNN/model/det2.caffemodel -------------------------------------------------------------------------------- /script/train_sh/celeba_crop/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foreverYoungGitHub/MTCNN/6c4f19fbe29cd1d34803377e66aefa3c56a76d90/script/train_sh/celeba_crop/.DS_Store -------------------------------------------------------------------------------- /script/train_sh/celeba_crop/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.6) 2 | project(celeba_crop) 3 | 4 | set(CMAKE_CXX_STANDARD 11) 5 | 6 | find_package(OpenCV) 7 | 8 | include_directories( ${OpenCV_INCLUDE_DIRS} ) 9 | 10 | set(SOURCE_FILES main.cpp celeba_crop.cpp celeba_crop.h) 11 | add_executable(celeba_crop ${SOURCE_FILES}) 12 | 13 | target_link_libraries(celeba_crop ${OpenCV_LIBS} ) -------------------------------------------------------------------------------- /script/train_sh/celeba_crop/celeba_crop.cpp: -------------------------------------------------------------------------------- 1 | #include "celeba_crop.h" 2 | 3 | vector celeba_crop::txt_read(string file) { 4 | 5 | vector result; 6 | std::ifstream img_path_file(file); 7 | while (!img_path_file.eof()) { 8 | string line; 9 | getline(img_path_file, line); 10 | if (line == "") 11 | continue; 12 | result.push_back(line); 13 | } 14 | return result; 15 | } 16 | 17 | 18 | void celeba_crop::txt_write(vector> path, string name) 19 | { 20 | ofstream file; 21 | file.open (txt_root_path_ + name + ".txt"); 22 | for(int i = 0; i < path.size(); i++) 23 | { 24 | for(int j = 0; j < path[i].size(); j++) 25 | { 26 | file << path[i][j] << " "; 27 | } 28 | file << endl; 29 | } 30 | file.close(); 31 | } 32 | 33 | void celeba_crop::seperate_path_bbox(vector path) 34 | { 35 | for(int i = 0; i < path.size(); i++) { 36 | char *cstr = new char[path[i].length() + 1]; 37 | strcpy(cstr, path[i].c_str()); 38 | char *token = std::strtok(cstr, " "); 39 | string a(token); 40 | img_path_.push_back(a); 41 | token = std::strtok(NULL, "\n"); 42 | string b(token); 43 | rects_path_.push_back(b); 44 | } 45 | } 46 | 47 | void celeba_crop::create_landmark_path(vector path) 48 | { 49 | for(int i = 0; i < path.size(); i++) { 50 | char *cstr = new char[path[i].length() + 1]; 51 | strcpy(cstr, path[i].c_str()); 52 | char *token = std::strtok(cstr, " "); 53 | token = std::strtok(NULL, "\n"); 54 | string b(token); 55 | landmark_path_.push_back(b); 56 | } 57 | } 58 | 59 | vector> celeba_crop::path_convert2_num(vector path) 60 | { 61 | vector> nums; 62 | for(int i = 0; i < path.size(); i++) 63 | { 64 | vector num; 65 | char *cstr = new char[path[i].length() + 1]; 66 | strcpy(cstr, path[i].c_str()); 67 | char *token = std::strtok(cstr, " "); 68 | while(token != 0) 69 | { 70 | float p = atof(token); 71 | num.push_back(p); 72 | token = strtok(NULL, " "); 73 | } 74 | nums.push_back(num); 75 | } 76 | return nums; 77 | } 78 | 79 | 80 | void celeba_crop::create_regression() 81 | { 82 | for(int i = 0; i < img_bbox_path_.size(); i++) 83 | { 84 | vector v2; 85 | for(int j = 0; j < 4; j++) 86 | { 87 | float v1 = (rand() % 11 - 5) * 1.0 / 100; 88 | v2.push_back(v1); 89 | } 90 | regression_nums_.push_back(v2); 91 | } 92 | } 93 | 94 | void celeba_crop::regression_rects() 95 | { 96 | for(int i = 0; i < img_bbox_path_.size(); i++) 97 | { 98 | Rect rect; 99 | rect.x = rects_num_[i][0] + rects_num_[i][2] * regression_nums_[i][0]; 100 | rect.y = rects_num_[i][1] + rects_num_[i][3] * regression_nums_[i][1]; 101 | rect.width = rects_num_[i][2] * (1 + regression_nums_[i][2]); 102 | rect.height = rects_num_[i][3] * (1 + regression_nums_[i][3]); 103 | rects_.push_back(rect); 104 | } 105 | } 106 | 107 | void celeba_crop::regression_landmark() 108 | { 109 | for(int i = 0; i < landmark_.size(); i++) 110 | { 111 | for(int j = 0; j < landmark_[i].size(); j++) 112 | { 113 | if(j % 2 == 0) 114 | landmark_[i][j] = ( landmark_[i][j] - rects_[i].x ) / rects_[i].width; 115 | 116 | else 117 | landmark_[i][j] = ( landmark_[i][j] - rects_[i].y ) / rects_[i].height; 118 | } 119 | } 120 | } 121 | 122 | void celeba_crop::crop_img() 123 | { 124 | ofstream file, file_label; 125 | file_label.open (txt_root_path_ + "label.txt"); 126 | file.open (txt_root_path_ + "crop_image.txt"); 127 | for(int i = 0; i < img_path_.size(); i++) 128 | { 129 | Mat img = imread(img_root_path_ + img_path_[i]); 130 | if(rects_[i].x < 0) rects_[i].x =0; 131 | if(rects_[i].y < 0) rects_[i].y =0; 132 | if(rects_[i].width + rects_[i].x > img.cols) rects_[i].width = img.cols - rects_[i].x ; 133 | if(rects_[i].height + rects_[i].y > img.rows) rects_[i].height = img.rows - rects_[i].y ; 134 | Mat img_crop = img(rects_[i]); 135 | imwrite(txt_root_path_ + "crop_image/" + img_path_[i], img_crop); 136 | file << txt_root_path_ + "crop_image/" + img_path_[i] << endl; 137 | file_label << "1" << endl; 138 | } 139 | file.close(); 140 | file_label.close(); 141 | } 142 | 143 | void celeba_crop::run() 144 | { 145 | 146 | img_bbox_path_ = txt_read(img_txt_path_); 147 | seperate_path_bbox(img_bbox_path_); 148 | img_landmark_path_ = txt_read(landmark_txt_path_); 149 | create_landmark_path(img_landmark_path_); 150 | landmark_ = path_convert2_num(landmark_path_); 151 | rects_num_ = path_convert2_num(rects_path_); 152 | create_regression(); 153 | regression_rects(); 154 | regression_landmark(); 155 | txt_write(landmark_, "landmark"); 156 | txt_write(regression_nums_, "rectangle"); 157 | crop_img(); 158 | } -------------------------------------------------------------------------------- /script/train_sh/celeba_crop/celeba_crop.h: -------------------------------------------------------------------------------- 1 | #ifndef CELEBA_CROP_CELEBA_CROP_H 2 | #define CELEBA_CROP_CELEBA_CROP_H 3 | 4 | #endif //CELEBA_CROP_CELEBA_CROP_H 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | using namespace std; 12 | using namespace cv; 13 | 14 | 15 | class celeba_crop 16 | { 17 | public: 18 | 19 | 20 | 21 | vector img_bbox_path_; 22 | vector img_landmark_path_; 23 | vector img_path_; 24 | vector rects_path_; 25 | vector landmark_path_; 26 | vector> landmark_; 27 | vector> rects_num_; 28 | vector rects_; 29 | vector> regression_nums_; 30 | string img_txt_path_ = "/Users/Young/Documents/dataset/celeba/bbox_100.txt"; 31 | string landmark_txt_path_ = "/Users/Young/Documents/dataset/celeba/landmarks_100.txt"; 32 | string img_root_path_ = "/Users/Young/Documents/dataset/celeba/img/"; 33 | string txt_root_path_ = "/Users/Young/Documents/dataset/celeba/"; 34 | 35 | 36 | vector txt_read(string file); 37 | void txt_write(vector> path, string name); 38 | void seperate_path_bbox(vector string); 39 | void create_landmark_path(vector string); 40 | vector> path_convert2_num(vector path); 41 | void create_regression(); 42 | void regression_rects(); 43 | void regression_landmark(); 44 | void crop_img(); 45 | void run(); 46 | }; -------------------------------------------------------------------------------- /script/train_sh/celeba_crop/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "celeba_crop.h" 3 | 4 | int main() { 5 | //positive example 6 | celeba_crop test; 7 | test.run(); 8 | 9 | //negtive example 10 | // std::fstream file("/Users/Young/Documents/dataset/negative_face/train_non_face/filename.txt"); 11 | // std::ofstream file_out; 12 | // file_out.open("/Users/Young/Documents/dataset/negative_face/train_non_face/bounding_box.txt"); 13 | 14 | // while (!file.eof()) { 15 | // string line; 16 | // getline(file, line); 17 | // if (line == "") 18 | // continue; 19 | // file_out << "0 0 0 0" << std::endl; 20 | // } 21 | 22 | return 0; 23 | } -------------------------------------------------------------------------------- /script/train_sh/generate_hdf5.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import cv2 3 | import h5py 4 | import sys 5 | #caffe_root = '/Users/xxx/caffe/' 6 | #sys.path.insert(0, caffe_root + 'python') 7 | import caffe 8 | 9 | min_img_size = 24 10 | 11 | label_path = '../dataset/label.txt' 12 | landmark_path = '../dataset/landmark.txt' 13 | regression_box_path = '../dataset/regression_box.txt' 14 | crop_image_path = '../dataset/crop_image.txt' 15 | train_file_path = '../dataset/train_24.hd5' 16 | 17 | label = np.loadtxt(label_path, int) 18 | landmark = np.loadtxt(landmark_path, float) 19 | regression_box = np.loadtxt(regression_box_path, float) 20 | 21 | label = np.transpose([label]) 22 | #landmark = np.transpose(landmark) 23 | labels = np.concatenate((label, regression_box, landmark), axis = 1) 24 | 25 | 26 | img_array = [] 27 | for line in open(crop_image_path): 28 | img = cv2.imread(line.strip()) 29 | img = cv2.resize(img, (min_img_size,min_img_size)) 30 | #img = cv2.convertTo(img, cv2.CV_32FC3, 0.0078125,-127.5*0.0078125) 31 | img = cv2.transpose(img) 32 | img_forward = np.array(img, dtype=np.float32) 33 | img_forward = np.transpose(img_forward, (2, 0, 1)) 34 | img_forward = (img_forward - 127.5) * 0.0078125 35 | img_array.append(img_forward) 36 | 37 | a = np.array(img_array, dtype=np.float32) 38 | 39 | 40 | with h5py.File(train_file_path, 'w') as f: 41 | f['data'] = a 42 | f['labels'] = labels 43 | f['regression'] = regression_box 44 | f['landmark'] = landmark 45 | -------------------------------------------------------------------------------- /script/train_sh/test_24.txt: -------------------------------------------------------------------------------- 1 | ../dataset/test_24.hd5 -------------------------------------------------------------------------------- /script/train_sh/train_24.txt: -------------------------------------------------------------------------------- 1 | ../dataset/train_24.hd5 --------------------------------------------------------------------------------