OpenVINO中的FCOS人脸检测模型代码演示

  • Post author:
  • Post category:其他


点击上方“


小白学视觉


”,选择加”

星标

“或“

置顶

重磅干货,第一时间送达


模型输入与输出

OpenVINO 2020R04版本的官方模型库中有两个人脸检测模型标号分别为:

  • face-detection-0105 – MobileNetv2 + FCOS

  • face-detection-0106 – RestNet152 + ATSS

这里需要注意一下,FCOS与ATSS模型检测头输出跟SSD模型不同,官方支持的IR文件有两个输出数据分别是:

  • boxes: [Nx5],

  • labels:[N]

其中N表示得到预测框个数,5表示预测框的左上角与右下角坐标,加上分类得分-5个元素为:

[x_min, y_min, x_max, y_max, conf]

这里需要特别注意的是,跟SSD与FasterRCNN对象检测网络不同,它输出的是基于输入图像大小的真实坐标信息,不是0~1之间的值。输入格式是:NCHW=[1xNxHxW],图像通道顺序BGR。

下载这两个模型,只需要执行下面的脚本语句即可:

9493c4ba53ce3b40f555b76f789912e1.png

就可以完成下载!

代码演示

代码实现基于OpenVINO Python SDK,以FCOS为例!首先加载模型,代码如下:

1from __future__ import print_function
 2import cv2
 3import time
 4import logging as log
 5from openvino.inference_engine import IECore
 6
 7model_xml = "D:/projects/models/face-detection-0105/FP32/face-detection-0105.xml"
 8model_bin = "D:/projects/models/face-detection-0105/FP32/face-detection-0105.bin"
 9
10log.info("Creating Inference Engine")
11ie = IECore()
12# Read IR
13net = ie.read_network(model=model_xml, weights=model_bin)

获取输入与输出格式化信息

1log.info("Preparing input blobs")
 2input_it = iter(net.input_info)
 3input_blob = next(input_it)
 4print(input_blob)
 5output_it = iter(net.outputs)
 6out_labels = next(output_it)
 7out_boxes = next(output_it)
 8
 9# Read and pre-process input images
10print(net.input_info[input_blob].input_data.shape)

对输入数据实现转换为NCHW格式

1image = cv2.imread("D:/images/selfie.jpg")
 2ih, iw, ic = image.shape
 3rh = ih / 416
 4rw = iw / 416
 5print("rate of height:",rh, "rate of widht:",rw)
 6image_blob = cv2.resize(image, (416, 416))
 7image_blob = image_blob.transpose(2, 0, 1)  # Change data layout from HWC to CHW
 8
 9# Loading model to the plugin
10exec_net = ie.load_network(network=net, device_name="CPU")

执行推理

1# Start sync inference
2log.info("Starting inference in synchronous mode")
3inf_start1 = time.time()
4res = exec_net.infer(inputs={input_blob:[image_blob]})
5inf_end1 = time.time() - inf_start1
6print("inference time(ms) : %.3f" % (inf_end1 * 1000))

解析输出

1# Processing output blob
 2log.info("Processing output blob")
 3res = res[out_boxes]
 4face_cnt = 0
 5for obj in res:
 6    if float(obj[4]) > 0.25:
 7        print(obj)
 8        face_cnt += 1
 9        xmin = int(obj[0]*rw)
10        ymin = int(obj[1]*rh)
11        xmax = int(obj[2]*rw)
12        ymax = int(obj[3]*rh)
13        cv2.rectangle(image, (xmin, ymin), (xmax, ymax), (0, 0, 255), 2, 8, 0)
14cv2.putText(image, "Total Detected Face: %d"%face_cnt, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 2)
15cv2.imshow("FOCS Face detection", image)
16print("total faces : ", face_cnt)
17cv2.imwrite("D:/result_fcos.png", image)
18cv2.waitKey(0)
19cv2.destroyAllWindows()

运行截图如下:

4b70c5404038280f81dbc7345a7a22c0.png



好消息!


小白学视觉知识星球

开始面向外开放啦👇👇👇


7bbde77c22ea8a2d9c87644e805297f7.jpeg

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~