数据集介绍

aeroscapes数据集下载链接
AeroScapes 航空语义分割基准包括使用商用无人机在 5 到 50 米的高度范围内捕获的图像。该数据集提供 3269 张 720p 图像和 11 个类别的真实掩码。

获取Class类别及其RGB值

由于本数据集未提供类别ID对应的RGB值,可以通过以下代码获取:

from PIL import Image
import osbase_dir = "Visualizations/"
base_seg_dir = "SegmentationClass/"
files = os.listdir(base_dir)
list1 = []
for file in files:img_dir = base_dir + filesegimg_dir = base_seg_dir + fileim = Image.open(img_dir)segimg = Image.open(segimg_dir)pix = im.load()pix_seg = segimg.load() width = im.size[0]height = im.size[1]for x in range(width):for y in range(height):r, g, b = pix[x, y]c = pix_seg[x,y]if [c,r,g,b] not in list1:list1.append([c,r,g,b])print(list1)
print(list1)

结果如下:

Person [192,128,128]--------------1
Bike [0,128,0]----------------------2
Car [128,128,128]----------------- 3
Drone [128,0,0]--------------------4
Boat [0,0,128]--------------------- 5
Animal [192,0,128]---------------- 6
Obstacle [192,0,0]------------------7
Construction [192,128,0]-----------8
Vegetation [0,64,0]-----------------9
Road [128,128,0]-------------------10
Sky [0,128,128]---------------------11

数据加载dataloder写法(基于pytorch)

由于该数据集提供了掩码图,因此不需要进行掩码图转换。下载完成后,文件结构如下:

  • ImageSets文件夹:存放了两个txt文件,划分了训练集和验证集。
  • JPEGImages文件夹:存放了RGB图像。
  • SegmentationClass:存放了标签的掩模图。
  • Visualizations:存放了标签图像。
    为了使用此数据集,需要根据划分好的txt文件读取图像,然后采用Pytorch的Dataloader模块进行加载。具体代码:
'''
dataset.py
'''
import torch
import torch.utils.data
import numpy as np
import cv2
import os# txt_file = open("ImageSets/trn.txt")
# train_filenames = txt_file.readlines()
# for train_filename in train_filenames:
#     print(train_filename)class DatasetTrain(torch.utils.data.Dataset):def __init__(self, base_dir):self.base_dir = base_dirself.img_dir = base_dir + "JPEGImages/"self.label_dir = base_dir + "SegmentationClass/"self.new_img_h = 512self.new_img_w = 1024self.examples = []txt_path = self.base_dir + "ImageSets/trn.txt"txt_file = open(txt_path)train_filenames = txt_file.readlines()train_img_dir_path = self.img_dirlabel_img__dir_path = self.label_dirfor train_filename in train_filenames:train_filename=train_filename.strip('\n')img_path = train_img_dir_path + train_filename + '.jpg'label_img_path = label_img__dir_path + train_filename + '.png'example = {}example["img_path"] = img_pathexample["label_img_path"] = label_img_pathself.examples.append(example)self.num_examples = len(self.examples)def __getitem__(self, index):example = self.examples[index]img_path = example["img_path"]print(img_path)img = cv2.imread(img_path, -1) img = cv2.resize(img, (self.new_img_w, self.new_img_h),interpolation=cv2.INTER_NEAREST) label_img_path = example["label_img_path"]print(label_img_path)label_img = cv2.imread(label_img_path, cv2.IMREAD_GRAYSCALE) label_img = cv2.resize(label_img, (self.new_img_w, self.new_img_h),interpolation=cv2.INTER_NEAREST) # normalize the img (with the mean and std for the pretrained ResNet):img = img/255.0img = img - np.array([0.485, 0.456, 0.406])img = img/np.array([0.229, 0.224, 0.225]) img = np.transpose(img, (2, 0, 1)) img = img.astype(np.float32)# convert numpy -> torch:img = torch.from_numpy(img) label_img = torch.from_numpy(label_img) return (img, label_img)def __len__(self):return self.num_examplesclass DatasetVal(torch.utils.data.Dataset):def __init__(self, base_dir):self.base_dir = base_dirself.img_dir = base_dir + "JPEGImages/"self.label_dir = base_dir + "SegmentationClass/"self.new_img_h = 512self.new_img_w = 1024self.examples = []txt_path = self.base_dir + "ImageSets/val.txt"txt_file = open(txt_path)valid_filenames = txt_file.readlines()train_img_dir_path = self.img_dirlabel_img__dir_path = self.label_dirfor valid_filename in valid_filenames:valid_filename=valid_filename.strip('\n')img_path = train_img_dir_path + valid_filename + '.jpg'label_img_path = label_img__dir_path + valid_filename + '.png'example = {}example["img_path"] = img_pathexample["label_img_path"] = label_img_pathself.examples.append(example)self.num_examples = len(self.examples)def __getitem__(self, index):example = self.examples[index]img_path = example["img_path"]print(img_path)img = cv2.imread(img_path, -1) img = cv2.resize(img, (self.new_img_w, self.new_img_h),interpolation=cv2.INTER_NEAREST) label_img_path = example["label_img_path"]print(label_img_path)label_img = cv2.imread(label_img_path, cv2.IMREAD_GRAYSCALE) label_img = cv2.resize(label_img, (self.new_img_w, self.new_img_h),interpolation=cv2.INTER_NEAREST) # normalize the img (with the mean and std for the pretrained ResNet):img = img/255.0img = img - np.array([0.485, 0.456, 0.406])img = img/np.array([0.229, 0.224, 0.225]) img = np.transpose(img, (2, 0, 1)) img = img.astype(np.float32)# convert numpy -> torch:img = torch.from_numpy(img) label_img = torch.from_numpy(label_img) return (img, label_img)def __len__(self):return self.num_examples'''
以下代码为测试功能,正式使用时需要注释掉
'''if __name__ == "__main__":base_dir = "aeroscapes/"train_dataset = DatasetTrain(base_dir = base_dir)train_loader = torch.utils.data.DataLoader(dataset=train_dataset,batch_size=3, shuffle=True,num_workers=1,drop_last=True)val_dataset = DatasetVal(base_dir = base_dir)val_loader = torch.utils.data.DataLoader(dataset=val_dataset,batch_size=3, shuffle=True,num_workers=1,drop_last=True)from torch.autograd import Variablefor step, (imgs, label_imgs) in enumerate(train_loader):imgs = Variable(imgs).cuda() # (shape: (batch_size, 3, img_h, img_w))print(imgs.shape)label_imgs = Variable(label_imgs.type(torch.LongTensor)).cuda() # (shape: (batch_size, img_h, img_w))print(label_imgs.shape)for step, (imgs, label_imgs) in enumerate(val_loader):imgs = Variable(imgs).cuda() # (shape: (batch_size, 3, img_h, img_w))print(imgs.shape)label_imgs = Variable(label_imgs.type(torch.LongTensor)).cuda() # (shape: (batch_size, img_h, img_w))print(label_imgs.shape)

使用前根据自己数据集存放的路径修改base_dir 变量。

无人机图像语义分割数据集(aeroscapes数据集)使用方法相关推荐

  1. 遥感图像语义分割各公开数据集

    遥感图像语义分割数据集 1. Gaofen Image Dataset(GID) 2. ISPRS Test Project on Urban Classification and 3D Buildi ...

  2. 笔记:基于DCNN的图像语义分割综述

    写在前面:一篇魏云超博士的综述论文,完整题目为<基于DCNN的图像语义分割综述>,在这里选择性摘抄和理解,以加深自己印象,同时达到对近年来图像语义分割历史学习和了解的目的,博古才能通今!感 ...

  3. 用PaddlePaddle实现图像语义分割模型ICNet

    什么是图像语义分割? 图像语意分割顾名思义是将图像像素按照表达的语义含义的不同进行分组/分割,图像语义是指对图像内容的理解,例如,能够描绘出什么物体在哪里做了什么事情等,分割是指对图片中的每个像素点进 ...

  4. 无人机遥感图像语义分割数据集UAVid使用

    一.无人机遥感图像语义分割数据集UAVid UAVid数据集是用于针对城市场景的语义分割任务的UAV视频数据集.它具有几个特点: 语义分割 4K分辨率无人机视频 8种物体类别 街景环境 示例图像: 下 ...

  5. 从零开始的图像语义分割:FCN快速复现教程(Pytorch+CityScapes数据集)

    从零开始的图像语义分割:FCN复现教程(Pytorch+CityScapes数据集) 前言 一.图像分割开山之作FCN 二.代码及数据集获取 1.源项目代码 2.CityScapes数据集 三.代码复 ...

  6. 汇总 | 深度学习中图像语义分割基准数据集详解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 汇总图像语义分割那些质量最好的数据集与常用benchmark数据集 ...

  7. 无人驾驶常用数据集---图像语义分割数据集--Cityscapes数据集的解读(for 小白)

    ** 无人驾驶常用数据集–图像语义分割数据集–Cityscapes数据集的解读(for 小白) ** 一.什么是Cityscapes数据集? Cityscapes是关于城市街道场景的语义理解图片数据集 ...

  8. 图像分割数据集制作matlab,制作自己的图像语义分割数据集

    本文教你如何正确制作自己的图像语义分割数据集.假设我当前目录下有500张图片,命名从1.jpg开始,一直往上递增,我事先已经调整好了图像的大小. 首先下载Labelme工具:https://githu ...

  9. 图像语义分割python_图像语义分割 —利用Deeplab v3+训练VOC2012数据集

    原标题:图像语义分割 -利用Deeplab v3+训练VOC2012数据集 前言: 配置:windows10 + Tensorflow1.6.0 + Python3.6.4(笔记本无GPU) 源码: ...

最新文章

  1. 安装SCOM Reporting Server
  2. centos6.6安装hadoop-2.5.0(四、hadoop HA安装)
  3. CocosCreator1.x实现水流动的效果
  4. php事务 面向对象,PHP面向对象之事务脚本模式(详解)
  5. 简单python爬虫案例(爬取慕课网全部实战课程信息)
  6. vue.js+flask+element-ui简易Demo 气势的信心
  7. 用python画图代码-Python实战小程序利用matplotlib模块画图代码分享
  8. 判断参数大于0_能做条件判断的文本函数
  9. phpQuery乱码解决经验分享
  10. 怎么批量将多个 PDF 转换为 jpeg、png、bmp 图片
  11. 云服务器哪家强?AWS、Azure、阿里云、腾讯云、华为云深度评测
  12. 虚拟机安装黑苹果mac 10.12系统安装教程
  13. postman——基础操作——API请求与响应——构造器
  14. 老王卖西瓜python_python 老王装货
  15. 触发器(四、执行顺序控制)
  16. app同质化趋势下,如何实现差异化?
  17. verilog符号 与或非 异或_在Verilog HDL设计中用什么表示异或
  18. 使用linux蓝牙指南
  19. IT服务模式变迁影射新旧商业时代交替
  20. 统计与运筹优化(6)-决策分析

热门文章

  1. 手机办公总被质疑效率低?合理地使用手机功能,办公效率远超电脑
  2. 基于FRR全面解析BGP协议(五):FRR的BGP路由策略
  3. WeakReference弱引用
  4. 用PC上的Chrome 模拟手机浏览器
  5. [附源码]Python计算机毕业设计电影票网上订票系统Django(程序+LW)
  6. Matlab:linspace
  7. zynq平台 Linux系统 phy 88e1512驱动配置
  8. LTE学习-调制解调
  9. 多普达与HTC的关系
  10. iOS开发技能树之C语言-函数