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

    文章

    5590

    浏览量

    123890

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何深度学习机器视觉的应用场景

    检测应用 微细缺陷识别:检测肉眼难以发现的微小缺陷和异常 纹理分析:对材料表面纹理进行智能分析和缺陷识别 3D表面重建:通过深度学习进行高精度3D建模和检测 电子行业应用 PCB板复杂
    的头像 发表于 11-27 10:19 43次阅读

    如何在机器视觉中部署深度学习神经网络

    图 1:基于深度学习的目标检测可定位已训练的目标类别,并通过矩形框(边界框)对其进行标识。 在讨论人工智能(AI)或深度学习时,经常会出现“神经网络
    的头像 发表于 09-10 17:38 675次阅读
    如何在机器视觉中部署<b class='flag-5'>深度</b><b class='flag-5'>学习</b>神经<b class='flag-5'>网络</b>

    深度学习对工业物联网有哪些帮助

    深度学习作为人工智能的核心分支,通过模拟人脑神经网络的层级结构,能够自动从海量工业数据中提取复杂特征,为工业物联网(IIoT)提供了从数据感知到智能决策的全链路升级能力。以下从技术赋能、场景突破
    的头像 发表于 08-20 14:56 753次阅读

    自动驾驶Transformer大模型会取代深度学习吗?

    [首发于智驾最前沿微信公众号]近年来,随着ChatGPT、Claude、文心一言等大语言模型在生成文本、对话交互等领域的惊艳表现,“Transformer架构是否正在取代传统深度学习”这一话题一直被
    的头像 发表于 08-13 09:15 3910次阅读
    自动驾驶<b class='flag-5'>中</b>Transformer大模型会取代<b class='flag-5'>深度</b><b class='flag-5'>学习</b>吗?

    深度学习遇上嵌入式资源困境,特征空间如何破局?

    多层神经网络的非线性变换拟合规律,理论上几乎可以描述和模拟一切规律,但实际上该过程效率极低 —— 其计算复杂度往往呈指数级增长。这一特性使得深度学习与端侧设备的资源约束存在根本性矛盾,导致其在端侧 AI 实施过程
    发表于 07-14 14:50 1114次阅读
    当<b class='flag-5'>深度</b><b class='flag-5'>学习</b>遇上嵌入式资源困境,特征空间如何破局?

    深度学习赋能:正面吊车载箱号识别系统的核心技术

    在现代物流与智慧港口建设,集装箱的高效精准识别是提升作业效率的关键环节。基于OCR+AI深度学习技术的正面吊车载箱号识别系统,凭借99%以
    的头像 发表于 05-07 10:10 427次阅读

    嵌入式AI技术之深度学习:数据样本预处理过程中使用合适的特征变换对深度学习的意义

      作者:苏勇Andrew 使用神经网络实现机器学习网络的每个层都将对输入的数据做一次抽象,多层神经网络构成深度
    的头像 发表于 04-02 18:21 1277次阅读

    厂家芯资讯|WTK6900系列语音识别芯片自学习功能深度答疑

    在智能硬件全面拥抱语音交互的时代,广州唯创电子WTK6900系列芯片凭借其独特的离线自学习能力,已成为智能家居、工业控制等领域的核心交互模块。本文针对实际应用的高频问题,深度解析故障排除方法与优化
    的头像 发表于 03-20 09:13 641次阅读
    厂家芯资讯|WTK6900系列语音<b class='flag-5'>识别</b>芯片自<b class='flag-5'>学习</b>功能<b class='flag-5'>深度</b>答疑

    SLAMTEC Aurora:把深度学习“卷”进机器人日常

    在人工智能和机器人技术飞速发展的今天,深度学习与SLAM(同步定位与地图构建)技术的结合,正引领着智能机器人行业迈向新的高度。最近科技圈顶流DeepSeek简直杀疯了!靠着逆天的深度学习
    的头像 发表于 02-19 15:49 721次阅读

    军事应用深度学习的挑战与机遇

    ,并广泛介绍了深度学习在两个主要军事应用领域的应用:情报行动和自主平台。最后,讨论了相关的威胁、机遇、技术和实际困难。主要发现是,人工智能技术并非无所不能,需要谨慎应用,同时考虑到其局限性、网络安全威胁以及
    的头像 发表于 02-14 11:15 818次阅读

    如何优化BP神经网络学习

    优化BP神经网络学习率是提高模型训练效率和性能的关键步骤。以下是一些优化BP神经网络学习率的方法: 一、理解学习率的重要性
    的头像 发表于 02-12 15:51 1418次阅读

    BP神经网络深度学习的关系

    BP神经网络深度学习之间存在着密切的关系,以下是对它们之间关系的介绍: 一、BP神经网络的基本概念 BP神经网络,即反向传播神经
    的头像 发表于 02-12 15:15 1338次阅读

    深度学习入门:简单神经网络的构建与实现

    深度学习,神经网络是核心模型。今天我们用 Python 和 NumPy 构建一个简单的神经网络。 神经
    的头像 发表于 01-23 13:52 838次阅读

    AI自动化生产:深度学习在质量控制的应用

    生产效率、保证产品质量方面展现出非凡的能力。阿丘科技「AI干货补给站」推出《AI自动化生产:深度学习在质量控制的应用》文章,探讨深度学习
    的头像 发表于 01-17 16:35 1208次阅读
    AI自动化生产:<b class='flag-5'>深度</b><b class='flag-5'>学习</b>在质量控制<b class='flag-5'>中</b>的应用

    传统机器学习方法和应用指导

    在上一篇文章,我们介绍了机器学习的关键概念术语。在本文中,我们会介绍传统机器学习的基础知识和多种算法特征,供各位老师选择。 01 传统机器学习 传统机器
    的头像 发表于 12-30 09:16 1968次阅读
    传统机器<b class='flag-5'>学习</b>方法和应用指导