繁体   English   中英

在使用Tensorflow对象检测API重新训练预训练模型时,为什么用这种方法标记训练数据会导致不良对象检测?

[英]Why is labeling training data this way leading to bad object detection when re-training pre-trained models using the tensorflow object detection api?

所以我一直插科打诨与tensorflow的对象检测API和具体的模型重新训练,基本上是在做这个 我用少量的图像就能很好地检测到我的物体。 但是我想增加训练的图像数量,但是标记过程很长而且很无聊,所以我发现了带有裁剪图像的数据集,因此图像中只有我的对象。

如果有一种方法可以在不标记整个图像的情况下发送整个图像,也可以使用tensorflow api进行训练,我没有找到它,但是我认为编写一个标记整个图像的程序并不难。

标签的格式是带有以下条目的csv文件:文件名,宽度,高度,类,xmin,ymin,xmax,ymax。

这是我的代码:

import os
import cv2

path = "D:/path/to/image/folder"

directory = os.fsencode(path)
text = open("D:/result/train.txt","w")
for file in os.listdir(directory):
    filename = os.fsdecode(file)
    if filename.endswith(".jpg"):
        impath= path + "/" + filename
        img = cv2.imread(impath)
        res = filename+","+ str(img.shape[1])+","+str(img.shape[0])+",person,1,1,"+str(img.shape[1]-1) +"," +str(img.shape[0]-1)+"\n"
        text.write(res)
        print(res)
text.close()

这似乎工作正常。

现在是问题所在。 在将.txt转换为.csv并进行训练直到损失停止之前,我对测试集的检测非常糟糕。 像训练它只检测图像的边缘一样,它在整个图像周围放置了一个巨大的边界框。

我认为以某种方式学习检测图像的边缘,因为标签围绕整个图像。 但是,如何使它学会“看到”图片中的内容? 任何帮助,将不胜感激。

该模型准确地预测了训练的内容:整个图像的巨大边界框。 显然,如果您的训练数据仅包含坐标为[0, 0, 1, 1]框,则模型将学习它并预测测试集。

您可以尝试使用某种增强方法:将图像放在更大的黑色/灰色画布上,并相应地调整边界框。 例如,SSD增强就是这样做的。 但是,没有免费且好的方法来补偿缺少正确标记的列车组的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM