1. 项目背景与价值解析
去年夏天参与某智慧园区项目时,我深刻体会到传统人工巡检草坪和路面的低效——三个工人每天工作8小时仅能完成20亩区域的垃圾巡查。这种背景下,基于无人机的自动化检测方案开始受到业界关注。我们团队耗时三个月采集并标注的这套数据集,正是为了解决该领域样本匮乏的痛点。
数据集包含700张无人机航拍图像,覆盖草坪、石板路、塑胶跑道等多种地面场景。所有图片均采用Pascal VOC和YOLO两种格式标注,可直接用于目标检测模型的训练。特别值得注意的是,我们刻意选择了不同光照条件(晴天正午、阴天、黄昏)和高度(5-50米)的拍摄角度,以增强数据集的泛化能力。
2. 数据集核心技术细节
2.1 数据采集规范
使用大疆Mavic 2 Pro无人机进行采集时,我们制定了严格的标准化流程:
- 飞行高度梯度:5m/15m/30m/50m四个固定档位
- 拍摄角度:90°垂直俯拍+45°斜角拍摄组合
- 光照条件:明确记录每个样本的拍摄时间及天气状况
- 地面类型:标注草坪/柏油路/地砖等基底材质信息
关键技巧:在阴天拍摄时手动将ISO控制在400-800范围,可有效避免画面噪点影响标注精度
2.2 标注标准制定
针对"垃圾"这一类别,我们定义了详细的标注规范:
- 最小标注尺寸:实际边长≥5cm的物体(对应1080P图像中约15×15像素)
- 遮挡处理:可见部分≥50%的物体需完整标注
- 类别细分:虽统一标记为"垃圾",但内部记录了塑料/纸屑/金属等子类
标注一致性通过多人交叉验证保障,最终达到Cohen's Kappa系数0.87以上的标注一致性。
3. 数据格式详解与转换
3.1 VOC格式结构
xml复制<annotation>
<size>
<width>1920</width>
<height>1080</height>
</size>
<object>
<name>trash</name>
<bndbox>
<xmin>256</xmin>
<ymin>512</ymin>
<xmax>300</xmax>
<ymax>560</ymax>
</bndbox>
</object>
</annotation>
3.2 YOLO格式特点
每张图片对应一个.txt文件,内容示例:
code复制0 0.45 0.67 0.12 0.15
其中:
- 首位的0表示类别索引
- 后四位为归一化后的中心坐标(x,y)和宽高
我们提供了自动转换脚本,使用OpenCV实现格式互转:
python复制import cv2
import xml.etree.ElementTree as ET
def voc_to_yolo(voc_path, img_w, img_h):
tree = ET.parse(voc_path)
root = tree.getroot()
yolo_lines = []
for obj in root.findall('object'):
bndbox = obj.find('bndbox')
xmin = float(bndbox.find('xmin').text)
ymin = float(bndbox.find('ymin').text)
xmax = float(bndbox.find('xmax').text)
ymax = float(bndbox.find('ymax').text)
x_center = ((xmin + xmax)/2) / img_w
y_center = ((ymin + ymax)/2) / img_h
width = (xmax - xmin) / img_w
height = (ymax - ymin) / img_h
yolo_lines.append(f"0 {x_center} {y_center} {width} {height}")
return yolo_lines
4. 实际应用效果验证
4.1 模型训练配置
使用YOLOv5s进行基准测试的典型参数:
yaml复制# Hyperparameters
lr0: 0.01
lrf: 0.1
momentum: 0.937
weight_decay: 0.0005
warmup_epochs: 3
warmup_momentum: 0.8
4.2 性能指标
在20%测试集上达到:
| 指标 | 数值 |
|---|---|
| mAP@0.5 | 0.892 |
| Precision | 0.86 |
| Recall | 0.91 |
| FPS(3060Ti) | 142 |
典型误检情况分析:
- 落叶密集区域误判(秋季场景)
- 地面阴影区域误报
- 小型反光物体漏检
5. 数据增强策略建议
针对无人机视角特点,推荐以下增强组合:
python复制# Albumentations示例配置
transform = A.Compose([
A.RandomBrightnessContrast(p=0.5),
A.HueSaturationValue(p=0.3),
A.RandomShadow(p=0.2),
A.RandomFog(p=0.1),
A.RandomSunFlare(p=0.1),
], bbox_params=A.BboxParams(format='yolo'))
特别有效的增强方式:
- 模拟镜头畸变(提升低空拍摄适应性)
- 添加高斯噪声(增强抗干扰能力)
- 随机遮挡(提升局部特征识别)
6. 部署优化经验
在Jetson Xavier NX上的优化关键点:
- 使用TensorRT加速:
bash复制python export.py --weights best.pt --include engine --device 0
- 输入分辨率调整为640×640
- 启用FP16精度计算
实测延迟从78ms降至23ms,满足实时检测需求。在实地测试中,系统可稳定识别30米高度下直径10cm以上的垃圾物体。