前段时间做了一个简单的图像分类功能,采用Tensorflow-slim下的InceptionV3、InceptionV4网络模型,现在记录下两者在训练过程中的准确率、训练时间等进行一些比较。
项目地址:https://github.com/MrZhousf/tf-slim-inception
硬件配置如下:
系统:Ubuntu16.04TSL 显卡:GTX1080ti(11GB) x 2 处理器:i7-6800K(12core) 内存:16GB
环境:tensorflow1.8 + python2.7
训练数据:flowers
共5类:daisy(633项)、dandelion(898项)、roses(641项)、sunflowers(699项)、tulips(799项)
下载链接: http://download.tensorflow.org/example_images/flower_photos.tgz
建立InceptionV3与InceptionV4模型训练任务,如下:
由于开发机器上有两块GPU显卡,我们将两个模型一起训练。inception_v3 由第二块GPU计算,inception_v4由第一块GPU计算,训练的batch_size均为32,learning_rate均为0.01,image_size均为299,保持其他训练参数一致,这样方便比较两者的性能。为了快速得到有效的训练成果,我们采用预训练模型进行训练。
预训练模型文件尺寸对比:
可见inception_v4比inception_v3预训练模型要大很多。由此推测inception_v4的frozen_graph.pb肯定要比inception_v3大。我们看下两个网络模型训练了100000次后生成的frozen_graph.pb的大小如下:
可见inception_v4比inception_v3的frozen_graph.pb模型文件要大很多。
开始训练,我们先看下两个模型在训练速度上的区别:
上面的为inception_v3训练日志,下面的为inception_v4训练日志,可以看出inception_v3每步约0.12秒而inception_v4每步约0.22秒,两者相差约0.1秒,在训练速度上inception_v3要比inception_v4快很多。
看下GPU以及CPU的消耗情况:
接下来我们看下训练次数和准确率的tensorboard:
这张图片显示了inception_v3在训练100000次过程中的准确率和召回率变化。
这张图片显示了inception_v4在训练100000次过程中的准确率和召回率变化。
统计训练结果如上,在准确率上inception_v4要比inception_v3高一些。
综上所述,在选择分类模型时,我们可以结合模型文件大小、训练时间和准确率等情况找到符合自己需求的即可。
附-评估:
找个花测试下:
再测试一张:
最后测试一张dog的图片:
woo.... 竟然把狗分类成郁金香(tulips)了。。。其实58.75%准确率可以作为置信度对分类器进行业务处理,例如准确率大于90%则分类结果可信,否则说明该图片不在分类器范围类。