├── .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