9月5日关键点检测学习笔记——人体骨骼点检测:自顶向下
文章目录
- 前言
- 一、常用数据集
- 二、评价体系
- 1、Bounding box IoU
- 2、Mask IoU
- 3、Object keypoint similarity(OKS)
- 三、Top-down 自顶向下
- 1、Mask RCNN
前言
本文为9月5日关键点检测学习笔记——人体骨骼点检测:自顶向下,分为三个章节:
- 常用数据集;
- 评价体系;
- Top-down 自顶向下。
- 自顶向下:先找人,再找点;
- 自底向上:先找点,后归纳。
一、常用数据集
二、评价体系
1、Bounding box IoU
2、Mask IoU
3、Object keypoint similarity(OKS)
- 真实关节点的格式: [ x 1 , y 1 , v 1 , … , x k , y k , v k ] [x_1, y_1, v_1, …, x_k, y_k, v_k] [x1,y1,v1,…,xk,yk,vk].
- 坐标: [ x , y ] [x, y] [x,y];
- 可见性: [ v ] [v] [v].
O K S = ∑ i e − d i 2 2 s 2 k i 2 δ ( v i > 0 ) ∑ i δ ( v i > 0 ) OKS = \frac{\textstyle \sum_{i} e^{-\frac{d_i^2}{2s^2k_i^2} }\delta (v_i > 0)} { {\textstyle \sum_{i}} \delta (v_i > 0)} OKS=∑iδ(vi>0)∑ie−2s2ki2di2δ(vi>0)
其中:
- d i d_i di 是每个 GT 和检测到的 keypoint 的欧氏距离;
- v i v_i vi 是 GT 的可见度标识:
- v = 0 v = 0 v=0:未标注点;
- v = 1 v = 1 v=1:已标注但不可见;
- v = 2 v = 2 v=2:已标注且图像可见。
- s ∗ k i s*k_i s∗ki (scale * keypoint constant)是该高斯分布的标准差,使每个 keypoint 的权重相等。
- 完美预测:1.
Precision: 预测的准确度;
P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP + FP} Precision=TP+FPTP
其中, T P TP TP 是 true positive, F P FP FP 是 false positive。Recall: 找到多少真值。
P r e c i s i o n = T P T P + F N Precision = \frac{TP}{TP + FN} Precision=TP+FNTP
其中, F N FN FN 是 false negative。
- Keypoints Evaluation Metric:
三、Top-down 自顶向下
1、Mask RCNN
- 与 Faster RCNN 的区别:
- Feature Pyramid Network:
- Anchors:
- Ratio:weight / height = [0.5, 1, 2]
- Scales:[32, 64, 256] pixels.
- 坐标: [ x 1 , y 1 , x 2 , y 2 ] [x_1, y_1, x_2, y_2] [x1,y1,x2,y2] / [ x 0 , y 0 , w , h ] [x_0, y_0, w, h] [x0,y0,w,h].
Proposal Layer:
RoI Aligned Layer:
Mask Branch:
main.py 代码如下:
import os
import sys
import random
import argparse
import numpy as np
import cv2 as cvimport coco
import utils
import model as modellibclass InferenceConfig(coco.CocoConfig):GPU_COUNT = 1IMAGES_PER_GPU = 1KEYPOINT_MASK_POOL_SIZE = 7def main():parse = argparse.ArgumentParser()parse.add_argument("--image", type=str)parse.add_argument('--video', type=str)args = parse.parse_args()ROOT_DIR = os.getcwd()MODEL_DIR = os.path.join(ROOT_DIR, "logs")#在此更改你所保存的下载好的模型的路径COCO_MODEL_PATH = "./model/mask_rcnn_coco.h5/"if not os.path.exists(COCO_MODEL_PATH):raise AssertionError('please download the pre-trained model')colorsFile = "colors.txt" #选择连线所对应的颜色with open(colorsFile, 'rt') as f:colorsStr = f.read().rstrip('\n').split('\n')colors = []for i in range(len(colorsStr)):rgb = colorsStr[i].split(' ')color = np.array([float(rgb[0]), float(rgb[1]), float(rgb[2])])colors.append(color)inference_config = InferenceConfig()model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR,config=inference_config)#加载模型框架model.load_weights(COCO_MODEL_PATH, by_name=True)#加载模型权值if (args.image): #图像if not os.path.isfile(args.image):print("Input image file ", args.image, " doesn't exist")sys.exit(1)cap = cv.VideoCapture(args.image)outputFile = args.image[:-4]+'_mask_rcnn_out_py.jpg'elif (args.video): #视频if not os.path.isfile(args.video):print("Input video file ", args.video, " doesn't exist")sys.exit(1)cap = cv.VideoCapture(args.video)outputFile = args.video[:-4]+'_mask_rcnn_out_py.avi'else:cap = cv.VideoCapture(0)if (not args.image):vid_writer = cv.VideoWriter(outputFile,cv.VideoWriter_fourcc('M', 'J', 'P', 'G'),30,(round(cap.get(cv.CAP_PROP_FRAME_WIDTH)),round(cap.get(cv.CAP_PROP_FRAME_HEIGHT))))maskThreshold = 0.3 #mask阈值while cv.waitKey(1) < 0:hasFrame, frame = cap.read()if not hasFrame:print("Done processing !!!")print("Output file is stored as ", outputFile)cv.waitKey(3000)breakprint("frame shape:", frame.shape)# class_names = ['BG', 'person']results = model.detect_keypoint([frame], verbose=1)r = results[0]if r['masks'].shape[0]:for i in range(r['masks'].shape[2]):mask = r['masks'][:, :, i]mask = (mask > maskThreshold)roi = frame[mask]colorIndex = random.randint(0, len(colors)-1)color = colors[colorIndex]frame[mask] = ([0.3 * color[0],0.3 * color[1],0.3 * color[2]] + 0.7 * roi).astype(np.uint8)mask = mask.astype(np.uint8)contours, hierarchy = cv.findContours(mask,cv.RETR_TREE,cv.CHAIN_APPROX_SIMPLE)cv.drawContours(frame, contours, -1, color, 3,cv.LINE_8, hierarchy, 100) #画轮廓keypoints = np.array(r['keypoints']).astype(int)#读关键点结果skeleton = [0, -1, -1, 5, -1, 6, 5, 7, 6, 8, 7, 9,8, 10, 11, 13, 12, 14, 13, 15, 14, 16]for i in range(len(keypoints)):# Skeleton: 11*2limb_colors = [[0, 0, 255], [0, 170, 255], [0, 255, 170],[0, 255, 0], [170, 255, 0], [255, 170, 0],[255, 0, 0], [255, 0, 170], [170, 0, 255],[170, 170, 0], [170, 0, 170]]if(len(skeleton)):#画线skeleton = np.reshape(skeleton, (-1, 2))neck = np.array((keypoints[i, 5, :]+ keypoints[i, 6, :]) / 2).astype(int)if(keypoints[i, 5, 2] == 0 or keypoints[i, 6, 2] == 0):neck = [0, 0, 0]limb_index = -1for limb in skeleton:limb_index += 1start_index, end_index = limbif(start_index == -1):Joint_start = neckelse:Joint_start = keypoints[i][start_index]if(end_index == -1):Joint_end = neckelse:Joint_end = keypoints[i][end_index]if ((Joint_start[2] != 0) & (Joint_end[2] != 0)):cv.line(frame,tuple(Joint_start[:2]),tuple(Joint_end[:2]),limb_colors[limb_index], 5)if (args.image):cv.imwrite(outputFile, frame.astype(np.uint8))else:vid_writer.write(frame.astype(np.uint8))if __name__ == "__main__":main()
9月5日关键点检测学习笔记——人体骨骼点检测:自顶向下相关推荐
- 9月14日计算机视觉基础学习笔记——基本图像处理
文章目录 前言 一.计算机视觉的由来 二.计算机如何看到图像 三.计算机处理图像的方式.方法 1.直接从 camera 读取 2.从文件读取 3.生成矩阵显示 四.图像处理 1.颜色空间转换 (1). ...
- 9月16日计算机视觉基础学习笔记——认识机器视觉
文章目录 前言 一.Week 1 homework 1.基本操作 2.滤波 二.从图像处理到计算机视觉 1.反色变换 2.Gamma 变换 3.直方图 & 直方图均衡化 三.计算机视觉的两个步 ...
- 【ERP】ERP发展阶段有哪些?对ERP发展各个阶段概念的理解(20年3月29日第二章学习笔记)
ERP发展历经五大阶段 1.ROP库存订货点法 2.MRP物料需求计划 3.闭环MRP 4.MRPII制造业资源计划 5.ERP企业资源计划 1.ROP库存订货点法 ROP,库存订货点法,很好理解,就 ...
- 10月15日计算机视觉基础学习笔记——分割网络的设计
文章目录 前言 一.分割器的设计 1.优化:减小 feature map 2.上采样 up sampling 二.经典分割模型的涨点方法 前言 本文为10月15日计算机视觉基础学习笔记--分割网络的设 ...
- 【ERP】ERP,MRP和MRPII的关系是怎样的?(20年3月29日第二章学习笔记)
1.ERP与MRP的关系 MRP与ERP的关系在本人ERP第一章的笔记中已有提及,可以点击超链接跳转观看. 2.ERP与MRPII的关系 从ERP概念的提出公司Gartner Group Inc界定E ...
- 1月12日,HTML学习笔记2
妈蛋,这两天看HTML看上瘾了,感觉这玩意有点简单,反馈期太短了,我的python都荒废了/(ㄒoㄒ)/~~. 不多说了,把记录贴上来,到时过几天再拿出来整理一下,写上注释,顺便当做复习 去研究css ...
- 2013年7月28日web前端学习笔记-------head相关标签应用
7月份快过完了.趁周日写写学过觉得有用的东西. 1.缩略图的展示问题,不要以为缩略图设置了width,height,就是缩略图了.比如一个300kb的500*500原始图片,用户请求web服务器后,展 ...
- 车辆行人检测学习笔记
车辆行人检测学习笔记 1.目标检测&常见检测网络 目标检测:物体识别是要分辨出图片中有什么物体,输入是图片,输出是类别标签和概率.而目标检测不仅要检测图片中有什么物体,还要输出无异的外框(x, ...
- 9月6日关键点检测学习笔记——人脸和手部特征点检测
文章目录 前言 一.干扰因素 1.主动因素 2.固有因素 二.特征点检测 1.PFLD 2.LLCV 三.人脸比对 1.人脸 1:1 2.人脸 1:n 3.人脸 1:N 4.人脸 M:N 四.高清分辨 ...
最新文章
- 关于深度学习、NLP和计算机视觉的30个顶级Python库
- 2012 AndroidWorld Global Developers Conference
- 【BZOJ 1001】[BJOI2006]狼抓兔子(最大流)
- 电子路考容易犯错的五大细节
- 使用MFC开发ActiveX控件
- python创建控件,用 IronPython 创建和调用用户控件.doc
- parafac 分解_基于PARAFAC分解的大规模MU-MIMO稀疏信道估计
- Spring同mybatis整合讲义(事物)
- Servlet 实现验证码
- 2021年CFA全套资料无偿分享|备考经验|备考计划
- 解决VS 2017/2019社区版无法登陆的方法
- 【Codecs系列】VP9码流结构和概述
- 第049篇:VBA之合并单元格、取消合并单元格并保留原来的数据
- 回文日期 php,c语言程序实例大全,220个详细程序源代码
- r语言中将茎叶图旋转90度_R语言(02)绘图
- Unity 摄像头实时扫描二维码
- 短网址系统设计与实战
- 【Centos】重启后docker安装的容器端口无法访问的问题
- hdu 1568 Fibonacci(fibonacci通项+对数性质)
- Etyma01 ced ceed cess