在我的硕士论文中,我正在研究一个特定用例的迁移学习,这是一个交通标志检测器,实现为具有 VGG16 基础网络的单次检测器进行分类。该研究的重点是拥有一个训练有素的检测器并干扰它所训练的交通标志数据集(我采用比利时交通标志检测数据集)但是当它在另一个国家(德国,奥地利)使用检测器时,意大利,西班牙,...)交通标志看起来或多或少不同,这会导致一定的不必要的损失。有关此主题的概述,我会推荐维基百科文章
~~~下一节是关于我的研究问题~~~
所以在新国家有几个交通标志的例子,是不是更好
- 微调网络
- 迁移学习网络并冻结一些卷积层
- (作为比较)从零开始学习新的国家
即使是第一个检测器(在综合比利时数据集上从头开始训练的检测器),它是否有任何优势,从已发布的模型 Zoos(例如 VGG16/COCO)加载预训练的权重,然后基于此进行微调/迁移学习?
现在我在这里问什么: 我不是自己实现了我的检测器,而是基于到 Keras/Tensorflow 的原始 SSD 端口(从这里)并且已经用不同的变体训练了它(比利时从头开始,用 MS COCO 预训练,转移到德国,卷积冻结,微调到德国),经过数周的训练,现在我可以说,比利时从头开始具有随机权重的收敛速度最快(仅 40 epochs/2 天后,我的自定义 SSD 损失函数下降到一个值3)虽然所有其他变化都需要更多时间,但更多的时期和损失永远不会低于 9 的值。
我还发现了使用 VGG16 进行交通标志分类的预训练权重,我认为这应该是关于这个主题的迁移学习的理想基础,但是这个检测器是迄今为止表现最差的(损失停滞在 11,即使学习率发生变化并且在 100 之后时代它过度拟合)。
看来,这些检测器的迁移学习或微调根本没有任何优势。很可能我做错了什么,或者我错误地理解了迁移学习的目的(我认为它应该加快学习速度,因为大多数层都是不可训练的,因此没有进行计算)
我不知道这是否是讨论这个话题的合适平台,也许你知道这属于一个 slack 或 gitter 频道。我只是不知道我是否被卡住了,或者我只是在做一些可怕的错误。