【问题标题】:R-CNN: looking for REPO where FC for classification is retrainableR-CNN:寻找用于分类的 FC 可重新训练的 REPO
【发布时间】:2018-04-17 05:31:19
【问题描述】:

出于我的兴趣,我正在研究不同的对象检测算法。 主要参考 Andrej Karpathy 的幻灯片关于对象检测slides here

我想从一些参考开始,特别是一些可以让我直接测试我的数据中提到的一些网络的东西(主要包括汽车和自行车比赛的车载摄像头)。

不幸的是,我已经使用了一些预训练的网络repo forked from JunshengFu one,我稍微调整了 Yolo 以适应我的用例),但分类准确度相当差,我猜因为像一级方程式这样的赛车训练实例并不多。

出于这个原因,我想重新训练网络,这是我发现最多问题的地方:

正确训练一些网络需要硬件(强大的 GPU)或我没有的时间,所以我想知道我是否可以只重新训练网络的某些部分,特别是分类网络以及 如果有任何已经允许这样做的仓库

提前谢谢你

【问题讨论】:

    标签: python image-processing deep-learning conv-neural-network object-detection


    【解决方案1】:

    这称为网络微调或迁移学习。基本上你可以对你找到的任何网络(当然有类似的问题域)这样做,然后根据你拥有的数据量,你要么微调整个网络,要么冻结一些层,只训练最后一层。对于您的情况,您可能需要冻结整个网络,除了最后一个完全连接的层(您实际上将用新的层替换,满足您的类数量),它们执行分类。我不知道你用的是什么库,但是tensorflow有官方的tutorial on transfer-learning。不过还不是很清楚。

    更多用户友好的教程你可以在这里找到一些爱好者:tutorial。在这里您也可以找到代码存储库。您需要的一个更正是作者对整个网络进行了微调,而如果您想冻结某些层,则需要获取可训练变量的列表并删除要冻结的变量并将结果列表传递给优化器(因此他忽略了已删除的变量),如下所示:

    all_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,scope='InceptionResnetV2')
    to_train = all_vars[-6:] // you better specify them by name explicitely, but this still will work
    optimizer = tf.train.AdamOptimizer(lr=0.0001)
    train_op = slim.learning.create_train_op(total_loss,optimizer, variables_to_train=to_train)
    

    此外,TensorFlow 有一个所谓的模型动物园(一组经过训练的模型,您可以将其用于您的目的和迁移学习)。你可以找到它here

    【讨论】:

    • 感谢您的回答,但没有一个段落有帮助:我知道什么是迁移学习,并且我已经使用初始网络(是的,tensorflow)做到了这一点。这里的重点是网络是 Fast R-CNN、Faster R-CNN、Yolo,我没有找到任何可以指导我重新训练全连接网络以进行区域标记的存储库。无论如何,感谢您为我的问题提供更多背景信息:)
    猜你喜欢
    • 1970-01-01
    • 2021-04-26
    • 2021-06-16
    • 2018-08-21
    • 2020-10-05
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2016-01-11
    相关资源
    最近更新 更多