yolov4、yolov5训练nuscenes数据集/nuscenes数据集转coco格式

本文围绕自动驾驶的nuscenes数据集展开,介绍其下载过程,包括数据集简介与类型选择。详细阐述将nuscenes数据集转为COCO格式的步骤,如3D标注框转2D、2D格式转COCO及文件名对齐。最后说明了使用darknet源码进行yolov4训练的流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. nuscenes数据集下载

1.1 nuscenes数据集简介

nuScenes数据集 是自动驾驶公司nuTonomy建立的大规模自动驾驶数据集,该数据集不仅包含了Camera和Lidar,还记录了雷达数据。这个数据集由1000个场景组成(即scenes,这就是该数据集名字的由来),每个scenes长度为20秒,包含了各种各样的情景。在每一个scenes中,有40个关键帧(key frames),也就是每秒钟有2个关键帧,其他的帧为sweeps。关键帧经过手工的标注,每一帧中都有了若干个annotation,标注的形式为bounding box。不仅标注了大小、范围、还有类别、可见程度等等。这个数据集不久前发布了一个teaser版本(包含100个scenes),正式版(1000个scenes)的数据要2019年发布。这个数据集在sample的数量上、标注的形式上都非常好,记录了车的自身运动轨迹(相对于全局坐标),包含了非常多的传感器,可以用来实现更加智慧的识别算法和感知融合算法。
我需要包含毫米波雷达/激光雷达/摄像头的数据集,所以需要在数据集的选择上选取包含这三类传感器的数据集,故选择了nuscenes数据集。

1.2 nuscenes数据类型选择

数据集下载地址https://www.nuscenes.org/download在这里插入图片描述
数据集类型一共有以上六种,从上到下分别是图片数据集/激光雷达数据集/CAN数据集/地图数据集/完整数据集/先前的作广告的数据集(已弃用)
在这里插入图片描述
这里我们只能选择Full dataset,原因会在之后的章节详细说明,作者下载了Mini版本,图中高亮的部分,点击Asia即可下载,下载速度较慢,建议复制下载链接使用迅雷下载。
如果需要大量训练集,则使用Trainval,需要下载MetaData和Camera blobs only for part 1,后面的part也可以下载,下载方式相同,都是点击后面的Asia。

2. nuscenes数据集转COCO格式

2.1 3D标注框转2D

nuscenes数据集采用的是三维框标注的数据集,故需要将3D标注框转化为2D格式。
使用官方工具nuscenes-devkthttps://github.com/nutonomy/nuscenes-devkit
克隆下来

cd ~
git clone https://github.com/nutonomy/nuscenes-devkit

找到export_2d_annotations_as_json.py路径在/nuscenes-devkit/python-sdk/nuscenes/scripts/export_2d_annotations_as_json.py
该文件有以下5种选项,分别是--dataroot/--version/--filename/--visibilities/--image_limit
--dataroot是我们下载的MetaData的路径
--version是我们需要转化的json文件的存放文件夹名
--filename是我们对生成的2D框的json文件的保存名称

    parser.add_argument('--dataroot', type=str, default='/data/sets/nuscenes', help="Path where nuScenes is saved.")
    parser.add_argument('--version', type=str, default='v1.0-trainval', help='Dataset version.')
    parser.add_argument('--filename', type=str, default='image_annotations.json', help='Output filename.')
    parser.add_argument('--visibilities', type=str, default=['', '1', '2', '3', '4'],
                        help='Visibility bins, the higher the number the higher the visibility.', nargs='+')
    parser.add_argument('--image_limit', type=int, default=-1, help='Number of images to process or -1 to process all.')

运行该python文件即可获得2D-box型的json文件,例如,我下载了Mini的数据包,我的MetaData路径是~/nuscenes,该文件下有以下四个文件夹在这里插入图片描述
/nuscenes-devkit/python-sdk/nuscenes/scripts/路径下打开终端,我的命令如下,大家自行修改自己的路径及文件夹名称

python3 export_2d_annotations_as_json.py --dataroot ~/nuscenes --version v1.0-mini --filename 2D-box.json

这样就会在v1.0-mini文件夹下生成一个2D-box.json的文件。
PS:在这里详细说一下为什么下载数据集的时候要选择full dataset而不是nuImages,因为export_2d_annotations_as_json.py程序需要的很多json文件在nuImages数据集中没有包含,所以无法转化成2D框,所以在下载数据集的时候务必下载Full dataset。

2.2 nuscenes 2D格式转为COCO

在github上找到一个nuscenes 2D框转为COCO格式的一个工程https://github.com/AlizadehAli/2D_label_parser

cd ~
git clone https://github.com/AlizadehAli/2D_label_parser

包含labels和target_labels两个文件夹,labels是存放刚刚上一步生成的json文件的,把我们上一步生成的文件放进去,并修改文件名为2D_nuscenes.json放入labels文件夹中
打开查看一下我们的json文件

gedit 2D_nuscenes.json

在这里插入图片描述
这里可以看到box的数据结构,分别是四个角点的像素坐标,从上到下为x1,y1,x2,y2
我们打开label_parser.py,如下可以看到convert这个函数,对应上面box的数据结构可以明显看出xywh的计算是有问题的

def convert(size, box):
    dw = 1./size[0]
    dh = 1./size[1]
    x = (box[0] + box[1])/2.0
    y = (box[2] + box[3])/2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)

将convert函数改为下面的:

def convert(size, box):
    dw = 1./size[0]
    dh = 1./size[1]
    x = (box[0] + box[2])/2.0
    y = (box[1] + box[3])/2.0
    w = box[2] - box[0]
    h = box[3] - box[1]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)

保存
查看代码中的nuscenes_parser函数这里表示了未来yolo训练的类别名称有以下10类,可以根据自己的需要进行修改。

                for idx, name in enumerate(data):
                    if unique_img_names[i] == name['filename']:
                        x, y, w, h = convert((1600, 900), name['bbox_corners'])
                        if 'pedestrian' in name['category_name']:
                            obj_class = 0
                        elif 'bicycle' in name['category_name']:
                            obj_class = 1
                        elif 'motorcycle' in name['category_name']:
                            obj_class = 2
                        elif 'car' in name['category_name']:
                            obj_class = 3
                        elif 'bus' in name['category_name']:
                            obj_class = 4
                        elif 'truck' in name['category_name']:
                            obj_class = 5
                        elif 'emergency' in name['category_name']:
                            obj_class = 6
                        elif 'construction' in name['category_name']:
                            obj_class = 7
                        elif 'movable_object' in name['category_name']:
                            obj_class = 8
                        elif 'bicycle_rack' in name['category_name']:
                            obj_class = 9

                        temp = [str(obj_class), str(x), str(y), str(w), str(h), '\n']
                        L = " "
                        L = L.join(temp)
                        f.writelines(L)

然后查看代码可以看到有以下选项

    parser.add_argument("-dt", "--data_type",
                        default="yolo",
                        help="data type of interest; yolo, bdd, nuscenes")
    parser.add_argument("-l", "--label_dir", default="./labels/",
                        help="root directory of the labels for YOLO json file, Berkeley Deep Drive (BDD) json-file, nuscenes")
    parser.add_argument("-s", "--save_dir", default="./target_labels/",
                        help="path directory to save the the converted label files")
    parser.add_argument("-i", "--image_dir",
                        default=None, required=False,
                        help="path where the images are located to BDD100K, nescenes, etc.")
    parser.add_argument("-o", "--output_dir",
                        default=None, required=False,
                        help="output directory to save the manipulated image files")

然后就是运行该程序,我们数据格式是nuscenes我的运行命令如下,注意save_dir必须包含以下六个文件夹,否则程序会报找不到文件之类的的错误
在这里插入图片描述

python3 label_parser.py -dt nuscenes -s ~/nuscenes/samples/

等待程序运行结束,可能有些会报os之类的一些错误,只要txt成功生成了就没有问题。

2.3 数据集文件名对齐

首先将所有txt文件放在一个新文件夹TXT/中,将所有图片放在一个新文件夹CAM_ALL/中
使用如下程序data.py,比对两个文件夹下的文件名,删除没有标签的图片或者没有图片的标签。

data.py

import xml.dom.minidom
import os
root_path = '/home/hit/nuscenes/'
annotation_path = root_path + 'TXT/'
img_path = root_path + 'CAM_ALL/'
annotation_list = os.listdir(annotation_path)
img_list = os.listdir(img_path)
if len(img_list) != len(annotation_list):
    print("图片和标签数目不匹配")
    if len(img_list) < len(annotation_list):
        print("标签比图片多")
        error_xml = []
        for _ in annotation_list:
            xml_name = _.split('.')[0]
            img_name = xml_name + '.jpg'
            if img_name not in img_list:
                error_xml.append(_)
				os.remove(_)
        print("error xml:", error_xml)
    else:
        print("图片比标签多")
        error_img = []
        for _ in img_list:
            img_name = _.split('.')[0]
            xml_name = img_name + '.txt'
            if xml_name not in annotation_list:
                error_img.append(_)
                os.remove(_)
        print("缺少标签的图片:", error_img)

使用如下命令运行该程序

python3 data.py

运行后查看txt总数与图片总数是否一致,一致就可以放入darknet训练了

3. yolov4训练

首先需要darknet源码https://github.com/AlexeyAB/darknet

git clone https://github.com/AlexeyAB/darknet

然后就是源码的编译,建议查看官方文档或其他博客,此部分不再赘述

然后就是将上述第二步的txt和jpg分别放入训练的指定文件夹,由于我们没有voc格式的xml标签格式,所以无法使用程序自动分配数据集,我们在图片/你的darknet路径/你的训练图片路径/下运行以下命令

ls -R /你的darknet路径/你的训练图片路径/*.jpg > file.txt

这样会生成一个file.txt,将该文件的内容复制到/你的darknet路径/scripts/,将file.txt的文件内容复制到该文件夹下的所有txt文件,如果没有就新建2007_test.txt,2007_train.txt,2007_val.txt,train.all.txt,train.txt这五个文件,并把file.txt文件内容放进去
修改cfg/voc.data中的类别改为10类,修改data/voc.name为上述10类的类名
修改cfg/yolov4.cfg,建议跟随官网修改方式修改https://github.com/AlexeyAB/darknet

启动训练

./darknet detector train cfg/voc.data cfg/yolov4.cfg yolov4.conv.137

至此,yolo训练nuscenes数据集结束

<think>好的,我需要帮用户寻找目标检测数据集的网站汇总。首先,用户提到了几个引用,其中引用[1]和引用[2]是关于特定数据集的专栏,可能来自某个平台,比如优快云或GitHub。但用户现在需要的是更广泛的网站列表,而不仅仅是专栏内的数据集。 我应该先回顾常见的公开数据集平台。比如Kaggle,那里有很多用户上传的数据集,涵盖各种类型的目标检测任务。然后有Google的Open Images Dataset,微软的COCO,这些是学术界常用的基准数据集。PASCAL VOC也是一个经典的数据集,虽然可能比较旧,但仍有参考价值。 接下来,针对工业应用或特定领域的数据集,比如用户提到的红外图像或小目标检测,可能需要更专业的平台。例如,Roboflow提供数据集换和处理工具,方便直接用于训练。此外,GitHub上有许多开源项目会附带数据集,可以通过搜索关键词找到。 还有一些学术机构或竞赛平台提供数据集,比如ImageNet,虽然主要用于分类,但部分数据也可用于目标检测。另外,Waymo Open Dataset专注于自动驾驶领域,包含大量标注数据。nuScenes也是一个类似的自动驾驶数据集。 用户可能还需要知道如何访问这些网站。比如,Kaggle的网址是https://www.kaggle.com/,COCO的官网是http://cocodataset.org/,Roboflow是https://roboflow.com/。需要确保这些链接是正确且可访问的。 另外,用户提到的引用中的数据集可能来自某个特定专栏,比如优快云的某个博主整理的资源,这类平台也是获取数据集的途径之一。但需要提醒用户注意版权和使用许可,确保合法使用数据集。 可能还需要包括政府或研究机构开放的数据,例如NASA的Earthdata或欧盟的Copernicus项目,这些可能涉及遥感或卫星图像,适合特定目标检测任务。不过这可能属于比较专业的领域,用户如果没有特别提到,可能不需要优先列出。 总结一下,我需要整理一个分门别类的网站列表,包括综合平台、学术基准、专业领域资源以及数据处理工具,同时提供简要描述和网址。此外,需要根据用户提供的引用,补充类似专栏或平台的信息,比如工业缺陷检测或红外数据集的专业来源。 最后,生成相关问题,帮助用户深入探索,比如如何选择合适的数据集,如何处理数据格式等。确保回答结构清晰,符合用户的要求,使用正确的中文和LaTeX格式。</think>以下是目标检测数据集的网站汇总及使用建议,涵盖通用数据集和特定应用场景资源: ### 一、通用目标检测数据集平台 1. **Kaggle** - 特点:提供超过5万+公开数据集,支持工业检测、医学影像、自动驾驶等多领域,可直接下载预处理后的数据 - 示例数据集:[Global Wheat Detection](https://www.kaggle.com/c/global-wheat-detection) - 优势:附带社区讨论和代码范例 2. **COCO (Common Objects in Context)** - 包含80类物体标注,超过33万张图像,支持实例分割、关键点检测等任务 - 基准价值:主流模型如YOLO、Faster R-CNN均在此验证性能 $$ \text{mAP}_{COCO} = \frac{1}{N}\sum_{i=1}^{N} AP_i $$ [^1] 3. **Open Images V7** - 谷歌发布的600类物体数据集,包含1.9M训练图像和16M边界框标注 - 特殊标注:层级化标签体系和视觉关系标注 ### 二、垂直领域专用数据集 1. **工业缺陷检测** - [MVTec AD](https://www.mvtec.com/company/research/datasets/mvtec-ad):包含15类工业品表面缺陷数据 - 特点:提供无缺陷样本作为负样本,支持异常检测算法验证 2. **小目标检测** - [VisDrone](https://github.com/VisDrone/VisDrone-Dataset):无人机视角的1万+图像,标注密度达$50.4 \text{ bbox/img}$ - [TinyPerson](https://github.com/ucas-vg/TinyBenchmark):平均目标尺寸小于$20 \times 20$像素[^2] 3. **红外与遥感** - [FLIR ADAS](https://www.flir.com/oem/adas/):热成像数据集含10,000+标注帧 - [DOTA-v2.0](https://captain-whu.github.io/DOTA/dota.html):遥感图像检测数据集,含18类旋框标注 ### 三、数据服务与处理平台 1. **Roboflow** - 提供数据集格式换(支持YOLOCOCO、Pascal VOC等)、增强和版本管理 - 案例:可将COCO格式换为$YOLOv5$所需的`txt`标注格式: ```python # 换命令示例 roboflow convert --format yolo-darknet --dataset-id <dataset_id> ``` 2. **Labelbox** - 支持协作标注与质量验证,提供API接口实现标注流水线自动化 ### 四、学术竞赛数据集 | 平台 | 数据集 | 特点 | |------|--------|------| | [AIZOOTech](https://www.aizoo.com/) | 口罩检测数据集 | 多尺度人脸遮挡场景 | | [Waymo Open Dataset](https://waymo.com/open/) | 自动驾驶数据 | 包含激光雷达与多视角同步数据 |
评论 48
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HIT_Vanni

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值