tensorflow object detection模型训练的几个要点

前段时间实践tensorflow目标检测模型再训练,过程见博文

tf2目标检测-训练自己的模型

总结目标检测模型再训练过程,有以下几点需注意:

1 训练集和测试集

训练图片每张只包含一个目标,因此可用小尺寸图片,且统一训练图片大小,有助于加快训练过程。测试图片则用大图片,包含多个需检测目标,同时包括应排除的目标,检验模型训练成果。

2 模型处理窗口和输入图片resize问题

每个再训练模型有处理窗口,例如ssd_resnet50_v1_fpn_640x640_coco17_tup-8,处理窗口是640x640。在模型pipeline.config文件中规定输入图片的resize方法,有fixed_shape和保持图片aspect两种方法。
以fixed_shape为例,训练图片为512x384,小于模型窗口,无需根据默认的resize方法,按640x640 resize图片,浪费模型的处理能力。可采用如下方式:

image_resizer {
      fixed_shape_resizer {
        height: 384   #640
        width: 512  #640
      }
    }

模型训练按照实际图片大小处理,可加快训练速度,同时不损失图片精度。但这里需保持每个边长可被128整除,否则程序会报错退出。因为ssd模型的输出张量为hard code,有规定的边长。
但对测试过程,则需将resize改回640x640,以保证模型能以最大窗口处理输入图片,模型导出时图片的resize值也是640x640。

3 GPU内存和batch_size

batch是一次参数迭代所用的样本图片数量,batch越大,损失函数每次迭代的变化较小,有助于loss搜索路径朝正确方向走。但大batch需要消耗GPU内存,因此在允许情况下尽量增大batch。

4 训练中处理checkpoint及模型导出和模型再训练

训练过程中,用Ctrl+C中断训练。重新开始训练时,可从最后的那个checkpoint开始,继续训练,而不必从头开始。
模型导出也可以采用某个loss较小的checkpoint导出,获得较好的模型训练性能。这可以修改训练所产生的checkpoint文件,将model_checkpoint_path指向性能较好的ckpt-n:

model_checkpoint_path: "ckpt-13"

此外,模型导出后,再次训练可以从导出的模型开始,这可在pipeline.config中重新指向新的模型:

fine_tune_checkpoint:"/your_path/model_export/checkpoint/ckpt-0" 

需注意,此时的再训练要将学习率降低,因为这相当于加大训练step,此时的学习率应适应这个过程。

附上几张测试图片,目标为宝马车,其中的宝马车目标属于测试集,未加入训练集。测试结果表明,经再训练模型能较好分辨宝马车,排除其他车型,当然也有部分失误的情况。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值