我将使用Google Detection API的SSD模型来检测小对象(如图片中的排球)。
我想更改配置文件中的以下参数(纵横比、比例等):
anchor_generator {
ssd_anchor_generator {
num_layers: 6
min_scale: 0.2
max_scale: 0.95
aspect_ratios: 1.0
aspect_ratios: 2.0
aspect_ratios: 0.5
aspect_ratios: 3.0
aspect_ratios: 0.3333
我有三个问题:
- 修改这些参数(比例、纵横比等)时,我是否需要重新训练模型?或者在修改后,我仍然可以使用预先训练的模型并对数据进行微调?
- 由于我想要检测的对象与图像大小相比都很小,增加或减少mobilenet中的conv图层数量是否会提高(速度或准确度)检测?如果是,我可以在哪个文件中应用这些更改?
- 有没有什么具体的方法来修改SSD移动网络探测器,使其更好地检测小物体?例如,我知道一个4X4的特征Map(网格)对于我的物体来说太大了,有没有什么方法可以删除粗网格,只保留细网格(如8X8)?
谢谢你。
2条答案
按热度按时间kx5bkwkv1#
问:对于修改这些参数(比例、长宽比等),我是否需要重新训练模型?或者在这些修改之后,我仍然可以使用预先训练的模型并对我的数据进行微调?
是的,你需要重新训练你的模型,因为网络被训练来寻找特定长宽比的排球,但是你可以重新训练现有的网络,而不是使用一个新的。
问:由于我想要检测的对象与图像大小相比都很小,增加或减少mobilenet中的转换层数量是否会提高(速度或准确度)检测?如果是,我可以在哪个文件中应用这些更改?
通常情况下,您需要的网络大小接近最小,但仍能产生合理的精度,但我不确定tensorflow 是否允许设置图像重采样限制,因为在图像的大小下,您可能会将排球从图像中完全重采样出来。训练是任何神经网络中最慢的部分,运行检测查询对性能没有太大影响。
问:有没有什么具体的方法来修改SSD移动网络探测器,使其更好地检测小物体?例如,我知道一个4X4的特征Map(网格)对于我的物体来说太大了,有没有办法删除粗网格,只保留细网格(如8X8)?
如前所述,重采样是很重要的设置,但我不知道是否可能。也许这可能是规模参数。
lrl1mhuk2#
我建议您首先使用以下教程来提高此网络系列的性能:https://github.com/tensorflow/models/blob/master/research/object_detection/colab_tutorials/generate_ssd_anchor_box_aspect_ratios_using_k_means_clustering.ipynb .
如果你在TF 1中需要它,告诉我我可以发送给你。
问题是,您必须修改网络本身并知道要做什么。在ssd_mobilenet_v2_feature_extractor.py中,第110-114行可能会很有趣,在这里您可以说何时(哪一层)开始检测。另一个与自定义ssd锚点相关的有用信息是multiple_grid_anchor_generator.py第328-329行,因为通常配置文件说ssd是6层,我链接的教程将生成6个自定义ssd锚(阅读教程的详细解释),但Python脚本限制它,所以3...