资讯动态

基于YOLO的驾驶员行为检测:从22600张数据集到TensorRT部署

发布时间:2026/10/2 4:59:44 来源:尧图企业网站定制
做智能驾驶的同行应该都有同感车道线、行人、红绿灯这些外部感知任务开源数据集多得挑花眼轮到驾驶舱内的驾驶员行为检测却总是缺数据。原因不复杂一是涉及人脸的隐私与授权处理数据采集门槛比车外场景高不少二是行为类别多、边界模糊标注成本比普通目标检测高出一大截。最近我在整理一套22600张YOLO智能驾驶数据集发现它正好补上这个缺口把驾驶员打电话、低头看手机、喝水、抽烟、打瞌睡这类高频危险行为都做了框级标注格式直接是YOLO txt拿到手就能开始跑训练。先说这套数据集适合谁。如果你正在做车载DMSDriver Monitoring System算法或者想用YOLOv8/YOLOv5训练自己的行为检测模型又或者只是需要一个完整项目来入门目标检测这套数据都非常合适。它覆盖了驾驶舱内最常见的行为类别图像来自车载摄像头视角既有白天也有夜间场景整体更接近实车采集数据而不是那种实验室里摆拍的干净图片。下面这篇文章我会把它拆开讲透数据格式怎么读、标签类别怎么理解、用YOLOv8训练时参数怎么调、训练中常见的BN崩溃和类别不平衡问题怎么排查最后再算一笔部署账——T4上用TensorRT跑640分辨率到底能带几路1080p视频。1. 项目拆解驾驶员行为检测到底在解决什么问题1.1 为什么DMS成了智能驾驶的刚需先聊大背景。L2辅助驾驶阶段责任主体还是驾驶员本人系统只负责提醒和短暂干预但到了L2甚至L3系统在某些路段可以长时间接管这时候就出现一个关键问题系统需要把控制权交还给人的时候驾驶员到底有没有能力接如果驾驶员已经打瞌睡或者低头玩手机直接交权就是安全事故。所以驾驶员状态监测就成了智能驾驶系统里跟外部感知同等重要的一块。现在的主动安全评级和整车厂功能清单里驾驶员疲劳与注意力警告都已经成为常见配置项行业趋势很明确舱内视觉感知不再是选配而是标配功能。法规和市场需求之外从工程角度看不做也不行。安全带状态能通过CAN总线拿方向盘扭矩能判断是否脱手但这些信号只能回答手有没有扶方向盘回答不了眼睛在看哪里。一个人可以一只手搭在方向盘上另一只手刷短视频刷得正起劲。真正要判断驾驶员是否分心、是否疲劳必须靠视觉传感器去捕捉人脸、手部、手机、烟等目标的实时状态。DMS摄像头通常是红外或可见光模组装在方向盘管柱或A柱附近视角固定、光线相对可控这个场景比车外道路感知简单但也因此对行为检测的准确性要求更高误报一次就会让用户烦到直接关掉系统。1.2 同样是做行为识别为什么偏偏选YOLO检测做驾驶员行为识别技术上通常会考虑三条路线图像分类、姿态估计、目标检测。先说图像分类其实就是把整张驾驶舱图片扔进一个CNN输出正常驾驶/打电话/抽烟这样的类别。实现很简单但它只能回答人在干什么回答不了东西在哪。我要判断驾驶员右手持手机靠近耳边分类器根本给不出手机和手的位置关系后续想做任何精细规则都无从下手。姿态估计是另一条路线用OpenPose或者HRNet这类模型把驾驶员的人体关键点、头部关键点找出来理论上能算出头部朝向、手部位置从而推断行为。但它有俩问题一是标注成本极高关键点标得头疼二是遮挡情况下关键点特别容易漂驾驶员戴墨镜、戴口罩、手在方向盘后面关键点就乱了。姿态估计适合做疲劳检测的辅助信号比如PERCLOS闭眼比例但单独拿来做行为判定工程上不够稳。目标检测路线是我最推荐的也正是这套数据集的做法直接用YOLO把手机、手、人脸、烟这些目标框出来再在上层加一道规则逻辑。检测结果天然带有位置信息比如手机框和人脸框重叠度高且持续超过两秒就可以判定为手持接打电话。这种检测规则的方案在实车调试时非常友好改规则不需要重训模型只需要调阈值调逻辑这在量产项目里几乎是最重要的可维护性优势。再加上YOLO本身是one-stage检测器生态成熟、模型体量可控从PC到Jetson都能跑所以我拿到数据集的第一反应就是直接用YOLO别绕路。1.3 22600张数据集的设计逻辑好在哪很多刚接触数据集的人只关心数量但我更关心数据是怎么构成的。检测数据的本质是给模型提供足够的样本多样性这跟教小孩认东西是一个道理你光给他看一张猫的照片没用得让他在不同光线、不同角度、不同背景下反复见猫他才不会把狗认成猫。这套数据集围绕DMS固定视角拍摄覆盖了不同驾驶员、不同光照条件还特意包含了遮挡情况比如戴口罩、戴墨镜、帽子遮挡面部等这些正是实车场景里最让人头疼的事。类别设计上它也没有偷懒。同样是用手机它把手持接打电话和低头操作手机分开这两个行为的风险等级完全不一样前者是听觉行为视线通常还在路面上后者是视觉分心车辆随时可能跑偏。如果模型只能输出一个笼统的使用手机DMS就没法给出分级预警。另外闭眼和打哈欠这类疲劳信号也单独成类方便后续在时间维度上做疲劳累积判断。这种类别粒度决定了模型在真实场景里能支撑多少业务逻辑也提醒我们一个关键动作拿到任何数据集的第一件事不是急着训练而是先读它的类别定义搞清楚每类到底标注了什么。2. 数据集的核心细节标签怎么读、格式怎么转、数据怎么体检2.1 先弄清行为类别再谈训练拿到数据集第一步是打开它的类别配置文件把每个ID对应的行为搞清楚。常见的行为类别大致是这样一套正常驾驶、手持接打电话、低头操作手机、喝水、抽烟、闭眼打瞌睡、打哈欠、伸手拿后座物品、调整中控或后视镜、与乘客交谈。有些数据集还会加入化妆、嚼口香糖、整理头发等类别具体以你手上这份数据的yaml为准。不要凭感觉假设打电话就一类实际使用中你会发现手持电话在耳边和低头看屏幕的视觉特征差异很大混在一起训练模型会在两者边界处反复摇摆。这里我要多说一句边界问题。行为分类的边界模糊是最容易影响标注质量的环节。比如喝水和拿水杯放在嘴边算不算同一类抽烟和手夹着烟但没有抽算不算每个标注员的判断都可能不一样。所以训练前值得做一次抽检随机挑几十张图人工确认一下标注框是否跟类别定义相符。这个步骤虽然费时间但能避免模型在一个混乱的地基上盖楼。我见过太多项目训练代码写得没问题最后精度上不去一查全是标注不一致埋的雷。2.2 YOLO格式逐行拆解归一化坐标一个都不能错这套数据集用的是最标准的YOLO txt标注格式。每张图片对应一个同名的txt文件图片在images/train/xxx.jpg标注就在labels/train/xxx.txt。文件里每一行代表一个目标框格式是五个字段类别ID、框中心点的x坐标、框中心点的y坐标、框宽度、框高度。重点是x、y、w、h四个值全部归一化到0到1之间也就是用像素值除以图片的原始宽和高。比如一张1920x1080的图上某个框中心点的像素坐标是(1000, 475)宽520高220转换后的结果是1 0.52083 0.43981 0.27083 0.20370第一位的1就是类别ID后面四个数分别对应上面说的归一化值。训练时YOLO框架会直接读txt并且自动按图片尺寸放大所以txt里的坐标必须精确一旦出现大于1或小于0的值轻则这个框被忽略重则引发训练时的数据加载错误。这也是为什么我建议每个转格式的人都要写一个校验脚本遍历所有txt检查每行的6列字段是否存在、坐标是否在合法区间、类别ID是否在yaml里定义的范围内。如果你手上的标注是LabelImg的VOC XML、或者Label Studio导出的人类可读JSON格式转YOLO格式的脚本并不复杂。核心逻辑就是读取多边形的外接矩形、取得像素坐标再除以图片宽高。我自己常写的一个转换函数大概长这样需要注意JSON里存的可能是多边形点而不是完整矩形转换时要用所有点取最小/最大值来做外接框import json, os def convert_labelme_to_yolo(json_path, class_map, out_path): with open(json_path, r, encodingutf-8) as f: data json.load(f) img_w, img_h data[imageWidth], data[imageHeight] lines [] for shape in data[shapes]: label shape[label] cls_id class_map[label] # 取所有点的最小外接矩形 xs [p[0] for p in shape[points]] ys [p[1] for p in shape[points]] xmin, ymin min(xs), min(ys) xmax, ymax max(xs), max(ys) # 转归一化中心坐标 cx ((xmin xmax) / 2) / img_w cy ((ymin ymax) / 2) / img_h w (xmax - xmin) / img_w h (ymax - ymin) / img_h lines.append(f{cls_id} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}) with open(out_path, w) as f: f.write(\n.join(lines))自定义脚本的坑通常在于图片路径和标注路径不同名、或者Labelme的像素坐标在图像缩放后没有同步更新。最稳妥的做法是转完格式后写一个轻量可视化脚本把标注框画回图上抽样检查几眼。眼见为实这一步能发现绝大多数格式问题和标注错位。2.3 训练前的数据体检类别分布和坏样本数据集拿到手不要急着开训先做两个体检。第一个是类别分布统计直接用一个很小的Python脚本遍历所有标签文件统计每个类别出现了多少次。这一步很有价值因为现实中标注数量几乎不可能均衡。比如正常驾驶可能有上万张而抽烟可能只有一千张这种不均衡会在训练时让模型严重偏向多数类直接导致抽烟行为被漏检。第二个体检是坏样本剔除重点看三类图严重模糊的、严重过曝或欠曝的、以及漏标漏得离谱的。尤其是从视频中抽帧得到的数据总会有几帧离焦或者运动模糊这些图放进训练集只会教模型学坏。做法上可以写一个小脚本用OpenCV的Laplacian方差来筛选模糊图片方差低于阈值就标记出来人工确认。漏标问题比较难自动查我是采用一个很朴素的办法用训练好的一个临时模型在训练集上跑一遍把置信度最高但没有任何GT框的检测结果抽出来对照原图看是不是漏标。这个方法看起来土但实测效率比纯人工看高得多尤其是面对几万张图像时。体检做完再把剩下的干净数据按7:2:1或者8:1:1的比例分成训练集、验证集、测试集一份规范的数据集就具备了开工条件。3. 用 YOLOv8 跑通这套数据的完整训练流程3.1 环境准备一条命令装好ultralytics现在的YOLO生态比两年前省心太多我不建议再去走源码编译的老路直接装ultralytics官方包就够用。训练前确认一下机器有GPUNVIDIA显卡配好CUDA和cuDNN显存最少8GB起步16GB会比较舒服。一条命令安装pip install ultralytics装完之后跑一下检查确认版本和CUDA状态正常import ultralytics ultralytics.checks()初始化预训练权重也不用手动下载。你指定modelyolov8s.pt的时候ultralytics会自动从官方地址拉权重如果网络受限就手动下载yolov8n.pt、yolov8s.pt、yolov8m.pt这些文件放到项目根目录。我的习惯是先跑小模型yolov8n.pt建立baseline再根据精度缺口换yolov8s.pt或yolov8m.pt这样能快速判断问题出在数据还是模型容量而不是一上来就开最大模型浪费时间也浪费显卡。3.2 数据目录与data.yaml配置YOLO训练对数据目录结构有约定最好直接按它习惯的方式来。我的目录结构是这样的driver_behavior/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml图片和标签一一对应同名不同后缀。然后写data.yamlpath: /path/to/driver_behavior train: images/train val: images/val test: images/test names: 0: normal_driving 1: phone_call 2: phone_operation 3: drinking 4: smoking 5: dozing 6: yawning 7: reaching_behind 8: adjusting_device 9: talking这里有几个注意点path字段写绝对路径最省心相对路径依赖当前工作目录容易踩坑类别顺序必须和标签txt里出现的ID完全一致如果数据集原本的ID和yaml对不上训练时模型会学得一团糟test集可以先不填用val集做验证就够了。还有一点yaml写完后建议跑一个快速加载验证直接加载数据集里的几张图和标签确认框的位置都在图内避免训练到一半才发现数据路径错误。3.3 按人分组切分数据防止验证集虚高这一步是很多教程不会讲的坑但对你最终模型能不能在实车上用影响非常大。驾驶员行为数据很多是从视频里抽帧来的同一段视频里相邻帧的画面几乎一样。如果只是简单随机把图片分成train和val那么很可能同一个人的同一段动作被同时分进了两个集合。训练的时候模型已经见过验证集里的画面了val的mAP会虚高到95%以上看着很爽一部署到新用户身上就掉到70%甚至更低。这种问题本质上就是数据泄漏。正确做法是按驾驶员或者视频片段分组保证同一个人的连续帧不会同时出现在train和val里。做法不复杂只需要给每张图片按来源编号然后按编号分区。比如图片文件名中包含driver_id就按driver_id来分桶先对driver_id做哈希或随机排列再把前80%的driver放入train后20%放入val最后在train和val目录里建立对应的符号链接或者拷贝文件。如果数据集没有给人物编号就只能通过文件名前缀、文件夹结构等人为拆分。这一步多花半小时换回来的模型可信度是实打实的。3.4 训练命令与关键参数的选择逻辑数据准备好之后训练命令一行搞定yolo detect train datadata.yaml modelyolov8s.pt epochs150 imgsz640 batch16 device0参数逐个说。epochs设多少看你自己的训练曲线一般100到200之间足够早停机制会帮你刹车。imgsz640跟预训练权重的默认尺寸一致不需要动除非后面遇到小目标漏检我再讲怎么调整。batch是最需要根据显存换的参数16GB显存跑yolov8s用16没问题8GB显存就降到8如果batch太小又不想降模型大小可以用梯度累积来等效增大batch。优化器我用auto让框架自动选但会额外盯一下初始学习率默认的0.01在大多数情况下都能收敛。训练过程中最应该关注的不是有没有跑起来而是三个损失分量的走向box_loss是框回归损失它下降说明模型在学会把框放到正确位置cls_loss是分类损失它下降说明类别判得越来越准dfl_loss是分布式焦点损失负责框边界的精细度。三条曲线都应该平稳下降如果哪条曲线在后期突然上升通常说明学习率过大或者数据里有脏样本。训练结束后框架会输出best.pt和last.pt我们只需要保留best.pt它对应验证集mAP最高的那一个权重。3.5 评价指标怎么读mAP50和混淆矩阵很多新手习惯只看一个总mAP就下结论我觉得在这个场景里是远远不够的。驾驶员行为检测里整体mAP高、但某个关键类别AP很低的案例太常见了。比如模型对正常驾驶召回率极高轻松把整体指标拉上去但抽烟这类样本数量少的AP可能只有0.4在实车场景里这几乎等于没有检测能力。所以训练完我建议你对每个类别单独看AP验收时按业务要求逐个打钩。对于DMS这种高风险应用单个关键行为的漏检是不能容忍的宁可整体mAP降一点也要优先保证危险行为的召回率。混淆矩阵也是必看的。YOLO训练结束后会生成混淆矩阵图横轴是真实类别纵轴是预测类别对角线越亮越好。我特别关注的是哪些非对角线格子有亮块打电话和看手机这类外观相似的类别最常互相混淆这会给后置规则带来很大麻烦。如果混淆明显可以考虑合并类别或者细化标注来拉大两类之间的视觉差异。4. 训练中的常见问题与排查心得4.1 BN崩溃和训练发散先看数据再调参数训练过程中最吓人的一幕就是loss突然变成NaN或者跑到某一步mAP直接崩到零。很多人第一反应是调学习率但根据我踩过的坑先查数据和配置再动训练参数才是正确顺序。最常见的原因之一是batch size太小YOLO的颈部网络大量使用BatchNorm它是靠一个batch内所有样本的统计量来更新参数的batch只有2或者4的时候统计量波动很大一旦某个batch里出现极端值running_mean和running_var就会被带偏后面越训越乱。解决办法很直接尽量把batch提到16以上显存不够就换小模型或者开梯度累积如果batch确实上不去还可以冻结主干网络的前几层参数训练减少BN统计异常。另外一个经常被忽略的原因是标注数据本身有问题。标签里混入坐标超界的框、类别ID越界、或者txt文件里多了一个空格导致解析错位都会让数据加载出现异常。排查的时候我一般写一个数据校验脚本把每个txt读出来检查字段数量、数值区间、类别ID范围几万张图也就跑几分钟。数据干净了BN崩溃这种事基本就不再出现了。4.2 类别不平衡别让抽烟类被多数类淹没驾驶员行为数据集天然不平衡正常驾驶的画面占多数危险行为占少数其中抽烟、喝水这类动作持续时间短样本量更少。模型在均衡分布下训练时梯度更新由多数类主导少数类的特征学不好最后AP惨不忍睹。解决这个问题有三个层次的手段。第一层是数据层面对少数类做过采样或者复制增强第二层是增强层面对少数类单独使用更强的数据增强比如更多角度旋转、亮度扰动、随机裁剪第三层是损失层面在YOLO的配置里给少数类设置更高的cls_loss权重让模型在分类时对少数类错误更敏感。实操中我建议先统计各类样本量如果少数类样本量不到多数类的三分之一就把数据增强做重一点如果差距到一个数量级就要考虑补充数据或者从连续视频帧中额外抽取少数类样本。注意过采样不要只在原图上复制粘贴那样模型容易记住重复样本的细节而不是泛化特征。最好是配合简单的图像变换做伪新样本比如水平翻转、颜色扰动、缩放裁剪这样才有泛化意义。4.3 小目标漏检烟头、手机和半闭的眼睛DMS场景里要检测的目标并不都是大块的人脸手机、烟头、眼睛半闭状态这些目标在640分辨率的图上可能只有几十个像素。小目标漏检是这类项目最常见的精度瓶颈。处理方案优先级我这样排第一提高输入分辨率把imgsz从640提到960甚至1280小目标的特征保留得多很多代价是训练和推理都会变慢需要根据算力平衡第二在推理阶段先用ROI限制检测区域因为DMS摄像头是固定视角驾驶员只会出现在画面固定区域直接把搜索空间缩到驾驶座那一块不仅小目标漏检率下降速度也快第三检查数据增强里的mosaic和随机裁剪是否把小目标裁没了适当降低裁剪的激进程度。如果烟头这种目标小到框和背景难以区分坦白讲纯靠单帧检测器已经接近上限了这时候我会在检测结果上层加一个帧间累积逻辑连续几帧都检测到手部靠近面部且存在烟目标就确认抽烟行为。用时间维度换空间维度是工业界解决小目标漏检很实用的一招。4.4 验证集虚高与假收敛这是一个很隐蔽的问题。训练到后期val mAP可能一直在95%以上但新采一段视频放到模型里表现却差得离谱。除了前面说的按人分组切分问题还有一种可能是模型记住了数据集的背景风格。比如训练集里多数照片是在同一辆测试车上拍的内饰颜色、座椅纹理、光照条件高度一致模型就会把这种背景特征当成判别线索。换一辆车、换个角度性能立刻崩塌。解决思路是让数据征战多样起来。如果手上只有这一份驾驶行为数据集训练时数据增强一定要开足特别是颜色扰动、亮度变化、模糊模拟让模型被迫去关注驾驶员本身而不是背景。另一个思路是拿到数据集后自己补拍一部分其他车辆、其他场景的图片混合训练几百张就有显著效果。记住DMS量产的难点往往不在算法而在数据对车型、人群、环境的覆盖度。5. 部署与算力评估从best.pt到可上车的检测服务5.1 T4上跑640分辨率1080p视频到底能带几路这是被问得最多的工程问题我直接算一笔账。以单张NVIDIA T4为例用TensorRT FP16优化YOLOv8s640分辨率输入batch为1的单帧推理耗时大约在8到15毫秒区间取中间值10毫秒。一路视频要求25帧每秒那么每秒这一路要消耗的GPU时间就是25乘以10毫秒等于250毫秒。也就是说单路就占用了T4约四分之一的计算资源。理论并行路数是1000毫秒除以250毫秒等于4路。但别高兴太早这个数没有算视频硬解码、图像缩放、NMS后处理、目标跟踪和报警逻辑的开销工程上还要再打一个60%到70%的折扣所以实际建议只跑3路。换成更轻量的YOLOv8n单帧耗时降到4到7毫秒按5毫秒算单路每秒耗125毫秒理论8路工程上大概5到6路。如果你的需求是10路以上通常就得考虑上多卡、换更强的GPU或者走int8量化进一步压缩。这里有个容易忽略的点多路视频可以拼batch一起推理GPU利用率会更高路数上限还可以再往上探一探。不过拼batch的调度逻辑复杂度也会上升需要权衡。把几种常用模型的估算汇总成一张表方便选型模型单帧预估耗时FP16640单路每秒占用GPU时间理论并行路数工程建议路数YOLOv8n4~7ms100~175ms5~10路5~6路YOLOv8s8~15ms200~375ms2.7~5路2~3路YOLOv8m12~20ms300~500ms2~3路1~2路5.2 TensorRT导出实操一步到位和手动优化部署到生产环境用PyTorch直接推理肯定不划算我通常的做法是先把PyTorch权重导出为ONNX再用TensorRT把ONNX转成engine。ultralytics提供了一键导出命令yolo export modelbest.pt formatengine imgsz640 halfTrue device0不过我更推荐手动两步走方便排查问题。第一步导出ONNXyolo export modelbest.pt formatonnx imgsz640 opset12第二步用trtexec转enginetrtexec --onnxbest.onnx --saveEnginebest.trt --fp16这里有一个关键坑TensorRT生成的engine是和GPU型号、驱动版本、TensorRT版本强绑定的。你在T4上导出的引擎放到A10上大概率跑不了必须重新导出。所以生产流程里要把导出引擎和部署推理分开成两个阶段在目标机器上重新构建引擎。trtexec转完后建议用它的性能测试模式看看吞吐量确认自己的单帧延时和估算值对得上再往下接业务逻辑。5.3 端侧部署和检测结果的使用逻辑检测模型部署之后还有一个必须考虑的问题算法输出的框怎么变成最终的业务含义。驾驶员行为不只是一个静态分类它是会持续变化的状态。我的做法是在检测器上加一个轻量跟踪器比如ByteTrack给同一个目标分配稳定ID再在跟踪结果上做状态机判定。比如低头看手机不能凭单帧判断而是手机检测框持续出现在方向盘下方区域、且驾驶员头部俯仰角低于阈值持续2秒以上才触发报警。这样既能过滤抖动帧又能避免司机只是低头看一眼就疯狂报警的尴尬场景。端侧硬件的选择上Jetson Orin系列是目前DMS落地比较常见的平台YOLOv8n配合TensorRT int8量化到640分辨率大概能跑20到30帧每秒作为单路舱内检测绰绰有余。如果平台算力更弱就优先砍模型宽度把YOLOv8n换成更小的模型或者直接减半通道数或者干脆用ROI裁掉背景只保留驾驶座区域输入分辨率直接降下来效果反而比全局检测更好。5.4 从通用数据集到量产基线增量训练的思路最后说说这套数据集在整个量产流程里的位置。单靠一份公开数据集很难直接覆盖所有车型、所有人群、所有光照环境但它完全可以作为一份高质量的预训练基线。正确的使用路径是先用22600张数据训练一个基础模型把这个模型部署到实车采集环境里采集一批自己的数据然后对采集数据做筛选和半自动标注用基础模型做预标注人工只修正错误框最后把真实数据和原始数据集混合起来做增量训练。这样迭代两三轮之后模型在目标车型上的表现会远好于从头训练。这个流程里增量训练有两个细节值得注意。第一增量训练时学习率要降到原来的十分之一左右否则预训练好的特征会被新数据冲乱。第二新增类别一定要谨慎如果实车出现原始数据集中没有的行为类型先确认它的业务价值和标注一致性再决定是否单独建类因为增加类别会稀释原有类别的训练信号也会让后置规则更复杂。数据集的真正价值不在一张卡上跑出多高的mAP而在于能不能通过这套数据把整个数据生产、训练、评估、部署的链路跑通。最后分享一点我的个人体会。做DMS算法和其他视觉任务不太一样最难的点往往不在模型结构而在数据和评估口径。同一份数据按人分组和随机切分的结果能差好几个点同一个模型不同标注规范下训出来的行为完全不一样。所以如果有人问我这套数据集怎么用最有效我的建议是先花一天时间把标注规范、类别定义、验证集分组这些基本功做扎实再谈调参和优化。数据干净了YOLO随便一跑就是一套能上车的检测器数据混乱再好的训练技巧也救不回来。这套22600张的数据集是一个很好的起点借着它把流程跑通后面面对自己的私有数据心里就有底了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑