前面我们使用图像分类的方式来进行 drone 与 bird 的判断,这里我打算使用目标检测的方式来进行判断,这里用 YOLOv7。
首先,我们需要确保安装了 YOLOv7 所需的库和环境。YOLOv7 的官方实现提供了一些预训练的权重和配置文件。
1、克隆 YOLOv7 的 GitHub 仓库:
git clone https://github.com/WongKinYiu/yolov7.git
cd yolov7
2、安装依赖:
pip install -U -r requirements.txt
3、下载预训练权重:
python -c "from utils.downloads import attempt_download; attempt_download('yolov7.pt')"
之前我们已经下载了数据集,并且它是 YOLO 格式,所以数据集格式应该是符合要求的。YOLO 格式的标签文件应该包含每个目标的 class_id
、x_center
、y_center
、width
和 height
,这些标签文件的文件名应与图像文件一致。
1、数据集目录结构:
前面说过,我们的数据集的目录结构如下:
/datasets
/train
/images
- BTR (1).jpg
- DTR (1).jpg
...
/labels
- BTR (1).txt
- DTR (1).txt
...
/valid
/images
- BV (1).jpg
- DV (1).jpg
...
/labels
- BV (1).txt
- DV (1).txt
...
/test
/images
- BT (1).jpg
- DT (1).jpg
...
/labels
- BT (1).txt
- DT (1).txt
...
确保数据集目录文件无误后,大家可以使用 cp -r 源目录 目标目录
把数据集目录拷贝一份到 yolov7 目录下,这样可以方便后续工程文件目录结构的管理。
2、创建 data.yaml
配置文件:
接下俩需要为 YOLOv7 创建一个 data.yaml
配置文件,文件内容如下:
train: ./datasets/train/images
val: ./datasets/valid/images
test: ./datasets/test/images
nc: 2 # 类别数:鸟和无人机
names: ['bird', 'drone'] # 类别名
3、确保图像和标签文件名完全匹配,例如:BTR (1).jpg
对应 BTR (1).txt
。
1、训练命令:
使用以下命令开始训练:
python train.py --img 640 --batch-size 16 --epochs 50 --data ./datasets/data.yaml --cfg cfg/training/yolov7.yaml --weights 'yolov7.pt' --device 0
简单解释一下参数:
--img 640
:输入图像大小为 640x640。--batch-size 16
:每批次 16 张图片。--epochs 50
:训练 50 个 epoch。--data ./datasets/data.yaml
:指定数据集配置文件。--cfg cfg/training/yolov7.yaml
:指定 YOLOv7 模型配置。--weights 'yolov7.pt'
:加载预训练权重文件。大家可以根据自己的情况进行修改。
2、训练日志监控:
在训练过程中,能够看到类似的输出,记录了每个 epoch 的训练和验证损失、精度等信息。这些信息可以帮助我们可以实时查看模型的训练进展。
在训练完成后,使用验证集评估模型的性能,并计算 mAP(Mean Average Precision)等指标,确保模型能正确地检测鸟(Bird)和无人机(Drone)。
python test.py --img 640 --batch-size 16 --data ./datasets/data.yaml --weights runs/train/exp/weights/best.pt --device 0
这样会输出 mAP 和其他评估指标,了解模型的检测精度。
优化 YOLOv7 模型有很多方式。以下是一些常用的优化技巧,可以逐步尝试来提升模型的性能:
学习率(Learning Rate)是影响深度学习模型训练效果的一个关键超参数。如果学习率设置过高,模型可能会跳过最优解,导致训练不稳定;如果设置过低,模型可能收敛得过慢,甚至无法达到最优解。
YOLOv7 默认使用 SGD
优化器,可以尝试调整以下几个关键参数:
可以通过 hyperparameters
文件进行调整,或者直接使用 Optuna
或 Ray Tune
这类工具来进行超参数优化。
python train.py --img 640 --batch-size 16 --epochs 50 --data ./datasets/data.yaml --cfg cfg/training/yolov7.yaml --weights 'yolov7.pt' --device 0 --lr0 0.01 --lrf 0.1
数据增强可以提高模型的泛化能力,减少过拟合现象。YOLOv7 提供了几种数据增强方法,如:
在 data/hyp.scratch.p5.yaml
文件中可以设置这些超参数来增强数据。
示例配置(hyp.scratch.p5.yaml):
mosaic: 1.0
mixup: 0.15
flipud: 0.0
fliplr: 0.5
perspective: 0.0
YOLOv7 使用了自定义的模型结构,可以尝试修改模型的 backbone 或者 head 来针对不同场景来提升检测性能。例如,使用更强大的骨干网络(如 ResNet、EfficientNet)来替代默认的 CSPDarknet53,或者优化模型的检测头(Head)部分。
例如,使用 Swin Transformer
或 ConvNeXt
作为 backbone,会显著提高模型的特征提取能力,尤其在复杂场景下,模型的表现会更加优秀。
model = Model(opt.cfg, ch=3, nc=nc, anchors=hyp.get('anchors'), backbone='swin')
在一些场景下,冻结模型的某些层(如最前面的层)可以减少训练时的计算量,加速模型收敛。特别是在使用预训练模型时,冻结前几层可以帮助模型更好地聚焦于后期的训练任务。
可以通过修改 freeze
参数来选择冻结的层。例如,冻结前 10 层:
python train.py --freeze 10
如果模型训练效果不好,或者不够稳定,使用模型集成(Ensemble)方法来提高精度是一个不错的选择。YOLOv7 支持多种集成方法,比如软投票(Soft Voting)和加权投票(Weighted Voting)。方法和之前在图像分类的时模型融合的方法差不多,大家可以参考尝试。
集成多个模型的输出,可以有效减少单个模型的偏差,提高模型在不同场景下的鲁棒性。
YOLOv7 提供了多尺度训练的选项,可以让模型在不同的输入尺寸下进行训练,从而提高模型在不同尺寸目标上的检测能力。通过开启 multi_scale
选项,YOLOv7 会随机调整输入图像的尺寸,增强模型的适应性。
python train.py --multi-scale
训练完成后,模型的评估指标(如 mAP、AP@0.5、IoU 等)能够帮助你判断模型的好坏。对于实际推理任务,除了准确度之外,推理速度也是非常重要的考量因素。
YOLOv7 提供了非常方便的推理命令和可视化功能。我们可以使用 detect.py
进行推理,并将结果进行可视化,生成包含检测框和类别标签的图像。
# 推理命令
python detect.py --weights runs/train/exp/weights/best.pt --img 640 --conf 0.4 --source ./datasets/test/images
这个命令会加载训练好的模型,并对测试集图像进行推理,生成包含检测框的结果图像。可以通过调整 --conf
参数来设置置信度阈值,控制检测结果的精度和召回率。
经过训练和优化后,下一步就是将模型部署到实际应用中。YOLOv7 支持在多个平台进行部署,包括:
通过这些工具,可以将训练好的 YOLOv7 模型部署到边缘设备或云平台上,提供实时的目标检测服务。
转换为 ONNX 格式:
python export.py --weights runs/train/exp/weights/best.pt --img-size 640 --batch-size 1 --dynamic --include onnx
1、训练过程过慢 —— 如果训练过程过慢,可以考虑:
batch-size
)以减小内存压力。--half
),减少计算量并加速训练。
2、模型精度低 —— 如果模型的精度不高,可以尝试:
3、推理速度慢 —— 如果推理速度慢,可以:
希望这篇文章对你有所帮助!下次见!🚀
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有