使用深度学习目标检测算法Yolov8训练 草原无人机无人机航拍牛羊马动物检测数据集建立识别深度学习无人机航拍动物检测系统
以下文字及代码仅供参考。学习。
文章目录
无人机航拍牛羊马动物检测数据集

数据类型:原始图片+YOLO格式标签
2355张 图片分辨率:640*640
采集高度:10~60m
采集角度:30°~90°
检测类别:绵羊、牛、海豹、骆驼、驴、斑马、鳄鱼、大象、鹿、马
无人机航拍动物检测数据集, 2355 张 640×640 分辨率图像,以及对应的 YOLO 格式标签文件,目标类别共 10 类动物:
绵羊 Sheep
牛 Cow
海豹 Seal
骆驼 Camel
驴 Donkey
斑马 Zebra
鳄鱼 Crocodile
大象 Elephant
鹿 Deer
马 Horse
如何使用 YOLOv8(Ultralytics) 对这个数据集进行 训练、推理、评估和部署全流程操作,并附上完整代码。仅供参考
📁 一、项目结构要求
确保你的数据格式如下:
animal_dataset/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
├── labels/
│ ├── train/
│ ├── val/
│ └── test/
└── data.yaml
🧾 二、数据准备与划分
✅ 数据格式说明
- 每张图片对应一个
.txt
文件。 - 每个
.txt
文件中一行表示一个目标框,格式为:class_id xc yc w h
例如:
0 0.5 0.5 0.2 0.2 # 表示一只绵羊在图像中心,宽高为图像的20%
✅ 数据划分脚本(train/val/test)
import os
import random
import shutil
image_dir = 'path/to/images'
label_dir = 'path/to/labels'
images = [f for f in os.listdir(image_dir) if f.endswith('.jpg')]
random.shuffle(images)
# 创建目录结构
for split in ['train', 'val', 'test']:
os.makedirs(f'animal_dataset/images/{split}', exist_ok=True)
os.makedirs(f'animal_dataset/labels/{split}', exist_ok=True)
# 划分比例:70% train, 15% val, 15% test
train_split = int(0.7 * len(images))
val_split = int(0.85 * len(images))
for i, img_file in enumerate(images):
label_file = img_file.replace('.jpg', '.txt')
src_img = os.path.join(image_dir, img_file)
src_lbl = os.path.join(label_dir, label_file)
if i < train_split:
dst_img = os.path.join("animal_dataset/images/train", img_file)
dst_lbl = os.path.join("animal_dataset/labels/train", label_file)
elif i < val_split:
dst_img = os.path.join("animal_dataset/images/val", img_file)
dst_lbl = os.path.join("animal_dataset/labels/val", label_file)
else:
dst_img = os.path.join("animal_dataset/images/test", img_file)
dst_lbl = os.path.join("animal_dataset/labels/test", label_file)
shutil.copy(src_img, dst_img)
shutil.copy(src_lbl, dst_lbl)
📄 三、配置文件 data.yaml
创建 data.yaml
文件内容如下:
train: animal_dataset/images/train
val: animal_dataset/images/val
test: animal_dataset/images/test
nc: 10
names: ['Sheep', 'Cow', 'Seal', 'Camel', 'Donkey', 'Zebra', 'Crocodile', 'Elephant', 'Deer', 'Horse']
🔧 四、环境搭建
安装 Ultralytics YOLOv8:
pip install ultralytics
🚀 五、模型训练(YOLOv8)
使用预训练模型进行微调(推荐)
from ultralytics import YOLO
# 加载预训练模型(例如 yolov8s.pt)
model = YOLO("yolov8s.pt")
# 开始训练
results = model.train(
data="data.yaml",
epochs=150,
imgsz=640,
batch=32,
name="animal_detector",
save_period=5,
patience=30,
verbose=True,
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=10,
translate=0.1,
scale=0.2,
shear=0.2,
perspective=0.0001,
mosaic=1.0,
mixup=0.2
)
✅ 建议使用 GPU 训练,可设置
device='cuda:0'
或多卡训练。
🧪 六、模型推理(单图 & 批量)
单图推理:
model = YOLO("runs/detect/animal_detector/weights/best.pt")
img_path = "path/to/test_image.jpg"
results = model.predict(source=img_path, show=False, save=True)
批量推理整个文件夹:
folder_path = "animal_dataset/images/test"
results = model.predict(source=folder_path, save=True)
📊 七、性能评估
在验证集上评估 mAP 等指标:
metrics = model.val()
print("mAP@0.5-0.95:", metrics.box.map)
print("mAP@0.5:", metrics.box.map50)
print("Recall:", metrics.box.recall.mean())
🧠 八、优化建议(提升精度)
-
增加数据增强(已加入训练参数中):
results = model.train( ... hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=10, translate=0.1, scale=0.2, shear=0.2, perspective=0.0001, mosaic=1.0, mixup=0.2 )
-
调整锚框尺寸(适合大目标):
# 在 train.py 中设置自定义 anchor anchors = [[10,13, 16,30, 33,23], # layer 0 [30,61, 62,45, 59,119], # layer 1 [116,90, 156,198, 373,326]] # layer 2
-
使用更强大的 backbone:
model = YOLO("yolov8m.pt") # 改用更大模型如 yolov8m / yolov8l
📁 九、导出模型(ONNX、TensorRT等)
model.export(format="onnx") # 导出 ONNX 模型
model.export(format="engine") # 导出 TensorRT 引擎(需 CUDA)
🧩 十、完整训练命令汇总(CLI 版本)
yolo detect train data=data.yaml model=yolov8s.pt epochs=150 imgsz=640 batch=32
✅ 总结
步骤 | 工具/方法 |
---|---|
数据处理 | Python 脚本(XML转TXT) |
数据划分 | 自定义脚本或 sklearn.model_selection.train_test_split |
模型训练 | YOLOv8 Detect 模型 |
推理 | model.predict() |
评估 | model.val() |
部署 | model.export() |
以上文字及代码仅供参考。