了解如何训练YOLO

内森

我想了解YOLO(v2)的训练方法。为此,我正在使用此keras实现https://github.com/experiencor/keras-yolo2在VOC数据集上从头开始训练YOLO(我对其他实现持开放态度,但我从未使用pytorch,因此, keras实现将是首选)。

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

2-我对1)中所述的理解正确吗?

提前致谢

路易·拉克

您有两种选择:

  • 对整个检测器(后端+前端,即分类网络+检测器)使用预先训练的权重。
  • 将训练后的权重仅用于后端。

在您提供的链接上,所有内容均https://github.com/experiencor/keras-yolo2#2-edit-the-configuration-file中进行了说明

在代码中,这里完成了整个模型的预训练权重的加载它是可选的。

后端的预训练权重是强制性的(根据教程),在代码中是在此处完成的(例如完整的Yolo)。请注意,按照教程或文件开头所述,在创建模型之前,您应该已经下载了后端权重

编辑1

如果您更改了类别数,则随着分类向量大小的变化,检测器部分(前端)中的过滤器数也会发生变化。但是,即使类数发生变化,后端(特征提取器,即主干)也保持不变。

您可以使用与骨干网大小相匹配的任何预训练权重,但是对于整个网络,如果类数变化,您将无法使用。例如,您不能将Racoon的重量用于猫狗探测器。

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

如果您有足够的训练数据,最好只使用骨干预先训练的权重。

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

编辑2

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

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

在像Yolo这样的单发物体检测器中,将整个网络视为两个网络的链更重要:骨干网检测器这种表示允许更通用的构造和更广泛的调优(即,使用性能更高的主干或轻量级的主干)。

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

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

一般在最后输出层信道的数量应该是numberOfClasses + 4其中numberOfClasses包括背景类和其中数字4代表的边界框的四个坐标。此示例已简化很多,建议您阅读Yolo论文以更好地了解网络结构。

看来探测器网络中只有一个可训练层(此处为2D转换)。请注意,输出的大小受类数限制:self.nb_box * (4 + 1 + self.nb_class)

然后用随机分布初始化该层参数。

关于您的最后一个问题,我认为您应该正确地掌握转学的程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用YOLO训练后如何裁剪检测到的物体?

来自分类Dev

了解Perceptron训练算法

来自分类Dev

在Darknet上使用YOLO预训练重量进行训练

来自分类Dev

了解奇怪的YOLO卷积层输出大小

来自分类Dev

Yolo训练:在一幅图像中包含多个对象

来自分类Dev

尝试导出YOLO训练样本时Labelimg崩溃

来自分类Dev

我应该在训练集中存在的所有对象上标记和训练吗(yolo darknet)

来自分类Dev

为什么我们可以在训练后更改Darknet YOLO的输入图像大小?

来自分类Dev

YOLO(Darknet):如何检测整个图像目录?

来自分类Dev

如何转换PASCAL VOC为YOLO

来自分类Dev

如何训练屈臣氏对话服务?

来自分类Dev

如何训练从右到左语言的tesseract

来自分类Dev

如何了解bash的状况?

来自分类Dev

如何了解Spring @ComponentScan

来自分类Dev

了解如何复制数据

来自分类Dev

如何了解Linux版本

来自分类Dev

了解如何编写命令

来自分类Dev

如何从dmesg了解Trace?

来自分类Dev

了解如何使用索引

来自分类Dev

建议如何使用Yolov4训练预训练模型?

来自分类Dev

更快的 RCNN 库如何加载训练数据集进行训练?

来自分类Dev

Tensorflow 训练,如何防止训练节点被删除

来自分类Dev

了解经过训练的神经网络内存使用情况

来自分类Dev

了解如何使用回调

来自分类Dev

如何了解VIPER清洁架构?

来自分类Dev

WinDbg如何了解源代码?

来自分类Dev

了解如何创建流畅的界面

来自分类Dev

了解如何调用WordPress挂钩

来自分类Dev

PHP如何了解Wordpress函数