From 7935dd976977ad6b400f2aa1efa3f31b17ce243f Mon Sep 17 00:00:00 2001
From: Tiago Freitas Pereira <tiagofrepereira@gmail.com>
Date: Wed, 9 Jun 2021 16:32:02 +0200
Subject: [PATCH] Fixed bug with VGG16. The code was pointing to the
 hot-encoded instead to the fc7

---
 bob/bio/face/embeddings/opencv.py | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/bob/bio/face/embeddings/opencv.py b/bob/bio/face/embeddings/opencv.py
index 7965914e..08228eba 100644
--- a/bob/bio/face/embeddings/opencv.py
+++ b/bob/bio/face/embeddings/opencv.py
@@ -108,7 +108,7 @@ class VGG16_Oxford(OpenCVTransformer):
 
     """
 
-    def __init__(self):
+    def __init__(self, embedding_layer="fc7"):
         urls = [
             "https://www.robots.ox.ac.uk/~vgg/software/vgg_face/src/vgg_face_caffe.tar.gz",
             "http://bobconda.lab.idiap.ch/public-upload/data/bob/bob.bio.face/master/caffe/vgg_face_caffe.tar.gz",
@@ -126,6 +126,7 @@ class VGG16_Oxford(OpenCVTransformer):
         checkpoint_path = os.path.join(path, "vgg_face_caffe", "VGG_FACE.caffemodel")
 
         caffe_average_img = [129.1863, 104.7624, 93.5940]
+        self.embedding_layer = embedding_layer
 
         def preprocessor(X):
             """
@@ -152,6 +153,20 @@ class VGG16_Oxford(OpenCVTransformer):
         net = cv2.dnn.readNet(self.checkpoint_path, self.config)
         self.model = net
 
+    def transform(self, X):
+        import cv2
+
+        if self.model is None:
+            self._load_model()
+
+        X = check_array(X, allow_nd=True)
+
+        X = self.preprocessor(X)
+
+        self.model.setInput(X)
+
+        return self.model.forward(self.embedding_layer)
+
 
 def vgg16_oxford_baseline(annotation_type, fixed_positions=None):
     """
-- 
GitLab