为了我的兴趣,我正在研究不同的目标检测算法。主要参考资料是Andrej Kar这话的幻灯片 on object 幻灯片在这里 幻灯片在这里。
我想从一些参考开始,特别是允许我直接测试我的数据上提到的一些网络(主要包括车载的汽车和自行车比赛摄像机)。
不幸的是,我已经使用了一些预先训练过的网络 (从JunshengFu one中提取的回购叉,它使Yolo稍微适应了我的用例),,但是分类的准确性很低,我想是因为没有太多的赛车训练实例,比如F1。
出于这个原因,我想对这些网络进行再培训,在这里我发现了最重要的问题:
正确地培训一些网络需要硬件(强大的GPU)或我没有的时间,所以我想知道我是否可以重新培训网络的一部分,特别是分类网络和,如果已经有任何允许的回购。
提前谢谢你
发布于 2017-11-05 16:32:02
这就是所谓的网络微调或转移学习.基本上,您可以为您找到的任何网络(当然有类似的问题域)这样做,然后根据您拥有的数据量,您可以微调整个网络,或者冻结一些层,只对最后的层进行培训。对于您的情况,您可能需要冻结整个网络,除了最后一个完全连接的层(实际上您将用新的层替换,满足您的类数),这些层执行分类。我不知道你使用的是哪个库,但是tensorflow有官方的转移学习教程。不过,还不太清楚。
更多的用户友好的教程,您可以在这里找到一些爱好者:教程。在这里,您也可以找到一个代码存储库。您需要的一个更正是,作者对整个网络执行微调,而如果您想冻结某些层,则需要获得可训练变量的列表,并删除要冻结的变量,并将结果列表传递给优化器(因此,他忽略已删除的vars),如下所示:
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有一个所谓的模型动物园(一群受过训练的模型,你可以用来做你的目的和转移学习)。你可以找到它,这里。
https://stackoverflow.com/questions/47113465
复制相似问题