用tensorflow训练模型时,很自然的想到要同时验证模型的效果,得到mAP、loss等参数,从而判断什么时候可以终止训练,防止欠拟合或者过拟合。幸运的是,tensorflow官方已经给出了验证的脚本eval.py,网上找了很多资料,都没有人能把使用方法讲清楚,因此在研究的基础上做一个总结。本文是基于目标检测API接口object_detection做进一步的分析,如果对这些接口不熟悉的,可参考我之前的文章 在object_detection/legacy文件夹下有eval.py,我们把它拷贝到上级目录中,方便使用。需要强调的是eval.py需要与train.py同时使用,即在训练的同时进行验证,这样才能看出训练过程中的参数,如果只运行eval.py,读取的只是最后一个模型的参数,得到的mAP曲线只是一个点,所以为了看出趋势,应该训练的同时进行验证。 训练的过程不再具体描述,可参考我之前的文章,这里着重介绍eval.py的使用方法。简单重复一下训练的语句:
训练过程中读取模型配置文件,训练生成的checkpoint文件会保存在training中。 eval.py的运行方法类似:
先运行train.py,然后运行eval.py,然后运行tensorboard --logdir='evalpath',在浏览其中打开tensorboard即可看到变化。 要注意的是,在tensorboard中不是立马就会有结果,而是训练保存一个checkpoint,tensorboard读取一个模型,更新一次参数,所以相当于有几个checkpoint,在曲线中就会有几个点,需要耐心等待,不要着急。 在运行eval.py时,会有一些疑似问题的情况,很多同学会觉得异常,找解决方法,这里我列举一些常见的问题 问题一:WARNING:root:image 0 does not have groundtruth difficult flag specified 问题二:WARNING:root:The following classes have no ground truth examples: 11 问题三: num_images_correctly_detected_per_class / num_gt_imgs_per_class) 上边出现的三种问题都是正常的,不会影响到最终的结果,而且出现第三条语句时,会一直在等待,没有输出,直到有新的checkpoint保存后,才会有下一步的输出: INFO:tensorflow:Restoring parameters from training/model.ckpt-2175 因此,遇到这些问题不要着急,训练的过程中一直等待就行。下图为我再tensorboard中监控到的结果,包括loss、各个类别的AP值,还有总的mAP值。在IMAGES选项中,还可以看到测试图片的结果,我这里就不再显示了 如果是训练Faster-RCNN等模型,会看到以上四种loss,loss的含义分别是 The losses for the Region Proposal Network:
The losses for the Final Classifier:
|
|