ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

视觉项目开源数据集选型指南:目标检测、工业缺陷与图像分割

视觉项目开源数据集选型指南:目标检测、工业缺陷与图像分割 1. 为什么我花了两周时间整理这份开源数据集清单做视觉项目的人都有一个共同的痛点模型结构调了半天loss曲线看着也还行但mAP就是上不去最后排查一圈发现是数据集的问题——要么标注质量差要么场景不匹配要么类别不平衡。我自己在做一个工业质检项目时就踩过这个坑当时用了一个网上随便找的缺陷数据集训练集准确率能到98%一到产线实测直接崩到60%以下后来才发现那个数据集的缺陷样本几乎都是在理想光照下拍的跟实际产线的震动、反光、角度偏差完全不是一回事。从那以后我就养成了一个习惯拿到一个新任务先花时间把可用的开源数据集摸清楚再决定技术路线。这份汇总就是我在目标检测、工业缺陷检测、图像分割这几个方向上的积累每个数据集我都会标注它的规模、标注格式、适用场景和实际使用中需要注意的坑。适合刚入门深度学习的同学快速找到练手数据也适合有经验的工程师做方案选型时参考。需要提前说明的是数据集领域变化很快新的benchmark不断出现有些老数据集虽然还在被引用但实际训练效果可能已经不如新出的。我会尽量标注每个数据集的状态但你在实际使用前最好还是去官方页面确认一下最新的下载方式和license。2. 目标检测方向的数据集怎么选2.1 通用目标检测从入门到进阶的路线目标检测是视觉领域最成熟的方向之一开源数据集也最丰富。但丰富不等于随便选一个就行不同数据集的设计目标差异很大选错了会直接影响你的模型泛化能力。PASCAL VOC是很多人的入门数据集只有20个类别约11,000张图片。它的价值在于足够小你可以在单卡上几个小时内跑完一轮完整的训练流程适合验证模型结构是否正确、数据增强策略是否有效。但它的局限性也很明显类别太少场景单一训练出来的模型在实际项目中几乎没有直接可用性。我一般只推荐用它来做教学和调试。MS COCO是目前通用目标检测最主流的benchmark80个类别训练集约118,000张图片验证集5,000张。它的标注质量很高包含大量小目标和密集场景评估指标mAP的计算方式也成为了行业标准。如果你要发论文或者做模型对比COCO基本是绕不开的。但要注意COCO的标注格式是JSON跟YOLO系列的txt格式不兼容需要做转换。我后面会专门讲转换的注意事项。Open Images Dataset是Google发布的超大规模数据集包含约900万张图片和600个类别。它的优势在于规模大、场景多样适合做预训练或者研究长尾分布问题。但它的标注噪声相对较高而且下载和处理需要大量存储空间我建议至少准备2TB以上的硬盘再考虑用它。Objects365是旷视发布的数据集365个类别约60万张训练图片。它的定位介于COCO和Open Images之间类别覆盖更广标注质量也不错。如果你做的项目类别超出了COCO的80类Objects365是一个很好的补充。数据集类别数图片规模标注格式推荐场景PASCAL VOC2011KXML教学、调试MS COCO80123KJSON论文、模型对比Objects365365600KJSON多类别项目Open Images6009MCSVJSON预训练、长尾研究2.2 小目标检测别再用通用数据集硬撑了小目标检测是实际项目中最常见的难点之一。通用数据集里小目标的占比通常很低COCO里面积小于32x32像素的目标虽然有一定数量但分布不均匀直接拿来训练小目标检测模型效果往往不理想。VisDrone是无人机视角的数据集包含约10,000张图片和10个类别行人、车辆、自行车等。它的特点是目标普遍很小而且存在大量遮挡和密集排列的情况。如果你做的是无人机巡检、高空监控这类场景VisDrone比COCO合适得多。但要注意VisDrone的标注格式是TXT跟YOLO格式接近但不完全一样需要做字段映射。TinyPerson是专门针对极小目标的数据集图片中的人体目标平均高度只有约20像素。这个数据集的价值在于它把小目标推到了极端适合研究特征金字塔、注意力机制等对小目标敏感的技术。但它的场景比较单一主要是街景和室内迁移到其他场景时需要额外补充数据。DOTA是遥感图像目标检测的数据集包含15个类别和约2,800张大幅遥感图像。遥感图像的特点是目标尺度变化极大同一张图里既有几十像素的小车也有几百像素的大飞机。DOTA的标注是旋转框oriented bounding box跟常规的水平框不同处理起来需要额外的代码支持。实操心得做小目标检测时不要直接把大图的标注缩放到小尺寸输入。正确的做法是把大图裁剪成重叠的小图块分别标注和训练推理时再把结果拼回去。这样能显著提升小目标的召回率代价是推理速度会下降。2.3 三维目标检测从2D到3D的跨越三维目标检测是自动驾驶和机器人领域的核心任务数据集的门槛比2D高不少主要体现在标注成本上——需要激光雷达点云和相机图像的联合标注。KITTI是三维目标检测最经典的benchmark包含7,481张训练图片和对应的点云数据类别包括汽车、行人、自行车等。它的标注格式是每行一个目标的文本文件包含位置、尺寸、朝向角和遮挡程度等信息。KITTI的问题是规模偏小而且采集设备比较老点云稀疏跟现在的激光雷达数据分布有差异。nuScenes是nuTonomy发布的大规模自动驾驶数据集包含1,000个场景每个场景20秒配有6个相机、1个激光雷达和5个毫米波雷达的数据。它的标注量是KITTI的7倍以上而且包含了更多复杂场景夜间、雨天等。但nuScenes的数据组织方式比较复杂需要安装官方的devkit才能方便地读取和评估。Waymo Open Dataset是Waymo发布的数据集包含1,150个场景每个场景20秒配有5个相机和1个激光雷达。它的点云质量很高标注也很精细但下载需要申请而且数据量很大约1TB以上。数据集场景数传感器配置标注格式适用场景KITTI221相机1激光雷达TXT算法验证nuScenes10006相机1激光雷达5毫米波JSON自动驾驶研发Waymo Open11505相机1激光雷达TFRecord大规模训练2.4 YOLO系列训练的数据集处理要点YOLO系列是目前工业界用得最多的目标检测框架从YOLOv5到YOLOv8再到最新的YOLOv26数据格式基本保持一致每张图片对应一个txt文件每行格式为class_id x_center y_center width height坐标都是归一化到0-1之间的。从COCO格式转YOLO格式时有几个容易出错的地方。第一COCO的bbox是[x_min, y_min, width, height]而YOLO需要的是中心点坐标和宽高转换公式是x_center (x_min width/2) / image_widthy_center (y_min height/2) / image_height。第二COCO的类别id是从1开始的YOLO是从0开始的需要减1。第三如果图片有旋转或者裁剪坐标转换会更复杂建议直接用现成的转换脚本。import json import os def coco_to_yolo(coco_json, output_dir, img_dir): with open(coco_json) as f: data json.load(f) # 建立图片id到文件名的映射 img_id_to_info {img[id]: img for img in data[images]} # 建立类别id到连续id的映射 cat_ids sorted([cat[id] for cat in data[categories]]) cat_id_to_idx {cat_id: idx for idx, cat_id in enumerate(cat_ids)} for ann in data[annotations]: img_info img_id_to_info[ann[image_id]] img_w, img_h img_info[width], img_info[height] x, y, w, h ann[bbox] x_center (x w / 2) / img_w y_center (y h / 2) / img_h w_norm w / img_w h_norm h / img_h class_idx cat_id_to_idx[ann[category_id]] txt_name os.path.splitext(img_info[file_name])[0] .txt txt_path os.path.join(output_dir, txt_name) with open(txt_path, a) as f: f.write(f{class_idx} {x_center:.6f} {y_center:.6f} {w_norm:.6f} {h_norm:.6f}\n)注意YOLOv26在数据增强方面有一些新特性比如Mosaic增强的变体对小目标的训练效果有提升。但如果你用的是自定义数据集建议先关闭Mosaic跑一轮baseline确认数据本身没有问题再开启增强。3. 工业缺陷检测数据集少样本场景下的选择策略3.1 工业缺陷检测的特殊性工业缺陷检测跟通用目标检测有本质区别。通用检测面对的是自然场景目标有明确的语义边界工业缺陷往往是纹理异常、颜色偏差、微小裂纹这类低对比度的模式而且缺陷样本极其稀少——产线上可能几千个良品里才出一个次品。这就导致工业缺陷数据集普遍规模小、类别不平衡严重。直接套用COCO上预训练的模型效果往往很差因为预训练模型学到的特征跟工业缺陷的特征分布差距太大。MVTec AD是目前工业异常检测最权威的benchmark包含15个类别5种纹理10种物体共5,354张图片。它的设计很巧妙训练集只有良品图片测试集包含良品和各种缺陷。这意味着你不能用常规的分类或检测方法必须用无监督或半监督的方法。MVTec AD的评估指标是AUROC图像级和像素级都有。DAGM 2007是弱监督缺陷检测的数据集包含10个类别的纹理图像训练集有缺陷标注但测试集没有。它的规模比MVTec AD小但胜在标注格式简单适合快速验证算法。NEU-DET是东北大学发布的钢材表面缺陷数据集包含6个类别裂纹、夹杂、斑块、麻点、氧化铁皮、划痕共1,800张图片。它的标注是水平框可以直接用YOLO系列训练。但要注意NEU-DET的图片分辨率较低200x200而且缺陷对比度不高训练时需要仔细调参。DeepPCB是PCB缺陷检测的数据集包含1,500张图片和6个类别开路、短路、鼠咬、毛刺、铜渣、缺口。它的特点是缺陷尺寸很小而且背景复杂适合研究小目标检测和注意力机制。数据集类别数图片数标注类型评估指标MVTec AD155354无监督AUROCDAGM 2007101150弱监督准确率NEU-DET61800水平框mAPDeepPCB61500水平框mAP3.2 少样本缺陷检测的实操技巧工业缺陷数据集最大的问题是样本少。我做过一个项目某类缺陷全厂只收集到23张图片直接训练模型根本收敛不了。后来用了几个策略组合最终把召回率做到了92%以上。第一个策略是数据合成。用良品图片加上人工生成的缺陷纹理可以快速扩充训练集。具体做法是用泊松融合或者CutMix把缺陷区域贴到良品图片上。但要注意合成的缺陷必须符合真实缺陷的形态分布否则会引入噪声。我一般会先用真实缺陷做统计分析提取缺陷的面积、长宽比、灰度分布等特征再按这些特征生成合成样本。第二个策略是迁移学习微调。先在MVTec AD或者ImageNet上预训练一个 backbone然后冻结前面的层只微调后面的检测头。学习率要设得很小比如1e-4否则容易过拟合。我试过用YOLOv8在NEU-DET上预训练然后迁移到自定义数据集比从头训练收敛快3倍以上。第三个策略是异常检测思路。如果缺陷样本实在太少可以考虑用无监督异常检测的方法比如PatchCore、PaDiM这些。它们只需要良品图片训练推理时计算测试图片与良品特征的距离超过阈值就判为缺陷。这种方法的优点是训练数据容易获取缺点是无法区分缺陷类型而且对光照变化比较敏感。实操心得工业缺陷检测中数据标注的一致性比数量更重要。我见过一个团队标注了5,000张图片但不同标注员对划痕和裂纹的边界定义不一致导致模型学到的特征很混乱。建议在标注前先制定详细的标注规范并且让同一个人标注同一类缺陷。3.3 工业缺陷数据集的标注工具选择工业缺陷的标注跟通用目标检测不同很多时候需要像素级的分割标注而不是简单的边界框。常用的标注工具有以下几个。LabelImg是最简单的边界框标注工具支持PASCAL VOC和YOLO格式。它的优点是轻量、易用缺点是只支持矩形框而且不支持多人协作。Labelme支持多边形、矩形、圆形等多种标注形状输出JSON格式。它适合做像素级分割标注但标注效率较低一张复杂的缺陷图片可能需要几分钟。CVAT是Intel开源的标注平台支持图像和视频标注有自动标注和多人协作功能。它的功能最全但部署和维护成本较高适合团队使用。X-AnyLabeling是最近比较流行的工具集成了SAM等分割模型可以半自动标注。你只需要点几个关键点它就能自动生成分割掩码效率比纯手动标注高很多。我最近几个项目都在用它标注速度大概提升了3-4倍。4. 图像分割数据集从语义分割到实例分割4.1 语义分割像素级分类的数据基础语义分割的目标是给每个像素分配一个类别标签不区分同一类别的不同实例。这个方向的数据集通常标注成本很高因为需要逐像素标注。Cityscapes是自动驾驶场景的语义分割数据集包含5,000张精细标注的图片和20,000张粗略标注的图片30个类别。它的标注质量很高但类别分布不平衡——道路、建筑、天空这些大类占了大部分像素而交通标志、行人这些小类占比很低。训练时需要用类别权重或者focal loss来处理不平衡问题。ADE20K是MIT发布的场景解析数据集包含25,000张图片和150个类别。它的场景覆盖很广从室内到室外都有适合做通用语义分割的预训练。但它的标注一致性不如Cityscapes有些类别的边界比较模糊。PASCAL VOC 2012的语义分割子集包含2,913张图片和21个类别包括背景。它的规模小但标注质量高适合快速验证分割算法。COCO-Stuff是在COCO基础上扩展的语义分割数据集包含164,000张图片和171个类别。它的特点是除了物体类别外还标注了stuff类别如天空、草地、墙壁适合做全景分割的研究。数据集类别数图片数标注类型适用场景Cityscapes305000精细像素级自动驾驶ADE20K15025000像素级通用场景VOC 2012212913像素级算法验证COCO-Stuff171164K像素级全景分割4.2 医学图像分割高门槛但高价值的方向医学图像分割是图像分割里门槛最高的方向之一因为需要医学专业背景才能准确标注。但它的应用价值也最高辅助诊断、手术规划、病灶测量都离不开精确的分割。ISIC是皮肤病变分割的数据集包含约2,000张皮肤镜图像和对应的分割掩码。它的任务是分割出病变区域用于黑色素瘤的早期筛查。ISIC每年都会举办挑战赛数据集也在不断更新。LiTS是肝脏肿瘤分割的数据集包含131个腹部CT扫描和对应的肝脏及肿瘤分割标注。它的难点在于肿瘤的边界往往不清晰而且不同患者的肝脏形态差异很大。BraTS是脑肿瘤分割的数据集包含多模态MRI图像T1、T1ce、T2、FLAIR和对应的肿瘤分割标注。它的标注分为增强肿瘤、肿瘤周围水肿、坏死核心三个区域评估指标是Dice系数和Hausdorff距离。KiTS是肾脏肿瘤分割的数据集包含300个腹部CT扫描和对应的肾脏及肿瘤分割标注。它的规模比LiTS大而且包含了更多的肿瘤亚型。注意医学图像分割的数据集通常有严格的使用协议有些需要签署数据使用 agreement 才能下载。而且医学图像的预处理很关键比如CT值的窗宽窗位调整、MRI的偏置场校正这些步骤会直接影响分割效果。4.3 分割数据集的格式转换与评估图像分割的标注格式主要有三种PNG掩码、JSON多边形和COCO格式。不同框架对格式的要求不同转换时需要注意几个细节。PNG掩码是最常见的格式每个像素的值对应类别id。但要注意有些数据集的掩码用255表示前景0表示背景而有些用1表示前景。转换时需要确认清楚否则会导致类别映射错误。JSON多边形格式如Labelme输出需要转换成掩码或者COCO格式。转换时要注意多边形的坐标是顺时针还是逆时针以及是否有自相交的情况。自相交的多边形在栅格化时会产生错误需要先做几何修复。COCO格式的分割标注是RLERun Length Encoding或者多边形。RLE适合存储密集的掩码压缩率高多边形适合存储边界清晰的物体。转换时要注意RLE的编码方式是否压缩、是否包含边界像素。评估指标方面语义分割常用mIoU平均交并比实例分割常用mask AP。计算mIoU时要注意忽略某些类别如背景、未标注区域否则会拉低整体指标。我一般会在评估脚本里显式指定ignore_index避免这个问题。import numpy as np def compute_miou(pred, target, num_classes, ignore_index255): pred: 预测掩码shape(H, W)值为类别id target: 真实掩码shape(H, W)值为类别id num_classes: 类别数 ignore_index: 忽略的类别id mask (target ! ignore_index) pred pred[mask] target target[mask] ious [] for cls in range(num_classes): pred_cls (pred cls) target_cls (target cls) intersection np.logical_and(pred_cls, target_cls).sum() union np.logical_or(pred_cls, target_cls).sum() if union 0: continue ious.append(intersection / union) return np.mean(ious)4.4 广告牌图像分割一个具体的应用案例广告牌图像分割是一个比较垂直的应用场景主要用于户外广告的合规检测和效果评估。这个任务的特点是广告牌的边界通常比较规则矩形或多边形但背景复杂而且存在遮挡、光照变化等问题。公开的广告牌分割数据集比较少我找到的比较可用的是Billboard Dataset包含约1,000张街景图片和对应的广告牌分割标注。它的规模不大但场景比较多样适合做迁移学习的起点。如果要做实际的广告牌分割系统我建议先用COCO或者ADE20K预训练一个分割模型然后在广告牌数据集上微调。微调时要注意广告牌的类别定义要明确——是只分割广告牌本身还是包括广告牌上的文字和图案不同的定义会影响标注和训练策略。后处理方面广告牌分割的结果通常需要做几何规整化因为实际广告牌是矩形但分割出来的掩码边缘可能不规则。可以用最小外接矩形或者轮廓近似来规整化提高结果的可用性。5. 数据集使用的常见坑与排查技巧5.1 下载与解压的坑开源数据集的下载环节看似简单实际上坑很多。第一个坑是下载链接失效。很多数据集是几年前发布的官方链接可能已经挂了需要去GitHub的issue里找镜像或者联系作者。我一般会先在Papers with Code上查数据集的页面那里通常会维护最新的下载链接。第二个坑是解压后的目录结构跟文档不一致。有些数据集在打包时目录层级变了或者文件名有编码问题。建议解压后先跑一个脚本统计图片数量和标注数量确认跟文档描述一致再开始训练。第三个坑是磁盘空间不足。像Open Images、Waymo Open这些数据集解压后可能占用几TB空间。建议提前规划存储并且用符号链接把数据目录挂到大容量硬盘上。5.2 标注格式转换的坑格式转换是数据集使用中最容易出错的环节。我整理了一个常见问题的速查表。问题现象可能原因解决方法训练时loss为nan坐标超出0-1范围检查转换脚本裁剪越界坐标mAP异常低类别id映射错误确认类别id是否从0开始图片和标注不对应文件名匹配错误检查扩展名和大小写分割掩码全黑调色板映射错误确认掩码的像素值定义评估指标波动大忽略类别设置不当显式指定ignore_index5.3 数据增强的坑数据增强是提升模型泛化能力的有效手段但用错了会适得其反。第一个坑是几何变换后标注未同步更新。比如你做了随机旋转但边界框没有跟着旋转训练数据就全错了。建议用支持标注同步变换的增强库比如Albumentations。第二个坑是颜色增强过度。工业缺陷检测中缺陷往往表现为颜色异常如果你做了大幅度的颜色抖动可能会把缺陷特征抹掉。我一般会把颜色增强的强度调低或者只在良品图片上做颜色增强。第三个坑是Mosaic增强在小数据集上的副作用。Mosaic会把4张图片拼成1张这在小数据集上会导致每个epoch看到的有效图片数减少可能延长收敛时间。建议在小数据集上先关闭Mosaic等模型初步收敛后再开启。5.4 数据集划分的坑训练集、验证集、测试集的划分看似简单但做不好会导致评估结果不可靠。第一个坑是数据泄漏。如果同一个场景的图片同时出现在训练集和验证集里验证指标会虚高。建议按场景或者按采集批次划分而不是随机划分。第二个坑是类别不平衡加剧。随机划分可能导致某些稀有类别在验证集中没有样本评估时这些类别的指标无法计算。建议用分层抽样确保每个类别在训练集和验证集中的比例一致。第三个坑是测试集被污染。有些数据集官方已经划分好了训练集和测试集但测试集的标注不公开。这种情况下你只能用验证集来调参不能反复在测试集上评估否则会过拟合测试集。6. 几个我实际用过的数据集组合方案6.1 工业质检项目的组合方案我之前做过一个钢材表面缺陷检测的项目最终的数据集组合是NEU-DET作为基础训练集MVTec AD的纹理类别作为补充再加上自己采集的约500张产线图片做微调。具体做法是先用NEU-DET训练一个YOLOv8的baseline确认模型能正常收敛然后把MVTec AD的纹理图片转换成检测格式跟NEU-DET混合训练提升模型对纹理异常的敏感度最后用产线图片做微调学习率降到1e-5只训练10个epoch。这个组合的效果比单用NEU-DET提升了约8个百分点的mAP而且模型在产线上的误报率明显降低。关键点是混合训练时要注意类别映射NEU-DET的6个类别跟MVTec AD的类别不是一一对应的需要重新定义统一的类别体系。6.2 自动驾驶感知项目的组合方案另一个项目是做自动驾驶的感知模块需要同时检测车辆、行人和交通标志。数据集组合是COCO作为预训练KITTI作为2D检测的微调nuScenes作为3D检测的训练。COCO预训练的目的是让backbone学到通用的特征表示KITTI微调是为了适应车载视角的图像分布nuScenes则是为了学习3D空间中的目标定位。这个组合的难点在于不同数据集的标注格式和类别定义不一致需要写大量的转换和映射代码。我的建议是先把2D检测做扎实再扩展到3D。因为3D检测的标注成本高、数据量少如果2D的基础没打好3D模型很难收敛。6.3 医学图像分割项目的组合方案医学图像分割的项目我做得不多但有一个口腔疾病识别的项目可以参考。数据集组合是ISIC作为预训练皮肤病变跟口腔病变在纹理上有一定相似性BraTS作为分割算法的验证再加上自己标注的口腔图像做微调。这个组合的关键是预训练数据集的选择。ISIC的皮肤镜图像跟口腔内窥镜图像在颜色和纹理上有差异但都是医学图像比自然图像更接近。预训练后模型在口腔图像上的收敛速度比从头训练快了很多。实操心得跨领域迁移时不要冻结太多层。我试过冻结backbone只训练检测头效果不如解冻最后几个block一起微调。因为医学图像的底层特征边缘、纹理跟自然图像差异较大需要让模型适应新的特征分布。7. 数据集管理的工程化建议7.1 目录结构设计数据集多了以后管理是个大问题。我建议采用统一的目录结构方便切换和复用。datasets/ ├── raw/ # 原始下载的数据 │ ├── coco/ │ ├── voc/ │ └── neu-det/ ├── processed/ # 转换后的数据 │ ├── coco_yolo/ │ ├── voc_yolo/ │ └── neu-det_yolo/ ├── splits/ # 划分文件 │ ├── coco_train.txt │ ├── coco_val.txt │ └── neu-det_train.txt └── configs/ # 数据集配置 ├── coco.yaml └── neu-det.yaml这种结构的好处是原始数据和处理后的数据分离转换脚本可以重复运行不会污染原始数据。划分文件独立存放方便做交叉验证。7.2 版本控制数据集也需要版本控制但Git不适合管理大文件。我一般用DVCData Version Control来管理数据集的版本它可以把大文件存在远程存储上Git仓库里只保留元数据。DVC的基本用法是dvc add datasets/raw/coco然后git add datasets/raw/coco.dvc。这样数据集的内容变化会被记录但不会占用Git仓库的空间。7.3 数据质量检查在开始训练之前一定要做数据质量检查。我一般会写一个脚本统计以下指标图片数量、标注数量、每个类别的样本数、边界框的宽高分布、图片的分辨率分布。如果发现某个类别的样本数特别少比如少于100就要考虑是否需要补充数据或者调整损失函数的类别权重。如果发现边界框的宽高比异常比如宽高比大于10可能是标注错误需要人工复核。import os from collections import Counter import cv2 def check_dataset(img_dir, label_dir, num_classes): stats { num_images: 0, num_labels: 0, class_counts: Counter(), invalid_labels: [] } for img_name in os.listdir(img_dir): img_path os.path.join(img_dir, img_name) label_path os.path.join(label_dir, os.path.splitext(img_name)[0] .txt) stats[num_images] 1 if not os.path.exists(label_path): stats[invalid_labels].append(img_name) continue img cv2.imread(img_path) h, w img.shape[:2] with open(label_path) as f: for line in f: parts line.strip().split() if len(parts) ! 5: stats[invalid_labels].append(img_name) continue cls_id int(parts[0]) x, y, bw, bh map(float, parts[1:]) # 检查坐标是否越界 if not (0 x 1 and 0 y 1 and 0 bw 1 and 0 bh 1): stats[invalid_labels].append(img_name) continue stats[class_counts][cls_id] 1 stats[num_labels] 1 return stats8. 关于数据集选择的一些个人体会做了这么多项目我最大的体会是没有最好的数据集只有最合适的数据集。同一个任务用不同的数据集训练效果可能差很多。关键是要理解你的任务场景然后找场景最接近的数据集。另外不要迷信数据集的规模。我见过很多人一上来就想用Open Images或者JFT-300M这种超大规模数据集结果发现训练成本太高而且效果不一定比精心挑选的小数据集好。对于大多数实际项目几千到几万张高质量标注的图片配合合适的数据增强和迁移学习已经能取得不错的效果。还有一点是开源数据集只是起点不是终点。真正要做好一个项目最终还是要靠自己的数据。开源数据集的价值在于帮你快速验证算法、找到baseline以及提供预训练权重。但要让模型真正落地必须用自己场景的数据做微调。最后记得关注数据集的license。有些数据集只允许学术研究使用商业项目需要额外授权。我一般会在项目初期就确认license避免后期出现法律风险。
返回列表