尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
80 类砍到 5 类:Darknet 自定义检测类别与权重调优完整指南
80 类砍到 5 类Darknet 自定义检测类别与权重调优完整指南【免费下载链接】darknetYOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet )项目地址: https://gitcode.com/gh_mirrors/dar/darknet用 Darknet 训练自己的目标检测模型时绝大多数人卡在同一个地方怎么把预训练的 COCO 80 类模型改造成只识别自己场景里那几类目标的轻量模型。本文以智慧停车场监控为例只需识别 person、car、bus、truck、motorbike 5 类手把手带新人走完 Darknet 类别定制全流程从裁剪 data/coco.names、改 cfg/yolov3.cfg 中的classes与filters到编写数据配置、启动训练最后再讲一个很多教程都漏掉的原生技巧——不改一行源码就能调整类别损失权重。照着做你能带走一套可复用的多类目标检测定制方法。先搞清楚Darknet 里的类别数散落在 4 个地方这是新手最容易踩的坑。同一个数字80其实存在于 4 个不同的文件中任何一处对不上训练或推理就会报错或输出乱码。位置文件起什么作用停车场场景要改成类别名单data/coco.names每行一个类名决定输出标签和索引顺序新建parking.names只留 5 行网络结构cfg/yolov3.cfg[yolo]层的classes和前面卷积层的filtersclasses5filters30数据配置cfg/coco.dataclasses和names指向类别文件新建parking.data标注文件图片同名.txt每行第一个数是 0 起的类别 IDID 范围 0~4⚠️ 注意类别 ID 不是查出来的而是按 names 文件的行号从 0 开始数。names 里第 1 行就是 0 类顺序直接决定标注和输出的对应关系写标注前先把顺序定死。第 1 步把 coco.names 裁成 5 类停车场名单COCO 名单有 80 行而停车场只需要其中 5 个。复制 data/coco.names删掉不需要的行另存为data/parking.namesperson car bus truck motorbike 提示保持与 COCO 相同的相对顺序person car bus truck motorbike是个好习惯——万一标注工具按原 ID 生成你不用重新换算。仓库自带的一张经典样例图很适合做第一张测试图里面同时出现了 dog、bicycle、car用来验证类别索引没写错很直观第 2 步cfg 文件两步改法classes 与 filters以 cfg/yolov3.cfg 为底本复制一份cfg/yolov3-parking.cfg只需动两处① 三处[yolo]层的classesyolov3.cfg 末尾有 3 个[yolo]层约在第 607、693、780 行每一处都要改[yolo] mask 6,7,8 anchors 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326 classes5 num9② 每个[yolo]前面紧邻的卷积层filters原值是 255来自公式(classes 5) * 3每个网格预测 3 个框mask选了 3 个 anchor每个框输出 4 个坐标 1 个置信度 classes个类别概率。换成 5 类后[convolutional] size1 stride1 pad1 filters30 # (5 5) * 3 30 activationlinear⚠️ 易错点3 个[yolo]前面共 3 个卷积层一处都不能漏。漏改一处启动训练时会直接报Error: l.outputs params.inputs, filters in the [convolutional]-layer doesnt correspond to classes这个报错看着唬人其实就是在提醒你 filters 和 classes 不匹配。第 3 步写数据配置文件 标注格式新建cfg/parking.data格式完全对齐 cfg/coco.dataclasses5 traindata/parking/train.txt validdata/parking/valid.txt namesdata/parking.names backupbackup/parking/其中train.txt/valid.txt是图片路径清单每行写一张图的绝对路径不是标签路径。标注文件与图片同名同目录后缀.txt每行一个目标# 格式class_id 中心x 中心y 宽 高 全部按图片宽高归一化到 0~1 1 0.42 0.55 0.31 0.52 # car一辆停在车位上的轿车 3 0.81 0.30 0.40 0.44 # truck远处一辆货车 验证标注是否写对中心点坐标应满足x - w/2 ≥ 0、y - h/2 ≥ 0等边界条件写反 x/y 或忘了归一化是最常见的标注事故。第 4 步一条命令开始训练准备好预训练权重darknet53.conv.74只含骨干网络、不含 yolo 头正好适配改类别的场景后./darknet detector train cfg/parking.data cfg/yolov3-parking.cfg darknet53.conv.74预期效果终端开始逐批次打印lossbackup/parking/下每隔固定迭代生成yolov3-parking_XXXX.weights。loss 从前期快速下降到后期趋于平缓即属正常。⚠️ 如果启动时出现Warning: in txt-labels class_idN classes5说明标注里的类别 ID 超出了 cfg 定义的范围去核对 names 顺序和标注文件而不是去加大 classes。类别权重调优原生参数就够了别急着改源码很多教程教你去改 src/yolo_layer.c 的损失函数再重新编译其实没必要。Darknet 的[yolo]层原生支持counters_per_class参数解析逻辑在 src/parser.c你填每个类别在训练集中的样本数量程序自动按最大类样本数 ÷ 本类样本数算出权重——样本越少的类类别损失被放得越大模型越不敢漏检它。在 3 个[yolo]层里加上假设各类样本数为 person 1000、car 800、bus 300、truck 150、motorbike 80[yolo] ... counters_per_class1000,800,300,150,80 max_delta5 # 权重上限防止小类梯度爆炸程序会打印出实际权重1.0, 1.25, 3.3, 5.0, 5.0后两项被max_delta5截断。 提示max_delta默认不限制。小类样本极少时算出的倍数可能非常大梯度会不稳建议显式设成 5~10。样本分布变化后记得同步更新这行数字。结果验证与常见问题排查训练几轮后挑一个较新的权重验证# 肉眼检查画框输出 ./darknet detector test cfg/parking.data cfg/yolov3-parking.cfg backup/parking/yolov3-parking_4000.weights -thresh 0.25 # 量化评估算 mAP ./darknet detector map cfg/parking.data backup/parking/yolov3-parking_4000.weights若某类检测效果不理想按这张表排查现象可能原因处理办法启动即报 filters 不匹配3 个卷积层有漏改全局搜filters255逐个改 30测试时一类目标全是框阈值过高-thresh降到 0.2~0.25 对比某类 mAP 明显偏低样本少 / 权重不够补样本 counters_per_class加权大小目标都漏检anchors 与场景不符用 scripts/gen_anchors.py 对停车场标注重算 anchors输出的类名和图对不上names 顺序与标注 ID 不一致以 names 行号为准重写标注全流程检查清单最后对照一遍全部打勾就可以放心交付parking.names行数 cfg 里classes data 文件里classes 53 个[yolo]前卷积层的filters全部改为(55)*3 30标注 ID 最大值为 4坐标已归一化训练用的预训练权重是.conv.74而非完整的 80 类 weights权重调优用的counters_per_class有 5 个值且与 names 顺序一致test抽查若干张 map出 mAP 双验证通过这套裁 names → 改两处 cfg → 建 data → 训练 → 权重调优 → 双验证的方法对任意自定义场景园区安防、工业质检、农业监测都直接适用换场景时只替换第一、三步的内容即可。【免费下载链接】darknetYOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet )项目地址: https://gitcode.com/gh_mirrors/dar/darknet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

VUE框架学习(2:项目目录结构)

VUE框架学习(2:项目目录结构)

VS Code的终端运行npm create vuelatest命令创建最简单的Vue3项目,创建完成后的项目目录结构如下图所示,每个文件夹的用途如下:.vscode文件夹:存放VS Code的项目级配置,包括项目的推荐扩展、工作区设置、调试和任务配置…

📅 2026/10/30 4:39:55
2.java变量

2.java变量

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/30 4:39:55
告别转换会员!两段 Python 代码实现 PDF↔Word 双向转换,实测可用

告别转换会员!两段 Python 代码实现 PDF↔Word 双向转换,实测可用

走开付费转换器!达成PDF转Word, Word转PDF免费互换, 在本地离线且没有水印,经过实际测试可使用。平常办公时处理文档, PDF转换成Word以及Word转换成PDF是高频率的迫切需求!然而在市场上的绝大多数在线转换工具还有客户端软件, 均有着显著的弊病: 免费版本…

📅 2026/10/30 4:34:55
MORE NEWS

更多资讯

📰

Servlet+JSP+JDBC 个人微博应用全链路实战

简介:面向Java Web初学者与课程实践者的个人微博应用完整项目包,对应Web原理及应用实验场景,围绕会员管理、个人中心与消息发布管理三个核心模块,搭建可运行的小型社交平台。包内共71个文件、约3.33MB,以java源文件与编…

📰

机器人行业技术路线与商业化实战解析

1. 机器人行业的"吃鸡游戏"拐点540亿这个数字在机器人行业掀起了不小的波澜。这个数字背后,是过去几年全球机器人创业公司累计融资总额。如今行业正在经历一场残酷的淘汰赛,就像大逃杀游戏中的最后圈缩毒——只有真正具备核心竞争力的玩家才能…

📰

解决Windows OpenSSH权限错误:Bad owner or permissions

1. 问题现象与背景解析当你在Windows系统上使用OpenSSH客户端连接服务器时,可能会遇到这样的错误提示:"Bad owner or permissions on C:\Users\username/.ssh/config"。这个看似简单的权限错误背后,其实涉及Windows和Linux两种操作…

📰

微信小程序 Canvas 2D 海报分享绘制与真机导出实践

简介:面向微信小程序开发者的新版分享海报组件,针对旧版已停止维护、官方文档分散且实现门槛较高的问题,提供可直接复用的封装方案。组件以参数化调用为核心,开发者只需传入海报内容与样式配置即可完成绘制,同时保留样…

📰

SpringBoot LIS检验系统源码:样本状态机与结果审核实践

简介:面向计算机专业毕业设计与Java Web入门实战的LIS检验系统项目包,围绕检验业务管理场景构建,适合需要完成Spring Boot课程设计、毕业设计或管理系统练手的学生与开发者参考。压缩包约30.41MB,交付内容以可运行程序源代码、数据…

📰

SpringBoot+Android高校实践教学系统开发实践

1. 项目背景与核心价值这个毕业设计项目瞄准了高校实践教学中的数字化管理痛点。在传统模式下,教师发布任务、学生提交报告、成绩评定等环节往往通过微信群、邮箱或纸质文档完成,存在信息分散、流程低效、数据难以追溯等问题。我们团队开发的这套系统&am…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬