用tensorflow训练模型时,很自然的想到要同时验证模型的效果,得到mAP、loss等参数,从而判断什么时候可以终止训练,防止欠拟合或者过拟合。幸运的是,tensorflow官方
已经给出了验证的脚本eval.py,网上找了很多资料,都没有人能把使用方法讲清楚,因此在研究的基础上做一个总结。本文是基于目标检测API接口object_detection做进一步的
分析,如果对这些接口不熟悉的,可参考我之前的文章
在object_detection/legacy文件夹下有eval.py,我们把它拷贝到上级目录中,方便使用。需要强调的是eval.py需要与train.py同时使用,即在训练的同时进行验证,这样才能看出
训练过程中的参数,如果只运行eval.py,读取的只是最后一个模型的参数,得到的mAP曲线只是一个点,所以为了看出趋势,应该训练的同时进行验证。
训练的过程不再具体描述,可参考我之前的文章,这里着重介绍eval.py的使用方法。简单重复一下训练的语句:
python train.py –logtostderr –train_dir=training/ –pipeline_config_path=ssd_mobilenet_v1_pets.config
训练过程中读取模型配置文件,训练生成的checkpoint文件会保存在training中。
eval.py的运行方法类似:
python eval.py –logtostderr –eval_dir=evalpath/ –pipeline_config_path=ssd_mobilenet_v1_pets.config –checkpoint_dir=training/
先运行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
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:
Loss/RPNLoss/localization_loss: Localization Loss or the Loss of the Bounding Box regressor for the RPN
Loss/RPNLoss/objectness_loss: Loss of the Classifier that classifies if a bounding box is an object of interest or background
The losses for the Final Classifier:
Loss/BoxClassifierLoss/classification_loss: Loss for the classification of detected objects into various classes: Cat, Dog, Airplane etc
Loss/BoxClassifierLoss/localization_loss: Localization Loss or the Loss of the Bounding Box regressor
评论区有人提问曲线中深色的线和浅色的线分别是什么含义,这里记录一下