在农业监管和生态保护领域,快速准确地识别特定植物物种一直是个技术难题。传统人工巡查方式效率低下,而基于计算机视觉的自动识别技术正在改变这一现状。YOLOv11作为目标检测领域的最新成果,在实时性和准确率方面展现出显著优势。
这个项目的核心在于构建一套完整的无人机航拍罂粟识别系统。不同于常规物体检测,航拍图像具有视角独特、背景复杂、目标尺寸变化大等特点。我们采用的方案是通过迁移学习,将YOLOv11在通用数据集上的预训练知识,适配到特定的航拍植物识别场景。
提示:在实际工程中,航拍目标检测面临三大挑战——小目标检测(植株在航拍图中可能只占几十像素)、密集目标重叠(植株常成片生长)以及复杂背景干扰(需区分与其他植被的差异)。
YOLOv11在先前版本基础上进行了多项关键改进:
python复制# YOLOv11模型结构示例代码
class CSPBlock(nn.Module):
def __init__(self, in_channels, out_channels, n=1):
super().__init__()
self.conv1 = Conv(in_channels, out_channels, 1)
self.conv2 = Conv(in_channels, out_channels, 1)
self.conv3 = Conv(2 * out_channels, out_channels, 1)
self.m = nn.Sequential(*[ResUnit(out_channels) for _ in range(n)])
def forward(self, x):
y1 = self.conv1(x)
y2 = self.m(self.conv2(x))
return self.conv3(torch.cat((y1, y2), dim=1))
相比其他目标检测算法,YOLOv11特别适合航拍场景的三个原因:
我们通过大疆M300RTK无人机采集了覆盖不同季节、光照条件下的航拍数据,关键参数设置:
注意:实际采集中发现,上午10点至下午2点的光线条件最利于后期标注,清晨和黄昏的长阴影会导致标注边界模糊。
采用LabelImg进行标注时,我们制定了严格的规范:
标注文件采用YOLO格式:
code复制<object-class> <x_center> <y_center> <width> <height>
其中坐标值均为相对于图像宽高的归一化值。
针对航拍数据特性,我们设计了特殊的增强方案:
python复制albumentations.Compose([
A.HorizontalFlip(p=0.5),
A.RandomBrightnessContrast(p=0.3),
A.RandomSizedBBoxSafeCrop(height=640, width=640, erosion_rate=0.2),
A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
A.Cutout(max_h_size=30, max_w_size=30, p=0.2) # 模拟云朵遮挡
])
特别注意:
使用官方预训练模型初始化:
bash复制python train.py --data coco.yaml --cfg yolov11s.yaml --weights yolov11s.pt --img 640 --batch 32 --epochs 100
关键参数调整:
使用WandB记录的典型训练曲线:
python复制model = torch.quantization.quantize_dynamic(
model, {torch.nn.Linear, torch.nn.Conv2d}, dtype=torch.qint8
)
使模型大小从14.6MB降至3.9MB,推理速度提升40%
bash复制trtexec --onnx=yolov11s.onnx --saveEngine=yolov11s.engine --fp16
在Jetson Xavier NX上的性能表现:
| 模型版本 | 分辨率 | 推理时延 | 功耗 |
|---|---|---|---|
| FP32 | 640x640 | 58ms | 15W |
| FP16 | 640x640 | 32ms | 12W |
| INT8 | 640x640 | 21ms | 10W |
典型作业流程:
类似植物误检:
阴影误检:
反光误检:
python复制# 使用HSV色彩空间过滤高光区域
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, (0,0,200), (180,30,255))
img = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)
区域兴趣(ROI)检测:
多尺度推理策略:
python复制scales = [0.5, 1.0, 1.5] # 不同缩放比例
for scale in scales:
img = cv2.resize(orig_img, (0,0), fx=scale, fy=scale)
preds = model(img)
# 融合多尺度结果...
帧间相关性利用:
在某省为期三个月的实地测试中,系统表现:
典型检测结果示例:

(左图:原始航拍图,右图:检测结果叠加显示)
关键改进方向: