文章目录

  • 前言
  • 一、常用数据集
  • 二、评价体系
    • 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)∑i​e−2s2ki2​di2​​δ(vi​>0)​
其中:

  1. d i d_i di​ 是每个 GT 和检测到的 keypoint 的欧氏距离;
  2. v i v_i vi​ 是 GT 的可见度标识:
    • v = 0 v = 0 v=0:未标注点;
    • v = 1 v = 1 v=1:已标注但不可见;
    • v = 2 v = 2 v=2:已标注且图像可见。
  3. s ∗ k i s*k_i s∗ki​ (scale * keypoint constant)是该高斯分布的标准差,使每个 keypoint 的权重相等。
  4. 完美预测: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日关键点检测学习笔记——人体骨骼点检测:自顶向下相关推荐

  1. 9月14日计算机视觉基础学习笔记——基本图像处理

    文章目录 前言 一.计算机视觉的由来 二.计算机如何看到图像 三.计算机处理图像的方式.方法 1.直接从 camera 读取 2.从文件读取 3.生成矩阵显示 四.图像处理 1.颜色空间转换 (1). ...

  2. 9月16日计算机视觉基础学习笔记——认识机器视觉

    文章目录 前言 一.Week 1 homework 1.基本操作 2.滤波 二.从图像处理到计算机视觉 1.反色变换 2.Gamma 变换 3.直方图 & 直方图均衡化 三.计算机视觉的两个步 ...

  3. 【ERP】ERP发展阶段有哪些?对ERP发展各个阶段概念的理解(20年3月29日第二章学习笔记)

    ERP发展历经五大阶段 1.ROP库存订货点法 2.MRP物料需求计划 3.闭环MRP 4.MRPII制造业资源计划 5.ERP企业资源计划 1.ROP库存订货点法 ROP,库存订货点法,很好理解,就 ...

  4. 10月15日计算机视觉基础学习笔记——分割网络的设计

    文章目录 前言 一.分割器的设计 1.优化:减小 feature map 2.上采样 up sampling 二.经典分割模型的涨点方法 前言 本文为10月15日计算机视觉基础学习笔记--分割网络的设 ...

  5. 【ERP】ERP,MRP和MRPII的关系是怎样的?(20年3月29日第二章学习笔记)

    1.ERP与MRP的关系 MRP与ERP的关系在本人ERP第一章的笔记中已有提及,可以点击超链接跳转观看. 2.ERP与MRPII的关系 从ERP概念的提出公司Gartner Group Inc界定E ...

  6. 1月12日,HTML学习笔记2

    妈蛋,这两天看HTML看上瘾了,感觉这玩意有点简单,反馈期太短了,我的python都荒废了/(ㄒoㄒ)/~~. 不多说了,把记录贴上来,到时过几天再拿出来整理一下,写上注释,顺便当做复习 去研究css ...

  7. 2013年7月28日web前端学习笔记-------head相关标签应用

    7月份快过完了.趁周日写写学过觉得有用的东西. 1.缩略图的展示问题,不要以为缩略图设置了width,height,就是缩略图了.比如一个300kb的500*500原始图片,用户请求web服务器后,展 ...

  8. 车辆行人检测学习笔记

    车辆行人检测学习笔记 1.目标检测&常见检测网络 目标检测:物体识别是要分辨出图片中有什么物体,输入是图片,输出是类别标签和概率.而目标检测不仅要检测图片中有什么物体,还要输出无异的外框(x, ...

  9. 9月6日关键点检测学习笔记——人脸和手部特征点检测

    文章目录 前言 一.干扰因素 1.主动因素 2.固有因素 二.特征点检测 1.PFLD 2.LLCV 三.人脸比对 1.人脸 1:1 2.人脸 1:n 3.人脸 1:N 4.人脸 M:N 四.高清分辨 ...

最新文章

  1. 关于深度学习、NLP和计算机视觉的30个顶级Python库
  2. 2012 AndroidWorld Global Developers Conference
  3. 【BZOJ 1001】[BJOI2006]狼抓兔子(最大流)
  4. 电子路考容易犯错的五大细节
  5. 使用MFC开发ActiveX控件
  6. python创建控件,用 IronPython 创建和调用用户控件.doc
  7. parafac 分解_基于PARAFAC分解的大规模MU-MIMO稀疏信道估计
  8. Spring同mybatis整合讲义(事物)
  9. Servlet 实现验证码
  10. 2021年CFA全套资料无偿分享|备考经验|备考计划
  11. 解决VS 2017/2019社区版无法登陆的方法
  12. 【Codecs系列】VP9码流结构和概述
  13. 第049篇:VBA之合并单元格、取消合并单元格并保留原来的数据
  14. 回文日期 php,c语言程序实例大全,220个详细程序源代码
  15. r语言中将茎叶图旋转90度_R语言(02)绘图
  16. Unity 摄像头实时扫描二维码
  17. 短网址系统设计与实战
  18. 【Centos】重启后docker安装的容器端口无法访问的问题
  19. hdu 1568 Fibonacci(fibonacci通项+对数性质)
  20. Etyma01 ced ceed cess

热门文章

  1. 麦当劳中国、星巴克中国、中国红牛、歌帝梵等企业发布动态 | 食品饮料新品...
  2. 江南爱窗帘十大品牌 教你穿好窗帘这件外衣
  3. 掌握这些学习建模小妙招,带你一路从建模小白到令人闻风丧胆的骚气建模大佬!
  4. 随机生成及检测8位密码:必须由大写字母、小写字母、数字和特殊符号共同组成
  5. RFID药品仓储管理方案
  6. 瞪羚企业和独角兽的区别
  7. ajax prototype框架之Ajax.Request 类
  8. 使用SQL语句创建基本数据库
  9. java调用hidl_Android HIDL 详解
  10. vertx instance