点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

关于模型

OpenVINO自带的表情识别模型是Caffe版本的,这里使用的模型是前面一篇文章中训练生成的pytorch全卷积网络,模型基于残差网络结构全卷积分类网络。

输入格式:NCHW=1x3x64x64
输出格式:NCHW=1x8x1x1

支持八种表情识别,列表如下:

["neutral","anger","disdain","disgust","fear","happy",

"sadness","surprise"]

 转ONNX

训练好的Pytorch模型可以保存为pt文件,通过pytorch自带的脚本可以转换为ONNX模型,这一步的转换脚本如下:

dummy_input = torch.randn(1, 3, 64, 64, device='cuda')model = torch.load("./face_emotions_model.pt")output = model(dummy_input)model.eval()model.cuda()torch.onnx.export(model, dummy_input, "face_emotions_model.onnx", output_names={"output"}, verbose=True)

OpenCV DNN调用ONNX模型测试

转换为ONNX格式的模型,是可以通过OpenCV DNN模块直接调用的,调用方式如下:

1landmark_net = cv.dnn.readNetFromONNX("landmarks_cnn.onnx")2image = cv.imread("D:/facedb/test/464.jpg")3cv.imshow("input", image)4h, w, c = image.shape5blob = cv.dnn.blobFromImage(image, 0.00392, (64, 64), (0.5, 0.5, 0.5), False) / 0.56print(blob)7landmark_net.setInput(blob)8lm_pts = landmark_net.forward()9print(lm_pts)
10for x, y in lm_pts:
11    print(x, y)
12    x1 = x * w
13    y1 = y * h
14    cv.circle(image, (np.int32(x1), np.int32(y1)), 2, (0, 0, 255), 2, 8, 0)
15cv.imshow("人脸五点检测", image)
16cv.imwrite("D:/landmark_det_result.png", image)
17cv.waitKey(0)
18cv.destroyAllWindows()

运行结果如下:

ONNX转IR

如何把ONNX文件转换OpenVINO的IR文件?答案是借助OpenVINO的模型优化器组件工具,OpenVINO的模型优化器组件工具支持常见的Pytorch预训练模型与torchvision迁移训练模型的转换,

要转换ONNX到IR,首先需要安装ONNX组件支持,直接运行OpenVINO预安装脚本即可获得支持,截图如下:

然后执行下面的转换脚本即可:

加速推理

使用OpenVINO的Inference Engine加速推理,对得到的模型通过OpenVINO安装包自带的OpenCV DNN完成调用,设置加速推理引擎为Inference Engine,这部分的代码如下:

1dnn::Net emtion_net = readNetFromModelOptimizer(emotion_xml, emotion_bin);
2emtion_net.setPreferableTarget(DNN_TARGET_CPU);
3emtion_net.setPreferableBackend(DNN_BACKEND_INFERENCE_ENGINE);

其中readNetFromModelOptimizer表示使用OpenVINO模型优化器来加载文件,并使用inference engine执行加速推理。

执行推理与输出解析,得到表情分类的结果,代码如下:

1Rect box(x1, y1, x2 - x1, y2 - y1);2Mat roi = frame(box);3Mat face_blob = blobFromImage(roi, 0.00392, Size(64, 64), Scalar(0.5, 0.5, 0.5), false, false);4emtion_net.setInput(face_blob);5Mat probs = emtion_net.forward();6int index = 0;7float max = -1;8for (int i = 0; i < 8; i++) {9    const float *scores = probs.ptr<float>(0, i, 0);
10    float score = scores[0];
11    if (max < score) {
12        max = score;
13        index = i;
14    }
15}
16rectangle(frame, box, Scalar(0, 255, 0));

最终的运行结果如下图:

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

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

下载2:Python视觉实战项目52讲

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

下载3:OpenCV实战项目20讲

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

交流群

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

使用OpenVINO加速Pytorch表情识别模型相关推荐

  1. 【PaddlePaddle+OpenVINO】电表检测识别模型的部署

    转自AI Studio,原文链接:[PaddlePaddle+OpenVINO]电表检测识别模型的部署 - 飞桨AI Studio 0 背景:PaddleOCR的电表识别任务(主线之五) 我国电力行业 ...

  2. 基于人脸的常见表情识别——模型搭建、训练与测试¶

    整个训练流程包括数据接口准备.模型定义.结果保存与分析. 数据接口一般使用torchvision.Dataset定义数据的读取.torch.utils.data.Dataloader定义数据的加载. ...

  3. 面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码)

    面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码) 目录 面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码) 1.面部表情识别方法 2.面部表情识别数据集 ...

  4. 100行代码搞定实时视频人脸表情识别(附代码)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|OpenCV学堂 好就没有写点OpenCV4 + Open ...

  5. 面部表情识别3:Android实现表情识别(含源码,可实时检测)

    面部表情识别3:Android实现表情识别(含源码,可实时检测) 目录 面部表情识别3:Android实现表情识别(含源码,可实时检测) 1.面部表情识别方法 2.人脸检测方法 3.面部表情识别模型训 ...

  6. 【实战案例】表情分类人脸表情识别

    " 来源:投稿 作者:LSC 编辑:学姐 本篇文章的内容是从表情分类,到完成人脸表情识别,理论穿插实战代码.分为两部分,第一部分为表情分类实战:第二部分为人脸表情识别案例实战. 第一部分 1 ...

  7. Micropython实现表情识别控制小车运行

    一.写在前面 1.本实验是表情识别在工程应用中的先验实验,简单的说就是检验训练好的表情识别模型在PC端的输出结果能否远程控制无人小车进行简单前后左右的移动.(老实说我并不知道这玩意的实际价值是什么.. ...

  8. 基于人脸的常见表情识别 Task03笔记

    基于人脸的常见表情识别--模型搭建.训练与测试 模型搭建与训练 得到了数据之后,接下来咱们使用 PyTorch 这个框架来进行模型的训练.整个训练流程包括数据接口准备.模型定义.结果保存与分析. 1. ...

  9. 基于卷积神经网络的人脸表情识别应用--AR川剧变脸(二)

    本项目将在Android上实现一种通过识别表情类别,从而给人脸戴上不同样式脸谱的AR软件,效果如下: 基于表情识别的脸谱换脸AR安卓APP效果演示 想要实现这样一个软件,核心就是两部分: 1)使用卷积 ...

最新文章

  1. Zookeeper架构
  2. 中文.TW台湾域名首度向大陆开放
  3. S4的ESH Bug导致Search help巨慢
  4. 大学生java项目创意申请表_基于java ee的大学生作品展示系统.pdf
  5. ByteArray、16进制、字符串之间的转换
  6. python的print
  7. 1.1 了解web性能
  8. 计划任务文件 linux,Linux计划任务Crontab学习笔记(3):配置文件
  9. 中国书写工具行业市场供需与战略研究报告
  10. java保护性拷贝(effective java)
  11. if __name__ == __main___if __name__ == #x27;__main__#x27;: 究竟起什么作用,阅读本文后,其他文章不必再看...
  12. qqkey获取原理_编译原理(第3版)[刘铭][实验程序源代码]
  13. 异步通信在生活中的例子_通信技术在日常生活中的作用
  14. 短视频SEO优化教程 自媒体SEO优化技巧方法
  15. 如何将腾讯视频QLV格式转换成MP4
  16. 微信删除和拉黑哪个更绝情?
  17. mysql 1556_mysqldump: Got error: 1556: You can't use locks with log tables.
  18. 笔记本电脑计算机无法显示u盘,笔记本识别不了U盘|电脑无法识别优盘怎么办?...
  19. openEuler 文档捉虫 2.0 上线啦,一键式提交 PR,成为开源贡献者,你也可以参与,文档伴读方案正式开源!
  20. 解决git: 'subtree' is not a git command. See 'git --help'.

热门文章

  1. 怎样搞定分类表格数据?有人用TF2.0构建了一套神经网络 | 技术头条
  2. Google、Intel、Uber等巨头如何布局AI?听听他们自己人怎么说
  3. 干货 | 目标检测入门,看这篇就够了(上)
  4. MyBatis 三种批量插入方式的比较,我推荐第3个!
  5. 你还在使用 try-catch-finally 关闭资源?
  6. 机器学习算法专题(附组队学习)
  7. 谈谈你对集成学习的见解与认识,描述一下它们的优势所在?
  8. 这个假发太逼真!GAN 帮你换发型,alignment 步骤去掉生硬感
  9. 全了!从Python入门到精通
  10. 看了这7篇论文,你会完全掌握卷积神经网络!