一、前言
训练多类对象检测器。深度学习是一种强大的机器学习技术,可用于训练强大的多类对象检测器,例如 YOLO v2、YOLO v4、SSD 和 Faster R-CNN。此示例使用该函数训练 YOLO v2 多类室内对象检测器。经过训练的物体检测器能够检测和识别多个不同的室内物体。
二、使用预训练检测器执行对象检测
读取包含目标类对象的测试图像并将其显示。
下载并加载预训练的 YOLO v2 对象检测器。使用该函数检测图像中的对象及其标签。通过使用函数在图像上叠加检测到的边界框来可视化预测。
三、加载数据集
此示例使用由 Bishwo Adhikari 创建的室内物体检测数据集。该数据集由从室内场景中收集的 2213 个标记图像组成,包含 7 个类 - 灭火器、椅子、时钟、垃圾桶、屏幕和打印机。每个图像都包含上述类别的一个或多个标记实例。
下载数据集。图像被组织到不同序列的6个文件夹中。通过指定不同的文件夹路径来创建 。文件中提供了注释和数据集拆分。加载与训练、验证和测试拆分对应的注释和索引。请注意,拆分总共包含 2207 张图像,而不是 2213 张图像,因为 6 张图像没有与之关联的标签。将包含标签的图像的索引存储在 中。最后,将 和 .通过使用命令并指定预加载的索引,将组合数据存储拆分为训练数据存储、验证数据存储和测试数据存储。
四、分析数据
首先,使用数据集可视化数据集中的示例图像。
若要测量数据集中类标签的分布,请使用 按类标签计算对象数。按类可视化计数。
此数据集中的类是不平衡的。如果处理不当,这种不平衡可能会对学习过程有害,因为学习偏向于主导阶级。有多种技术用于处理此问题 - 对代表性不足的类进行过采样,修改损失函数和数据增强。您将在后面的部分中将数据增强应用于训练数据。
五、创建 Yolov2 对象检测网络
对于此示例,您将创建一个 YOLO v2 对象检测网络。YOLO v2 对象检测网络由两个子网组成。特征提取网络后跟检测网络。特征提取网络通常是预训练的CNN。此示例使用 ResNet-50 进行特征提取。
首先,指定网络输入大小和类数。选择网络输入大小时,请考虑网络本身所需的最小大小、训练图像的大小以及以所选大小处理数据所产生的计算成本。如果可行,请选择接近训练图像大小且大于网络所需输入大小的网络输入大小。但是,降低图像分辨率会使对象检测器更难检测到较小的对象。要在运行示例的准确性和计算成本之间保持平衡,请将网络输入大小指定为 [450 450 3]。
定义要检测的对象类数。择基础网络和要素提取图层。选择“activation_40_relu”作为要素提取图层,以将“activation_40_relu”后面的图层替换为检测子网。此特征提取层输出的要素图按系数 16 进行下采样。这种下采样量是空间分辨率和提取特征强度之间的良好权衡,因为网络下游提取的特征以空间分辨率为代价编码更强的图像特征。选择最优特征提取层需要实证分析。预处理训练数据以准备训练数据。预处理函数将调整图像和边界框的大小。此外,它还清理边界框以将其转换为有效形状。接下来,使用 estimateAnchorBox 根据训练数据中对象的大小估计两个锚框。选择最佳数量的锚框需要进行实证分析。
使用 yolov2Layers 函数创建 YOLO v2 对象检测网络。
六、数据增强
数据增强用于通过在训练过程中随机转换原始数据来提高网络准确性。通过使用数据增强,您可以向训练数据添加更多种类,而无需实际增加标记训练样本的数量。用于通过以下方式扩充训练数据
显示其中一个训练图像和框标签。
七、训练 YOLOv2 对象检测器
用于指定网络训练选项。