文章目录

  • 0. 前言
  • 1. JHMDB
    • 1.1. 基本情况
    • 1.2. 数据准备以及标签详解
  • 2. UDF101_24
    • 2.1. 基本情况
    • 2.2. 数据准备与标签详解
  • 3. 数据集可视化代码

0. 前言

  • 现在常用的时空行为检测数据集只有AVA/JHMDB/UCF101_24。

    • AVA数据集是每一秒标一帧,更多信息可以参考我的笔记。
    • JHMDB/UCF101_24 是逐帧标注的数据

1. JHMDB

  • 官网,HMDB官网

1.1. 基本情况

  • JHMDB是对HMDB数据集的二次标注,即 joint-annotated HMDB。

    • HMDB数据集有51类,5100多视频。
    • JHMDB只标注了HMDB的一部分,21类只包括一个人的行为,也删除了一些这21类行为中人不明显的样本。
    • 21类每一类有36-55个样本,每个样本包括了行为的起始与终止时间,每个样本包括14-40帧。
    • JHMDB一共标注了31838张图片。
  • 类别列表(21类)

    • sit
    • run
    • pullup
    • walk
    • shoot_gun
    • brush_hair
    • jump
    • pour
    • pick
    • kick_ball
    • golf
    • shoot_bow
    • catch
    • clap
    • swing_baseball
    • climb_stairs
    • throw
    • wave
    • shoot_ball
    • push
    • stand
  • 每个视频最多只有一类目标行为,bbox只标了做目标行为的那几个人

1.2. 数据准备以及标签详解

  • 下面内容参考了 mmaction2数据准备文档,数据下载在上面的文档中有介绍了,反正就是一个压缩包,没啥好说的。
  • 原始JHMDB数据集中好像有关键点、分割等的标签,但我们这个任务中不用。
  • 标签全部保存在JHMDB-GT.pkl 中,这个文件是一个字段,包括了6个key
    • labels (list): List of the 21 labels,21类行为标签,即上一小节中提到的。
    • gttubes (dict): Dictionary that contains the ground truth tubes for each video.
      • 每个视频、每帧对应的标签(bbox以及行为类别)
      • key为每个样本的相对路径,比如walk/Panic_in_the_Streets_walk_u_cm_np1_ba_med_5
      • value也是list,表示一系列tubes
      • 每个tube用字典表示,class_id/bboxes键值对
      • A gttube is dictionary that associates with each index of label and a list of tubes.
      • A tube is a numpy array with nframes rows and 5 columns, each col is in format like <frame index> <x1> <y1> <x2> <y2>.
    • nframes (dict): Dictionary that contains the number of frames for each video, like 'walk/Panic_in_the_Streets_walk_u_cm_np1_ba_med_5': 16.
      • 每个视频包含多少帧图片。
      • key为每个样本的相对路径,value为帧数量。
    • train_videos (list): A list with nsplits=1 elements, each one containing the list of training videos.
      • list对象,每个元素也是list(包含若干视频样本信息)
      • 训练集相关视频有哪些
      • 每个样本通过其相对路径表示
    • test_videos (list): A list with nsplits=1 elements, each one containing the list of testing videos.
      • list对象,每个元素也是list(包含若干视频样本信息)
      • 测试集相关视频有哪些
      • 每个样本通过其相对路径表示
    • resolution (dict): Dictionary that outputs a tuple (h,w) of the resolution for each video, like 'pour/Bartender_School_Students_Practice_pour_u_cm_np1_fr_med_1': (240, 320).
      • key为每个样本的相对路径,value为对应分辨率

2. UDF101_24

2.1. 基本情况

  • UCF101_24是UCF101数据集的子集,使用了一些不一样的标签。

    • 关于标签来源有点尴尬,UCF101中本来是有对应标签的,但现在已经不能下载了。
    • 现在的UCF101_24标签是从这个repo中,说是进行了一些微调。
    • 每个视频最多只有一类目标行为,bbox只标了做目标行为的那几个人。
      • 感觉也有例外,salsospin有样本都有多个人跳舞(大于等于6个),但只标了俩人。
  • 类别信息(共24类)

    • WalkingWithDog
    • Diving
    • PoleVault
    • SkateBoarding
    • CricketBowling
    • GolfSwing
    • Skijet
    • RopeClimbing
    • FloorGymnastics
    • Basketball
    • Biking
    • VolleyballSpiking
    • Fencing
    • CliffDiving
    • HorseRiding
    • SoccerJuggling
    • TennisSwing
    • LongJump
    • SalsaSpin
    • TrampolineJumping
    • IceDancing
    • Skiing
    • Surfing
    • BasketballDunk

2.2. 数据准备与标签详解

  • 数据下载以及其他相关可以参考 mmaction2数据准备文档,数据下载在上面的文档中有介绍了,反正就是一个压缩包,没啥好说的。

  • 标签与1.2.数据准备以及标签详解完全相同,这里就不多说了。

3. 数据集可视化代码

  • 需求分析:根据类别展示训练样本,在图片上画bbox。
import argparse
import os
import cv2
import pickle
from collections import defaultdictdef _parse_args():parser = argparse.ArgumentParser()parser.add_argument("--dataset", type=str, default="ucf101_24")parser.add_argument("--dataset_root_path", type=str,default="/ssd01/data/ucf101_24")parser.add_argument("--rgb-dir-name", type=str, default="rgb-images")# JHMDB & UCF101_24parser.add_argument("--pkl-filename", type=str, default="UCF101v2-GT.pkl")parser.add_argument("--img-impl", type=str, default="%05d.jpg")return parser.parse_args()def _darknet_draw_bbox(bboxes,labels,scores,img,bboxes_color=(0, 255, 0),bboxes_thickness=1,text_color=(0, 255, 0),text_thickness=2,text_front_scale=0.5):"""bbox的形式是 xyxy,取值范围是像素的值labels是标签名称scores是置信度,[0, 1]的浮点数"""for idx, (bbox, label) in enumerate(zip(bboxes, labels)):xmin, ymin, xmax, ymax = bboxpt1 = (int(xmin), int(ymin))  # 左下pt2 = (int(xmax), int(ymax))  # 右上# 画bboxcv2.rectangle(img, pt1, pt2, bboxes_color, bboxes_thickness)# 写上对应的文字cur_label = labelif scores is not None:cur_label += " [" + str(round(scores[idx] * 100, 2)) + "]"cv2.putText(img=img,text=cur_label,org=(pt1[0], pt1[1] - 5),fontFace=cv2.FONT_HERSHEY_SIMPLEX,fontScale=.5,color=(0, 255, 0),thickness=2,)return imgdef _show_single_video(rgb_dir, tubes, nframes, label, img_impl):draw_imgs = []for i in range(nframes):img = cv2.imread(os.path.join(rgb_dir, img_impl % (i+1)))boxes = tubes[i+1]draw_img = _darknet_draw_bbox(boxes, [label]*len(boxes), None, img)draw_imgs.append(draw_img)cv2.imshow("demo", draw_img)cv2.waitKey(100)return draw_imgsdef _filter_samples(data_dict, args):# TODO: filter input data with categoriesreturn data_dictdef _show_spatiotemporal_datasets(args):pkl_path = os.path.join(args.dataset_root_path, args.pkl_filename)rgb_dir_path = os.path.join(args.dataset_root_path, args.rgb_dir_name)with open(pkl_path, "rb") as fid:cache = pickle.load(fid, encoding='bytes')labels = [c.decode() for c in cache[b'labels']]train_videos = [c.decode() for c in cache[b'train_videos'][0]]test_videos = [c.decode() for c in cache[b'test_videos'][0]]nframes = {k.decode(): v for k, v in cache[b'nframes'].items()}resolution = {k.decode(): v for k, v in cache[b'resolution'].items()}gttubes = {k.decode(): v for k, v in cache[b'gttubes'].items()}# key - sample relative dir# value - dict#   label - int#   nframes - int#   reoslution - tuple#   tubes - arraydata_dict = defaultdict(dict)for k in nframes:data_dict[k]['nframes'] = nframes[k]for k in resolution:assert data_dict[k]['nframes'] is not Nonedata_dict[k]['resolution'] = resolution[k]for k in gttubes:assert data_dict[k]['resolution'] is not Nonelabel = list(gttubes[k].keys())[0]data_dict[k]['label'] = labeldata_dict[k]['tubes'] = defaultdict(list)for boxes in gttubes[k][label]:for box in boxes:data_dict[k]['tubes'][int(box[0])].append(box[1:])for relative_path in data_dict.keys():sample = data_dict[relative_path]_show_single_video(os.path.join(rgb_dir_path, relative_path),sample['tubes'],sample['nframes'],labels[sample['label']],args.img_impl,)def main(args):if args.dataset in ["ucf101_24", "jhmdb"]:show_dataset_fn = _show_spatiotemporal_datasetselse:raise ValueError("Unknown dataset {}".format(args.dataset))show_dataset_fn(args)if __name__ == '__main__':main(_parse_args())

时空行为检测数据集 JHMDB UCF101_24 详解相关推荐

  1. 目标检测算法YOLO-V1算法详解

    ❝ 前面我们一起学了SSD算法的相关知识,如下: SSD目标检测算法必须知道的几个关键点 目标检测算法SSD结构详解 ❞ 今天我们学习另一系列目标检测算法YOLO(You Only Look Once ...

  2. 目标检测模型YOLO-V1损失函数详解

    ❝ 上期我们一起学习了YOLOV1算法的原理框架,如下: 目标检测算法YOLO-V1算法详解 今天我们深入一步,一起学习下关于YOLO-V1算法的损失函数和优缺点. ❞ YOLO-V1损失函数 从上期 ...

  3. python数据集的预处理_关于Pytorch的MNIST数据集的预处理详解

    关于Pytorch的MNIST数据集的预处理详解 MNIST的准确率达到99.7% 用于MNIST的卷积神经网络(CNN)的实现,具有各种技术,例如数据增强,丢失,伪随机化等. 操作系统:ubuntu ...

  4. COCO pose数据集标注文件详解

    COCO pose数据集标注文件详解 注意:使用python3来描述数据集中的内容 导入python 使用val2014来举例: from pycocotools.coco import COCO i ...

  5. COCO数据集标注格式详解----object instances

    coco数据集 类别:80类 3种标注类型,使用json文件存储,每种类型包含了训练和验证 object instances (目标实例): 也就是目标检测object detection objec ...

  6. 【动手学PaddlePaddle2.0系列】目标检测理论与YOLOv4详解

    对计算机而言,能够"看到"的是图像被编码之后的数字,所以它很难理解高层语义概念,比如图像或者视频帧中出现的目标是人还是物体,更无法定位目标出现在图像中哪个区域.目标检测的主要目的是 ...

  7. 深度学习-目标检测YOLOV3 YOLOv4原理详解

    2.YoloV3核心基础内容 2.1 网络结构可视化 Yolov3是目标检测Yolo系列非常非常经典的算法,不过很多同学拿到Yolov3或者Yolov4的cfg文件时,并不知道如何直观的可视化查看网络 ...

  8. 目标检测网络之SPP-net详解

    SPP-net详解: 简要概述:SPP-net网络是基于R-CNN结构改进,且仅在候选区域特征提取,以及特征向量大小转化两个方面做出改进,如详细理解SPP-net请先阅读目标检测开山之作R-CNN详解 ...

  9. 谷歌 NAS + 目标检测:SpineNet论文详解

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:bearbee 知乎链接:https://zhuanlan.zhihu.co ...

  10. 基于双目视觉的目标检测与追踪方案详解

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者 | Aimme 出品 |  焉知智能汽车 一直想通过计算机视觉的角度好好地把其在自动驾驶视觉检测 ...

最新文章

  1. Linux下udp程序怎么运行,Linux下UDP的连接程序示例(阻塞、非阻塞)
  2. css之object-fit
  3. [云炬创业管理笔记]第一章测试2
  4. 【Linux】一步一步学Linux——mtools命令(244)
  5. 安装ISO系统(原版系统)系统终极方法
  6. 单机 amp; 弱联网手游 防破解、金币改动 简单措施
  7. 许志安刘强东倪震:结构性中年危机下的男人们
  8. 华谊兄弟:实际控制人王忠军、王忠磊合计减持1.44%公司股份
  9. 计算机硬件配置和软件有哪些,BIM软件对电脑硬件配置有什么要求?
  10. php文字下划线,css如何设置字体下划线
  11. 让0基础纯小白也能上手写Python,干货分享(二)
  12. SQLHelper--四种方法完整版
  13. 腾讯推出移动端动画组件PAG,释放设计生产力!
  14. 简单实现图片转彩色字符画
  15. 联盟链之hyperledger-fabric
  16. 微慕小程序专业版V3.6.6发布
  17. js字符与ascii码转换
  18. 计算机原理八字,讲解八字理论
  19. 12.0_[Java 多态]-多态/子类父类互转/基本引用类型互转/ instanceof 运算符
  20. DOCTYPE 的作用是什么

热门文章

  1. 使用Postman进行get、put、post端口测试
  2. vb.net 功能f8键事件_UG软件F8快捷键和笔记本电脑F8快捷键冲突的解决方法
  3. 华为盒子EC6110-T-通刷-免拆刷机固件及教程
  4. java根据身份证号判断当前年龄
  5. 关于微信unionid理解
  6. (二)计算软件的安装:truegrid、ls-prepost、ls-dyna
  7. 2021年将最流行的10大JavaScript库
  8. pgAdmin 3 编译安装
  9. SysCeo_Win7_Classic_V7.8_32位+64位(6in1)纯净经典版
  10. html怎么设置火狐ie兼容模式,火狐开启兼容模式 火狐浏览器怎么关闭兼容模式...