Graph-FPN代码解读(5)

在train文件训练完成之后,我们需要进行test的测试证明训练的效果。因此需要运行test.py文件

先查看测试前的准备工作,首先还是使用tfds.load方法加载了val数据集和test数据集。同样的model也是和train时一样,三个config中的参数如下:

configs.num_classes = 15
configs.backbone = "Resnet50"
configs.Arch = "Graph_Retinanet" "

在这里插入图片描述
看到下一行的ckpt = tf.train.Checkpoint(model),Tensorflow的Checkpoint机制将可追踪变量以二进制的方式储存成一个.ckpt文件,储存了变量的名称及对应张量的值。TensorFlow 提供了 tf.train.Checkpoint 这一强大的变量保存与恢复类,可以使用其 save() 和 restore() 方法将 TensorFlow 中所有包含 Checkpointable State 的对象进行保存和恢复。

查看一下config.weight的定义,由此可以发现weight文件的存放位置

configs.weight = os.path.join(configs.root_dir, configs.r50_graph_weight)
parser.add_argument('--r50_graph_weight', type=str, default="checkpoint/", metavar='PATH',
                        help='Graph Retinanet weight path')

ckpt.restore(tf.train.latest_checkpoint(config.weight)).expect_partial()是将最后保存的权重文件取出
eval_coco = COCO()是构建了COCO数据集的处理类,方便后续的处理

在前期准备工作结束后,可以开始test的主流程,从val数据集中取了前100个数据

在这里插入图片描述
首先取出image和image_id,对于图像进行预处理,图像从 RGB 转换为 BGR并且变为224的大小
在这里插入图片描述
将处理好的图像输入model模型中,得到预测结果predictions。将其输入DecodePredictions类中进行解码。重点关注一下DecodePredictions类
在这里插入图片描述
在这里插入图片描述
可以看到函数主要是对box和cls的预测结果进行了处理,最后进行NMS处理返回结果,其中tf.image.combined_non_max_suppression的返回结果是:
在这里插入图片描述

最后将得到的预测数据整理得到结果

num_detections:代表有效的探测结果数量
class_names :每一个探测结果对应的类名
bbox :每一个探测结果的box位置
scores :每一个探测结果的置信度
class_ids :每一个类的id

使用eval_coco.convert_eval_format(bbox, image_id, class_ids, scores, num_detections, res)将得到的结果整理
在这里插入图片描述
使用以下代码将结果进行存储
eval_coco.save_results(config.result_dir, res) eval_coco.run_eval(config.result_dir)


记录一下后续进行实验的问题,因为实验的原因需要将原本代码的COCO数据集替换为航拍数据集进行使用,按照COCO的格式制作好了数据集送入网络进行训练,但是大约100次训练后loss就变为了nan,无法继续进行训练。

检查后发现一个问题(没有完全解决loss的问题)按照tfrecord提供的数据,coco数据集bbox一项应该是[xmin, ymin, xmax, ymax]格式,而我自己制作的数据集格式为

在这里插入图片描述
数据集的格式不一样,造成了后续处理的错误,引发了nan问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值