农田自动导航语义分割标注规范 v1.0

0. 标注目标与总体原则

本数据集用于 丘陵山地农田场景的自动导航可通行性分析,语义分割标签需满足:

  1. 清晰区分可通行与不可通行区域

  2. 保持类别一致性,避免标注噪声

  3. 尽量减少不必要的细节抠图

  4. 重要区域(地面类、植被类、障碍物)需完整标注

  5. 模糊、小物体、远处区域可标为 unknown

语义分割 mask 中,未被 polygon 覆盖的像素默认为 0 类(unknown),标注者无需手动绘制 unknown。


1. 类别定义(label.txt)

按你的自定义标签体系,最终类别如下:

0 unknown

1 non-traversable

2 rough trail

3 smooth trail

4 traversable grass

5 low vegetation

6 obstacle

7 high vegetation

8 sky

类别 ID 由行号决定。


2. 标注流程原则

2.1 标注顺序(强烈推荐)

为了减少覆盖冲突,提高效率,建议按以下顺序标注:

  1. sky(天空)

  2. smooth trail / rough trail / non-traversable(地面类)

  3. traversable grass(可通行草地)

  4. low vegetation(低矮植被)

  5. high vegetation(高植被)

  6. obstacle(所有障碍物:电线杆、电线、建筑、石块等)

  7. unknown(留空即可)


3. 各类别详细说明及示例

以下是每个类别应当标注的内容,以及常见错误示例。


3.1 unknown(ID=0)

定义

无法明确识别,或不属于任何类别的区域。

包括:

  • 远处模糊区域

  • 极暗/极亮区域

  • 背景混合区域

  • 标注者无法判断的地方

规则

不要手动画 unknown,多边形空白处自动成为 unknown。
✔ small objects < 5 pixels 可以不标注(模型无法学到)。


3.2 non-traversable(ID=1)不可通行地面

地面层!

包括:

  • 泥坑、深沟

  • 水塘、水渠

  • 陡坡、坍塌区域

  • 明显不能行驶的土面

排除:

  • 不是地面类的物体(如屋子、电线)→ obstacle

  • 常规草地 → grass / vegetation


3.3 rough trail(ID=2)粗糙小路

包括:

  • 有石头、不平整但仍可通行的道路

  • 车轮压过但较粗糙的土路


3.4 smooth trail(ID=3)平整小路

包括:

  • 机耕道

  • 明显可通行的道路

  • 建筑周围的直铺道路(非混凝土则标 trail)


3.5 traversable grass(ID=4)可通行草地

包括:

  • 稀疏草

  • 低矮且可压过的草皮

  • 农田未耕地的低矮草层

注意:

若草高于车轮,或密度高 → low vegetation 或 high vegetation。


3.6 low vegetation(ID=5)低矮植被(不可通行)

包括:

  • 稠密草丛

  • 密集作物(如密植水稻田)

  • 低矮灌木(腰部以下)

示例规则:

  • 草密度“高”但高度“低” → low vegetation

  • 草稀疏且可压倒 → traversable grass


3.7 high vegetation(ID=7)高植被

包括:

  • 高灌木(腰部以上)

  • 小树

  • 成熟农作物(玉米、葵花、果树等)

  • 田边林木带


3.8 obstacle(ID=6)障碍物

包括:

  • 电线杆、电线(可适当画粗)

  • 房屋、棚子、建筑

  • 石块、木桩

  • 机械、杂物

  • 树干(若不属于 vegetation)

  • 栏杆、围栏

特别说明(针对你的标注)

✔ 电线不需要画得太窄

宽度建议 5–8 像素,模型无法学细线。

✔ 房屋整体一个 polygon 即可

无需抠窗户门框。

✔ 电线杆与房屋全部为 obstacle

不用拆分细节。


4. 标注规范(非常重要)

4.1 不必抠每个像素

边界误差 ±2–4 像素是正常现象。

4.2 不要把不确定的地方随意标成某类

→ 改为 unknown。

4.3 一类区域尽量用大 polygon,而非碎片化

例如草地、大棚、树冠尽可能用一个连续形状标注。

4.4 避免在远处区域标注细节

  • 远处的草 → 统一草地

  • 远处的树 → 统一 high vegetation

  • 远处的小屋 → 一个 obstacle

4.5 标注一致性优先于精度

例如:

  • 同种地面质感应标为同一类

  • 不要因为颜色/阴影而改变类别


5. 建议标注风格(视觉一致性)

✔ 草地类(ID=4)

  • 不要用碎小多边形,一片区域用一个整体 polygon。

✔ 高植被(ID=7)

  • 树冠可以手绘不规则形状,但不需要太多点(15–25 点即可)。

✔ 障碍物(ID=6)

电线杆、电线、房屋统一标成 obstacle,且用尽量规则的多边形。

✔ 天空(ID=8)

用一条边界 polygon 划出天空区域,越简单越好。

### 使用 DeepLabV3 实现农田图像的语义分割 #### 准备工作 为了使用 DeepLabV3 对农田图像进行语义分割,需先准备好必要的开发环境和数据集。确保安装了 PyTorch 和 torchvision 库,并下载预训练权重文件。 #### 数据集构建 创建适合于农田图像的数据集是至关重要的一步。该数据集应该包含大量标注好的样本图片,其中每个像素都被标记为目标类别之一(例如作物、土壤等)。对于特定的应用场景如农业监测,可以考虑收集不同季节、天气条件下的多样化样本以提高泛化性能[^2]。 #### 模型定义 采用官方提供的 `torchvision.models.segmentation.deeplabv3_resnet101` 或其他变种作为基础架构来初始化模型实例。此版本已经过优化并支持多种输入尺寸,在实际应用中可根据需求调整骨干网路的选择以及输出通道数以适应具体的分类任务。 ```python import torch from torchvision import models model = models.segmentation.deeplabv3_resnet101(pretrained=True) num_classes = 2 # 假设有两个类:农作物和其他 model.classifier[4] = torch.nn.Conv2d( model.classifier[4].in_channels, num_classes, kernel_size=1 ) ``` #### 训练流程 设定好损失函数(通常为交叉熵),选择合适的优化器(Adam 是常用选项),并通过迭代方式不断更新参数直至收敛。期间可利用验证集监控学习进度并防止过拟合现象发生;同时保存最佳状态以便后续测试阶段调用。 ```python criterion = torch.nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.001) for epoch in range(num_epochs): for images, masks in dataloader: optimizer.zero_grad() outputs = model(images)['out'] loss = criterion(outputs, masks.long()) loss.backward() optimizer.step() print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}') ``` #### 测试与部署 完成上述步骤之后就可以对新采集到的未见过的数据执行推理操作了。此时只需加载之前存储下来的最优权值即可获得满意的预测效果。值得注意的是,在正式投入使用前还需经过严格的线下评估环节确认系统的稳定性和准确性满足预期标准。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值