0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度学习中动作识别网络学习

英特尔物联网 来源:英特尔物联网 作者:英特尔物联网 2021-06-25 10:32 次阅读

动作识别网络

深度学习在人体动作识别领域有两类主要的网络,一类是基于姿态评估,基于关键点实现的动作识别网络;另外一类是直接预测的动作识别网络。关于姿态评估相关的网络模型应用,我们在前面的文章中已经介绍过了。OpenVINO2021.2版本中支持的动作识别网络都不是基于关键点输出的,而是基于Box直接预测,当前支持动作识别的预训练模型与识别的动作数目支持列表如下:

12dd20c8-d50f-11eb-9e57-12bb97331649.png

表-1

这些网络的输出都是基于SSD检测头实现对象检测与动作预测。

输入与输出格式

以person-detection-action-recognition-0005模型为例说明它们的输入与输出数据格式支持,我也不知道什么原因(个人猜测因为Caffe框架的原因),网络的输出居然都是SSD原始检测头,怎么解析,我有妙招,稍后送上!先看一下输入与输出格式说明:

输入格式:

格式 NCHW=[1x3x400x680] ,Netron实际查看:

注意:OpenVINO2021.2安装之后的文档上格式说明是NHWC

输出格式:

输出有七个分支头的数据,它们的名称跟维度格式列表如下:

12f04c16-d50f-11eb-9e57-12bb97331649.png

表-2

关于输出格式的解释,首先是num_priors值是多少,骨干网络到SSD输出头,是实现了16倍的降采样,最终输出的h x w=25x43然后每个特征点预测4个PriorBox, 每个特征点预测动作,总计有三类的动作,所以动作预测输出为: [b, 3, h, w] = [1x3x25x43],总计PriorBoxes数目为:num_priors=25x43x4=4300,这些都是SSD检测头的原始输出,没有非最大抑制,没有经过转换处理,所以想直接解析它们对开发应用的人来说是一个大麻烦!

输出数据解析与处理问题

person-detection-action-recognition-0005网络推理之后的输出数据解析跟后处理特别的复杂,怎么解析原始输出头是个技术活,我从示例代码中提取跟整理出来两个C++文件,它们是:

action_detector.h

cnn.h

以及它们的实现文件:

action_detector.cpp

cnn.cpp

这个其中最重要的就是有个ActionDetection类,它有几个方法,分别是:

void enqueue(const cv::Mat &frame)

void submitRequest()

void wait()

DetectedActions fetchResults()

这几个方法的解释分别如下:

enqueue方法的就是实现了推理请求创建与图像数据的输入设置,它的代码实现如下:

if (!request) {

request = net_.CreateInferRequestPtr();

}

width_ = static_cast《float》(frame.cols);

height_ = static_cast《float》(frame.rows);

Blob::Ptr inputBlob = request-》GetBlob(input_name_);

matU8ToBlob《uint8_t》(frame, inputBlob);

enqueued_frames_ = 1;

submitRequest方法,就是执行推理,支持同步与异步推理执行模型,它的代码实现如下:

if (request == nullptr) return;

if (isAsync) {

request-》StartAsync();

}

else {

request-》Infer();

}

wait方法,当同步推理时候无需调用,异步推理调用

fetchResults方法,该方法是推理过程中最复杂的部分,负责解析输出的七个分支数据,生成Box与action标签预测。简单的说它的执行过程是这样,首先获取输出的七个输出数据,然后转换为基于Mat的数据,然后循环每个特征图的特征点预测Box与置信得分,大于阈值的置信得分对应的预测Box与PriorBox计算真实的BOX坐标,同时阈值化处理Action的置信得分,最终对结果完整非最大抑制之后输出,得到数据结构为:

struct DetectedAction {

/** @brief BBox of detection */

cv::Rect rect;

/** @brief Action label */

int label;

/** @brief Confidence of detection */

float detection_conf;

/** @brief Confidence of predicted action */

float action_conf;

这样就完成了对输出的数据解析。

这个就是上述四个相关依赖文件,我已经把其他不相关的或者非必要的依赖全部去掉,基于这四个相关文件,就可以实现对表-1中动作识别模型的推理与解析输出显示。

动作识别代码演示

动作识别代码演示基于person-detection-action-recognition-0005网络模型完成,该模型是基于室内场景数据训练生成的,适合于教育智慧教室应用场景。首先需要初始化动作检测类与初始化推理引擎加载,然后配置动作检测类的相关参数,这些参数主要包括以下:

- 模型的权重文件路径

- 推理引擎的计算设备支持

- 对象检测阈值

- 动作预测阈值

- 支持动作类别数目

- 是否支持异步推理

等等。

配置完成之后设置与初始化ActionDetection类,然后就可以直接调用上述提到几个类方法完成整个推理与输出,根据输出结果绘制与显示即可,这部分的代码如下:

cv::Mat frame = cv::imread(“D:/action_001.png”);

InferenceEngine::Core ie;

std::unique_ptr《AsyncDetection《DetectedAction》》 action_detector;

// Load action detector

ActionDetectorConfig action_config(model_xml);

action_config.deviceName = “CPU”;

action_config.ie = ie;

action_config.is_async = false;

action_config.detection_confidence_threshold = 0.1f;

action_config.action_confidence_threshold = 0.1f;

action_config.num_action_classes = 3;

action_detector.reset(new ActionDetection(action_config));

action_detector-》enqueue(frame);

action_detector-》submitRequest();

DetectedActions actions = action_detector-》fetchResults();

std::cout 《《 actions.size() 《《 std::endl;

for (int i = 0; i 《 actions.size(); i++) {

std::cout 《《 actions[i].rect 《《 std::endl;

std::cout 《《 actions[i].label 《《 std::endl;

cv::rectangle(frame, actions[i].rect, cv::Scalar(0, 0, 255), 2, 8, 0);

putText(frame, action_text_labels[actions[i].label], actions[i].rect.tl(), cv::FONT_HERSHEY_SIMPLEX, 0.75, cv::Scalar(0, 0, 255), 2, 8);

}

cv::imshow(“动作识别演示”, frame);

cv::waitKey(0);

return 0;

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 深度学习
    +关注

    关注

    73

    文章

    5240

    浏览量

    119936

原文标题:OpenVINO™ 室内动作识别

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    详解深度学习、神经网络与卷积神经网络的应用

    在如今的网络时代,错综复杂的大数据和网络环境,让传统信息处理理论、人工智能与人工神经网络都面临巨大的挑战。近些年,深度学习逐渐走进人们的视线
    的头像 发表于 01-11 10:51 734次阅读
    详解<b class='flag-5'>深度</b><b class='flag-5'>学习</b>、神经<b class='flag-5'>网络</b>与卷积神经<b class='flag-5'>网络</b>的应用

    深度学习在语音识别中的应用及挑战

    的挑战。 二、深度学习在语音识别中的应用 1.基于深度神经网络的语音识别
    的头像 发表于 10-10 18:14 502次阅读

    深度学习的由来 深度学习的经典算法有哪些

    深度学习作为机器学习的一个分支,其学习方法可以分为监督学习和无监督学习。两种方法都具有其独特的
    发表于 10-09 10:23 365次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>的由来 <b class='flag-5'>深度</b><b class='flag-5'>学习</b>的经典算法有哪些

    深度学习在医学图像分割与病变识别的应用实战

    等方面具有重要意义。本文将介绍这一领域的背景、挑战,以及通过一个代码实例展示如何利用深度学习方法进行医学图像分割与病变识别。 背景与挑战医学图像分割是将医学影像的结构区域分离出来,
    发表于 09-04 11:11

    深度学习的定义和特点 深度学习典型模型介绍

    深度学习(Deep Learning)是一种基于人工神经网络的机器学习算法,其主要特点是模型由多个隐层组成,可以自动地学习特征,并进行预测或
    发表于 08-21 18:22 1295次阅读

    深度学习框架和深度学习算法教程

    了基于神经网络的机器学习方法。 深度学习算法可以分为两大类:监督学习和无监督学习。监督
    的头像 发表于 08-17 16:11 727次阅读

    深度学习算法库框架学习

    深度学习算法库框架的相关知识点以及它们之间的比较。 1. Tensorflow Tensorflow是Google家的深度学习框架,已经成为深度
    的头像 发表于 08-17 16:11 441次阅读

    深度学习框架的作用是什么

    深度学习框架的作用是什么 深度学习是一种计算机技术,它利用人工神经网络来模拟人类的学习过程。由于
    的头像 发表于 08-17 16:10 1175次阅读

    深度学习框架是什么?深度学习框架有哪些?

    深度学习框架是什么?深度学习框架有哪些?  深度学习框架是一种软件工具,它可以帮助开发者轻松快速
    的头像 发表于 08-17 16:03 1787次阅读

    什么是深度学习算法?深度学习算法的应用

    。 在深度学习中,使用了一些快速的算法,比如卷积神经网络以及深度神经网络,这些算法在大量数据处理和图像
    的头像 发表于 08-17 16:03 1490次阅读

    深度学习是什么领域

    深度学习是什么领域  深度学习是机器学习的一种子集,由多层神经网络组成。它是一种自动
    的头像 发表于 08-17 16:02 1223次阅读

    深度学习算法简介 深度学习算法是什么 深度学习算法有哪些

    深度学习算法作为其中的重要组成部分,不仅可以为诸如人工智能、图像识别以及自然语言处理等领域提供支持,同时也受到了越来越多的关注和研究。在本文中,我们将着重介绍深度
    的头像 发表于 08-17 16:02 6847次阅读

    深度学习基本概念

    深度学习基本概念  深度学习是人工智能(AI)领域的一个重要分支,它模仿人类神经系统的工作方式,使用大量数据训练神经网络,从而实现自动化的模
    的头像 发表于 08-17 16:02 1169次阅读

    深度学习视角下的猫狗图像识别实现

    来源: 易百纳技术社区, 作者: 稗子酿的酒 人工智能技术在图像识别领域取得了显著进展,其中基于深度学习的图像分类方法在猫狗图像识别中表现出色。本文将介绍使用
    的头像 发表于 08-15 10:38 1944次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>视角下的猫狗图像<b class='flag-5'>识别</b>实现

    AI、机器学习深度学习的区别及应用

    深度学习和神经网络的区别在于隐藏层的深度。一般来说,神经网络的隐藏层要比实现深度
    发表于 07-28 10:44 331次阅读
    AI、机器<b class='flag-5'>学习</b>和<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的区别及应用