How to improve the performance of Caffe with OpenCV in Python?

我们两清 提交于 2020-01-06 07:48:08

问题


I am following this tutorial Face detection with OpenCV and deep learning to create and face detection software using OpenCV3, Caffe and Python3. This is the used code:

    # USAGE
    # python detect_faces.py --image rooster.jpg --prototxt deploy.prototxt.txt --model res10_300x300_ssd_iter_140000.caffemodel

# import the necessary packages
import numpy as np
import argparse
import cv2

# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,
                help="path to input image")
ap.add_argument("-p", "--prototxt", required=True,
                help="path to Caffe 'deploy' prototxt file")
ap.add_argument("-m", "--model", required=True,
                help="path to Caffe pre-trained model")
ap.add_argument("-c", "--confidence", type=float, default=0.40,
                help="minimum probability to filter weak detections")
args = vars(ap.parse_args())

# load our serialized model from disk
print("[INFO] loading model...")
net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])

# load the input image and construct an input blob for the image
# by resizing to a fixed 300x300 pixels and then normalizing it
image = cv2.imread(args["image"])
(h, w) = image.shape[:2]
print(h)
dimension_x =h
dimension_y=h
print(image.shape[:2])
blob = cv2.dnn.blobFromImage(cv2.resize(image, (dimension_x, dimension_y)), 1.0, (dimension_x, dimension_y), (104.0, 177.0, 123.0))
# pass the blob through the network and obtain the detections and
# predictions
print("[INFO] computing object detections...")
net.setInput(blob)
detections = net.forward()

print(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 by ensuring the `confidence` is
    # greater than the minimum confidence
    if confidence > args["confidence"]:
        # compute the (x, y)-coordinates of the bounding box for the
        # object
        box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
        (startX, startY, endX, endY) = box.astype("int")
        print(confidence, startX, startY, endX, endY )
        print(box)
        # draw the bounding box of the face along with the associated
        # probability
        text = "{:.2f}%".format(confidence * 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)

print(type(image))
# show the output image
cv2.imshow("Output", image)
cv2.waitKey(0)

When I run the the code from the command line using this command:

python detect_faces.py  --prototxt  deploy.prototxt.txt --model res10_300x300_ssd_iter_140000.caffemodel --confidence=0.45 --image 14.jpg

I get this result 2: * Source*

The result is quite good, but we notice at the most lower-left location on the picture where I drew a blue circle that the program has detected the face of the girl twice. The first detection is good, but the second one isn't! I have searched online for a method to give the model/program feedback so that it will learn that the detected object (surrounded by blue circle and has 51.11% accuracy isn't a face. So it can avoid giving it back as face!

So my question is, how can I finetune the used Caffe model to exclude non-face objects which are detected as faces for the future face detection tasks?

My question is not only about this specific situation, but in general for all object which are detected as faces while they are not. The used image is just an example.


回答1:


@Peshmerge, For a specific image you can vary input blob dimensions to achieve the best results. In example, 900x900:

python object_detection.py --model opencv_face_detector.caffemodel --config opencv_face_detector.prototxt --mean 104 177 123  --thr 0.4 --input P1280471.JPG --width 900 --height 900

a script: https://github.com/opencv/opencv/blob/master/samples/dnn/object_detection.py



来源:https://stackoverflow.com/questions/49633399/how-to-improve-the-performance-of-caffe-with-opencv-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!