SSD训练数据tfrecords数据产生bug

训练数据tfrecords产生的问题:

INFO:tensorflow:Error reported to Coordinator: <class 'tensorflow.python.framework.errors_impl.InvalidArgumentError'>, All bounding box coordinates must be in [0.0, 1.0]: 1.002    

提供两条解决思路:

  • 写脚本,判断出有哪些图片标记出错了。然后,删除这些标记不规范的图片,重新制作数据集。
  • 修改tfrecords制作过程。

首先,第一个方法是可行的,就是比较麻烦,要找到原来的图片,删除,重新制作成tfrecord格式。我写了一个简单的脚本,检查之后发现,我使用的数据集(1W张图片)中有200+图片标记有问题,都是xmaxymax超出了边界几个像素。

一些原因(嗯嗯嗯,主要是懒,2333),我不想再制作一遍数据集。决定找个相对优雅的方法解决这个问题。于是就有了第二个方案:

bboxes.append(float(ymin) / shape[0],
               float(xmin) / shape[1],
               float(ymax) / shape[0],
               float(xmax) / shape[1],))

追踪tf_convert_data.py,发现主要使用datasets/pascalvoc_to_tfrecords.py执行数据格式转化工作。找到114-119行:

bboxes.append((max(float(ymin) / shape[0], 0.0),
               max(float(xmin) / shape[1], 0.0),
               min(float(ymax) / shape[0], 1.0),
               min(float(xmax) / shape[1], 1.0)))

修改为:

然后使用命令,重新将数据集制作成tfrecords格式,问题便解决了。

这样做是合理的,理由如下:

标记员将坐标标记错误,跳出了图像范围,这时候识别目标应该就在图像边缘,所以选取图像边界作为目标的边界是合理的。

尊重原创:https://www.cnblogs.com/blog4ljy/p/9320487.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

读书小孩

您的打赏将是我前行的动力源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值