基于无人机影像的可见光单木分割数据集,共1700张影像,数据集大小3.6GB,分割标注采用标准json格式。
该数据集是一个专门用于基于无人机可见光影像进行单木分割的数据集,旨在帮助研究人员和开发者训练和评估基于深度学习的图像分割模型。数据集中的图像涵盖了多种环境下的森林场景,包括不同树种、密度和生长阶段的树木。每张图像都经过详细的像素级标注,适用于单木识别、计数以及森林资源管理等应用。
数据规模
- 总样本数量:1700张可见光影像
- 数据量:约3.6GB
- 分辨率:具体的分辨率可能因无人机拍摄高度而异,但均为高分辨率图像,以确保树木细节清晰。
- 标注目标:所有图像都带有详细的像素级标注信息,采用标准JSON格式进行标注,适用于训练和验证图像分割模型。
目标类别及数量
数据集中包含以下目标类别:
- 单木 (Individual Trees): 每棵树都被单独标注,具体实例数量未提供,但可以假设每张图像中有多棵树木。
图像特性
- 高分辨率可见光影像:图像由无人机拍摄,具有较高的空间分辨率,确保了树木细节的清晰度。
- 多样化的森林环境:覆盖了不同地理位置、树种、密度和生长阶段的森林场景。
- 丰富的背景信息:图像中包含了复杂的自然背景,如草地、灌木丛和其他植被,增加了分割任务的难度。
标注格式
数据集中的标注信息采用了标准的JSON格式文件。每个图像都有一个对应的标签文件,记录了每个单木的像素级掩码(mask)信息。这种格式可以直接用于多种图像分割框架,如U-Net、Mask R-CNN等。
数据集结构
典型的数据集目录结构如下:
深色版本
1drone_visible_tree_segmentation_dataset/
2├── images/
3│ ├── img_00001.jpg
4│ ├── img_00002.jpg
5│ └── ...
6├── annotations/
7│ ├── img_00001.json
8│ ├── img_00002.json
9│ └── ...
10└── README.md # 数据集说明文件
应用场景
该数据集可以用于以下应用场景:
- 森林资源管理:通过无人机影像进行树木计数、种类识别和健康状况评估,辅助森林资源管理和保护。
- 精准林业:帮助林场管理者优化种植策略,提高森林覆盖率和生态效益。
- 智能监控系统:辅助智能监控系统,在各种复杂环境中进行树木检测和分割。
- 科研分析:用于研究图像分割算法和技术的发展趋势,特别是在无人机可见光影像中的应用。
示例代码
以下是一个使用Python和相关库(如OpenCV、PIL等)来加载和展示数据集的简单示例代码:
python
深色版本
1import os
2import cv2
3import numpy as np
4from PIL import Image
5import json
6
7# 数据集路径
8dataset_path = 'path/to/drone_visible_tree_segmentation_dataset/'
9
10# 加载图像和标注
11def load_image_and_mask(image_path, annotation_path):
12 # 读取图像
13 image = Image.open(image_path).convert('RGB')
14
15 # 解析JSON标注文件
16 with open(annotation_path, 'r') as infile:
17 annotation = json.load(infile)
18 masks = []
19 for obj in annotation['objects']:
20 mask = np.array(obj['mask'], dtype=np.uint8) # 假设mask是以二维数组形式存储
21 masks.append(mask)
22 return image, masks
23
24# 展示图像和掩码
25def show_image_with_masks(image, masks):
26 img = np.array(image)
27 for mask in masks:
28 # 将掩码转换为彩色图层
29 colored_mask = np.zeros_like(img)
30 colored_mask[mask > 0] = [0, 255, 0]
31
32 # 叠加掩码到原图
33 img = cv2.addWeighted(img, 1, colored_mask, 0.5, 0)
34
35 cv2.imshow('Image with Masks', img)
36 cv2.waitKey(0)
37 cv2.destroyAllWindows()
38
39# 主函数
40if __name__ == "__main__":
41 images_dir = os.path.join(dataset_path, 'images')
42 annotations_dir = os.path.join(dataset_path, 'annotations')
43
44 # 获取图像列表
45 image_files = [f for f in os.listdir(images_dir) if f.endswith('.jpg')]
46
47 # 随机选择一张图像
48 selected_image = np.random.choice(image_files)
49 image_path = os.path.join(images_dir, selected_image)
50 annotation_path = os.path.join(annotations_dir, selected_image.replace('.jpg', '.json'))
51
52 # 加载图像和标注
53 image, masks = load_image_and_mask(image_path, annotation_path)
54
55 # 展示带有掩码的图像
56 show_image_with_masks(image, masks)
这段代码展示了如何加载图像和其对应的JSON标注文件,并在图像上绘制像素级掩码。您可以根据实际需求进一步扩展和修改这段代码,以适应您的具体应用场景。
示例代码:使用预训练模型进行推理
以下是使用预训练模型进行推理的示例代码。这里我们假设您使用的是基于U-Net的模型,但您可以根据需要选择其他支持像素级分割的模型。
python
深色版本
1import torch
2import torchvision
3import segmentation_models_pytorch as smp
4import cv2
5import numpy as np
6from PIL import Image
7import json
8
9# 数据集路径
10dataset_path = 'path/to/drone_visible_tree_segmentation_dataset/'
11subset = 'test' # 可以选择 'train' 或 'val'
12
13# 加载预训练模型
14model = smp.Unet(
15 encoder_name='resnet34',
16 encoder_weights='imagenet',
17 in_channels=3,
18 classes=2 # 背景 + 单木
19)
20weights_path = 'path/to/pretrained/unet_weights.pth' # 替换成实际的预训练模型路径
21model.load_state_dict(torch.load(weights_path))
22model.eval()
23
24# 主函数
25if __name__ == "__main__":
26 images_dir = os.path.join(dataset_path, 'images')
27 set_file = os.path.join(dataset_path, 'annotations', f'{subset}.txt')
28
29 # 获取图像列表
30 with open(set_file, 'r') as f:
31 image_files = [line.strip() + '.jpg' for line in f.readlines()]
32
33 # 随机选择一张图像
34 selected_image = np.random.choice(image_files)
35 image_path = os.path.join(images_dir, selected_image)
36
37 # 读取并预处理图像
38 image = Image.open(image_path).convert('RGB')
39 transform = torchvision.transforms.Compose([
40 torchvision.transforms.ToTensor(),
41 torchvision.transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
42 ])
43 image_tensor = transform(image).unsqueeze(0)
44
45 # 使用预训练模型进行推理
46 with torch.no_grad():
47 predictions = model(image_tensor)
48
49 # 处理预测结果
50 pred_mask = predictions.squeeze().cpu().numpy()
51 pred_mask = (pred_mask > 0.5).astype(np.uint8) # 二值化掩码
52
53 # 在图像上绘制掩码
54 img = np.array(image)
55 colored_mask = np.zeros_like(img)
56 colored_mask[pred_mask == 1] = [0, 255, 0]
57 img = cv2.addWeighted(img, 1, colored_mask, 0.5, 0)
58
59 # 显示结果
60 cv2.imshow('Image with Mask', img)
61 cv2.waitKey(0)
62 cv2.destroyAllWindows()
这段代码展示了如何使用预训练的U-Net模型进行推理,并显示和保存推理结果。您可以根据实际需求进一步扩展和修改这段代码,以适应您的具体应用场景