无人机航拍图像数据集汇总

这篇具有很好参考价值的文章主要介绍了无人机航拍图像数据集汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

最近的项目涉及到对无人机航拍图像的目标检测,检测的目标包含车辆、人、无人机、船舶,比较热门的航拍数据集大多是遥感图像的数据集,与本项目相关的数据集查找不易,本文分享一下相关的航拍数据数据集,以及数据集的处理方法。

文中部分数据集已经下载,需要获取文中涉及到的数据集请私信(目录中的文件名是本人为了方便自己定义的)

数据集处理

1、获取感兴趣的类别

在训练过程中,数据集中的部分类别使用不到,需要提取中感兴趣的类别,如果以图像中没有感兴趣的类别,将图像舍弃,如果图像中既有感兴趣的类别也有不感兴趣的类别,则将不感兴趣的类别从标签文件中删除,只保存感兴趣的类别信息

import os
import shutil
#voc格式标签的地址
ann_filepath='VOCdevkit/VOC2012/Annotations/'
#原图像的地址
img_filepath='VOCdevkit/VOC2012/JPEGImages/'
#转换后图像的存放地址
img_savepath='VOCdevkit/VOC2012/JPEGImages_ssd/'
#转换后标签的存放地址
ann_savepath='VOCdevkit/VOC2007/Annotations_ssd/'
if not os.path.exists(img_savepath):
    os.mkdir(img_savepath)
 
if not os.path.exists(ann_savepath):
    os.mkdir(ann_savepath)
names = locals()

#数据集中所有的类别,类别名称要与标签号对应,如aeroplane对应name_id为0,将其放在第一个位置
#以voc数据集为例如下24~27
classes = ['aeroplane','bicycle','bird', 'boat', 'bottle',
           'bus', 'car', 'cat', 'chair', 'cow','diningtable',
           'dog', 'horse', 'motorbike', 'pottedplant',
           'sheep', 'sofa', 'train', 'tvmonitor', 'person']
 
 
for file in os.listdir(ann_filepath):
    print(file)
    fp = open(ann_filepath +  file)
    ann_savefile=ann_savepath+file
    fp_w = open(ann_savefile, 'w')
    lines = fp.readlines()
 
    ind_start = []
    ind_end = []
    lines_id_start = lines[:]
    lines_id_end = lines[:]
 
 #设置感兴趣的类别:classesn = '\t\t<name>RoiClassName</name>\n'
 #RoiClassName为具体的类别名称
    classes1 = '\t\t<name>aeroplane</name>\n'
    classes2 = '\t\t<name>boat</name>\n'
    classes3 = '\t\t<name>bus</name>\n'
    classes4 = '\t\t<name>car</name>\n'
    classes5 = '\t\t<name>person</name>\n'
 
    #在xml中找到object块,并将其记录下来
    while "\t<object>\n" in lines_id_start:
        a = lines_id_start.index("\t<object>\n")
        ind_start.append(a)
        lines_id_start[a] = "delete"
 
 
    while "\t</object>\n" in lines_id_end:
        b = lines_id_end.index("\t</object>\n")
        ind_end.append(b)
        lines_id_end[b] = "delete"
 
    #names中存放所有的object块
    i = 0
    for k in range(0, len(ind_start)):
        names['block%d' % k] = []
        for j in range(0, len(classes)):
            if classes[j] in lines[ind_start[i] + 1]:
                a = ind_start[i]
                for o in range(ind_end[i] - ind_start[i] + 1):
                    names['block%d' % k].append(lines[a + o])
                break
        i += 1
        #print(names['block%d' % k])
 
 
    #xml头
    string_start = lines[0:ind_start[0]]
    #xml尾
    string_end = [lines[len(lines) - 1]]
 
 
    #在给定的类中搜索,若存在则,写入object块信息
    a = 0
    for k in range(0, len(ind_start)):
        if classes1 in names['block%d' % k]:
            a += 1
            string_start += names['block%d' % k]
        if classes2 in names['block%d' % k]:
            a += 1
            string_start += names['block%d' % k]
        if classes3 in names['block%d' % k]:
            a += 1
            string_start += names['block%d' % k]
        if classes4 in names['block%d' % k]:
            a += 1
            string_start += names['block%d' % k]
        if classes5 in names['block%d' % k]:
            a += 1
            string_start += names['block%d' % k]
    string_start += string_end
    for c in range(0, len(string_start)):
        fp_w.write(string_start[c])
    fp_w.close()
    #如果没有我们寻找的模块,则删除此xml,有的话拷贝图片
    if a == 0:
        os.remove(ann_savepath+file)
    else:
        name_img = img_filepath + os.path.splitext(file)[0] + ".jpg"
        shutil.copy(name_img, img_savepath)
    fp.close()

2、修改和删除相应类别ID以及标注信息

  • 在实际应用中,数据集无需划分子类,如原数据集中含有货船、邮轮、客船等船的子类;但是项目中只需要检测到船,并不需要划分子类,这就需要我们对将数据集中的类别进行和并重构

  • 数据集中含有的与项目无关的类别也可以删除

import os
import random
import numpy as np
from numpy import *
 
txt_file_path = '/mnt/dir1/database/VisDrone2019/VisDrone2019-DET-val/labels'  # 原始的标签路径
save_file_path = '/mnt/dir1/database/VisDrone2019/VisDrone2019-DET-val/labels1'  # 修改后的标签路径
 
labels_name = os.listdir(txt_file_path)  # 获得每一个标签名字的列表 / os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表
num = len(labels_name)  # 获取列表长度
list = range(num)  # 创建从0到num的整数列表  list = range(0, num)
files = os.listdir(save_file_path)
 
for i in list:  # 遍历每一个文件
    name = labels_name[i]  # 获取每一个文件的文件名
    read_file = open(txt_file_path + "/" + name, 'r')  # 读取txt_file_path/labels路径中的文件,r表示以只读方式打开文件
    fline = read_file.readlines()  # 读取txt文件中每一行 / readlines()表示读取整行 / fline是列表类型,fline列表里的元素是str类型
    save_txt = open(save_file_path + "/" + name, 'w+')  # 读取save_file_path/labels路径中的文件. w+表示打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
 
    for j in fline:  # 遍历txt文件中每一行
        list1 = j.split()
        # print(list1)
 
        # 删除类别
        if list1[0] != '2':  # 删除类别2
            if list1[0] != '6':  # 删除类别6
                if list1[0] != '7':  # 删除类别7
                    if list1[0] != '9':  # 删除类别9
                    list2 = list1
                    #print(list2)
 
                    # 修改类别
                    if list2[0] == '1':
                        list2[0] = '0'  # 将类别1改成类别0
                    elif list2[0] == '3':
                        list2[0] = '1'  # 将类别3改成类别1
                    elif list2[0] == '4':
                        list2[0] = '1'  # 将类别4改成类别1
                    elif list2[0] == '5':
                        list2[0] = '1'  # 将类别5改成类别1
                    elif list2[0] == '8':
                        list2[0] = '1'  # 将类别8改成类别1
 
                    b = " ".join(list2)   # 将列表转换成字符串类型,且用空格分割
                    save_txt.write(b)  # 写入新的文件中
                    save_txt.write('\n')  # 换行

3、VOC数据集转YOLO

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
 
 
def convert(size, box):
    x_center = (box[0] + box[1]) / 2.0
    y_center = (box[2] + box[3]) / 2.0
    x = x_center / size[0]
    y = y_center / size[1]
    w = (box[1] - box[0]) / size[0]
    h = (box[3] - box[2]) / size[1]
    return (x, y, w, h)
 
 
def convert_annotation(xml_files_path, save_txt_files_path, classes):
    xml_files = os.listdir(xml_files_path)
    #print(xml_files)
    for xml_name in xml_files:
        print(xml_name)
        xml_file = os.path.join(xml_files_path, xml_name)
        out_txt_path = os.path.join(save_txt_files_path, xml_name.split('.')[0] + '.txt')
        #
        folder = os.path.exists(save_txt_files_path)
        if not folder: #判断是否存在文件夹如果不存在则创建为文件夹
            os.makedirs(save_txt_files_path) #makedirs 创建文件时如果路径不存在会创建这个路径#
        #
        out_txt_f = open(out_txt_path, 'w', encoding="utf-8")
        tree = ET.parse(xml_file)
        root = tree.getroot()
        size = root.find('size')
        w = int(size.find('width').text)
        h = int(size.find('height').text)
 
        for obj in root.iter('object'):
            difficult = obj.find('difficult').text
            cls = obj.find('name').text
            if cls not in classes or int(difficult) == 1:
                continue
            cls_id = classes.index(cls)
            xmlbox = obj.find('bndbox')
            b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
                 float(xmlbox.find('ymax').text))
            # b=(xmin, xmax, ymin, ymax)
            print(w, h, b)
            bb = convert((w, h), b)
            out_txt_f.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
 
 
if __name__ == "__main__":
    # 需要转换的类别,需要一一对应
    classes1 = ['aeroplane', 'boat', 'bus', 'car', 'person']
    # 2、voc格式的xml标签文件路径
    xml_files1 = r'VOCdevkit/VOC2012/Annotations_ssd/'
    # 3、转化为yolo格式的txt标签文件存储路径
    save_txt_files1 = r'VOCdevkit/VOC2012/labels_ssd/'
 
    convert_annotation(xml_files1, save_txt_files1, classes1)

无人机数据集介绍

 FW-UAV1

固定翼无人机数据集,其中包含1817幅图像,图像格式为.png,已经转换为yolo格式,但是还未划分数据集、标签和图像在一个文件夹中。

下载地址:Fixed Wing UAV Dataset (kaggle.com)

无人机数据集,无人机,计算机视觉

 图像实例:

无人机数据集,无人机,计算机视觉

FW-UAV2

固定翼无人机,554幅图像,yolo格式,标签和图像在一个文件夹中

 下载地址:Fixed Wing UAV Dataset (kaggle.com)

无人机数据集,无人机,计算机视觉

图像实例:

无人机数据集,无人机,计算机视觉

FW-UAV3

固定翼无人机数据集,包含1790幅图像,包含yolo标签格式

下载地址:Fixed Wing UAV - Plane (kaggle.com)

 无人机数据集,无人机,计算机视觉

 图片实例:

无人机数据集,无人机,计算机视觉

 

UAV1

旋翼式无人机数据集,其中包含4010幅图像,已经标注好了yolo格式,标签和图片在一个文件夹中,数据集未划分

下载地址:Drone Object Detection (kaggle.com)

无人机数据集,无人机,计算机视觉

图像实例:

无人机数据集,无人机,计算机视觉

UAV2

旋翼式无人机数据集,其中包含4014幅图像,已经标注好了yolo格式,标签和图片在一个文件夹中,数据集未划分

下载地址:Amateur Unmanned Air Vehicle Detection (kaggle.com)

无人机数据集,无人机,计算机视觉

 图像实例:

无人机数据集,无人机,计算机视觉

 

车辆和行人数据集

VisDrone

VisDrone数据集中的一部分,一共有5138幅图像,已经转换为yolo格式,划分好了训练集、验证集、测试集

下载地址:visdrone (kaggle.com)

无人机数据集,无人机,计算机视觉

 图像实例:

无人机数据集,无人机,计算机视觉

HIT-UAV

车辆和行人数据集,共有2866幅图像,Person8000个,Car5000个,可以直接使用

数据集地址:HIT-UAV: A High-altitude Infrared Thermal Dataset (kaggle.com)

无人机数据集,无人机,计算机视觉

 图像实例:

无人机数据集,无人机,计算机视觉

 

船舶数据集

SHIP1

航拍船只数据集(卫星),一共有621幅图像,标注格式为voc ,archive2

下载地址:Ship Detection from Aerial Images (kaggle.com)无人机数据集,无人机,计算机视觉

 图像实例:

无人机数据集,无人机,计算机视觉

 

SHIP2

共有134000幅航拍船只图像(遥感),标签格式为yolo archive3

下载地址:Ships/Vessels in Aerial Images (kaggle.com)

无人机数据集,无人机,计算机视觉

 图像实例:

无人机数据集,无人机,计算机视觉

SHIP3

航拍鸟瞰图,没有标签,8932幅图像

下载地址:ship-imageclassify (kaggle.com)

无人机数据集,无人机,计算机视觉

图像实例:

无人机数据集,无人机,计算机视觉文章来源地址https://www.toymoban.com/news/detail-774416.html

到了这里,关于无人机航拍图像数据集汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据集【NO.7】无人机航拍数据集——VisDrone2019数据集

    写在前面:数据集对应应用场景,不同的应用场景有不同的检测难点以及对应改进方法,本系列整理汇总领域内的数据集,方便大家下载数据集,若无法下载可关注后私信领取。关注免费领取整理好的数据集资料!本文数据集链接: https://pan.baidu.com/s/1IkxncYLWjphMHHeGkLQz3w  提取码

    2024年02月11日
    浏览(29)
  • 无人机航拍高度与地面采样距离

    为搞清无人机航拍高度与地面采样距离的关系,首先需要了解像素与像元之间的细小差别(个人理解)。像素偏重于图片描述,也就是常说的一张图片像素是多少。像元则指一个像素点的实际大小。 对同样大小面积的图片,像元越小,即像素面积越小,进而该场景图片像素数

    2024年02月09日
    浏览(33)
  • PhotoScan拼接无人机航拍RGB照片

    目录 背景 拼接步骤 1.新建并保存项目 2.添加照片 3.对齐照片 4.添加标记(Markers) 5.添加地面控制点 6.建立批处理任务 7.使用批处理文件进行批处理 8.导出DEM 9.导出DOM 本文介绍使用地面控制点(GCPs)拼接​​​​​​​无人机RGB影像,生成DEM、DOM。 数据获取情况: 无人机:

    2024年02月09日
    浏览(32)
  • YOLO目标检测——无人机航拍行人检测数据集下载分享【含对应voc、coc和yolo三种格式标签】

    实际项目应用 :智能交通管理、城市安防监控、公共安全救援等领域 数据集说明 :无人机航拍行人检测数据集,真实场景的高质量图片数据,数据场景丰富 标签说明 :使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签,分别存放在不同文件

    2024年01月18日
    浏览(37)
  • 基于目标检测的无人机航拍场景下小目标检测实践

    无人机变得越来越普及,很多场景中由于客观原因的限制大量采用了无人机,无人机预警、无人机抓怕、无人机劝导等等,无人机逐渐成为复杂场景中不可替代的重要觉得,无人机航拍数据与遥感图像数据有几分相似,图像中以小目标居多,不同的是,遥感本身图像很大,所

    2023年04月08日
    浏览(32)
  • 0基础学习VR全景平台篇第138篇:无人机航拍实操

    上课!全体起立~ 大家好,欢迎观看蛙色官方系列全景摄影课程! 为了使全景的概念体现得更为广阔和大气,我们也需要在天空上运用无人机进行全景拍摄,而无人机的拍摄相对于地面来说也是较为简单,掌握其基本的拍摄技巧就可以实现全景的呈现,后期再加以补天和拼接

    2024年01月18日
    浏览(33)
  • 【赠书第1期】零基础学无人机航拍与短视频后期剪辑实战教程

    文章目录         前言 1 购买前须知 2 准备工作 3 飞行控制 4 拍摄技巧 5 安全提示 6 推荐图书 7 粉丝福利 随着科技的不断发展,无人机已经不再是军事装备的专属,它已经成为了消费级无人机的主流产品。作为国内领先的无人机生产商,大疆科技深耕无人机领域多年,其

    2024年02月06日
    浏览(37)
  • 实践航拍小目标检测,基于轻量级YOLOv8n开发构建无人机航拍场景下的小目标检测识别分析系统

    关于无人机相关的场景在我们之前的博文也有一些比较早期的实践,感兴趣的话可以自行移步阅读即可: 《deepLabV3Plus实现无人机航拍目标分割识别系统》 《基于目标检测的无人机航拍场景下小目标检测实践》 《助力环保河道水质监测,基于yolov5全系列模型【n/s/m/l/x】开发构

    2024年03月11日
    浏览(49)
  • 实践航拍小目标检测,基于YOLOv7【tiny/l/x】不同系列参数模型开发构建无人机航拍场景下的小目标检测识别分析系统

    关于无人机相关的场景在我们之前的博文也有一些比较早期的实践,感兴趣的话可以自行移步阅读即可: 《deepLabV3Plus实现无人机航拍目标分割识别系统》 《基于目标检测的无人机航拍场景下小目标检测实践》 《助力环保河道水质监测,基于yolov5全系列模型【n/s/m/l/x】开发构

    2024年03月18日
    浏览(54)
  • 计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)

    该项目一个基于深度学习和目标跟踪算法的项目,主要用于实现视频中的目标检测和跟踪。 该项目使用了 YOLOv5目标检测算法和 DeepSORT 目标跟踪算法,以及一些辅助工具和库,可以帮助用户快速地在本地或者云端上实现视频目标检测和跟踪! 教程博客_传送门链接-------单目测

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包