概述

YOLOv7姿态估计:一种快速准确的人体姿态估计模型

人体姿态估计是计算机视觉中的一项重要任务,具有各种应用,例如动作识别、人机交互和监控。近年来,基于深度学习的方法在人体姿态估计方面取得了显著的性能。其中最流行的深度学习方法之一是YOLOv7姿态估计模型。

算法

YOLOv7姿态估计模型是YOLOv7目标检测模型的扩展,使用单个神经网络同时预测图像中多个物体的边界框和类别概率。在YOLOv7姿态估计模型中,网络预测每个人的关键点位置,从而可以用于估计人的姿态

网络

YOLOv7姿态估计模型基于深度卷积神经网络架构,由多个卷积层、最大池化和全连接层组成。网络接受输入图像并产生特征图,然后用于预测每个人的关键点位置。

数据集

YOLOv7姿态估计模型使用大型数据集进行训练,例如COCO(通用对象上下文)和MPII(马克斯·普朗克计算机科学研究所),这些数据集包含成千上万的人在各种姿势和环境中的注释图像。该模型使用监督学习和数据增强技术进行训练,例如随机缩放、旋转和平移输入图像。

优势

YOLOv7姿态估计模型的一个关键优势是其速度和准确性。该模型能够实时估计多个人的姿态,使其适用于人机交互和监控等应用。此外,该模型在COCO和MPII等基准数据集上实现了最先进的性能,展示了其准确性和鲁棒性。

结论

总之,YOLOv7姿态估计模型是一种快速准确的基于深度学习的人体姿态估计模型。其能够实时估计多个人的姿态,使其适用于各种应用,而其在基准数据集上的最先进性能证明了其有效性。随着深度学习的不断发展,我们可以预期在人体姿态估计方面会有进一步的改进,而YOLOv7姿态估计模型很可能在这些发展中发挥重要作用。

代码

#全部代码可私信或者qq1309399183
def run(poseweights="yolov7-w6-pose.pt",source="football1.mp4",device='cpu',view_img=False,save_conf=False,line_thickness = 3,hide_labels=False, hide_conf=True):frame_count = 0  #count no of framestotal_fps = 0  #count total fpstime_list = []   #list to store timefps_list = []    #list to store fpsdevice = select_device(opt.device) #select devicehalf = device.type != 'cpu'model = attempt_load(poseweights, map_location=device)  #Load model_ = model.eval()names = model.module.names if hasattr(model, 'module') else model.names  # get class namesif source.isnumeric() :    cap = cv2.VideoCapture(int(source))    #pass video to videocapture objectelse :cap = cv2.VideoCapture(source)    #pass video to videocapture objectif (cap.isOpened() == False):   #check if videocapture not openedprint('Error while trying to read video. Please check path again')raise SystemExit()else:frame_width = int(cap.get(3))  #get video frame widthframe_height = int(cap.get(4)) #get video frame heightvid_write_image = letterbox(cap.read()[1], (frame_width), stride=64, auto=True)[0] #init videowriterresize_height, resize_width = vid_write_image.shape[:2]out_video_name = f"{source.split('/')[-1].split('.')[0]}"out = cv2.VideoWriter(f"{source}_keypoint.mp4",cv2.VideoWriter_fourcc(*'mp4v'), 30,(resize_width, resize_height))while(cap.isOpened): #loop until cap opened or video not completeprint("Frame {} Processing".format(frame_count+1))ret, frame = cap.read()  #get frame and success from video captureif ret: #if success is true, means frame existorig_image = frame #store frameimage = cv2.cvtColor(orig_image, cv2.COLOR_BGR2RGB) #convert frame to RGBimage = letterbox(image, (frame_width), stride=64, auto=True)[0]image_ = image.copy()image = transforms.ToTensor()(image)image = torch.tensor(np.array([image.numpy()]))image = image.to(device)  #convert image data to deviceimage = image.float() #convert image to float precision (cpu)start_time = time.time() #start time for fps calculationwith torch.no_grad():  #get predictionsoutput_data, _ = model(image)output_data = non_max_suppression_kpt(output_data,   #Apply non max suppression0.25,   # Conf. Threshold.0.65, # IoU Threshold.nc=model.yaml['nc'], # Number of classes.nkpt=model.yaml['nkpt'], # Number of keypoints.kpt_label=True)output = output_to_keypoint(output_data)im0 = image[0].permute(1, 2, 0) * 255 # Change format [b, c, h, w] to [h, w, c] for displaying the image.im0 = im0.cpu().numpy().astype(np.uint8)im0 = cv2.cvtColor(im0, cv2.COLOR_RGB2BGR) #reshape image format to (BGR)gn = torch.tensor(im0.shape)[[1, 0, 1, 0]]  # normalization gain whwhfor i, pose in enumerate(output_data):  # detections per imageif len(output_data):  #check if no posefor c in pose[:, 5].unique(): # Print resultsn = (pose[:, 5] == c).sum()  # detections per classprint("No of Objects in Current Frame : {}".format(n))for det_index, (*xyxy, conf, cls) in enumerate(reversed(pose[:,:6])): #loop over poses for drawing on framec = int(cls)  # integer classkpts = pose[det_index, 6:]label = None if opt.hide_labels else (names[c] if opt.hide_conf else f'{names[c]} {conf:.2f}')plot_one_box_kpt(xyxy, im0, label=label, color=colors(c, True), line_thickness=opt.line_thickness,kpt_label=True, kpts=kpts, steps=3, orig_shape=im0.shape[:2])

环境安装教程

#1.克隆项目并进入

#联系我:然后git clone my_projcet

2.linux创建虚拟环境

python3 -m venv psestenv
source psestenv/bin/activate

3.如果windows用户请用这个:

python3 -m venv psestenv cd psestenv
cd Scripts activate
cd ..
cd .. pip install --upgrade pip
  1. pip install
pip install -r requirements.txt

结果展示

YOLOv7姿态估计pose estimation(姿态估计+目标检测+跟踪)相关推荐

  1. 3D视觉——3.人体姿态估计(Pose Estimation) 算法对比 即 效果展示——MediaPipe与OpenPose

    上一话 3D视觉--2.人体姿态估计(Pose Estimation)入门--OpenPose含安装.编译.使用(单帧.实时视频)https://blog.csdn.net/XiaoyYidiaodi ...

  2. CVPR 2020几篇论文内容点评:目标检测跟踪,人脸表情识别,姿态估计,实例分割等

    CVPR 2020几篇论文内容点评:目标检测跟踪,人脸表情识别,姿态估计,实例分割等 CVPR 2020中选论文放榜后,最新开源项目合集也来了. 本届CPVR共接收6656篇论文,中选1470篇,&q ...

  3. 多目标检测跟踪文献代码汇总

    The Multiple Object Tracking Benchmark https://motchallenge.net/ 高速跟踪: 当检测精度较高,视频帧率较高时,跟踪问题就会变得很简单,主 ...

  4. 弱小目标检测跟踪算法研究(2)红外弱小目标数据集准备(红外弱小目标的数据集又来了)

    红外弱小目标的数据集又来了! 说在前面的话 数据集 后续 说在前面的话 弱小目标,顾名思义:目标信号弱,像素少,由于目标信噪比较低,目标最少可能只有一个像素单元.因此,弱小目标检测跟踪一直是图像处理与 ...

  5. 弱小目标检测跟踪算法研究(1)红外弱小目标数据集准备(红外弱小目标的数据集来了)

    红外弱小目标的数据集来了! 说在前面的话 一点建议 数据集 后续 说在前面的话 弱小目标,顾名思义:目标信号弱,像素少,由于目标信噪比较低,目标最少可能只有一个像素单元.因此,弱小目标检测跟踪一直是图 ...

  6. YOLOv5在android端实现目标检测+跟踪+越界识别并报警

    YOLOv5在android端实现目标检测+跟踪+越界识别并报警 想要获取源码和相关资料说明的可以关注我的微信公众号:雨中算法屋, 后台回复越界识别即可获取,有问题也可以关注公众号加我微信联系我,相互 ...

  7. Human Pose Estimation姿态估计调研

    介绍 姿态估计的目标是在RGB图像或视频中描绘出人体的形状,这是一种多方面任务,其中包含了目标检测.姿态估计.分割等等.有些需要在非水平表面进行定位的应用可能也会用到姿态估计,例如图形.增强现实或者人 ...

  8. Hourglass Network 沙漏网络 (pose estimation姿态估计)

    在ECCV2016<Stacked Hourglass Networks for Human Pose Estimation>这篇paper中提出 是一个姿态估计(pose estimat ...

  9. 自动驾驶 11-3: 根据 LIDAR 数据进行位姿估计 Pose Estimation from LIDAR Data

    既然你已经学会了如何翻译, 旋转和缩放点云, 是时候谈谈我们该如何做 实际使用这些操作 用真实的点云 估计自动驾驶汽车的运动. 我们这样做的方式 一般是通过解决某事 称为点集配准问题, 这是最重要的问 ...

最新文章

  1. 2022-2028年中国激光玻璃行业市场供需规模及发展趋势研究报告
  2. Javascript绘图
  3. GeoServer怎样修改线性地图的颜色样式
  4. 科普 | “开放知识”的定义
  5. 水箱建模最小二乘法_Comsol Multiphysics for Mac(建模仿真软件)
  6. 今天终于搞懂了:为什么Java的main方法必须是public static void?
  7. 布局之StackPanel面板
  8. 2022苹果AppStore应用商店上传与APP上传流程必看(基础篇)
  9. 文博会虚拟现实惊艳亮相 VR风暴蠢蠢欲动
  10. 做一个有意境的女人难上加难
  11. Head First 设计模式笔记 4.工厂模式
  12. 点开计算机左侧没有桌面一项,为什么,我的电脑右键点选桌面空白弹出的右键选单里面没有了“萤幕解析度”一项啊?怎么添加回来啊急!1...
  13. 戴尔笔记本电源已接通未充电
  14. 使用 font-spider 对 webfont 网页字体进行压缩
  15. 家用NAS上安装Domino
  16. typename和class
  17. Ansible 部署的时候提示错误 SSH password instead
  18. [转载] Java是剑客-飘逸;.NET是刀客-霸道 (二)
  19. 怀旧服野外pvp最多的服务器,魔兽世界怀旧服韩服开始合服拯救鬼服 野外PVP精彩了...
  20. xlsx模块 前端_纯前端利用 js-xlsx 之单元格样式(4)-阿里云开发者社区

热门文章

  1. linux 移除、加载SATA盘
  2. 微型计算机aspire1600x,Acer 1600X小型机拆解
  3. 2019年4月10日
  4. IP数据报中如果不分片,分片标志值是什么?
  5. 单周期CPU,多周期CPU
  6. signature=a95d3b624ea7b2de0432eee0b4f584d9,Braves mourn Hank Aaron
  7. 供应链管理专家SCMP项目简介
  8. CS61A Lab 10
  9. C++常用字符串长度计算函数
  10. FZU 2214 Knapsack problem