使用transform_graph进行量化后,Tensorflow SSD-Mobilenet模型精度下降

时间:2017-06-29 18:28:01

标签: tensorflow deep-learning object-detection

我正在研究最近发布的" SSD-Mobilenet"谷歌用于物体检测的模型。 从以下位置下载的型号:https://github.com/tensorflow/models/blob/master/object_detection/g3doc/detection_model_zoo.md

从网站下载的冻结图形文件按预期工作,但在量化后,准确度显着下降(主要是随机预测)。

我从源代码构建了tensorflow r1.2,并使用以下方法进行量化:

bazel-bin / tensorflow / tools / graph_transforms / transform_graph --in_graph = frozen_inference_graph.pb --out_graph = optimized_graph.pb --inputs =' image_tensor' --outputs =' detection_boxes'' detection_scores'' detection_classes'' num_detections' - 转换 =' add_default_attributes strip_unused_nodes(type = float,shape =" 1,224,224,3")fold_constants(ignore_errors = true)fold_batch_norms fold_old_batch_norms quantize_weights strip_unused_nodes sort_by_execution_order'

我在" 转换"中尝试了各种组合。部分,上面提到的变换有时给出了正确的预测,但是没有接近原始模型的地方。

还有其他方法可以改善量化模型的性能吗?

1 个答案:

答案 0 :(得分:3)

在这种情况下,SSD使用 mobilenet 作为功能提取器。为了提高速度。如果您阅读了移动网络文件,它是一个轻量级卷积神经网络,专门使用可分离卷积 inroder来减少参数。

据我所知可分离卷积因信道明智的卷积而丢失信息。

因此,当根据TF实现量化图形时,它产生16位操作并且权重为8位。如果您在TF中阅读用于量化的教程,他们显然已经提到了这个操作更像是在已经训练好的网络中添加一些噪声,希望我们的模型具有很好的概括性。

因此,对于像初始,重新网络等重型模型而言,这将非常好并且几乎无损无误。但是,随着ssd与mobilenet的轻巧和简单,它确实可以使精确度降低。

MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

How to Quantize Neural Networks with TensorFlow