yolo3-pytorch
yolo3-pytorch 是基于 PyTorch 框架实现的 YOLOv3 目标检测开源项目,旨在帮助开发者轻松构建、训练并部署自己的物体识别模型。它解决了从环境配置到模型落地的全流程痛点,让用户无需从零编写底层代码,即可快速完成从数据标注、模型训练到图片与视频预测的完整工作流。
该项目特别适合计算机视觉领域的研究人员、AI 开发者以及希望将目标检测技术应用于实际场景的工程人员。无论是学术实验还是工业级应用,yolo3-pytorch 都提供了极高的灵活性。其技术亮点在于持续迭代的优化能力:不仅支持多 GPU 并行训练以大幅提升效率,还引入了自适应学习率调整、多种优化器选择(如 Adam、SGD)以及热力图可视化功能。此外,代码中包含了详尽的中文注释和可调节参数,对新手十分友好。项目预置了 VOC 和 COCO 数据集的训练示例,并兼容多种主干网络变体,让用户能根据具体需求灵活定制,高效解决各类目标检测难题。
使用场景
某智慧农业团队需要开发一套系统,自动识别果园监控视频中的成熟苹果与病虫害叶片,以指导精准采摘和施药。
没有 yolo3-pytorch 时
- 算法复现困难:团队成员需从零研读 YOLOv3 论文并手动搭建复杂的网络结构,极易因代码细节错误导致模型无法收敛。
- 自定义训练门槛高:缺乏针对 VOC 格式数据集的完整预处理脚本,整理标注数据与生成训练索引文件耗费大量人力。
- 调试成本高昂:缺少可视化的损失函数监控与自适应学习率调整机制,难以定位是分类不准还是定位偏差,调参如同“盲人摸象”。
- 部署验证繁琐:没有内置的视频流预测与 FPS 测试功能,难以快速评估模型在实时监控场景下的实际运行效率。
使用 yolo3-pytorch 后
- 开箱即用架构:直接复用仓库中成熟的 PyTorch 实现代码,支持多 GPU 训练,将环境搭建与模型构建时间从数周缩短至几天。
- 流程自动化:利用自带的
voc_annotation.py脚本,一键将团队采集的果园图片转换为标准训练格式,自动划分训练集与验证集。 - 训练智能优化:借助新增的 Loss 比例自适应与 Cos 学习率下降策略,模型在少量 epoch 内即可达到高精度,快速区分病叶与健康果。
- 高效推理验证:通过修改
predict.py参数即可直接对果园监控视频进行批量检测,实时输出带框结果与 FPS 数据,迅速验证落地可行性。
yolo3-pytorch 通过提供全流程的代码实现与工具链,让农业团队无需深究底层算法细节,即可低成本、高效率地定制专属的目标检测模型。
运行环境要求
- 未说明
非必需(可设置 cuda=False 使用 CPU),若使用 GPU 需支持 CUDA(具体版本未说明,但兼容 PyTorch 1.2.0 至 1.7.1)
未说明

快速开始
YOLOv3:在PyTorch中实现的“你只看一次”目标检测模型
目录
- 仓库更新 Top News
- 相关仓库 Related code
- 性能情况 Performance
- 所需环境 Environment
- 文件下载 Download
- 训练步骤 How2train
- 预测步骤 How2predict
- 评估步骤 How2eval
- 参考资料 Reference
Top News
2022-04:支持多GPU训练,新增各个种类目标数量计算,新增heatmap。
2022-03:进行了大幅度的更新,修改了loss组成,使得分类、目标、回归loss的比例合适、支持step、cos学习率下降法、支持adam、sgd优化器选择、支持学习率根据batch_size自适应调整、新增图片裁剪。
BiliBili视频中的原仓库地址为:https://github.com/bubbliiiing/yolo3-pytorch/tree/bilibili
2021-10:进行了大幅度的更新,增加了大量注释、增加了大量可调整参数、对代码的组成模块进行修改、增加fps、视频预测、批量预测等功能。
相关仓库
| 模型 | 路径 |
|---|---|
| YoloV3 | https://github.com/bubbliiiing/yolo3-pytorch |
| Efficientnet-Yolo3 | https://github.com/bubbliiiing/efficientnet-yolo3-pytorch |
| YoloV4 | https://github.com/bubbliiiing/yolov4-pytorch |
| YoloV4-tiny | https://github.com/bubbliiiing/yolov4-tiny-pytorch |
| Mobilenet-Yolov4 | https://github.com/bubbliiiing/mobilenet-yolov4-pytorch |
| YoloV5-V5.0 | https://github.com/bubbliiiing/yolov5-pytorch |
| YoloV5-V6.1 | https://github.com/bubbliiiing/yolov5-v6.1-pytorch |
| YoloX | https://github.com/bubbliiiing/yolox-pytorch |
| YoloV7 | https://github.com/bubbliiiing/yolov7-pytorch |
| YoloV7-tiny | https://github.com/bubbliiiing/yolov7-tiny-pytorch |
性能情况
| 训练数据集 | 权值文件名称 | 测试数据集 | 输入图片大小 | mAP 0.5:0.95 | mAP 0.5 |
|---|---|---|---|---|---|
| COCO-Train2017 | yolo_weights.pth | COCO-Val2017 | 416x416 | 38.0 | 67.2 |
所需环境
torch == 1.2.0
详情请看requirements.txt,文件具有一定兼容性,已测试pytorch1.7和1.7.1可以正常运行。
文件下载
训练所需的yolo_weights.pth可以在百度云下载。
链接: https://pan.baidu.com/s/1hCV4kg8NyStkywLiAeEr3g
提取码: 6da3
VOC数据集下载地址如下,里面已经包括了训练集、测试集、验证集(与测试集一样),无需再次划分:
链接: https://pan.baidu.com/s/19Mw2u_df_nBzsC2lg20fQA
提取码: j5ge
训练步骤
a、训练VOC07+12数据集
数据集的准备
本文使用VOC格式进行训练,训练前需要下载好VOC07+12的数据集,解压后放在根目录数据集的处理
修改voc_annotation.py里面的annotation_mode=2,运行voc_annotation.py生成根目录下的2007_train.txt和2007_val.txt。开始网络训练
train.py的默认参数用于训练VOC数据集,直接运行train.py即可开始训练。训练结果预测
训练结果预测需要用到两个文件,分别是yolo.py和predict.py。我们首先需要去yolo.py里面修改model_path以及classes_path,这两个参数必须要修改。
model_path指向训练好的权值文件,在logs文件夹里。
classes_path指向检测类别所对应的txt。
完成修改后就可以运行predict.py进行检测了。运行后输入图片路径即可检测。
b、训练自己的数据集
数据集的准备
本文使用VOC格式进行训练,训练前需要自己制作好数据集,
训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。
训练前将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中。数据集的处理
在完成数据集的摆放之后,我们需要利用voc_annotation.py获得训练用的2007_train.txt和2007_val.txt。
修改voc_annotation.py里面的参数。第一次训练可以仅修改classes_path,classes_path用于指向检测类别所对应的txt。
训练自己的数据集时,可以自己建立一个cls_classes.txt,里面写自己所需要区分的类别。
model_data/cls_classes.txt文件内容为:
cat
dog
...
修改voc_annotation.py中的classes_path,使其对应cls_classes.txt,并运行voc_annotation.py。
开始网络训练
训练的参数较多,均在train.py中,大家可以在下载库后仔细看注释,其中最重要的部分依然是train.py里的classes_path。
classes_path用于指向检测类别所对应的txt,这个txt和voc_annotation.py里面的txt一样!训练自己的数据集必须要修改!
修改完classes_path后就可以运行train.py开始训练了,在训练多个epoch后,权值会生成在logs文件夹中。训练结果预测
训练结果预测需要用到两个文件,分别是yolo.py和predict.py。在yolo.py里面修改model_path以及classes_path。
model_path指向训练好的权值文件,在logs文件夹里。
classes_path指向检测类别所对应的txt。
完成修改后就可以运行predict.py进行检测了。运行后输入图片路径即可检测。
预测步骤
a、使用预训练权重
- 下载完库后解压,在百度网盘下载yolo_weights.pth,放入model_data,运行predict.py,输入
img/street.jpg
- 在predict.py里面进行设置可以进行fps测试和video视频检测。
b、使用自己训练的权重
- 按照训练步骤训练。
- 在yolo.py文件里面,在如下部分修改model_path和classes_path使其对应训练好的文件;model_path对应logs文件夹下面的权值文件,classes_path是model_path对应分的类。
_defaults = {
#--------------------------------------------------------------------------#
# 使用自己训练好的模型进行预测一定要修改model_path和classes_path!
# model_path指向logs文件夹下的权值文件,classes_path指向model_data下的txt
# 如果出现shape不匹配,同时要注意训练时的model_path和classes_path参数的修改
#--------------------------------------------------------------------------#
"model_path" : 'model_data/yolo_weights.pth',
"classes_path" : 'model_data/coco_classes.txt',
#---------------------------------------------------------------------#
# anchors_path代表先验框对应的txt文件,一般不修改。
# anchors_mask用于帮助代码找到对应的先验框,一般不修改。
#---------------------------------------------------------------------#
"anchors_path" : 'model_data/yolo_anchors.txt',
"anchors_mask" : [[6, 7, 8], [3, 4, 5], [0, 1, 2]],
#---------------------------------------------------------------------#
# 输入图片的大小,必须为32的倍数。
#---------------------------------------------------------------------#
"input_shape" : [416, 416],
#---------------------------------------------------------------------#
# 只有得分大于置信度的预测框会被保留下来
#---------------------------------------------------------------------#
"confidence" : 0.5,
#---------------------------------------------------------------------#
# 非极大抑制所用到的nms_iou大小
#---------------------------------------------------------------------#
"nms_iou" : 0.3,
#---------------------------------------------------------------------#
# 该变量用于控制是否使用letterbox_image对输入图像进行不失真的resize,
# 在多次测试后,发现关闭letterbox_image直接resize的效果更好
#---------------------------------------------------------------------#
"letterbox_image" : False,
#-------------------------------#
# 是否使用Cuda
# 没有GPU可以设置成False
#-------------------------------#
"cuda" : True,
}
- 运行predict.py,输入
img/street.jpg
- 在predict.py里面进行设置可以进行fps测试和video视频检测。
评估步骤
a、评估VOC07+12的测试集
- 本文使用VOC格式进行评估。VOC07+12已经划分好了测试集,无需利用voc_annotation.py生成ImageSets文件夹下的txt。
- 在yolo.py里面修改model_path以及classes_path。model_path指向训练好的权值文件,在logs文件夹里。classes_path指向检测类别所对应的txt。
- 运行get_map.py即可获得评估结果,评估结果会保存在map_out文件夹中。
b、评估自己的数据集
- 本文使用VOC格式进行评估。
- 如果在训练前已经运行过voc_annotation.py文件,代码会自动将数据集划分成训练集、验证集和测试集。如果想要修改测试集的比例,可以修改voc_annotation.py文件下的trainval_percent。trainval_percent用于指定(训练集+验证集)与测试集的比例,默认情况下 (训练集+验证集):测试集 = 9:1。train_percent用于指定(训练集+验证集)中训练集与验证集的比例,默认情况下 训练集:验证集 = 9:1。
- 利用voc_annotation.py划分测试集后,前往get_map.py文件修改classes_path,classes_path用于指向检测类别所对应的txt,这个txt和训练时的txt一样。评估自己的数据集必须要修改。
- 在yolo.py里面修改model_path以及classes_path。model_path指向训练好的权值文件,在logs文件夹里。classes_path指向检测类别所对应的txt。
- 运行get_map.py即可获得评估结果,评估结果会保存在map_out文件夹中。
Reference
https://github.com/qqwweee/pytorch-yolo3
https://github.com/eriklindernoren/PyTorch-YOLOv3
https://github.com/BobLiu20/YOLOv3_PyTorch
版本历史
v3.22022/07/16v3.12022/02/23v2.02022/02/15v1.02020/09/09常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。