【问题标题】:How do I retrain SSD object detection model for our own dataset?如何为我们自己的数据集重新训练 SSD 对象检测模型?
【发布时间】:2017-09-15 13:40:18
【问题描述】:

我已经在 tensorflow 中尝试了 SSD 和 YOLO 实现。现在我想为我自己的数据集重新训练这些,比如交通信号。我如何重新训练 ssd 以获取除 pascal voc 之外的数据?有人可以帮忙吗?我正在使用来自 https://github.com/balancap/SSD-Tensorflow

的 tensorflow 实现

【问题讨论】:

  • 是的,刚刚编辑了问题

标签: tensorflow deep-learning object-detection


【解决方案1】:

不具体实现,对于SSD,

  • 由于所有层都是卷积层,因此您需要更改预测层中应用的过滤器数量,因为(根据第 4 页中的论文)输出是作为您要预测的类数的函数给出的:即,对于网络中的任何预测层,对于m*n 特征图,我们期望(c + 4)kmn 输出/预测用于分类和定位; c 是您尝试预测的类数,k 是该特征图中使用的锚点/默认框的数量,mn 是特征图的 2 个维度。
  • 您可能希望根据论文中给出的方程式更改锚点/默认框比例

特定于 SSD-Tensorflow,

  • 您需要确保输入格式与tf.contrib.slim提供的接口匹配。目前 SSD-Tensorflow 仅支持 Pascal VOC 格式。我在调整它以接受其他数据集时遇到了麻烦。您可以查看https://github.com/balancap/SDC-Vehicle-Detection/ 以获取示例 KITTI 接口。 SDC-Vehicle-Detection 存储库与 SSD-Tensorflow 的作者相同,但部分代码库已过时。

【讨论】:

    【解决方案2】:

    您从经过训练的模型中删除全连接层,并添加您自己的全连接层来学习分类。

    基本上,你有这样的东西:

    Image -> Conv1 -> Pool1 -> Conv2 -> Pool2 -> ... -> ConvN -> FC1 -> FC2 -> Softmax
    

    第一部分,Conv 和 Pool 层提取图像特征。分类部分发生在最后一个FC -> FC -> Softmax。要基于此经过训练的模型训练您自己的分类器,请将您自己的全连接层连接到最后一个卷积层,将卷积层设置为不可训练,然后在您的数据集上训练网络。

    说,你要添加3个全连接层和输出层,它会变成这样:

    Image -> Conv1 -> Pool1 -> ... -> ConvN - FC1 -> FC2 -> Softmax
                                            \
                                              MyFC1 -> MyFC2 -> MyFC3 -> MySoftmax
    

    您的分类输出将是 MySoftmax,其中包含您拥有的类数。

    【讨论】:

    • 你说的是图像分类器的迁移学习……我问的是物体检测器……
    猜你喜欢
    • 2017-12-11
    • 2020-12-11
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多