diff --git a/.gitignore b/.gitignore
index 4826b944..d886c992 100644
--- a/.gitignore
+++ b/.gitignore
@@ -53,3 +53,4 @@ matlab_runners/Demos/demo_img/
matlab_runners/Demos/demo_vid/
matlab_runners/Demos/output_features_seq/
matlab_runners/Demos/output_features_vid/
+exe/FeatureExtraction/experiments/
diff --git a/lib/local/LandmarkDetector/LandmarkDetector.vcxproj b/lib/local/LandmarkDetector/LandmarkDetector.vcxproj
index c86c51f4..017aa60e 100644
--- a/lib/local/LandmarkDetector/LandmarkDetector.vcxproj
+++ b/lib/local/LandmarkDetector/LandmarkDetector.vcxproj
@@ -195,6 +195,7 @@ xcopy /I /E /Y /D "$(SolutionDir)lib\3rdParty\OpenCV3.1\classifiers" "$(OutDir)c
Use
+
Use
@@ -255,6 +256,7 @@ xcopy /I /E /Y /D "$(SolutionDir)lib\3rdParty\OpenCV3.1\classifiers" "$(OutDir)c
+
diff --git a/lib/local/LandmarkDetector/LandmarkDetector.vcxproj.filters b/lib/local/LandmarkDetector/LandmarkDetector.vcxproj.filters
index 07e70f23..fdef973c 100644
--- a/lib/local/LandmarkDetector/LandmarkDetector.vcxproj.filters
+++ b/lib/local/LandmarkDetector/LandmarkDetector.vcxproj.filters
@@ -4,6 +4,30 @@
source
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
+
+ source
+
source
@@ -19,30 +43,38 @@
source
-
- source
-
-
- source
-
-
- source
-
-
- source
-
-
- source
-
-
-
- source
-
headers
+
+ headers
+
+
+ headers
+
+
+ headers
+
+
+ headers
+
+
+ headers
+
+
+ headers
+
+
+ headers
+
+
+ headers
+
+
+ headers
+
headers
@@ -58,35 +90,13 @@
headers
-
- headers
-
-
- headers
-
-
- headers
-
-
- headers
-
-
- headers
-
-
- headers
-
-
-
- headers
-
- {75157eb9-2d21-482a-a1e2-e3e4100fffd7}
+ {4c468912-7bbd-415e-a34e-3d8470740945}
- {f50f893d-a6b2-4e45-8f94-529042834e49}
+ {55e469df-489d-4acb-86cf-bd2d915e69ad}
\ No newline at end of file
diff --git a/lib/local/LandmarkDetector/include/CNN_utils.h b/lib/local/LandmarkDetector/include/CNN_utils.h
new file mode 100644
index 00000000..80db6e10
--- /dev/null
+++ b/lib/local/LandmarkDetector/include/CNN_utils.h
@@ -0,0 +1,64 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2017, Tadas Baltrusaitis, all rights reserved.
+//
+// ACADEMIC OR NON-PROFIT ORGANIZATION NONCOMMERCIAL RESEARCH USE ONLY
+//
+// BY USING OR DOWNLOADING THE SOFTWARE, YOU ARE AGREEING TO THE TERMS OF THIS LICENSE AGREEMENT.
+// IF YOU DO NOT AGREE WITH THESE TERMS, YOU MAY NOT USE OR DOWNLOAD THE SOFTWARE.
+//
+// License can be found in OpenFace-license.txt
+//
+// * Any publications arising from the use of this software, including but
+// not limited to academic journal and conference publications, technical
+// reports and manuals, must cite at least one of the following works:
+//
+// OpenFace: an open source facial behavior analysis toolkit
+// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency
+// in IEEE Winter Conference on Applications of Computer Vision, 2016
+//
+// Rendering of Eyes for Eye-Shape Registration and Gaze Estimation
+// Erroll Wood, Tadas Baltrušaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling
+// in IEEE International. Conference on Computer Vision (ICCV), 2015
+//
+// Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection
+// Tadas Baltrušaitis, Marwa Mahmoud, and Peter Robinson
+// in Facial Expression Recognition and Analysis Challenge,
+// IEEE International Conference on Automatic Face and Gesture Recognition, 2015
+//
+// Constrained Local Neural Fields for robust facial landmark detection in the wild.
+// Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency.
+// in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+// Header for all external CLNF/CLM-Z/CLM methods of interest to the user
+#ifndef __CNN_UTILS_h_
+#define __CNN_UTILS_h_
+
+// OpenCV includes
+#include
+
+using namespace std;
+
+namespace LandmarkDetector
+{
+ //===========================================================================
+ // Various CNN layers
+
+ // Parametric ReLU with leaky weights (separate ones per channel)
+ void PReLU(std::vector >& input_output_maps, cv::Mat_ prelu_weights);
+
+ // The fully connected layer
+ void fully_connected(std::vector >& outputs, const std::vector >& input_maps, cv::Mat_ weights, cv::Mat_ biases);
+
+ // Max pooling layer with parametrized stride and kernel sizes
+ void max_pooling(std::vector >& outputs, const std::vector >& input_maps, int stride_x, int stride_y, int kernel_size_x, int kernel_size_y);
+
+ // Convolution using FFT optimization rather than matrix multiplication
+ void convolution_fft2(std::vector >& outputs, const std::vector >& input_maps, const std::vector > >& kernels, const std::vector& biases, vector