OpenVINO 101:从图像识别到视频识别(上)
笔者:梁羽
本文引用地址:http://www.amcfsurvey.com/article/202109/428499.htm计算机视觉(CV)是人工智能研究的热点方向之一,其核心在于如何让机器“看见”和“理解”——通过算法从照片、视频等媒介中提取高层次信息并加以利用。
随着全球计算能力和数据量的双增长,计算机视觉取得了长足的进展,在自动驾驶、智能安防、体育运动(如记录分析运动员跑姿就使用了AI助力的人体姿势估计)等领域遍地开花。
运动生物力学专家分析苏炳添训练时的跑姿
英特尔3DAT技术¹(三维运动员跟踪),基于OpenVINO框架开发
一般来说,常见的计算机视觉任务基于静止的单帧图像进行,主要采用机器学习和深度学习两类方法。
在GPU算力足以支持复杂神经网络之前,机器学习方法一度是计算机视觉领域的金标准,作为代表的有用于图像分类的支持向量机(SVM)、用于特征提取的Bag-of-Features模型(SIFT、MSER等)、用于人脸识别的Viola-Jones算法等。这些经典算法大多在开源计算机视觉库OpenCV中有实现,可以参考网上的入门资料(比如这篇【OpenCV+Python计算机视觉导学】²)进行学习,在此不再展开。
而后,以2015年为界,神经网络在ImageNet图片分类比赛中超越人类水平³,拉开了深度学习在计算机视觉领域大量应用的序幕。基于深度学习的图片识别以卷积神经网络(CNN)进行特征提取、多层感知机(MLP)进行分类,并在其上衍生出了注意力机制、FPN、Transformer、NAS等新架构和研究方法,在计算机视觉任务的准确度、运行速度和泛用性上都有很大提升。
使用深度学习进行对象检测/对象跟踪
设备算力的增长也带来了另一个好处,计算机视觉学者们得以将目标从图片转向视频,让算法端到端地捕捉视频每一帧之间的关系。通过单帧图像,算法能知道某一瞬间的情况(场景里有哪些物体、户外是晴天还是雨天),而基于视频的识别能够挖掘出更多信息,例如让计算机理解一段时间内发生的事件:
图片识别:“场景里有两个运动员。”
视频识别:“场景里的两个运动员正在打羽毛球。”
在开始介绍视频相关的算法前,我们将先从图像识别开始,对基于深度学习的计算机视觉有些概念上的认识。
主流图像识别算法
典型的图像分类网络(VGG-16)
众多图像识别算法中,图片分类任务最基础也最重要:通过为图片分类任务训练神经网络,可以得到在其他任务也能使用的主干网络(base network/backbone network)。主干网络负责从图像中抽取出高层的抽象特征,基于这些抽象特征可实现分类、检测、分割等任务。如上图架构中输出224*224*64的卷积层到输出14*14*512的卷积层就是一种主干网络(VGG-16)。
对神经网络算法进行选型,一般考虑两组指标:准确率,以及网络的参数量(params)和浮点运算次数(FLOPs)。准确率是量化算法本身效果的指标,而浮点运算次数和参数量可以被用来衡量模型的复杂度,前者描述了神经网络需要的计算能力,后者描述了运行神经网络需要的内存大小(也表明了部署模型需要的硬盘空间/网络带宽)。
在终端设备部署神经网络时,不同类型的设备(桌面GPU/桌面CPU/Movidus等专用VPU/树莓派等ARM架构设备)对复杂度有不同的要求。对于嵌入式设备部署,如一些人脸识别和智慧安防类应用,就应选择尽可能轻量的模型来达到实时处理的目标。其他情况下,就需要因地制宜地在模型准确度和复杂度中取得平衡,挑选最适合自己应用的算法模型。
实际使用中,我们都希望使用运算量尽可能小、而准确度尽可能高的神经网络。为了实现这堪称刁难的需求,深度学习学家们使用了网络架构搜索(NAS)技术来自动化地进行神经网络的设计。
图片分类
常用的主干网络模型
(左图为ImageNet Top-1准确率,右图为模型准确率/浮点运算数对比)
具体到图像识别分类任务所使用的主干网络来看,作为结果之一,Google提出了EfficientNet⁴,一个对网络准确度和模型复杂度进行联合优化的神经网络家族。
EfficientNet的模型参数量-准确率对比
当然,网络设计只是第一步,真正要用起来还有训练、优化部署等步骤。一般来说,神经网络网络的训练是最为繁琐的,其中涉及到远远大于部署阶段的计算能力、大型数据集和超参数调优,因此对于通用目的的神经网络,采用公开的预训练模型是最常见的做法。
对于OpenVINO框架来说,预训练模型和神经网络的优化器都已经集成在框架中一起提供,前文提到的EfficientNet和其他主干网络的都可以从GitHub上的官方模型库下载得到。
对象检测
目标检测模型基于主干网络提取的特征来进行识别,而根据识别和分类物体的内部实现来说,主流对象检测网络可以分成Anchor-based的两阶段检测器和单阶段检测器,以及Anchor-Free的目标检测器。
Faster-RCNN(Anchor-based二阶段检测器代表)
Faster-RCNN模型架构图
两阶段检测器由候选区域网络(RPN)和分类器构成。候选区域网络基于主干网络生成的特征,在图片中划分出潜在的感兴趣区域(RoI),并将这些其余和先前得到的特征一并送进分类器,得到每个候选框的具体分类。
Faster-RCNN以模型的复杂度作为代价,换来了相对较高的识别准确度。其处理一张图片需要约200ms(5FPS),离实时处理还是有一些距离。
SSD/YOLO(Anchor-based一阶段检测器代表)
YOLO v3模型架构图
以YOLO v3为例,输入的图片会先被划分为数个单元格,每个单元格上会预测出一些识别框和对应的分类。在训练时,YOLO v3会根据训练集中检测框的大小和位置做预先学习,寻找出最常见的检测框位置,并根据这些线索来划分单元格。
与Faster-RCNN等二阶段检测器不同,YOLO和SSD会同时进行候选框和目标分类的预测,从而节省了性能开销。一般较小的YOLO模型都可以在30ms内处理完成一张图片,达到实时速度。
Anchor-free检测器
DETR模型架构图
无论是Anchor-based还是Anchor-free方法,目标检测器想要解决的核心问题都是如何预测检测框和类别。这一类的检测器代表有CenterNet等基于点的方法、FCOS等利用FPN进行多尺度预测的模型,以及上图DETR等基于Transformer的模型。
因为网络结构简单,Anchor-free对于工业应用会更加友好,而且其网络架构上和实例分割等任务更接近,有实现多功能的潜力。
小结
在这篇文章中,笔者简单介绍了图像识别,以及用深度学习进行计算机视觉任务的相关内容。图像识别的相关示例可以参考这篇【OpenVINO开发实战课程】中的录播教程进行学习,注册eepw账号后即可获取~
下篇中,我们会关注视频理解的相关算法,以及逐步教学如何使用OpenVINO进行视频识别,一定要关注哦!
参考资料
[1]腾讯网,2021/3/17报道,《摆脱传统监测手段,英特尔3DAT成体育训练数据分析“神器”》,https://new.qq.com/rain/a/20210317A03E6J00
[2]EEPW论坛,作者zhuzhaokun1987,【原创】【AI人工智能系列】OpenCV+Python计算机视觉导学——目录汇总(点击目录可跳转对应章节,长期更新),http://forum.amcfsurvey.com/thread/337725/1
[3]微软亚洲研究院(MSRA)在2015年发表的工作,作者何恺明等,Delving Deep into Rectifiers:Surpassing Human-Level Performance on ImageNet Classification,https://arxiv.org/pdf/1502.01852.pdf
[4]Google于2019年发表在ICML上的工作,作者Mingxing Tan等,EfficientNet:Rethinking Model Scaling for Convolutional Neural Networks,https://arxiv.org/pdf/1905.11946v5.pdf
评论