第一章:计算机视觉中图像的基础认知
第二章:计算机视觉:卷积神经网络(CNN)基本概念(一)
第三章:计算机视觉:卷积神经网络(CNN)基本概念(二)
第四章:搭建一个经典的LeNet5神经网络(附代码)
第五章:计算机视觉:神经网络实战之手势识别(附代码)
第六章:计算机视觉:目标检测从简单到容易(附代码)
第七章:MTCNN 人脸检测技术揭秘:原理、实现与实战(附代码)
第八章:探索YOLO技术:目标检测的高效解决方案
第九章:计算机视觉:主流数据集整理
第十章:生成对抗网络(GAN):从概念到代码实践(附代码)
在计算机视觉(CV)领域,数据集的质量和多样性对于推动算法创新和技术进步至关重要。本文整理当前最流行且最具影响力的数据集,涵盖目标检测、图像分类、语义分割、姿态估计等多个关键方向。
一、数据集格式
在计算机视觉领域,数据集的格式对于模型的训练和评估至关重要。不同的任务需要不同的数据集格式,本文介绍分类问题和目标检测问题的数据集格式。
1.1 分类任务数据集格式
分类问题是计算机视觉中最基本的任务之一,旨在识别图像中的主要对象或场景。下面以一个手势分类的例子来展示如何组织分类数据集。
python
gesture/
├── train/
│ ├── zero/
│ │ ├── 1.jpg
│ │ ├── 2.jpg
│ │ └── ...
│ ├── one/
│ │ ├── 1.jpg
│ │ ├── 2.jpg
│ │ └── ...
│ └── ...
├── test/
│ ├── zero/
│ │ ├── 1.jpg
│ │ ├── 2.jpg
│ │ └── ...
│ ├── one/
│ │ ├── 1.jpg
│ │ ├── 2.jpg
│ │ └── ...
│ └── ...
└── ...
在这个结构中
gesture
: 数据集根目录。train & test
: 训练集与测试集文件夹,用于划分数据集以便于模型训练和评估。zero, one
: 类别文件夹,每个类别有自己的文件夹,里面包含该类别的所有图片。
1.2 检测任务数据集格式
目标检测不仅需要识别图像中的对象,还需要精确定位这些对象的位置。这通常涉及到边界框的标注。
python
数据集名字/
├── images/
│ ├── train/
│ │ ├── 1.jpg
│ │ ├── 2.jpg
│ │ └── ...
│ ├── test/
│ │ ├── 1.jpg
│ │ ├── 2.jpg
│ │ └── ...
│ └── ...
├── labels/
│ ├── train/
│ │ ├── 1.txt
│ │ ├── 2.txt
│ │ └── ...
│ ├── test/
│ │ ├── 1.txt
│ │ ├── 2.txt
│ │ └── ...
│ └── ...
└── ...
- images: 包含原始图像的文件夹,分为训练集和测试集。
- labels: 包含对应图像中对象位置信息(如边界框坐标)的文本文件。labels 文件夹包含对应的标签文件。每一行表示一个目标的边界框和类别信息。比如:
1.3 标注工具
LabelImg 是一个常用的标注工具,用于创建目标检测的标签文件,从网络上找了一张LabelImg的使用界面图。
LabelImg标签文件格式
标签文件的每一行表示一个目标的边界框和类别信息,格式如下:
python
<class_id> <x_center> <y_center> <width> <height>
其中:
<class_id>
:目标的类别 ID,从 0 开始。<x_center>
和<y_center>
:边界框中心点的坐标,相对于图像宽度和高度的比例,范围为 0 到 1。<width>
和<height>
:边界框的宽度和高度,相对于图像宽度和高度的比例,范围为 0 到 1。

二、MNIST数据集

MNIST数据集是计算机视觉领域中用于手写数字识别任务的一个经典数据集。它由来自美国国家标准与技术研究所(NIST)的大量手写数字扫描图像组成,经过处理后被广泛应用于机器学习算法尤其是图像分类模型的基准测试。
主要特点
-
规模:
- 包含70,000张28x28像素的灰度手写数字图片。
- 这些图片被划分为60,000张训练图像和10,000张测试图像。
-
内容:
- 图像内容为0到9的手写数字,每个数字都有大量的样本。
- 每个图像都是灰度图,背景为黑色,前景(即手写数字)为白色,并且已经被归一化和平移缩放,以适应28x28像素的框架内。
-
标签:
- 每张图像都有一个对应的标签,表示该图像中的手写数字是什么(从0到9)。
-
用途:
- MNIST常被用来作为初学者入门机器学习的起点,特别是对于那些想要了解或实现图像分类算法的人。
- 它也被用作比较不同算法性能的标准基准之一。
-
格式:
- 数据集通常以二进制格式提供,但也有许多工具可以方便地将其转换为其他格式(如CSV、NumPy数组等),以便于在各种编程环境中使用。
- 在Python中,可以通过
tensorflow
或keras
等库轻松加载MNIST数据集。
使用示例
在Python中使用Keras加载MNIST数据集的例子如下:
python
from tensorflow.keras.datasets import mnist
# 加载MNIST数据集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# 查看数据集的基本信息
print("训练集尺寸:", train_images.shape)
print("训练集标签数量:", len(train_labels))
print("测试集尺寸:", test_images.shape)
print("测试集标签数量:", len(test_labels))
这段代码首先导入了必要的库,然后加载了MNIST数据集,并打印出了训练集和测试集的一些基本信息。这有助于快速上手并开始探索如何构建和训练模型来解决手写数字识别问题。
MNIST数据集由于其相对简单但又具有代表性的特性,成为了机器学习社区中最受欢迎的数据集之一。尽管近年来随着更复杂的数据集如CIFAR-10、ImageNet等的出现,MNIST的重要性有所下降,但它仍然是教育和研究中的一个重要资源,特别适合用于教学目的以及快速原型设计和算法验证。
三、CIFAR-10数据集
CIFAR-10 是计算机视觉领域中一个非常流行的数据集,主要用于图像分类任务。它由Alex Krizhevsky、Vinod Nair和Geoffrey Hinton收集,并被广泛用于训练机器学习算法,尤其是深度学习模型。CIFAR-10 是其系列数据集中的一部分,该系列还包括了如 CIFAR-100 等其他变体。
主要特点
-
规模:
- 包含 60,000 张 32x32 像素的彩色图像。
- 这些图像被划分为 50,000 张训练图像和 10,000 张测试图像。
-
类别:
- 数据集包含 10 个不同的类别:飞机(airplane)、汽车(automobile)、鸟(bird)、猫(cat)、鹿(deer)、狗(dog)、青蛙(frog)、马(horse)、船(ship)和卡车(truck)。
- 每个类别有 6,000 张图像,确保了类别之间的平衡。
-
图像格式:
- 所有图像均为 RGB 彩色图像,尺寸为 32x32 像素,每个像素点由红、绿、蓝三个 8 位颜色通道组成,因此每个图像大小为 32x32x3 = 3,072 字节。
-
用途:
- CIFAR-10 数据集常被用来作为开发、训练和评估图像分类算法的基础,尤其是在卷积神经网络(CNNs)的研究中。
- 它是许多初学者进入深度学习领域的第一步,也是研究人员比较不同模型性能的重要基准之一。
-
挑战性:
- 尽管图像尺寸较小,但由于类间差异有时不明显,以及存在光照变化、遮挡等现实世界中的问题,使得 CIFAR-10 对于机器学习算法来说具有一定的挑战性。
使用示例
在Python中使用Keras加载CIFAR-10数据集的例子如下:
python
from tensorflow.keras.datasets import cifar10
# 加载CIFAR-10数据集
(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()
# 查看数据集的基本信息
print("训练集尺寸:", train_images.shape)
print("训练集标签数量:", len(train_labels))
print("测试集尺寸:", test_images.shape)
print("测试集标签数量:", len(test_labels))
这段代码首先导入了必要的库,然后加载了CIFAR-10数据集,并打印出了训练集和测试集的一些基本信息。这有助于快速上手并开始探索如何构建和训练模型来解决图像分类问题。
四、ImageNet数据集

ImageNet是一个大规模的图像数据库,主要用于训练和评估机器学习模型,特别是那些用于图像分类任务的模型。以下是关于ImageNet数据集的一些关键点:
-
起源与发展:ImageNet项目始于2007年,由李飞飞等人发起,旨在构建一个大规模的、高质量的图像数据集,并通过众包的方式为每个类别标注大量的图片。"众包的方式"意味着项目团队通过在线平台邀请广大网络用户参与图像的分类与标注工作。每个参与者会被分配一定数量的图片,并要求根据指示为这些图片打上相应的标签,即识别出图片中的主要物体属于哪个或哪些类别。
-
规模与内容:截至2010年代中期,ImageNet包含了超过1400万张手工标注的图像,这些图像被分配到了大约21,000个类别中。这些类别覆盖了从动物、植物到人造物品等各种对象。
-
ILSVRC竞赛:ImageNet最著名的应用之一是其关联的年度竞赛------ImageNet大规模视觉识别挑战赛(ILSVRC)。该竞赛自2010年开始举办,吸引了全球的研究人员参与,促进了深度学习技术的发展,尤其是卷积神经网络(CNNs)的进步。
-
对AI领域的影响:由于其庞大的规模和多样性,ImageNet成为了开发和测试新的计算机视觉算法的重要资源。许多现代深度学习模型,包括AlexNet、VGG、ResNet等,在它们的研究初期都是在ImageNet数据集上进行训练和验证的,这大大推动了图像识别技术的发展。
"Classify"模型在ImageNet数据集上预先训练意味着该模型已经在一个广泛且多样化的图像集合上进行了学习,从而获得了强大的泛化能力,这对于解决各种实际问题非常有帮助。ImageNet数据集的配置文件ImageNet.yaml
五、COCO数据集
COCO数据集是一个广泛用于计算机视觉任务,特别是目标检测、分割、关键点检测和图像字幕生成等领域的大型数据集。它由微软资助并由一群研究人员共同创建。以下是样例图片:
主要特点
-
规模:
- COCO 数据集包含超过 33 万张图像。
- 其中有超过 20 万张标注了对象边界框,适用于目标检测任务。
- 约 16 万张图像标注了实例分割,适合于更精细的对象识别任务。
- 还有大约 25 万张图像标注了人物的关键点,可用于人体姿态估计。
-
类别:
- 数据集覆盖了 80 个不同的对象类别,从常见的"人"、"车"到较为具体的"叉子"、"飞盘"等。
- 每个类别都包含了大量实例,确保了模型学习的多样性和鲁棒性。
-
上下文信息:
- 与许多其他数据集不同的是,COCO 强调对象在具体场景中的位置和相互关系,这使得它非常适合研究如何理解和处理复杂的视觉场景。
- 提供了丰富的语义信息,如每张图片的描述性文字(caption),有助于进行图像理解的研究。
-
数据格式:
- 图像通常以高分辨率JPEG格式提供。
- 标注文件采用 JSON 格式,包含了详细的对象边界框、分割掩码、类别标签以及关键点坐标等信息。
-
子集划分:
- 数据集被划分为训练集(train)、验证集(val)和测试集(test)。
- 常用的版本包括
train2017
,val2017
, 和test2017
,这些版本的数据量和用途各有侧重,方便研究人员根据需要选择合适的子集进行实验。
-
应用场景:
- 目标检测:识别图像中所有对象的位置和类型。
- 实例分割:精确地描绘出每个对象的轮廓。
- 关键点检测:定位人体上的特定部位,如眼睛、肩膀等。
- 图像字幕生成:为图像自动生成描述性的文本。
使用示例
在使用COCO数据集进行模型训练或评估时,通常会参考其官方提供的配置文件(如 .yaml
文件),这些文件定义了数据集的位置、类别映射以及其他相关信息。例如,在YOLO框架中,可以这样加载COCO数据集:
python
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.yaml") # 或者加载预训练模型
# Train the model on COCO dataset
results = model.train(data="coco.yaml", epochs=100, imgsz=640)
这里的 "coco.yaml"
是一个配置文件,指定了COCO数据集的具体路径和其他必要的参数。
COCO数据集由于其广泛的覆盖面、详细的标注以及丰富的应用场景支持,成为了计算机视觉领域内最为重要的基准之一。
六、COCO8数据集
COCO8 是一个小型但功能齐全的数据集,专门设计用于测试和调试目的。它是从更大的 COCO(Common Objects in Context)数据集中提取出来的子集,包含来自 COCO train 2017 数据集的前 8 张图像,并分为训练集和验证集。以下是样例图片
主要特点
- 规模:COCO8 包含总共 8 张图像,其中 4 张用于训练,另外 4 张用于验证。
- 用途:这个数据集非常适合用来快速测试新的检测方法、实验不同的模型配置或进行代码调试,因为它足够小,可以迅速处理,同时又足够多样化以揭示潜在的问题。
- 类别:尽管是小规模的数据集,COCO8 保留了原始 COCO 数据集中的丰富类别信息。具体来说,它包含了从 'person' 到 'toothbrush' 的 80 个类别。
- 格式 :遵循 YOLO 所需的标准格式,包括图像文件以及相应的标注文件(通常为
.txt
文件),每个标注文件对应一张图像,并列出所有对象的位置(边界框坐标)和类别标签。 - 下载与使用 :可以通过提供的 YAML 文件 (
coco8.yaml
) 轻松地将其集成到 Ultralytics YOLO 框架中。该 YAML 文件定义了数据集路径、类别名称以及其他相关信息。
示例 YAML 配置 (coco8-seg.yaml
)
yaml
# Ultralytics YOLO , AGPL-3.0 license
# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
path: ../datasets/coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes
names:
0: person
1: bicycle
...
79: toothbrush
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zip
使用场景
由于其小巧的体积,COCO8 特别适合以下情况:
- 快速迭代开发过程中对新想法进行初步验证。
- 在大规模训练之前检查管道是否存在基本错误。
- 教育和学习目的,帮助新手理解如何准备和使用目标检测数据集。
虽然 COCO8 对于最终的产品级模型评估并不适用,但它是一个非常有用的工具,可以帮助研究人员和开发者在投入更多资源之前确保他们的算法和实现是正确的。对于更全面的评估,则需要转向更大规模的数据集,如完整的 COCO 数据集或其他类似的大型数据集合。
持续整理中...