OpenVINO中两个高分辨率的人脸检测模型

2021-11-16 11:33:46 浏览数 (1)

OpenVINO中提供了八个人脸检测的相关模型,其中有两个与剩余的六个是基于不同的对象检测头实现。今天这里就重点介绍一下这两个与众不同的人脸检测预训练模型的使用。 模型说明

这两个预训练模型名称分别是:

代码语言:javascript复制
face-detection-0205
face-detection-0206

这两个模型的检测头分别是基于FCOS与ATSS实现的,其中FOCS的检测头输出如下:

两个模型输入图象格式分别是:

代码语言:javascript复制
face-detection-0205 NCHW=1x3x416x416
face-detection-0206  NCHW=1x3x640x640

输出格式:

代码语言:javascript复制
BGR顺序

两个输出层分别是Boxes表示检测框label表示对象

Boxes的数据格式为Nx5,其中N表示数目,5表示数据如下:

代码语言:javascript复制
[`x_min`, `y_min`, `x_max`, `y_max`, `conf`]
- (`x_min`, `y_min`) – 检测框左上角坐标
- (`x_max`, `y_max`) – 检测框右下角坐标
- `conf` - 置信度

预测出来的坐标值是基于输入图象大小的实际坐标值,conf值在0~1之间。

用法演示

演示如何使用OpenVINO中的FCOS与ATSS人脸检测模型!

代码语言:javascript复制
import cv2 as cv
import time

from openvino.inference_engine import IECore

ie = IECore()
for device in ie.available_devices:
    print(device)

# Read IR
net = ie.read_network(model=face_xml, weights=face_bin)

input_blob = next(iter(net.input_info))
out_blob = next(iter(net.outputs))

# 输入设置
n, c, h, w = net.input_info[input_blob].input_data.shape

# 设备关联推理创建
exec_net = ie.load_network(network=net, device_name="CPU")

cap = cv.VideoCapture("D:/images/video/Boogie_Up.mp4")
while True:
    inf_start = time.time()
    ret, src = cap.read()
    if ret is not True:
        break
    # 处理输入图象
    image = cv.resize(src, (w, h))
    image = image.transpose(2, 0, 1)

    # 推理
    prob = exec_net.infer(inputs={input_blob: [image]})

    # 后处理
    ih, iw, ic = src.shape
    res = prob["boxes"]
    for obj in res:
        if obj[4] > 0.5:
            xmin = int(obj[0] * iw / w)
            ymin = int(obj[1] * ih / h)
            xmax = int(obj[2] * iw / w)
            ymax = int(obj[3] * ih / h)
            cv.rectangle(src, (xmin, ymin), (xmax, ymax), (0, 255, 255), 2, 8)
            cv.putText(src, str("%.3f" % obj[4]), (xmin, ymin), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1, 8)
    inf_end = time.time() - inf_start
    cv.putText(src, "infer time(ms): %.3f, FPS: %.2f" % (inf_end * 1000, 1 / (inf_end   0.0001)), (10, 50),
               cv.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 255), 2, 8)
    cv.imshow("face_detect", src)
    c = cv.waitKey(1)
    if c == 27: # ESC
        break
cv.destroyAllWindows()

运行结果如下:

i7CPU跑出这个速度还不错!

0 人点赞