Keras 了解YOLO是如何训练的

Keras 了解YOLO是如何训练的,keras,deep-learning,yolo,Keras,Deep Learning,Yolo,我试图了解尤罗(v2)是如何训练的。为此,我使用这个keras实现在VOC数据集上从头开始训练YOLO(我对其他实现持开放态度,但我从未使用过pytorch,所以keras实现将是首选) 1-据我所知,YLO首先在imageNet上进行分类训练,然后在训练YLO进行回归(检测边界框)时,应在某处使用这些训练权重(用于分类)。在我在互联网上找到的大多数从头开始训练yolo(用于回归)的代码中,我看不到加载这些分类权重的部分。这是什么时候发生的?分类权重何时用于训练yolo回归 2-我的理解是否如1

我试图了解尤罗(v2)是如何训练的。为此,我使用这个keras实现在VOC数据集上从头开始训练YOLO(我对其他实现持开放态度,但我从未使用过pytorch,所以keras实现将是首选)

1-据我所知,YLO首先在imageNet上进行分类训练,然后在训练YLO进行回归(检测边界框)时,应在某处使用这些训练权重(用于分类)。在我在互联网上找到的大多数从头开始训练yolo(用于回归)的代码中,我看不到加载这些分类权重的部分。这是什么时候发生的?分类权重何时用于训练yolo回归

2-我的理解是否如1)所述正确


提前感谢

我将首先回答您问题的第二部分

在标记图像的对象检测中,将生成一个标签文件,其中包含边界框坐标和对象/对象的分类/类别

experiencecor代码中,加载的预训练权重不是分类权重,但它们具有坐标以及转换为权重的每个图像中对象的类名。 获得它们或使用标签文件从头开始训练模型后,将使用图像和包含图像中对象的边界框坐标和类名的相应标签文件对模型进行训练

所以这里分类和回归训练一起进行


如果您有疑问,请随时发表评论,如果回答了您的问题,请打勾。

我将首先回答您问题的第二部分

在标记图像的对象检测中,将生成一个标签文件,其中包含边界框坐标和对象/对象的分类/类别

experiencecor代码中,加载的预训练权重不是分类权重,但它们具有坐标以及转换为权重的每个图像中对象的类名。 获得它们或使用标签文件从头开始训练模型后,将使用图像和包含图像中对象的边界框坐标和类名的相应标签文件对模型进行训练

所以这里分类和回归训练一起进行

如果您有疑问,请随时发表评论,如果回答了您的问题,请打勾。

您有两种选择:

  • 对整个检测器使用预先训练的权重(后端+前端,即分类网络+检测器)
  • 仅对后端使用预先训练的权重
在你给出的链接上,下面将对所有内容进行解释

在代码中,为整个模型加载预训练权重。它是可选的

后端预先训练的权重是强制性的(根据教程),在代码中是这样做的(例如完整的Yolo)。请注意,您应该在创建模型之前下载后端权重,如教程中所述或在本教程开始时所述

编辑1 如果类的数量发生变化,检测器部分(前端)中的过滤器数量将随着分类向量大小的变化而变化。但是,即使类的数量发生变化,后端(特性提取器,即主干)也保持不变

您可以使用预训练的任何与主干大小匹配的预训练权重,但对于整个网络,如果类的数量不同,则不能使用。例如,您不能将浣熊的重量用于狗和猫探测器

您不能使用YoloV2原始权重来初始化此网络,因为Darknet和Keras的格式不同,您首先必须将它们转换为Keras格式

如果你有足够的训练数据,只使用预先训练好的主干重量是可以的

请注意,还有一个称为transfert learning的附加选项。如果您有经过预训练的网络(主干和前端),则可以提取主干权重并使用它们初始化网络主干

编辑2 不,严格来说,前端和后端不是两个独立的网络:它们是两个链式网络。事实上,在大多数深度学习框架中,如PyTorch、Keras或Tensorflow,任何层都可以被视为一个网络(完全连接、卷积、MaxPool等)

“网络”只是一个表示任意复杂数学函数的对象,该函数将输入映射到可以应用自动微分的输出(必须定义正向和反向传播)

在像Yolo这样的单点目标探测器中,将整个网络视为两个网络链更为相关:主干网和探测器。这种表示允许更通用的构造和更广泛的调优(即使用性能更高的主干网或轻量级主干网)

是的,你是对的,边界框回归和标签分类发生在整个网络的最末端,因此在前端

前端可以有任意数量的层,唯一的约束是在其最后一层,该层应考虑特定的通道大小(即给定数量的过滤器),该通道大小始终受要分类的类的数量约束

通常,最后一个输出层中的通道数应为
numberOfClasses+4
,其中
numberOfClasses
包括背景类,其中数字4表示边界框的四个坐标。这个例子简化了很多,我建议你阅读Yolo的论文,以便更好地理解网络结构

在探测器网络中似乎只有一个可训练层(2D Conv)。请注意受数字o约束的输出大小