当前位置: 首页 > article >正文

计算机视觉常用数据集Foggy Cityscapes的介绍、下载、转为YOLO格式进行训练

我在寻找Foggy Cityscapes数据集的时候花了一番功夫,因为官网下载需要用公司或学校邮箱邮箱注册账号,等待审核通过后才能进行下载数据集。并且一开始我也并不了解Foggy Cityscapes的格式和内容是什么样的,现在我弄明白后写下这篇文章,用于记录和分享。后续我还会在这个专栏发布如何使用YOLOv5\v9\v10\v11系列进行自己数据集的训练,可以订阅一波专栏。

1、Foggy Cityscapes介绍

大雾城市景观Foggy Cityscapes (F):Foggy Cityscapes是由 Cityscapes 生成的合成数据集,它旨在模拟和研究自动驾驶车辆在雾天条件下的性能,有三个级别的大雾天气(0.005,0.01,0.02),从轻微的雾到浓厚的雾,分别对应于600,300和150米的能见度范围。并且Foggy Cityscapes 保留了 Cityscapes 数据集的详细标注信息;同样的,数据集中的图像分辨率为1024x2048,涵盖了30多个类别,包括车辆、行人、建筑物、道路等城市街景中常见的物体和场景;但常用8个类别:

classes = ['car', 'person', 'rider', 'truck', 'bus', 'train', 'motorcycle', 'bicycle']。

Cityscapes 的一张原图对应到foggy_cityscapes中有3张图,β=[0.005,0.01,0.02],分别进行转换可以得到3个foggy_cityscapes数据集。

由于雾天条件下的能见度降低,图像中的许多目标会变得模糊不清,这对计算机视觉检测来说是一个挑战。Foggy Cityscapes 为研究人员提供了一个测试和改进他们算法的机会,以提高在恶劣条件下算法的鲁棒性和准确性。

2、下载

官网下载地址:Cityscapes Dataset – Semantic Understanding of Urban Street Scenes

从官网下载这个压缩包文件:leftImg8bit_trainvaltest_foggy.zip

Foggy Cityscapes数据集只有图像,没有标注信息,因为和Cityscapes的标注是一模一样的。

由于在官网下载数据集需要公司或者学校邮箱申请注册,等待审核通过后才可以下载,所以我在结尾提供了网盘数据下载方式,已经全部处理好了,可以直接用于YOLO格式的目标检测。

3、划分数据集用于YOLO目标检测

经过我的处理,将三种可见度的图片beta=(0.005,0.01,0.02)分为了三个文件夹:

以最常用的beta=0.02为例子,打开后长这样:

4、图像标签命名统一化

和Cityscapes数据集一样,图像和标签的名称是不一样的,在使用YOLO检测的时候,如果两者名称不一样,那么读取图片后就找不到对应的labels。下载数据后,重命名并将路径改为如下格式:

由于原数据集三个可见度的图片都是在一个文件夹中,比如在路径为

'D:/Deep_Learning_DataSet/Object_Detection_DataSet/Foggy_Cityscapes/leftImg8bit_trainvaltest_foggy/test'

的test文件夹下,berlin_000000_000019_leftImg8bit_foggy_beta_0.02.png、berlin_000000_000019_leftImg8bit_foggy_beta_0.01.png、berlin_000000_000019_leftImg8bit_foggy_beta_0.005.png都在一起,那么在读取数据的时候不太方便,所以将这三种不同可见度的图片分别转移到三个对应的文件夹下。

使用以下这段代码将数据集划分为三个可见度的文件夹下,记得修改自己的数据集路径,然后依次修改train、val、test就可以将原数据集中的图片转移到新文件夹下。

import os
import shutil

# 定义源目录和目标目录
src_dir = 'D:/Deep_Learning_DataSet/Object_Detection_DataSet/Foggy_Cityscapes/leftImg8bit_trainvaltest_foggy/test'
dest_dir_01 = 'D:/Deep_Learning_DataSet/Object_Detection_DataSet/Foggy_Cityscapes/leftImg8bit_trainvaltest_foggy/images_beta_0.01/test'
dest_dir_02 = 'D:/Deep_Learning_DataSet/Object_Detection_DataSet/Foggy_Cityscapes/leftImg8bit_trainvaltest_foggy/images_beta_0.02/test'
dest_dir_005 = 'D:/Deep_Learning_DataSet/Object_Detection_DataSet/Foggy_Cityscapes/leftImg8bit_trainvaltest_foggy/images_beta_0.005/test'

# 确保目标目录存在
os.makedirs(dest_dir_01, exist_ok=True)
os.makedirs(dest_dir_02, exist_ok=True)
os.makedirs(dest_dir_005, exist_ok=True)

# 遍历源目录中的所有文件
for filename in os.listdir(src_dir):
    # 检查文件名是否包含beta值
    if 'beta_0.01' in filename:
        shutil.move(os.path.join(src_dir, filename), os.path.join(dest_dir_01, filename))
    elif 'beta_0.02' in filename:
        shutil.move(os.path.join(src_dir, filename), os.path.join(dest_dir_02, filename))
    elif 'beta_0.005' in filename:
        shutil.move(os.path.join(src_dir, filename), os.path.join(dest_dir_005, filename))

print("Files have been moved successfully.")

然后将文件夹images_beta_0.01、images_beta_0.02、images_beta_0.005都重命名为

beta_0.01、beta_0.02、beta_0.005,这三个文件夹分别放的是图像和标签,如下图所示:

5、YOLO数据配置文件

如图,记得修改自己的数据集路径,数据路径不能有中文,否则就会报以下错误。

Dataset not found , missing paths ['D:\\\\\\\\YOLO\\images\\val'] Traceback (most recent call last): File "E:\pythonCode\ObjectDetection\yolov9-main\train_dual.py", line 644, in <module> main(opt) File "E:\pythonCode\ObjectDetection\yolov9-main\train_dual.py", line 538, in main train(opt.hyp, opt, device, callbacks) File "E:\pythonCode\ObjectDetection\yolov9-main\train_dual.py", line 97, in train data_dict = data_dict or check_dataset(data) # check if None File "E:\pythonCode\ObjectDetection\yolov9-main\utils\general.py", line 537, in check_dataset raise Exception('Dataset not found ❌') Exception: Dataset not found ❌

path: D:/Deep_Learning_DataSet/Object_Detection_DataSet/Foggy_Cityscapes/beta_0.02
train: D:/Deep_Learning_DataSet/Object_Detection_DataSet/Foggy_Cityscapes/beta_0.02/images/train
val: D:/Deep_Learning_DataSet/Object_Detection_DataSet/Foggy_Cityscapes/beta_0.02/images/val
#test: test-dev2017.txt
# Classes
names:
  0: car
  1: person
  2: rider
  3: truck
  4: bus
  5: train
  6: motorcycle
  7: bicycle

6、结果可视化

运行以下代码,将图片与对应的标注信息结合,得到带有目标边界框的图像,不要忘记修改地址

import cv2
import os

# 图片路径
image_path = '../beta_0.02/images/train/aachen_000010_000019_leftImg8bit_foggy_beta_0.02.png'
# YOLO注释文件路径
annotation_path = '../beta_0.02/labels/train/aachen_000010_000019_leftImg8bit_foggy_beta_0.02.txt'

# 读取YOLO注释文件
with open(annotation_path, 'r') as file:
    lines = file.readlines()

# 读取图片
image = cv2.imread(image_path)
# 禁用窗口缩放
cv2.namedWindow('Image with Bounding Boxes', cv2.WINDOW_NORMAL)

# 类别名称列表
# class_names = ['car', 'person', 'rider', 'truck', 'bus', 'train', 'motorcycle', 'bicycle']
# 类别名称与ID的映射字典
class_dict = {0: 'car', 1: 'person', 2: 'rider', 3: 'truck', 4: 'bus', 5: 'train', 6: 'motorcycle', 7: 'bicycle'}
# 绘制边界框和类别标签
for line in lines:
    parts = line.strip().split()
    class_id = int(parts[0])
    print(f"class_id:{class_id}")
    x_center = float(parts[1])
    y_center = float(parts[2])
    width = float(parts[3])
    height = float(parts[4])

    # 将归一化的坐标转换为像素坐标
    x_min = int((x_center - width / 2) * image.shape[1])
    y_min = int((y_center - height / 2) * image.shape[0])
    x_max = int((x_center + width / 2) * image.shape[1])
    y_max = int((y_center + height / 2) * image.shape[0])

    # 获取类别名称
    class_name = class_dict[class_id]

    # 绘制边界框
    cv2.rectangle(image, (x_min, y_min), (x_max, y_max), (0, 255, 0), 2)

    # 绘制类别标签
    cv2.putText(image, class_name, (x_min, y_min - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

print(image.shape)
# 显示图片
cv2.imshow('Image with Bounding Boxes', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下所示:

7、使用YOLOv9-m进行训练

我的GPU是4060Laptop,8GB显存,使用YOLOv9-m,batchsize=4,刚好可以训练,再多就爆显存了。2975训练集、500验证集。

8、个人下载方式

通过百度网盘分享的文件:Foggy_Cityscapes
链接:https://pan.baidu.com/s/1NgOw9MjW3pMwEO7WAowP8Q?pwd=4ekd 
提取码:4ekd

如果链接失效了,评论区告诉我一声哈。


http://www.kler.cn/a/372856.html

相关文章:

  • CPU算法分析LiteAIServer视频智能分析平台噪声检测功能在视频监控中的应用与优势
  • IDEA连接数据库报错(javax.net.ssl.SSLHandshakeException: No appropriate protocol )
  • 电子电气架构 --- 车载芯片现状
  • 【热门主题】000013 C++游戏开发全攻略
  • Linux——— 信号
  • 【RUOYI3.8.8】框架参考笔记
  • WinUI AOT 发布
  • 输电线路云台变焦视频监控装置在智能识别和数据安全方面有哪些具体的优势和措施?
  • 【设计模式系列】代理模式(八)
  • python爬虫抓取豆瓣数据教程
  • redis:基本全局命令-键管理(1)
  • 同WiFi网络情况下,多个手机怎么实现不同城市的IP
  • MATLAB下的四个模型的IMM例程(CV、CT左转、CT右转、CA四个模型),附源代码可复制
  • yocto 下基于SDK的 tcpdump 移植
  • 爬虫利器playwright
  • ts:常见的内置数学方法(Math)
  • Java项目练习——学生管理系统
  • MR30分布式IO:石化行业的智能化革新
  • IIC学习总结
  • CodeS:构建用于文本到 SQL 的开源语言模型
  • list类模拟实现
  • 从0学习React(7)
  • Maven(18)如何使用Maven打包项目?
  • 1通道10GSPS或2通道5G 14 bit数字化仪
  • 跟着小土堆学习pytorch(六)——神经网络的基本骨架(nn.model)
  • 命令如诗,步入Linux的晨曦:指令初学者的旅程(下)