搞计算机视觉的兄弟应该都懂这个痛图像分类有 ImageNet目标检测有 COCO一到手这个目标能用的干净数据就那么几份下载还要填表、等邮件、签协议。前阵子带新人做手势识别项目第一周全耗在找手部开源数据集上官方页面扒了一圈能直接用的没几个不是格式老旧就是标注残缺要不就是 License 写满了仅限科研。这篇就把我用过和调研过的手部开源数据集按任务类别完整捋一遍手势分类、手部检测、关键点检测、3D姿态估计、手物交互覆盖 RGB、深度、合成数据顺手把下载入口、标注格式、常见坑都交代清楚。给准备入手部项目又不想从零标数据的人一份能照着抄的清单。1. 手部数据集为什么稀缺先搞清楚难点再选型1.1 采集难手是画面里最灵活刁钻的目标手部数据之所以这么难找最直接的原因是采集成本天然比别人高。通用物体检测随便拿相机在街上扫一圈就能攒几万张手部任务要求手必须清晰可见、动作完整、尺度合适这就麻烦多了。手指动作每毫秒都在变同一只手在侧拍、俯拍、强光、逆光下的视觉差异极大手指之间还会互相遮挡在低分辨率图里五根手指的边界几乎消失连人眼都分不清哪根是哪根。早期团队做手部关键点检测时标完第一批图才发现有大量样本因为手太小、严重自遮挡或运动模糊属于废样本后面被迫做了一轮人工清洗。这种情况反馈到数据集上就是公开数据普遍存在两个问题要么是实验室环境干净但场景单一要么是真实场景丰富但数量上不去。所以你会发现一个很有趣的现象通用检测数据集动辄上百万张而手部关键点数据集能超过十万张的屈指可数。1.2 标注贵21个关键点的标注成本远超你想象手部关键点通用标注是 21 个点手腕 1 个拇指、食指、中指、无名指、小指各 4 个。这 21 个点里只要有一个标歪训练出来的模型在指尖位置就非常离谱。一线标注员标一张手部图通常要 15 到 30 秒遇到手指交叉、重叠的图还得反复看原图确认常常要标两遍再校对一遍。所以 COCO 物体检测能轻松标几十万张而手部关键点数据集的规模普遍小一个数量级。这也是我为什么建议大多数人放弃自建数据集直接用手部开源数据集起步。自己标注不仅贵还容易标出脏数据里外里亏得慌。与其纠结数据不够干净不如先把手头开源数据吃透再针对自己的场景补几十张数据做微调这个投入产出比要高得多。2. 主流手部开源数据集全盘点按任务分类慢慢挑2.1 手势分类与检测Jester、HaGRID、NVGesture20BN-Jester视频手势分类Jester 是视频手势分类绕不开的选手出自 TwentyBN总共 148,092 个视频片段每个片段约 3 秒标注了 27 类手势包括滑屏、放大缩小、转动手指、点赞、停止这些日常交互动作。数据是 MP4 视频不是单帧图片因此非常适合做视频级手势识别、时序模型这类任务。官方只提供视频级标签没有帧级框标注如果你要做的是帧级检测Jester 就不太对口。Jester 的下载需要注册官网账号填一个申请表格审核后官方会给一个下载脚本里面是一堆 URL 列表挨个下载就行。由于视频总数多整体体积不小建议用支持断点续传的工具挂着拉别用浏览器直接下。这个数据集在手势分类领域属于起步第一份的地位跑通一遍你就知道视频手势分类大概是怎么回事了。HaGRID手势检测分类HaGRID 全称 HAnd Gesture Recognition Image Dataset2022 年前后发布让我眼前一亮的新数据集。它包含约 55 万张 RGB 图像覆盖 18 类常见交互手势外加无手势背景图像里自带手部检测框和手势类别标签一套数据同时支持目标检测和手势分类两个任务。数据来源是众包采集场景、肤色、光照变化比较充分比纯实验室数据实用不少。HaGRID 在 Kaggle 上就有下载比 Jester 省心太多不需要填表直接拉就行。如果你要做一个人机交互手势识别的落地项目我强烈建议把它当成主力数据。唯一要注意的是它自带的手势类别偏向交互控制这一类比如点赞、比心、握拳、比数字、喊停、OK 这些手语方向就不太适用了。NVGesture驾驶场景手势交互NVGesture 是 NVIDIA 发布的驾驶环境下手势交互数据集包含 1,532 个视频序列25 类手势由 20 位受试者完成数据同时提供 RGB 和深度图类别涵盖滑动手势、点击、旋转等。这个数据集的特殊价值在于场景它拍摄的是驾驶员在中控台附近做手势的画面背景固定、光照相对复杂适合做车载手势交互。下载需要申请NVIDIA 官方审核后会提供下载链接。因为场景比较专一拿它做驾驶舱内手势识别很贴切但你也别指望把它直接迁移到其他场景背景差异太大会导致泛化明显变差。2.2 关键点与姿态估计AI Challenger、FreiHAND、BigHand2.2M、NYU、ICVL、RHDAI Challenger 手部关键点数据集国内做手部关键点的同学应该都听过 AI Challenger这是 2017 年 AI Challenger 大赛放出的大规模手部关键点数据集标注了 21 个关键点采用 JSON 标注格式里面包含训练集和验证集。图像来自网络真实生活场景尺度、遮挡、复杂度都很可观是少有的中文社区友好数据集很多人拿它跑 HRNet、OpenPose 这些模型做手部关键点。它的标注格式和 COCO 不完全一样关键点坐标是一长串按顺序排列的数值没有 visibility 这个位用的时候要注意做转换。这个数据集现在依然能找到下载入口部分机构在百度网盘和 AI Studio 上有转存版本下载难度算中等。FreiHANDRGB 3D手部姿态MESHFreiHAND 是我做 3D 手部姿态时用得最多的一份数据来自弗莱堡大学CVPR 2019 发布。它是纯 RGB 图像总共 36,520 张其中 32,560 张训练图像3,960 张评估图像。标注非常全2D关键点、3D关键点、MANO 手部网格参数都有评估集的标注不公开需要提交到官方服务器评测。FreiHAND 的图像包含各种背景、物体、遮挡情况和实验室纯色背景的深度数据完全是两个路子现在很多 3D 手部重建论文都用它做基准。下载需要在官网同意条款后获取链接License 是非商业用途做科研没问题商用要谨慎。BigHand2.2M大规模深度手部姿态BigHand2.2M 顾名思义是 220 万帧深度图像来自帝国理工等机构用十位受试者的左右手采集标注了 21 个 3D 关节。它是深度模态里规模最大的那一档特别适合训练纯深度图像下的手部姿态估计模型。这个数据集的申请流程相对严格一般要填表并说明用途官方审核后发下载链接。深度图本身没有颜色信息训练出的模型图像域和 RGB 完全不同想做跨模态迁移还需要额外处理。NYU Hand PoseRGB-D多视角NYU Hand Pose Dataset 是 2014 年的老牌数据集用 Kinect 采集包含三个视角训练集 72,757 帧测试集 8,250 帧标注了 36 个关节。它提供的多视角信息和深度图质量不错是早期手部姿态估计研究的标配。虽然年份久远但做算法对比、跑基准仍然够用我家机子跑 3D 手部姿态时还经常拿 NYU 做 sanity check。ICVL Hand Posture深度纯关节ICVL 是小而干净的代表深度图像标注 16 个关节点训练数据约 1.8 万帧测试集几百帧。它规模不大适合快速验证模型思路或者当初版训练集先跑通整体流程。RHD合成渲染手部数据RHD 是 Rendered Hand Dataset 的缩写用 3D 模型渲染出 4 万多张合成手部图像包含 21 个 2D 关键点、3D 关键点、分割 mask 和深度图。合成数据最大的优势是标注极其精确不存在标歪了的问题非常适合做预训练。先用 RHD 让模型学会手部结构再用真实数据微调是我非常推荐的打法。2.3 手部分割与第一人称检测EgoHands、Tzutzu、MPII HandEgoHands第一人称手部分割EgoHands 是 CMU 发布的第一人称手部数据集从 YouTube 上的一百多个第一人称视频里选了 48 个抽取 4,800 张图像做了像素级左右手 mask 标注。第一人称视角的手部数据和第三人称完全不同手在画面里又大又变形遮挡和运动模糊很常见因此特别适合做 AR/VR、头戴设备、第一人称视频分析这一类任务。它的标注是像素级 mask不是框做分割训练直接拿原图和 mask 就行。下载方式比较传统可能需要申请或者从官方渠道拉取。Tzutzu视频手部分割Tzutzu 是一个手部分割数据集标注内容是视频帧中的手部 mask标注相对细致。它没有前面几个那么出名但在人物视频里把多只手都分割出来这类场景里有价值比如视频会议、直播、手势交互产品。用它做分割模型的补充数据比单纯用检测框效果好。MPII HandRGB关键点MPII Hand 是马普所出的手部关键点数据集RGB 图像为主标注 21 个关键点规模不算大但质量稳定。它的场景偏自然生活适合作为真实 RGB 手部关键点的验证集和 AI Challenger、FreiHAND 形成互补。2.4 手物交互与3D网格HO3D、DexYCB、ObMan、CMU PanopticHO3D手物体交互HO3D 是 CVPR 2020 发布的手物交互数据集包含约 7.7 万帧 RGB 图像人手和日常物体同时出现标注了 MANO 手部网格、物体 3D 姿态和物体模型。它专门针对手抓取/操作物体这个场景机器人抓取、AR/VR 交互、动作理解都经常用。DexYCB大规模手物抓取DexYCB 是 CVPR 2021 的大规模手物抓取数据集包含 1,000 个视频序列、接近 60 万帧使用两个相机视角拍摄标注了手部 MANO 网格和物体的 6D 姿态。它在手物交互任务里是目前规模最大的一档适合训练手抓取物体的深度模型。ObMan合成手物网格ObMan 是利用 MANO 模型生成的大规模合成手物交互数据手部网格和物体网格成对提供标注天然精确适合做单目 RGB 下的手部网格重建预训练。它和 RHD 思路类似都是合成数据当主力真实数据做微调的优质原料。CMU Panoptic多视角手部数据CMU Panoptic 数据集来自卡内基梅隆大学的 Panoptic Studio用几十上百个相机同步采集能提供多视角手部画面和准确的 3D 关键点。做多视角重建、跨视角匹配这类研究时它是非常难得的数据来源缺点是数据体量大、格式复杂普通项目慎入。3. 数据集选型决策表按任务、算力和成本做取舍3.1 五步选型法面对一堆数据集我的习惯是走一套五步选型法能省掉大量试错时间确定任务类型你要做的是手势分类、检测、关键点还是3D姿态。任务直接决定模态Jester 是视频分类HaGRID 是检测加分类FreiHAND 是3D姿态硬要混用只会让 pipeline 越来越复杂。确定输入模态线上产品大多是 RGB 单目那就优先 FreiHAND、AI Challenger、HaGRID如果有深度相机再加 BigHand2.2M、NYU、ICVL。看 License 和下载方式很多数据只允许科研商用前必须先读 License。先判断你能不能用再决定要不要投入时间。看标注格式和现有代码的兼容度和 PyTorch、MMPose、YOLO 这类框架的格式匹配度越高上手越快。估算数据量是否够训图像分类几万张够了关键点最好十万级3D mesh 建议配合合成数据。3.2 数据量、标注质量与 License 怎么算账选型时不能只看数量还要看有效信息密度。Jester 虽然 14 万段视频但每段只有 3 秒且只带一个视频级标签对帧级检测帮助有限HaGRID 单张图像里手部占比大、标注框准确对检测任务来说有效样本率非常高。量大数据乱不如量小数据准这个原则在关键点任务上尤其明显。标注质量可以用一个土办法核验随便抽三五十张图把关键点画出来转成网格图肉眼扫。一看标注点是否贴合手指关节二看是否存在大量死点永远标在同一个位置的点三看类别分布两侧是否失衡。发现脏数据率超过 5%这份数据就要慎重用或者做好清洗。License 方面最常见的是 CC BY-NC 4.0表示署名 非商用。学术研究、比赛、开源项目里注明出处一般没问题一旦你的模型要集成到商业产品里按份卖钱必须逐字读 License必要时联系数据作者申请商业授权。FreiHAND、HaGRID 等一批主流数据都是非商用这个坑我见太多人踩过了。3.3 混合数据与合成数据补充纯靠单一数据集构建训练集很难满足真实需求我的做法是真实数据打底合成数据补边角。有一类边界 case 是真实数据永远覆盖不到的手指完全重叠、极端光影、罕见角度的自遮挡。这些用 Blender 渲染合成手部图像可以低成本补齐RHD 和 ObMan 就是现成的合成数据源。数据增强也是对抗数据稀缺的重要手段。手部任务和通用目标检测不太一样幅度太大的拉伸和翻转反而会破坏手的拓扑结构左右翻转虽然手指位置会镜像但类标签不受影响可以放心用。我常用的增强组合是随机旋转 ±15 度、平移、色域扰动、随机遮挡小块最后保证增强后的图上手指仍然是完整的、可辨认的。4. 下载、解压与标注格式实战4.1 下载前的准备工作与常见入口下载这一步劝退了很多人其实大多数手部开源数据集不是下载难而是入口绕。Jester、BigHand2.2M、FreiHAND 这类都需要先到官网填申请说明机构、用途、联系方式等审核通过再发链接。填写申请时建议用机构邮箱写清楚你是做科研还是工程落地审核通过率会高很多。提交后定期查一下垃圾箱不少人的申请链接就躺在那里。有些数据集在 Kaggle、Hugging Face Datasets 上有转存版本比如 HaGRID 在 Kaggle 就很方便不用等邮件。如果一些国外官网访问缓慢或反复超时可以先找这类镜像入口第三方转存通常没有官方那么全但应付大部分训练场景够了。下载时推荐使用支持多线程和断点续传的下载工具避免下到一半中断又要重来。所有压缩包解压之前先做校验官方一般会提供 MD5 或者 SHA 值对不上就果断重下。4.2 标注格式对照JSON、CSV、深度图各有各的脾气手部数据集的标注格式五花八门我先把最常见的几种说清楚。AI Challenger 的 JSON 格式大致长这样{ images: [ {image_id: hand_0001, file_name: 00000001.jpg, height: 720, width: 1280} ], annotations: [ { image_id: hand_0001, keypoint_annotations: { hand_1: [x1, y1, x2, y2, ..., x21, y21] } } ] }它这里的坐标是一个一维数组前两个数是第 1 个关键点的 x、y以此类推一共 42 个数。没有 visibility 标记位也没有面积、分组等字段读取很简单但要自己维护一个哪个点是哪根手指的顺序表。FreiHAND 的标注更复杂训练集的 JSON 里包含 2D 关键点、3D 关键点、MANO 参数、相机参数每个主题下还有对应的图集 ID。评估集的图像只有图片没有标注需要用官方评测服务跑分数。Jester 的标注最简单就是一张 CSV 表每行是一个视频目录视频被拆成一组图片帧文件夹和对应的类别数字。20BN 官方用这个 label 做视频分类训练你要是想做帧级模型还得自己从视频里抽帧。不管用哪个数据集我建议训练前统一做一个格式翻译第一步永远是写一个可视化代码把标注画到原图上确认顺序对不对。这一步能省掉后面排错的大量时间。下面这段代码是一个读取 AI Challenger 标注并画图的最简脚本import json import cv2 with open(keypoint_train_annotations.json, r) as f: data json.load(f) img_meta data[images][0] ann data[annotations][0] key list(ann[keypoint_annotations].keys())[0] pts ann[keypoint_annotations][key] img cv2.imread(img_meta[file_name]) for i in range(0, len(pts), 2): x, y int(pts[i]), int(pts[i 1]) cv2.circle(img, (x, y), 3, (0, 255, 0), -1) cv2.imwrite(vis.jpg, img)跑完你会发现大部分数据集转换的关键不在于会读而在于顺序统一。4.3 把数据统一成 COCO / YOLO 格式的实操手部关键点项目我建议统一转成 COCO keypoint 格式因为 MMPose、Detectron2、MMDetection 这些框架原生支持省得自己写训练循环。COCO keypoint 的核心结构是每个关键点用三个数表示[x, y, v]v 的取值是 0 表示缺失、1 表示存在但不可见、2 表示可见。AI Challenger 转成 COCO 时需要把一维数组拆成 21 个点并把 v 全部置为 2因为你不知道哪些点被遮挡了只能全部当作可见处理。如果是做检测加分类就转 YOLO 格式。YOLO 的归一化坐标需要知道图像的宽高然后算 bbox 中心点坐标和宽高占图像的比值x_center (x_min x_max) / 2 / img_width y_center (y_min y_max) / 2 / img_height box_w (x_max - x_min) / img_width box_h (y_max - y_min) / img_height如果数据集自带的是关键点标注没有 bbox可以先根据关键点坐标扩展外扩一定像素再生成框。我一般会外扩 20% 到 30%让框里包含一点手腕和背景对关键点检测比紧贴手指的框更友好。4.4 训练前的数据检查与增强数据喂进网络之前我强烈建议做一遍全面体检别急着训练。第一步先扫分辨率把小于 96 像素的手部小目标样本单独拎出来或者干脆过滤掉否则模型学到的主要是大手的特征。第二步检查坐标边界有些数据集标注的坐标偶尔会超出图像范围比如 x 等于 1201 而图像宽度只有 1200这类样本要修正或丢弃。第三步做可视化抽查把每个 batch 的标注图拼成网格图整体扫一遍脏数据这时候就原形毕露了。增强策略上手部任务的旋转范围不用太大5 到 20 度的旋转就能覆盖正常手势变化。亮度、对比度、饱和度的随机扰动可以提高模型对光照的鲁棒性。随机遮挡可以用 erase 类方法模拟手指被其他物体挡住的情况。需要提醒的是手指的细节在高分辨率下才有意义训练分辨率建议至少 256 以上能用 384 或 512 更好代价是显存占用和推理速度需要自己平衡。5. 高频问题与避坑速查5.1 下载环节常见问题官网打不开或者申请邮件迟迟不来是手部数据集频次最高的痛点。处理办法检查垃圾箱用机构邮箱重新申请去 Kaggle 或 GitHub 搜数据集转存。下载过程中断或压缩包损坏优先用带校验的下载工具拿到文件先验证 MD5 再解压报错就重新下载对应分卷。有些数据集官网只放了部分文件比如先给一个样本子集完整版需要邮件单独要这种情况耐心沟通一般都能解决。哪怕是大厂出品的数据集服务器负载也很高高峰期下载经常限速我习惯把下载安排在晚上或者用支持断点续传的工具挂着。5.2 标注格式与坐标坑标注顺序是最隐蔽的坑。AI Challenger、FreiHAND、NYU 的 21 个关键点顺序并不完全一致直接拿不同数据集混训时会发现 loss 莫名其妙飘或者指尖的位置跑到手腕上本质就是关键点 index 没对齐。处理办法是写一张索引映射表把每个数据集的点数顺序统一成同一套约定再进训练管线。另一个高频坑是坐标原始尺度不一致。有的数据集标注是在原图分辨率上的绝对坐标有的是裁剪后的局部坐标还有的是做了归一化的相对坐标。混合使用前必须先检查标注数值范围如果发现坐标都在 0 到 1 之间说明已经是归一化坐标需要乘回宽高才能绘图和转格式。5.3 训练效果不理想怎么办模型训练不起来先别换网络结构九成是数据问题。手指小目标检测不到就提高输入分辨率、加大裁剪区域比例不要整图送入网络先让网络看清楚手。关键点抖动明显是训练数据里同类手势太少需要合并多个数据集或者用合成数据补。类别不均衡在 HaGRID 这类大众分类数据集里尤其明显no_gesture 这类背景样本往往占一半以上建议做负采样或者给少数类加权重。过拟合的话优先用 RHD 这类合成数据做预训练再用真实数据微调比单纯堆数据增强有效得多。如果模型在验证集上精度不错但换场景就崩通常是数据速查表里有偏差需要补充目标场景的样本再做域自适应。5.4 License 与合规提醒手部数据集的 License 是一个容易忽视但影响极大的环节。FreiHAND、HaGRID、BigHand2.2M 等绝大多数主流数据都是科研友好、商用受限哪怕只是放到 GitHub 上做开源项目也要仔细看是否允许 commercial use。遇到过不止一次项目模型做完了商业化评审时才发现训练数据不允许商用只能推倒重新找数据。另外很多手部数据集包含真人影像存在肖像权和使用范围问题。发布 demo 和模型前注意对人脸、环境信息做脱敏处理不要直接把包含个人特征的原始图像放出来。自己采集数据更是如此一定要取得被采集者授权这一步省不了。最后再分享一个个人习惯拿到任何新数据集的第一件事永远是写一个可视化脚本把标注全部画出来肉眼扫一遍。文档写得再清楚都不如亲眼看两张标注图来得实在。看图的五分钟能帮你避开后面一整天的排错时间。
