做网站能赚钱吗,中国对外贸易网,怎么在百度上发布广告,网站集约化建设解读文章目录 一、VGG-161.1结构组成1.2应用场景1.3简单例子 二、残差网络2.1非残差网络的缺陷2.2梯度消失原因2.3残差网络的优势2.4简单例子 三、常用数据集3.1MNIST3.2Fashion-MNIST数据集3.3CIFAR 10数据集3.4PASCAL VOC数据集3.5MS COCO数据集3.6ImageNet数据集与ILSVRC 一、VG… 文章目录 一、VGG-161.1结构组成1.2应用场景1.3简单例子 二、残差网络2.1非残差网络的缺陷2.2梯度消失原因2.3残差网络的优势2.4简单例子 三、常用数据集3.1MNIST3.2Fashion-MNIST数据集3.3CIFAR 10数据集3.4PASCAL VOC数据集3.5MS COCO数据集3.6ImageNet数据集与ILSVRC 一、VGG-16
VGG-16 是一种由牛津大学的 Visual Geometry Group (VGG) 提出的卷积神经网络CNN架构。它以其简单性和在图像分类任务中的有效性而闻名。“16” 表示网络中总共的权重层数包括 13 个卷积层和 3 个全连接层。
1.1结构组成
VGG-16 由一系列卷积层和接着的最大池化层组成最后是三个全连接层。 ![[Pasted image 20240408160826.png]]
![[Pasted image 20240408160914.png]]
卷积层
VGG-16 中的卷积层使用 3x3 的滤波器并且步幅为 1它们使用 ‘same’ 填充以确保输入和输出的空间维度保持不变。
最大池化
在每个卷积层块之后VGG-16 使用最大池化层其滤波器大小为 2x2步幅为 2。这有助于减小特征图的空间维度同时保留最重要的信息。
激活函数
在整个网络中除了输出层外每个卷积层和全连接层后都使用修正线性单元ReLU激活函数对于多类别分类任务输出层通常使用 softmax。 全连接层VGG-16 的最后三层是全连接层。前两个全连接层各有 4096 个单元然后是一个具有 1000 个单元的全连接层这通常是 ImageNet 数据集的输出层因为 VGG-16 最初是在 ImageNet 上进行图像分类训练的。 Dropout 为了防止过拟合在前两个全连接层之后应用了 dropout 正则化丢弃概率为 0.5。
1.2应用场景
VGG-16 在计算机视觉领域有许多应用场景其中包括但不限于以下几个方面 图像分类最初VGG-16 是设计用于图像分类任务的。它在 ImageNet 数据集上进行了训练并且在该任务上表现出色。因此它可以应用于各种需要对图像进行分类的场景如物体识别、动物识别、植物分类等。 特征提取VGG-16 的卷积部分可以用作特征提取器。通过移除全连接层并仅使用卷积和池化层可以将其作为预训练模型应用于其他计算机视觉任务例如目标检测、图像分割等。在这种情况下卷积部分的特征提取能力是其主要价值所在。 图像风格转换VGG-16 在图像风格转换任务中也有应用。通过将其作为特征提取器并将输入图像和目标风格图像的特征表示之间的差异最小化可以生成具有目标风格的图像。 图像检索VGG-16 的特征表示可以用于图像检索任务。通过将图像转换为其在 VGG-16 中的特征向量并计算这些特征向量之间的相似性可以实现图像检索找到与给定查询图像相似的图像。 医学影像分析在医学影像分析领域VGG-16 可以用于诊断支持、疾病检测和分割等任务。例如它可以用于识别 X 射线图像中的疾病迹象或者对病理切片图像进行细胞分类。
1.3简单例子
import tensorflow as tf
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.models import Model def VGG_16(input_shape(224, 224, 3), num_classes1000): # 输入层 inputs Input(shapeinput_shape) # 第一组卷积层包括两个卷积层和一个最大池化层 x Conv2D(64, (3, 3), activationrelu, paddingsame)(inputs) x Conv2D(64, (3, 3), activationrelu, paddingsame)(x) x MaxPooling2D((2, 2), strides(2, 2))(x) # 第二组卷积层 x Conv2D(128, (3, 3), activationrelu, paddingsame)(x) x Conv2D(128, (3, 3), activationrelu, paddingsame)(x) x MaxPooling2D((2, 2), strides(2, 2))(x) # 第三组卷积层 x Conv2D(256, (3, 3), activationrelu, paddingsame)(x) x Conv2D(256, (3, 3), activationrelu, paddingsame)(x) x Conv2D(256, (3, 3), activationrelu, paddingsame)(x) x MaxPooling2D((2, 2), strides(2, 2))(x) # 第四组卷积层 x Conv2D(512, (3, 3), activationrelu, paddingsame)(x) x Conv2D(512, (3, 3), activationrelu, paddingsame)(x) x Conv2D(512, (3, 3), activationrelu, paddingsame)(x) x MaxPooling2D((2, 2), strides(2, 2))(x) # 第五组卷积层 x Conv2D(512, (3, 3), activationrelu, paddingsame)(x) x Conv2D(512, (3, 3), activationrelu, paddingsame)(x) x Conv2D(512, (3, 3), activationrelu, paddingsame)(x) x MaxPooling2D((2, 2), strides(2, 2))(x) # 全连接层 x Flatten()(x) x Dense(4096, activationrelu)(x) x Dropout(0.5)(x) x Dense(4096, activationrelu)(x) x Dropout(0.5)(x) outputs Dense(num_classes, activationsoftmax)(x) # 创建模型 model Model(inputs, outputs, nameVGG-16) return model # 创建 VGG-16 模型
vgg16_model VGG_16() # 打印模型摘要
vgg16_model.summary()输出结果
Model: VGG-16
_________________________________________________________________Layer (type) Output Shape Param #
input_1 (InputLayer) [(None, 224, 224, 3)] 0 conv2d (Conv2D) (None, 224, 224, 64) 1792 conv2d_1 (Conv2D) (None, 224, 224, 64) 36928 max_pooling2d (MaxPooling2 (None, 112, 112, 64) 0 D) conv2d_2 (Conv2D) (None, 112, 112, 128) 73856 conv2d_3 (Conv2D) (None, 112, 112, 128) 147584 max_pooling2d_1 (MaxPoolin (None, 56, 56, 128) 0 g2D) conv2d_4 (Conv2D) (None, 56, 56, 256) 295168 conv2d_5 (Conv2D) (None, 56, 56, 256) 590080 conv2d_6 (Conv2D) (None, 56, 56, 256) 590080 max_pooling2d_2 (MaxPoolin (None, 28, 28, 256) 0 g2D) conv2d_7 (Conv2D) (None, 28, 28, 512) 1180160 conv2d_8 (Conv2D) (None, 28, 28, 512) 2359808 conv2d_9 (Conv2D) (None, 28, 28, 512) 2359808 max_pooling2d_3 (MaxPoolin (None, 14, 14, 512) 0 g2D) conv2d_10 (Conv2D) (None, 14, 14, 512) 2359808 conv2d_11 (Conv2D) (None, 14, 14, 512) 2359808 conv2d_12 (Conv2D) (None, 14, 14, 512) 2359808 max_pooling2d_4 (MaxPoolin (None, 7, 7, 512) 0 g2D) flatten (Flatten) (None, 25088) 0 dense (Dense) (None, 4096) 102764544 dropout (Dropout) (None, 4096) 0 dense_1 (Dense) (None, 4096) 16781312 dropout_1 (Dropout) (None, 4096) 0 dense_2 (Dense) (None, 1000) 4097000
Total params: 138357544 (527.79 MB)
Trainable params: 138357544 (527.79 MB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________Process finished with exit code 0二、残差网络
2.1非残差网络的缺陷
![[Pasted image 20240408162627.png]]
非残差网络例如传统的卷积神经网络如VGG、LeNet等虽然在一定程度上取得了成功但也存在一些缺陷这些缺陷可能在一定程度上限制了它们的性能和应用范围。以下是一些非残差网络的缺陷 梯度消失和梯度爆炸在非残差网络中随着网络层数的增加反向传播过程中容易出现梯度消失或梯度爆炸的问题。这可能导致训练过程变得困难甚至导致模型无法收敛。 难以训练深层网络由于梯度消失和梯度爆炸问题非残差网络在训练深层网络时会遇到困难。更深的网络需要更多的层来提取抽象特征但非残差网络的性能在深层网络中可能会下降因为梯度传播的效果变得更加不稳定。 网络性能饱和随着网络层数的增加非残差网络的性能可能会饱和或下降而不是继续提高。这意味着增加网络深度不能简单地提高性能而可能需要采取其他方法来改进网络结构。 特征传递限制在非残差网络中特征必须逐层传递没有直接的路径可以将低层特征直接传递到高层。这可能会导致信息的丢失或模糊化使得网络难以捕捉不同层次的语义信息。 参数浪费非残差网络中由于特征无法直接传递每一层都需要学习如何从前一层的输出中提取有用的特征。这可能导致参数的冗余和浪费因为一些层可能会学习到与前一层类似的特征从而增加了训练的复杂性和计算成本。
2.2梯度消失原因
梯度消失是深度神经网络训练过程中的一种常见问题主要原因可以归结为以下几点 激活函数的饱和性深度神经网络通常使用的激活函数如Sigmoid、Tanh在输入值较大或较小时会饱和导致梯度接近于零。在反向传播过程中这些饱和的激活函数会使得梯度在传播过程中逐渐变小最终消失。 网络结构和参数初始化深度神经网络的结构和参数初始化也可能导致梯度消失。如果网络的权重初始化不合适那么在反向传播过程中梯度可能会在层与层之间逐渐减小导致梯度消失。 链式求导的乘积效应在深度网络中梯度是通过链式求导来计算的。由于每个节点都涉及到梯度的乘积这可能会导致乘积效应使得梯度在传播过程中逐渐减小最终消失。 不适当的优化器和学习率使用不适当的优化器或学习率可能导致梯度消失。例如如果学习率设置过大可能会导致梯度爆炸而如果学习率设置过小可能会导致梯度消失。 长期依赖性问题在循环神经网络RNN等网络中长期依赖性问题也可能导致梯度消失。当网络需要学习长时间序列的依赖关系时梯度在反向传播过程中可能会逐渐消失导致网络难以捕捉到长期的依赖关系。
2.3残差网络的优势
残差网络通过引入残差连接有效地解决了传统非残差网络在训练深度网络时所面临的梯度消失和梯度爆炸等问题提高了网络的性能、泛化能力和训练效率。这些优势使得残差网络成为深度学习领域中广泛应用的重要模型之一。
解决梯度消失和梯度爆炸问题
通过引入残差连接skip connections残差网络允许信息在网络中跳跃传递。这样的设计使得梯度能够更轻松地反向传播到较浅的层从而缓解了梯度消失和梯度爆炸问题有助于训练更深的网络。
易于优化和训练
由于残差网络的梯度更容易传播训练深度网络变得更加简单和高效。这使得可以更容易地训练出准确性能更好的模型同时减少了调参的复杂性。
提高网络性能
通过增加网络的深度残差网络能够提高网络的表征能力。相较于同样深度的非残差网络残差网络能够更有效地提取和学习复杂的特征从而提高了模型的性能和泛化能力。
减少参数数量
残差连接允许直接跳跃传递特征这种机制减少了需要学习的参数数量。相对于非残差网络残差网络通常具有更少的参数量从而减少了过拟合的风险并且使得训练和推理速度更快。
提高梯度传播的稳定性
残差连接允许梯度直接反向传播到浅层使得梯度传播更加稳定。这有助于减少梯度在网络中的消失或爆炸从而使得训练更加稳定和可靠。
2.4简单例子
这段代码实现了一个简化的 ResNet 模型其中包含了基本的残差块构建了一个包含5个阶段的网络。每个阶段包含若干个残差块用于提取不同层次的特征。最后通过全局平均池化和全连接层进行分类。
import tensorflow as tf
from tensorflow.keras.layers import Input, Conv2D, BatchNormalization, Activation, Add, MaxPooling2D, AveragePooling2D, \ Flatten, Dense
from tensorflow.keras.models import Model def residual_block(x, filters, kernel_size(3, 3), strides(1, 1), activationrelu): y Conv2D(filters, kernel_sizekernel_size, stridesstrides, paddingsame)(x) y BatchNormalization()(y) y Activation(activation)(y) y Conv2D(filters, kernel_sizekernel_size, strides(1, 1), paddingsame)(y) y BatchNormalization()(y) if strides ! (1, 1) or x.shape[-1] ! filters: x Conv2D(filters, kernel_size(1, 1), stridesstrides, paddingsame)(x) out Add()([x, y]) out Activation(activation)(out) return out def ResNet(input_shape(224, 224, 3), num_classes1000): inputs Input(shapeinput_shape) # Conv1 x Conv2D(64, kernel_size(7, 7), strides(2, 2), paddingsame)(inputs) x BatchNormalization()(x) x Activation(relu)(x) x MaxPooling2D(pool_size(3, 3), strides(2, 2), paddingsame)(x) # Conv2_x x residual_block(x, filters64) x residual_block(x, filters64) # Conv3_x x residual_block(x, filters128, strides(2, 2)) x residual_block(x, filters128) # Conv4_x x residual_block(x, filters256, strides(2, 2)) x residual_block(x, filters256) # Conv5_x x residual_block(x, filters512, strides(2, 2)) x residual_block(x, filters512) x AveragePooling2D(pool_size(7, 7))(x) x Flatten()(x) outputs Dense(num_classes, activationsoftmax)(x) model Model(inputs, outputs, nameResNet) return model # Create ResNet model
resnet_model ResNet() # Print model summary
resnet_model.summary()输出结果
Model: ResNet
__________________________________________________________________________________________________Layer (type) Output Shape Param # Connected to
input_1 (InputLayer) [(None, 224, 224, 3)] 0 [] conv2d (Conv2D) (None, 112, 112, 64) 9472 [input_1[0][0]] batch_normalization (Batch (None, 112, 112, 64) 256 [conv2d[0][0]] Normalization) activation (Activation) (None, 112, 112, 64) 0 [batch_normalization[0][0]] max_pooling2d (MaxPooling2 (None, 56, 56, 64) 0 [activation[0][0]] D) conv2d_1 (Conv2D) (None, 56, 56, 64) 36928 [max_pooling2d[0][0]] batch_normalization_1 (Bat (None, 56, 56, 64) 256 [conv2d_1[0][0]] chNormalization) activation_1 (Activation) (None, 56, 56, 64) 0 [batch_normalization_1[0][0]] conv2d_2 (Conv2D) (None, 56, 56, 64) 36928 [activation_1[0][0]] batch_normalization_2 (Bat (None, 56, 56, 64) 256 [conv2d_2[0][0]] chNormalization) add (Add) (None, 56, 56, 64) 0 [max_pooling2d[0][0], batch_normalization_2[0][0]] activation_2 (Activation) (None, 56, 56, 64) 0 [add[0][0]] conv2d_3 (Conv2D) (None, 56, 56, 64) 36928 [activation_2[0][0]] batch_normalization_3 (Bat (None, 56, 56, 64) 256 [conv2d_3[0][0]] chNormalization) activation_3 (Activation) (None, 56, 56, 64) 0 [batch_normalization_3[0][0]] conv2d_4 (Conv2D) (None, 56, 56, 64) 36928 [activation_3[0][0]] batch_normalization_4 (Bat (None, 56, 56, 64) 256 [conv2d_4[0][0]] chNormalization) add_1 (Add) (None, 56, 56, 64) 0 [activation_2[0][0], batch_normalization_4[0][0]] activation_4 (Activation) (None, 56, 56, 64) 0 [add_1[0][0]] conv2d_5 (Conv2D) (None, 28, 28, 128) 73856 [activation_4[0][0]] batch_normalization_5 (Bat (None, 28, 28, 128) 512 [conv2d_5[0][0]] chNormalization) activation_5 (Activation) (None, 28, 28, 128) 0 [batch_normalization_5[0][0]] conv2d_6 (Conv2D) (None, 28, 28, 128) 147584 [activation_5[0][0]] conv2d_7 (Conv2D) (None, 28, 28, 128) 8320 [activation_4[0][0]] batch_normalization_6 (Bat (None, 28, 28, 128) 512 [conv2d_6[0][0]] chNormalization) add_2 (Add) (None, 28, 28, 128) 0 [conv2d_7[0][0], batch_normalization_6[0][0]] activation_6 (Activation) (None, 28, 28, 128) 0 [add_2[0][0]] conv2d_8 (Conv2D) (None, 28, 28, 128) 147584 [activation_6[0][0]] batch_normalization_7 (Bat (None, 28, 28, 128) 512 [conv2d_8[0][0]] chNormalization) activation_7 (Activation) (None, 28, 28, 128) 0 [batch_normalization_7[0][0]] conv2d_9 (Conv2D) (None, 28, 28, 128) 147584 [activation_7[0][0]] batch_normalization_8 (Bat (None, 28, 28, 128) 512 [conv2d_9[0][0]] chNormalization) add_3 (Add) (None, 28, 28, 128) 0 [activation_6[0][0], batch_normalization_8[0][0]] activation_8 (Activation) (None, 28, 28, 128) 0 [add_3[0][0]] conv2d_10 (Conv2D) (None, 14, 14, 256) 295168 [activation_8[0][0]] batch_normalization_9 (Bat (None, 14, 14, 256) 1024 [conv2d_10[0][0]] chNormalization) activation_9 (Activation) (None, 14, 14, 256) 0 [batch_normalization_9[0][0]] conv2d_11 (Conv2D) (None, 14, 14, 256) 590080 [activation_9[0][0]] conv2d_12 (Conv2D) (None, 14, 14, 256) 33024 [activation_8[0][0]] batch_normalization_10 (Ba (None, 14, 14, 256) 1024 [conv2d_11[0][0]] tchNormalization) add_4 (Add) (None, 14, 14, 256) 0 [conv2d_12[0][0], batch_normalization_10[0][0]] activation_10 (Activation) (None, 14, 14, 256) 0 [add_4[0][0]] conv2d_13 (Conv2D) (None, 14, 14, 256) 590080 [activation_10[0][0]] batch_normalization_11 (Ba (None, 14, 14, 256) 1024 [conv2d_13[0][0]] tchNormalization) activation_11 (Activation) (None, 14, 14, 256) 0 [batch_normalization_11[0][0]] conv2d_14 (Conv2D) (None, 14, 14, 256) 590080 [activation_11[0][0]] batch_normalization_12 (Ba (None, 14, 14, 256) 1024 [conv2d_14[0][0]] tchNormalization) add_5 (Add) (None, 14, 14, 256) 0 [activation_10[0][0], batch_normalization_12[0][0]] activation_12 (Activation) (None, 14, 14, 256) 0 [add_5[0][0]] conv2d_15 (Conv2D) (None, 7, 7, 512) 1180160 [activation_12[0][0]] batch_normalization_13 (Ba (None, 7, 7, 512) 2048 [conv2d_15[0][0]] tchNormalization) activation_13 (Activation) (None, 7, 7, 512) 0 [batch_normalization_13[0][0]] conv2d_16 (Conv2D) (None, 7, 7, 512) 2359808 [activation_13[0][0]] conv2d_17 (Conv2D) (None, 7, 7, 512) 131584 [activation_12[0][0]] batch_normalization_14 (Ba (None, 7, 7, 512) 2048 [conv2d_16[0][0]] tchNormalization) add_6 (Add) (None, 7, 7, 512) 0 [conv2d_17[0][0], batch_normalization_14[0][0]] activation_14 (Activation) (None, 7, 7, 512) 0 [add_6[0][0]] conv2d_18 (Conv2D) (None, 7, 7, 512) 2359808 [activation_14[0][0]] batch_normalization_15 (Ba (None, 7, 7, 512) 2048 [conv2d_18[0][0]] tchNormalization) activation_15 (Activation) (None, 7, 7, 512) 0 [batch_normalization_15[0][0]] conv2d_19 (Conv2D) (None, 7, 7, 512) 2359808 [activation_15[0][0]] batch_normalization_16 (Ba (None, 7, 7, 512) 2048 [conv2d_19[0][0]] tchNormalization) add_7 (Add) (None, 7, 7, 512) 0 [activation_14[0][0], batch_normalization_16[0][0]] activation_16 (Activation) (None, 7, 7, 512) 0 [add_7[0][0]] average_pooling2d (Average (None, 1, 1, 512) 0 [activation_16[0][0]] Pooling2D) flatten (Flatten) (None, 512) 0 [average_pooling2d[0][0]] dense (Dense) (None, 1000) 513000 [flatten[0][0]]
Total params: 11700328 (44.63 MB)
Trainable params: 11692520 (44.60 MB)
Non-trainable params: 7808 (30.50 KB)
__________________________________________________________________________________________________Process finished with exit code 0三、常用数据集
3.1MNIST MNIST数据集是一个常用的手写数字识别数据集它包含了来自250个不同人手写的0到9的数字图片。每张图片都是灰度图像尺寸为28x28像素。 原始的 MNIST 数据库一共包含下面 4 个文件 ![[Pasted image 20240408171823.png]] 在Python中可以使用TensorFlow或者其他深度学习框架来加载MNIST数据集。以下是使用TensorFlow加载MNIST数据集的示例代码
import tensorflow as tf# 加载MNIST数据集
mnist tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) mnist.load_data()# 对数据进行归一化
x_train, x_test x_train / 255.0, x_test / 255.0# 输出训练集和测试集的大小
print(训练集大小:, x_train.shape, y_train.shape)
print(测试集大小:, x_test.shape, y_test.shape)
3.2Fashion-MNIST数据集
FashionMNIST 是一个替代 MNIST 手写数字集 的图像数据集。 它是由 Zalando旗下的研究部门提供涵盖了来自 10 种类别的 共 7 万个不同商品的正面图片。FashionMNIST 的大小、格式和训练集/测试集划分与原始的 MNIST 完全一致。60000/10000 的训练测试数据划分28x28 的灰度图片。你可以直接用它来测试你的机器学习和深度学习 算法性能且不需要改动任何的代码。
import tensorflow as tf# 加载Fashion-MNIST数据集
fashion_mnist tf.keras.datasets.fashion_mnist
(x_train, y_train), (x_test, y_test) fashion_mnist.load_data()# 对数据进行归一化
x_train, x_test x_train / 255.0, x_test / 255.0# 输出训练集和测试集的大小
print(训练集大小:, x_train.shape, y_train.shape)
print(测试集大小:, x_test.shape, y_test.shape)
3.3CIFAR 10数据集
CIFAR-10数据集由10个类的60000个32x32彩色图像组成每 个类有6000个图像。有50000个训练图像和10000个测试图像数据集分为五个训练批次和一个测试批次每个批次有10000 个图像。测试批次包含来自每个类别的恰好1000个随机选择的 图像
import tensorflow as tf# 加载CIFAR-10数据集
cifar10 tf.keras.datasets.cifar10
(x_train, y_train), (x_test, y_test) cifar10.load_data()# 对数据进行归一化
x_train, x_test x_train / 255.0, x_test / 255.0# 输出训练集和测试集的大小
print(训练集大小:, x_train.shape, y_train.shape)
print(测试集大小:, x_test.shape, y_test.shape)3.4PASCAL VOC数据集
PASCAL VOCVisual Object Classes数据集是一个用于目标检测、图像分割和图像分类的经典数据集之一。它包含了大量的图像每个图像都标注了多个对象的位置和类别信息。PASCAL VOC数据集最初用于PASCAL VOC挑战赛该挑战赛旨在推动计算机视觉领域的发展。PASCAL VOC数据集包含了20个不同的类别包括人、动物、车辆、家具等。每个图像都标注了对象的边界框和类别标签。该数据集通常用于训练和评估目标检测和图像分割模型。
import tensorflow as tf
import tensorflow_datasets as tfds# 加载PASCAL VOC数据集
dataset, info tfds.load(voc/2007, splittrain, with_infoTrue)# 打印数据集信息
print(info)# 显示数据集中的前几个示例
for example in dataset.take(5):image, label example[image], example[objects][label]print(Image shape:, image.shape)print(Labels:, label)
3.5MS COCO数据集 PASCAL的全称是Microsoft Common Objects in Context起源 于微软于2014年出资标注的Microsoft COCO数据集 数据集以scene understanding为目标主要从复杂的日常场景中 截取 包含目标分类(识别)、检测、分割、语义标注等数据集 ImageNet竞赛停办后COCO竞赛就成为是当前目标识别、检 测等领域的一个最权威、最重要的标杆 官网http://cocodataset.org 提供的标注类别有80 类有超过33 万张图片其中20 万张有 标注整个数据集中个体的数目超过150 万个。 人1类交通工具8类自行车汽车等公路常见5类信号灯停车标志等动物10类猫狗等携带物品5类背包雨伞等运动器材10类飞盘滑雪板网球拍等。厨房餐具7类瓶子勺子等水果及食品10类家庭用品7类椅子、床电视等家庭常见物品17类笔记本鼠标遥控器等
3.6ImageNet数据集与ILSVRC
ImageNet数据集
始于2009年李飞飞与Google的合作 “ImageNet: A Large-Scale Hierarchical Image Database”总图像数据14,197,122总类别数21841带有标记框的图像数1,034,908
ISLVRC 2012子数据集
训练集1,281,167张图片标签类别数1,000验证集50,000张图片标签测试集100,000张图片