无人机树冠类分割数据集 分割无人机树冠 PyTorch + torchvision + COCO API
使用 U-Net 进行语义分割任务 无人机树冠类分割数据集的训练 分割无人机树冠 使用 **PyTorch torchvision COCO API文章目录使用 U-Net 进行语义分割任务 无人机树冠类分割数据集的训练 分割无人机树冠 使用 **PyTorch torchvision COCO API**无人机树冠类分割数据集****数据集划分****标注信息COCO格式**✅ 三、将 COCO JSON 转为二值 Mask 图像utils.py✅ 四、U-Net 模型定义unet_model.py✅ 五、自定义 Datasetdataset.py✅ 六、训练脚本train.py✅ 七、推理与可视化infer.py✅ 九、总结数据集文字描述4633 张无人机航拍视角的图像 无人机树冠类分割数据集数据集划分为两个部分Train集: 3243 张图片Val集: 1390 张图片已完成分割标注为json的COCO格式111无人机树冠类分割数据集项目内容数据集名称无人机树冠类分割数据集图像总数4,633 张数据来源无人机航拍视角任务类型实例分割Instance Segmentation标注格式JSON 格式COCO 标准格式标注内容每棵树冠的多边形轮廓polygon分割掩码数据集划分划分类型图像数量占比用途训练集 (Train)3,243 张~70%模型训练验证集 (Val)1,390 张~30%模型验证与调优标注信息COCO格式字段说明images包含每张图像的文件名、宽度、高度、ID等信息annotations每个实例的分割多边形坐标segmentation、边界框bbox、类别IDcategory_id、图像IDimage_id等categories类别定义例如{ id: 1, name: tree, supercategory: plant }文件结构示例annotations_train.jsonannotations_val.jsontrain/├── image_0001.jpg├── image_0002.jpg└── …val/├── image_3244.jpg└── …--- ### **数据集** - ✅ **高质量航拍图像**来自无人机视角分辨率高适合林业监测 - ✅ **完整实例分割标注**每棵树冠均以多边形标注可用于精确分割任务 - ✅ **标准COCO格式**兼容主流框架如 Detectron2、MMDetection、YOLOv8-seg - ✅ **合理划分**训练集与验证集已划分好便于直接训练与评估 --- 使用 **U-Net** 进行语义分割任务。使用 **PyTorch torchvision COCO API** 完成以下流程 - ✅ 数据预处理COCO JSON → Mask 图像 - ✅ 构建 U-Net 模型 - ✅ 数据加载器 - ✅ 训练与验证代码 - ✅ 推理与可视化 --- ## 一、项目结构建议tree_canopy_segmentation/├── dataset/│ ├── images/│ │ ├── train/│ │ └── val/│ ├── annotations/│ │ ├── train.json│ │ └── val.json│ └── masks/ # 自动生成的二值 mask│ ├── train/│ └── val/├── unet_model.py # U-Net 定义├── dataset.py # 自定义 Dataset├── train.py # 训练脚本├── infer.py # 推理脚本├── utils.py # 工具函数COCO转mask└── requirements.txt--- ## ✅ 二、环境安装 bash # 创建虚拟环境 conda create -n unet_tree python3.9 -y conda activate unet_tree # 安装依赖 pip install torch torchvision opencv-python matplotlib pycocotools scikit-image pillow✅ 三、将 COCO JSON 转为二值 Mask 图像utils.py# utils.pyimportosfrompycocotools.cocoimportCOCOfromPILimportImageimportnumpyasnpimportcv2defcoco_to_masks(coco_json,image_dir,mask_dir): 将 COCO 格式标注转换为单类二值 mask 图像 :param coco_json: COCO 格式 json 文件路径 :param image_dir: 原图路径 :param mask_dir: 输出 mask 路径 os.makedirs(mask_dir,exist_okTrue)cocoCOCO(coco_json)cat_idscoco.getCatIds()# 获取所有类别 IDimg_idscoco.getImgIds()forimg_idinimg_ids:img_infococo.loadImgs(img_id)[0]ann_idscoco.getAnnIds(imgIdsimg_id,catIdscat_ids,iscrowdNone)annscoco.loadAnns(ann_ids)# 读取图像大小h,wimg_info[height],img_info[width]masknp.zeros((h,w),dtypenp.uint8)# 合并所有实例的 maskforanninanns:seg_maskcoco.annToMask(ann)masknp.maximum(mask,seg_mask)# 保存为 0/255 二值图mask(mask*255).astype(np.uint8)mask_pathos.path.join(mask_dir,img_info[file_name].replace(.jpg,_mask.png))Image.fromarray(mask).save(mask_path)print(fMask 生成完成保存至{mask_dir})# 转换训练集和验证集if__name____main__:coco_to_masks(coco_jsondataset/annotations/train.json,image_dirdataset/images/train,mask_dirdataset/masks/train)coco_to_masks(coco_jsondataset/annotations/val.json,image_dirdataset/images/val,mask_dirdataset/masks/val) 运行一次即可生成masks/train/和masks/val/中的二值 mask 图像。✅ 四、U-Net 模型定义unet_model.py# unet_model.pyimporttorchimporttorch.nnasnndefdouble_conv(in_channels,out_channels):returnnn.Sequential(nn.Conv2d(in_channels,out_channels,3,padding1),nn.BatchNorm2d(out_channels),nn.ReLU(inplaceTrue),nn.Conv2d(out_channels,out_channels,3,padding1),nn.BatchNorm2d(out_channels),nn.ReLU(inplaceTrue))classUNet(nn.Module):def__init__(self,n_classes1):super(UNet,self).__init__()self.dconv_down1double_conv(3,64)self.dconv_down2double_conv(64,128)self.dconv_down3double_conv(128,256)self.dconv_down4double_conv(256,512)self.maxpoolnn.MaxPool2d(2)self.upsamplenn.Upsample(scale_factor2,modebilinear,align_cornersTrue)self.dconv_up3double_conv(256512,256)self.dconv_up2double_conv(128256,128)self.dconv_up1double_conv(12864,64)self.conv_lastnn.Conv2d(64,n_classes,1)self.sigmoidnn.Sigmoid()ifn_classes1elsenn.Identity()defforward(self,x):# 下采样conv1self.dconv_down1(x)xself.maxpool(conv1)conv2self.dconv_down2(x)xself.maxpool(conv2)conv3self.dconv_down3(x)xself.maxpool(conv3)xself.dconv_down4(x)# 上采样 跳跃连接xself.upsample(x)xtorch.cat([x,conv3],dim1)xself.dconv_up3(x)xself.upsample(x)xtorch.cat([x,conv2],dim1)xself.dconv_up2(x)xself.upsample(x)xtorch.cat([x,conv1],dim1)xself.dconv_up1(x)xself.conv_last(x)ifself.sigmoidisnotNone:xself.sigmoid(x)returnx✅ 五、自定义 Datasetdataset.py# dataset.pyimportosfromtorch.utils.dataimportDatasetfromPILimportImageimporttorchvision.transformsasTclassTreeCanopyDataset(Dataset):def__init__(self,image_dir,mask_dir,transformNone):self.image_dirimage_dir self.mask_dirmask_dir self.transformtransform self.imagessorted(os.listdir(image_dir))self.maskssorted(os.listdir(mask_dir))def__len__(self):returnlen(self.images)def__getitem__(self,idx):img_pathos.path.join(self.image_dir,self.images[idx])mask_pathos.path.join(self.mask_dir,self.masks[idx])imageImage.open(img_path).convert(RGB)maskImage.open(mask_path).convert(L)# 灰度图ifself.transform:imageself.transform(image)maskT.ToTensor()(mask)# [1, H, W]mask(mask0.5).float()# 二值化returnimage,mask✅ 六、训练脚本train.py# train.pyimporttorchimporttorch.nnasnnfromtorch.utils.dataimportDataLoaderfromunet_modelimportUNetfromdatasetimportTreeCanopyDatasetimporttorchvision.transformsasTfromtqdmimporttqdm# 参数设置DEVICEcudaiftorch.cuda.is_available()elsecpuEPOCHS100LR1e-4BATCH_SIZE8IMG_SIZE256# 数据增强transformT.Compose([T.Resize((IMG_SIZE,IMG_SIZE)),T.ToTensor(),T.Normalize(mean[0.485,0.456,0.406],std[0.229,0.224,0.225])])# 数据集train_datasetTreeCanopyDataset(image_dirdataset/images/train,mask_dirdataset/masks/train,transformtransform)val_datasetTreeCanopyDataset(image_dirdataset/images/val,mask_dirdataset/masks/val,transformtransform)train_loaderDataLoader(train_dataset,batch_sizeBATCH_SIZE,shuffleTrue)val_loaderDataLoader(val_dataset,batch_sizeBATCH_SIZE,shuffleFalse)# 模型modelUNet(n_classes1).to(DEVICE)criterionnn.BCELoss()# 二分类交叉熵optimizertorch.optim.Adam(model.parameters(),lrLR)# 训练循环best_lossfloat(inf)forepochinrange(EPOCHS):model.train()train_loss0.0forimages,masksintqdm(train_loader,descfEpoch{epoch1}/{EPOCHS}):images,masksimages.to(DEVICE),masks.to(DEVICE)optimizer.zero_grad()outputsmodel(images)losscriterion(outputs,masks)loss.backward()optimizer.step()train_lossloss.item()# 验证model.eval()val_loss0.0withtorch.no_grad():forimages,masksinval_loader:images,masksimages.to(DEVICE),masks.to(DEVICE)outputsmodel(images)losscriterion(outputs,masks)val_lossloss.item()train_loss/len(train_loader)val_loss/len(val_loader)print(fEpoch [{epoch1}/{EPOCHS}], Train Loss:{train_loss:.4f}, Val Loss:{val_loss:.4f})# 保存最佳模型ifval_lossbest_loss:best_lossval_loss torch.save(model.state_dict(),weights/best_unet_tree.pth)print(f模型已保存: weights/best_unet_tree.pth)✅ 七、推理与可视化infer.py# infer.pyimporttorchfromPILimportImageimportnumpyasnpimportmatplotlib.pyplotaspltfromunet_modelimportUNetfromtorchvisionimporttransforms# 加载模型modelUNet(n_classes1)model.load_state_dict(torch.load(weights/best_unet_tree.pth,map_locationcpu))model.eval()# 预处理transformtransforms.Compose([transforms.Resize((256,256)),transforms.ToTensor(),transforms.Normalize(mean[0.485,0.456,0.406],std[0.229,0.224,0.225])])# 推理单张图像defpredict(image_path):imageImage.open(image_path).convert(RGB)orig_sizeimage.size# (W, H)input_tensortransform(image).unsqueeze(0)# [1, 3, 256, 256]withtorch.no_grad():outputmodel(input_tensor)outputtorch.sigmoid(output)output(output0.5).float().squeeze().cpu().numpy()# [H, W]# 可视化plt.figure(figsize(12,6))plt.subplot(1,2,1)plt.imshow(image)plt.title(Original Image)plt.axis(off)plt.subplot(1,2,2)plt.imshow(output,cmapgray)plt.title(Predicted Mask)plt.axis(off)plt.show()# 使用predict(dataset/images/val/tree_001.jpg)✅ 九、总结你已具备完整流程✅ COCO JSON → 二值 Mask✅ U-Net 模型定义✅ 数据加载与训练✅ 推理可视化运行命令python utils.py# 生成 maskpython train.py# 开始训练python infer.py# 测试推理如需扩展支持多类树种分割

相关新闻

破解物理AI技术困局(27):TVA实现物理世界精准预测

破解物理AI技术困局(27):TVA实现物理世界精准预测

前沿技术探索:TVA智能体(简称TVA)TVA智能体(亦称“AI智能体视觉”或“TVA视觉智能体”)是依托Transformer架构与“因式智能体”理论构建的通用视觉技术框架。它融合深度强化学习(DRL)、卷积神经…

2026/9/27 9:46:27 阅读更多 →
3大内容创作场景下如何用浏览器扩展重构数字资产管理

3大内容创作场景下如何用浏览器扩展重构数字资产管理

3大内容创作场景下如何用浏览器扩展重构数字资产管理 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓cat-catch作为一款开源的浏览器资源嗅探扩…

2026/9/28 1:40:01 阅读更多 →
NHSE动物森友会存档编辑器:从零开始的完整使用指南

NHSE动物森友会存档编辑器:从零开始的完整使用指南

NHSE动物森友会存档编辑器:从零开始的完整使用指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE NHSE(Animal Crossing: New Horizons Save Editor)是一款功能…

2026/9/22 2:59:50 阅读更多 →

最新新闻

Computer Use 时代国产 AI 自动操作工具盘点:8款桌面智能体实操对比与选购建议|TaoToken 统一 Key 接入实测

Computer Use 时代国产 AI 自动操作工具盘点:8款桌面智能体实操对比与选购建议|TaoToken 统一 Key 接入实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 19:21:18 阅读更多 →
agentsdk-go:用 Go 复刻 Claude Code 架构的 Agent 开发框架与 MCP 接入实践

agentsdk-go:用 Go 复刻 Claude Code 架构的 Agent 开发框架与 MCP 接入实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 19:21:17 阅读更多 →
当AI遇到企业系统:用MCP把智能体接入ESB,让业务语义与流程操作真正打通 TaoToken

当AI遇到企业系统:用MCP把智能体接入ESB,让业务语义与流程操作真正打通 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 19:21:15 阅读更多 →
NLP技术在AI原生应用用户意图理解中的创新应用:TaoToken统一Key通道下的上下文建模实践

NLP技术在AI原生应用用户意图理解中的创新应用:TaoToken统一Key通道下的上下文建模实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 19:21:14 阅读更多 →
谨慎用OpenClaw:上海科技大学全面安全体检报告解读与TaoToken接入实践

谨慎用OpenClaw:上海科技大学全面安全体检报告解读与TaoToken接入实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 19:21:11 阅读更多 →
DeepSeek V4 Pro / GPT-5.5 / GPT-o3 并列 80.52 分:TaoToken 统一 Key 下的 Smoke 快测复现指南

DeepSeek V4 Pro / GPT-5.5 / GPT-o3 并列 80.52 分:TaoToken 统一 Key 下的 Smoke 快测复现指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 19:20:08 阅读更多 →

日新闻

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南 【免费下载链接】ex-skill 前任 skill 项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skill 前任.skill 是一个运行在 Claude Code 上的开源 Skill:导入微信、iMessage、短信、…

2026/10/3 0:00:27 阅读更多 →
45个经典Linux面试题:从命令到网络排障的完整考点解析

45个经典Linux面试题:从命令到网络排障的完整考点解析

刚开始带应届生的时候,我最头疼的就是他们拿着一摞Linux面试题背得滚瓜烂熟,一上机全露馅。后来自己从被面的人变成面别人的人,才慢慢摸清楚:Linux面试题考的根本不是答案本身,而是你面对一个不确定的系统问题时&#…

2026/10/3 0:01:28 阅读更多 →
SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

简介:本资源是一份面向SAP ABAP开发人员、生产计划专员及ERP实施顾问的实操型操作指南,聚焦SAP生产预留核心业务场景,系统解决物料预留创建、查询、校验与批量处理等高频问题。文档以结构化方式覆盖预留背景原理、OMC2编码规则、工厂级参数配…

2026/10/3 0:01:28 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 9:14:33 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 9:47:50 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/3 9:42:31 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →