为什么在使用张量流对象检测api重新训练预训练模型时,以这种方式标记训练数据会导致不良对象检测?

问题描述 投票:0回答:1

所以我一直在搞乱tensorflow的物体检测api,特别是模型的重新训练,基本上是做this。我用少量图像很好地检测了我的物体。但是我想增加我训练的图像数量,但标签过程很长很无聊,所以我发现了一个带有裁剪图像的数据集,所以只有我的对象在图像中。

如果有一种方法发送整个图像而不标记它们也使用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并运行训练直到损失停止减少后,我的测试集上的检测结果非常糟糕。它在整个图像周围放置了一个巨大的边界框,就像它被训练只检测图像的边缘一样。

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

python tensorflow computer-vision object-detection object-detection-api
1个回答
0
投票

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

您可以尝试使用一种增强方式:将图像放在较大的黑色/灰色画布上,并相应地调整边界框。例如,这就是SSD增强的功能。然而,没有自由和好的方法来补偿没有适当标记的火车组。

© www.soinside.com 2019 - 2024. All rights reserved.