简体   繁体   English

人脸识别 model 对训练图像给出不正确的预测

[英]Face recognition model giving incorrect prediction for trained image

I am using below code to do face recognition on the image which was used in the model training as well.我正在使用下面的代码对 model 训练中使用的图像进行人脸识别。 But when I run prediction on the same image, I get very weird result wherein it is detecting multiple faces which are incorrect.但是当我在同一张图像上运行预测时,我得到了非常奇怪的结果,它检测到多个不正确的人脸。 Result should have been only 'Aarav'结果应该只有“Aarav”

import numpy as np
import argparse
import imutils
import pickle
import cv2
import os

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,
    help="path to input image")
ap.add_argument("-d", "--detector", required=True,
    help="path to OpenCV's deep learning face detector")
ap.add_argument("-m", "--embedding-model", required=True,
    help="path to OpenCV's deep learning face embedding model")
ap.add_argument("-r", "--recognizer", required=True,
    help="path to model trained to recognize faces")
ap.add_argument("-l", "--le", required=True,
    help="path to label encoder")
ap.add_argument("-c", "--confidence", type=float, default=0.5,
    help="minimum probability to filter weak detections")
args = vars(ap.parse_args())

# load our serialized face detector from disk
print("[INFO] loading face detector...")
protoPath = os.path.sep.join([args["detector"], "deploy.prototxt"])
modelPath = os.path.sep.join([args["detector"],"res10_300x300_ssd_iter_140000.caffemodel"])
detector = cv2.dnn.readNetFromCaffe(protoPath, modelPath)

# load our serialized face embedding model from disk
print("[INFO] loading face recognizer...")
embedder = cv2.dnn.readNetFromTorch(args["embedding_model"])

# load the actual face recognition model along with the label encoder
recognizer = pickle.loads(open(args["recognizer"], "rb").read())
le = pickle.loads(open(args["le"], "rb").read())

# load the image, resize it to have a width of 600 pixels (while
# maintaining the aspect ratio), and then grab the image dimensions
image = cv2.imread(args["image"])
image = imutils.resize(image, width=600)
(h, w) = image.shape[:2]

# construct a blob from the image
imageBlob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 1.0, (300, 300),(104.0, 177.0, 123.0), swapRB=False, crop=False)
# apply OpenCV's deep learning-based face detector to localize
# faces in the input image
detector.setInput(imageBlob)
detections = detector.forward()
#print("detections",detections)
# loop over the detections
for i in range(0, detections.shape[2]):
    # extract the confidence (i.e., probability) associated with the
    # prediction
    confidence = detections[0, 0, i, 2]
    # filter out weak detections
    if confidence > args["confidence"]:
        # compute the (x, y)-coordinates of the bounding box for the
        # face
        box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
        (startX, startY, endX, endY) = box.astype("int")
        print("box",box)
        # extract the face ROI
        face = image[startY:endY, startX:endX]
        (fH, fW) = face.shape[:2]
        # ensure the face width and height are sufficiently large
        if fW < 20 or fH < 20:
            continue
        # construct a blob for the face ROI, then pass the blob
        # through our face embedding model to obtain the 128-d
        # quantification of the face
        faceBlob = cv2.dnn.blobFromImage(face, 1.0 / 255, (96, 96),(0, 0, 0), swapRB=True, crop=False)
        embedder.setInput(faceBlob)
        vec = embedder.forward()
        # perform classification to recognize the face
        preds = recognizer.predict_proba(vec)[0]
        j = np.argmax(preds)
        proba = preds[j]
        name = le.classes_[j]
        # draw the bounding box of the face along with the associated
        # probability
        text = "{}: {:.2f}%".format(name, proba * 100)
        y = startY - 10 if startY - 10 > 10 else startY + 10
        cv2.rectangle(image, (startX, startY), (endX, endY),
            (0, 0, 255), 2)
        cv2.putText(image, text, (startX, y),
            cv2.FONT_HERSHEY_SIMPLEX, 0.45, (0, 0, 255), 2)
# show the output image
cv2.imshow("Image", image)
cv2.waitKey(0)

在此处输入图像描述

Ideally the model should have learnt the image and should have given proper result on the image which is already trained.理想情况下,model 应该已经学习了图像,并且应该在已经训练的图像上给出了正确的结果。 Am I missing something?我错过了什么吗? Would need your help to debug this issue.需要您的帮助来调试此问题。

Being a part of the training set does not guarantee the correct classification for any image.作为训练集的一部分并不能保证任何图像的正确分类。

For that kind of guarantee, model should be performing with %100 accuracy on training examples, which would make the loss 0. Do you get 0 loss during your training?对于这种保证,model 应该在训练示例上以 %100 的准确率执行,这将使损失为 0。你在训练期间得到 0 损失吗? If not, maybe it is not surprising to have some errors in the models predictions on training examples.如果不是,那么在模型对训练样例的预测中出现一些错误可能也就不足为奇了。

Because it did not entirely fit on the training set yet.因为它还没有完全适合训练集。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 带有 opencv 和 dlib face_recognition 库的人脸识别考勤系统给出不正确的识别 - face recognition attendance system with opencv and dlib face_recognition libraries giving incorrect recognitions Keras 功能 model 提供高验证准确度但预测不正确 - Keras Functional model giving high validation accuracy but incorrect prediction Keras:使用训练模型进行预测 - Keras : Prediction using Trained Model 如何对这个训练有素的 model 进行预测? - How to make a prediction on this trained model? 我怎样才能预测下面的 model。 我想在训练有素的 model 中输入图像并获得 output? - How can I make prediction for the model below. I want to feed an image in trained model and get the output? 如何使用经过训练的 pytorch model 进行预测 - How to use trained pytorch model for prediction Theano教程:使用训练模型进行预测 - Theano tutorial:Prediction Using a Trained Model 如何在 Keras 中使用经过训练的 model 执行预测 - How to perform prediction with a trained model in Keras 应用经过训练的 BERT model 进行预测部署 - Apply trained BERT model for prediction deployment 如何在 Tensorflow 中对经过训练的模型进行简单的预测? - How to make a simple prediction in Tensorflow on a trained model?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM