YOLOv7与MediaPipe在人体姿态估计上的对比
前期文章的分享,我们介绍了YOLOv7人体姿态估计的文章以及MediaPipe人体姿态估计方面的文章。由于YOLOv7与MediaPipe都可以进行人体姿态估计,我们本期就对比一下2个算法的不同点。
利用机器学习,进行人体33个2D姿态检测与评估
人工智能领域也卷了吗——YOLO系列又被刷新了,YOLOv7横空出世
MediaPipe
基于深度学习的人体姿态估计
自2014年Google首次发布DeepPose以来,基于深度学习的姿态估计算法已经取得了较大的进步。这些算法通常分两个阶段工作。人员检测 关键点定位
根据设备[CPU/GPU/TPU]的不同,不同框架的性能有所不同。有许多两阶段姿态估计模型在基准测试中表现良好,例如:Alpha Pose、OpenPose、Deep Pose等等。然而,由于两阶模型相对复杂,获得的实时性能非常昂贵。这些模型在GPU上运行得很快,但在CPU上运行的较慢。就效率和准确性而言,MediaPipe是一个很好的姿态估计框架。它在CPU上生成实时检测,且速度很快。
YOLOv7
与传统的姿态估计算法不同,YOLOv7姿态是一个单级多人关键点检测器。它具有自顶向下和自底向上两种方法中的优点。YOLOv7姿态是在COCO数据集上训练的,前期的文章我们也分享过YOLOv7人体姿态检测的代码。
YOLOv7 是 YOLO 系列中最先进的新型物体检测器。根据论文,它是迄今为止最快、最准确的实时物体检测算法。根据 YOLOv7 论文,最好的模型获得了 56.8% 的平均精度(AP),这是所有已知对象检测算法中最高的。各种模型的速度范围为 5-160 FPS。与基础模型相比,YOLOv7 将参数数量减少到40%,计算量减少 50%。
MediaPipe人体姿态检测
MediaPipe 是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架。在谷歌,一系列重要产品,如 、Google Lens、ARCore、Google Home 以及 ,都已深度整合了 MediaPipe。
MediaPipe 的核心框架由 C++ 实现,并提供 Java 以及 Objective C 等语言的支持。MediaPipe 的主要概念包括数据包(Packet)、数据流(Stream)、计算单元(Calculator)、图(Graph)以及子图(Subgraph)。
MediaPipe Pose是用于高保真人体姿势跟踪的ML解决方案,利用BlazePose研究成果,还从ML Kit Pose Detection API中获得了RGB视频帧的整个33个2D标志(或25个上身标志)。当前最先进的方法主要依靠强大的桌面环境进行推理,而MediaPipe Pose的方法可在大多数现代手机,甚至是Web上实现实时性能。
MediaPipe中有三个模型用于姿势估计。BlazePose GHUM Heavy BlazePose GHUM Full BlazePose GHUM Lite
YOLOv7 vs MediaPipe特征对比
YOLOv7
MediaPipe
Topology
17 Keypoints COCO
33 Keypoints COCO + Blaze Palm + Blaze Face
Workflow
Detection runs for all frames
Detection runs once followed by tracker until occlusion occurs
GPU support
CPU and GPU
CPU
Segmentation
Segmentation not integrated to pose directly
Segmentation integrated
Number of persons
Multi-person
Single person
YOLOv7是一个多人检测框架。MediaPipe是一个单人检测框架(主要原因是只用于CPU,速度较快),因此在我们实现人体姿态检测时,需要关注是否只检测多人,或者单人,当然对自己的硬件配置也有较高的要求。
MediaPipe 代码实现人体姿态检测 cap = cv2.VideoCapture(0) time.sleep(2) while cap.isOpened(): success, image = cap.read() if not success: print("Ignoring empty camera frame.") continue image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB) image.flags.writeable = False results = pose.process(image) image.flags.writeable = True image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) mp_drawing.draw_landmarks( image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS) cv2.imshow("MediaPipe Pose", image) if cv2.waitKey(5) & 0xFF == ord("q"): break pose.close() cap.release()
由于MediaPipe是一个单人检测框架,因此在视频中,MediaPipe只检测单个人的姿态,其他人体姿态则会忽略,当然,软件会检测哪个人体姿态,理论上是最前面的人体姿态,但是通过实验后,其实并不完全是这样。从上图可以看出,虽然MediaPipe仅支持使用在CPU上,但是检测速度与精度相当快,缺点是智能进行单人体姿态检测。
YOLOv7 代码实现人体姿态检测
从 YOLOv7-Tiny 模型开始,参数刚刚超过 600 万。它的验证 AP 为 35.2%,击败了具有相似参数的 YOLOv4-Tiny 模型。具有近 3700 万个参数的 YOLOv7 模型提供了 51.2% 的 AP,再次击败了具有更多参数的 YOLOv4 和 YOLOR 的变体。
YOLO7 系列中较大的模型,YOLOv7-X、YOLOv7-E6、YOLOv7-D6 和 YOLOv7-E6E。所有这些都击败了 YOLOR 模型,它们的参数数量相似,AP 分别为 52.9%、55.9%、56.3% 和 56.8%。
def pose_video(frame): mapped_img = frame.copy() img = letterbox(frame, input_size, stride=64, auto=True)[0] print(img.shape) img_ = img.copy() img = transforms.ToTensor()(img) img = torch.tensor(np.array([img.numpy()])) img = img.to(device) with torch.no_grad(): t1 = time.time() output, _ = model(img) t2 = time.time() fps = 1/(t2 - t1) output = non_max_suppression_kpt(output, 0.25, # Conf. Threshold. 0.65, # IoU Threshold. nc=1, # Number of classes. nkpt=17, # Number of keypoints. kpt_label=True) output = output_to_keypoint(output) nimg = img[0].permute(1, 2, 0) * 255 nimg = nimg.cpu().numpy().astype(np.uint8) nimg = cv2.cvtColor(nimg, cv2.COLOR_RGB2BGR) for idx in range(output.shape[0]): plot_skeleton_kpts(nimg, output[idx, 7:].T, 3) return nimg, fps
由于YOLOv7是一个多人检测框架,因此在单个视频帧中,YOLOv7框架会实时检测多人体姿态。从上图可以看出,检测速度也是很快的,这是因为此例子使用的是GPU模型运行,若YOLOv7应用在CPU上面,则检测速度很慢。
MediaPipe与YOLOv7对比检测
从以上的介绍,我们知道,mediapipe是一个单人检测框架,因此检测速度特别快,同样的的一段检测对象,同样的使用CPU进行人体姿态检测,则mediapipe完全占绝对优势。
CPU人体姿态检测
但是一旦上GPU,yolov7的优势就会大大的提高,可以看到,一旦用上了GPU,yolov7的检测速度就达到了84FPS,而由于mediapipe仅仅用于CPU,就算加上GPU,也发挥不到GPU的优势。
其他文章参考
Transformer模型注意力机制的概念
利用机器学习,进行人体33个2D姿态检测与评估
利用机器学习,进行人手的21个3D手关节坐标检测
利用机器学习进行人脸468点的3D坐标检测,并生成3D模型
MediaPipe 集成人脸识别,人体姿态评估,人手检测模型
颠覆2D对象检测模型,MediaPipe 3D对象检测还原真实的对象特征
MediaPipe Face Detection可运行在移动设备上的亚毫秒级人脸检测
高大上的YOLOV3对象检测算法,使用python也可轻松实现
使用python轻松实现高大上的YOLOV4对象检测算法
基于python的YOLOV5对象检测模型实现
英伟达公布RTX4070Ti参数,配置很熟悉,价格降下来了英伟达官网公布了RTX4070Ti参数和游戏表现。RTX4070Ti的CUDA核心为7680,加速频率2。61GHz,显存为12GBGDDR6X,与此前被取消的RTX408012G
怎么能不到西藏,感受周游世界的快乐!身为旅游狂魔,却迟迟未迈出国门?翻开家里尘封的护照还记得上次迈出国门是什么时候吗?摄影师Fan其实国内的风景平替可不少尤其是西藏,保准治你的眼馋01hr林芝VS瑞士小编本着真心讲其
亲身经历告诉你换换回收有多可靠大家有没有发现一个问题,随着智能手机价格的下探,很多人都是双机党甚至三机党了,很多人家里的二手手机越来越多了,这些二手闲置手机,安卓和苹果的都有,有些因为机子有点老旧,用起来已经没
元旦期间值得买的四款手机,各个配置内卷,流畅丝滑五年无忧元旦期间值得买的四款手机,各个配置内卷,流畅丝滑五年无忧。荣耀Magic4这款手机采用性能三件套骁龙8Gen1满血LPDDR5UFS3。1,性能拉满缪斯之眼的设计,独特的外观,辨识
宽带提速小知识3个方面教你实现宽带真千兆随着时代4G升级到5G,宽带从百兆达到千兆,更有不少人已经用上了千兆宽带。很多人都会感到疑惑,明明已经升级到了千兆,为什么感觉不到网速变快呢。其实并不是宽带提速到千兆就能达到千兆网
富态美有多高级!看章小蕙就知道了,同框曾黎穿衬衫裙不如她抢眼在女性群体同框的时候,着装方面就显得尤为重要,出于场合的考虑,在着装方面会以得体性为主。与此同时,又有各自不同的风格,在娱乐圈当中曾黎是公认的美,几乎能驾驭各种各样的风格,身着粉色
今冬流行的大衣黑丝搭配,我都替你总结好了,时髦又显腿长对于冬季想要穿得洋气性感的女生,绝对不能错过一款单品黑丝。尽管黑丝备受争议,但依旧不能否认黑丝是营造性感成熟韵味的法宝。特别是用黑丝配上大衣,优雅大气又多了几分撩人之美。不过对于很
买国产羊绒大衣选什么品牌好?推荐这10个,好看又时髦想买正宗羊绒大衣,但是国际大牌比如MaxMara,价格又太贵,有哪些值得买的国产羊绒大衣品牌呢?今天多啦给大家推荐这几个国产牌子,5000元以内的羊绒大衣品牌合集,这几个款式时髦,
NBA上脚!欧文改穿杜兰特战靴!Ja1再曝新配色!自从Nike正式将欧文除名之后,欧文在球鞋上确实在球鞋上废了不少心思。从一开始在鞋身画上神秘XX符号,到后来直接贴上黑胶布遮挡SwooshLogo,每一个操作都充满讽刺感。在穿贴标
献血,图什么大学的时候,献了许多次血,那个时候满腔热血爱国之情汹涌澎湃,想着医院里需要帮助的同胞,就忍不住要尽自己最大的力量。毕业了,看到了更多的可怜的同胞,却没了那种奉献的热情。奉献,是一种
我的2022年终总结请选择善良朋友,请选择善良原创白山黑读者一篇文章说你只管善良,上天自有考量!我认为人们坚定的选择善良,是心胸开阔更坦荡,是想看见世界更美的模样!知乎上有人问答人为什么要善良?有个高赞的回答是