bubbliiiing / yolov4-pytorch

这是一个YoloV4-pytorch的源码,可以用于训练自己的模型。
MIT License
2.11k stars 615 forks source link

数据集中为啥没负样本 #17

Open yangfei963158659 opened 4 years ago

yangfei963158659 commented 4 years ago

voc_annotation.py这个脚本把没有目标的负样本全部过滤掉了。请问你这个训练代码能不能加负样本进行训练

bubbliiiing commented 4 years ago

我感觉目标检测的负样本应该不是没有目标的图片的概念吧

yangfei963158659 commented 4 years ago

我有一半的数据是没有目标的。voc_annotation.py这个脚本把没有目标的样本全部过滤掉了,这种情况怎么处理?

yangfei963158659 commented 4 years ago

我训练人车狗的模型,有一般的训练数据是没有人车狗的。我用yolov3训练,效果还行,现在想改用yolov4来训练,我调用你的voc_annotation.py脚本之后,发现没有目标的数据全部被过滤掉了

bubbliiiing commented 4 years ago

……目标检测的负样本不是这样来定义的吧 代码里面不有个find object=None吗,这段代码的意思很好看懂的吧

yangfei963158659 commented 4 years ago

就是这行代码把所有没有目标的训练样本都过滤掉了。。你训练yolov4,难道没有加入不包括目标的训练样本吗?

bubbliiiing commented 4 years ago

……目标检测的负样本不是这样来定义的吧,你真的不看这句话吗……

bubbliiiing commented 4 years ago

可以加,但是没有必要……

yangfei963158659 commented 4 years ago

是吗?我之前看很多博客,在yolov3中加不包含目标的训练样本,会使模型更加鲁棒。

bubbliiiing commented 4 years ago

是的吧,加一些背景进去呗……我还是说的是目标检测里面通常只会对框划分正负样本,而非图片 你想加也行

yangfei963158659 commented 4 years ago

嗯,谢谢你

yangfei963158659 commented 4 years ago

还有就是,坐标值为啥不用相对值,而选择用绝对值

yangfei963158659 commented 4 years ago

我想在海思上部署yolov4。我发现yolov4使用了mesh激活函数,这个算子在海思上不支持,我想用relu替换,不知道对最后的map值有多大影响

bubbliiiing commented 4 years ago

1、因为习惯,又没差…… 2、需要重新训练

bubbliiiing commented 3 years ago

是的吧,加一些背景进去呗……我还是说的是目标检测里面通常只会对框划分正负样本,而非图片 你想加也行

大错特错,如果你负样本取景时并不包含正样本,你怎么弄?难道要把正样本抠下来贴到负样本图里?你想想这有多麻烦? 正确的就是LZ所说,负样本对应空标签,一起放进去训练!darknetAB是支持这么做的

1、这个代码支持空标签训练 2、我对目标检测的负样本理解来自于Focal Loss,即先验框的正负样本,并不来自于分类网络或者其它的网络 3、可以空标签训练,对于误检测有一定的提升效果,已测试

bubbliiiing commented 3 years ago

是的吧,加一些背景进去呗……我还是说的是目标检测里面通常只会对框划分正负样本,而非图片 你想加也行

大错特错,如果你负样本取景时并不包含正样本,你怎么弄?难道要把正样本抠下来贴到负样本图里?你想想这有多麻烦? 正确的就是LZ所说,负样本对应空标签,一起放进去训练!darknetAB是支持这么做的

顺便说一句,voc_annotation.py早就改了,不会过滤你认为的负样本(并非说你错,只是我理解的和你不一样)

bubbliiiing commented 3 years ago

Emm,你下的是最新的代码吗,我刚试了,如果故意将voc_annotation.py里面的classes设置错误,生成的2007_train.txt会有图片但没有目标信息。就像这样子。我不太理解为啥要把正样本抠出来的一个目标图,粘贴到负样本图上…不过如果你有这个编程能力的话,我觉得你voc_annotation.py的代码肯定也可以看懂,读取到任何一行都会写入txt。还是你的意思是没有空的xml,只加图片为什么不可以? D:\Study\Collection\Object_detection\Yolov4_collection\yolov4-pytorch-master/VOCdevkit/VOC2007/JPEGImages/000001.jpg D:\Study\Collection\Object_detection\Yolov4_collection\yolov4-pytorch-master/VOCdevkit/VOC2007/JPEGImages/000002.jpg D:\Study\Collection\Object_detection\Yolov4_collection\yolov4-pytorch-master/VOCdevkit/VOC2007/JPEGImages/000003.jpg

bubbliiiing commented 3 years ago

你传图我也看不见,我的网络不行,看不到github上的图……,在寝室甚至没有网,用手机流量半天登不上hub

bubbliiiing commented 3 years ago

这啥玩意这是,你是不是搞错库了,这个应该不是我上传的代码……🙄

bubbliiiing commented 3 years ago

两个方式 1、生成没有object的xml 2、生成有object的xml,但是这个object的类可以乱标,反正voc_annotation读取到不存在的类的时候会直接跳过(只是跳过该类)但是图片仍然会存在2007_train.txt文件里面去训练。我的代码是这样

bubbliiiing commented 3 years ago

也不一定所有的代码都支持无目标(我的faster rcnn的库和pytorch ssd的库就必须跳过……不然会报错),但是至少我现在上传的这个是支持的

bubbliiiing commented 3 years ago

我的这样应该可以

chengli-jump commented 3 years ago

这啥玩意这是,你是不是搞错库了,这个应该不是我上传的代码……🙄

这是其他的训练项目,无意中看到你这里有讲添加空背景图的问题,我确定darknet确实可以这添加空背景,但是py系列的框架,比如tf,pytorch,我不确定,请教了

请问darknet 添加空背景,需要生成对应的空标签吗

bubbliiiing commented 3 years ago

是的,需要添加标签的

chengli-jump commented 3 years ago

这啥玩意这是,你是不是搞错库了,这个应该不是我上传的代码……🙄

这是其他的训练项目,无意中看到你这里有讲添加空背景图的问题,我确定darknet确实可以这添加空背景,但是py系列的框架,比如tf,pytorch,我不确定,请教了

请问darknet 添加空背景,需要生成对应的空标签吗

当然要,darknet是根据标签来读取同路径下的样本图的

那空标签怎么生成呢,坐标全部写0吗还是说什么都不写

bubbliiiing commented 3 years ago

用labelimg生成无目标的xml

bubbliiiing commented 3 years ago

先标注再删除目标就可以了

syg1996419 commented 3 years ago

是的吧,加一些背景进去呗……我还是说的是目标检测里面通常只会对框划分正负样本,而非图片 你想加也行

大错特错,如果你负样本取景时并不包含正样本,你怎么弄?难道要把正样本抠下来贴到负样本图里?你想想这有多麻烦? 正确的就是LZ所说,负样本对应空标签,一起放进去训练!darknetAB是支持这么做的

我也看了这个代码,没有目标的原图应该是不会训练的,直接过滤掉了,而且即使有编码loss为0不会进行反向传播梯度更新的

syg1996419 commented 3 years ago

是的吧,加一些背景进去呗……我还是说的是目标检测里面通常只会对框划分正负样本,而非图片 你想加也行

大错特错,如果你负样本取景时并不包含正样本,你怎么弄?难道要把正样本抠下来贴到负样本图里?你想想这有多麻烦? 正确的就是LZ所说,负样本对应空标签,一起放进去训练!darknetAB是支持这么做的

我目前做的也是将正样本扣出来加入没有目标的图片去训练

syg1996419 commented 3 years ago

是的吧,加一些背景进去呗……我还是说的是目标检测里面通常只会对框划分正负样本,而非图片 你想加也行

大错特错,如果你负样本取景时并不包含正样本,你怎么弄?难道要把正样本抠下来贴到负样本图里?你想想这有多麻烦? 正确的就是LZ所说,负样本对应空标签,一起放进去训练!darknetAB是支持这么做的

1、这个代码支持空标签训练 2、我对目标检测的负样本理解来自于Focal Loss,即先验框的正负样本,并不来自于分类网络或者其它的网络 3、可以空标签训练,对于误检测有一定的提升效果,已测试

他们提问的负样本就是没有目标的原图,而你说的负样本是anchor和gt最大iou之外的,不是一个东西

bubbliiiing commented 3 years ago

是的吧,加一些背景进去呗……我还是说的是目标检测里面通常只会对框划分正负样本,而非图片 你想加也行

大错特错,如果你负样本取景时并不包含正样本,你怎么弄?难道要把正样本抠下来贴到负样本图里?你想想这有多麻烦? 正确的就是LZ所说,负样本对应空标签,一起放进去训练!darknetAB是支持这么做的

我也看了这个代码,没有目标的原图应该是不会训练的,直接过滤掉了,而且即使有编码loss为0不会进行反向传播梯度更新的

会训练的,也会反向梯度

bubbliiiing commented 3 years ago

是的吧,加一些背景进去呗……我还是说的是目标检测里面通常只会对框划分正负样本,而非图片 你想加也行

大错特错,如果你负样本取景时并不包含正样本,你怎么弄?难道要把正样本抠下来贴到负样本图里?你想想这有多麻烦? 正确的就是LZ所说,负样本对应空标签,一起放进去训练!darknetAB是支持这么做的

1、这个代码支持空标签训练 2、我对目标检测的负样本理解来自于Focal Loss,即先验框的正负样本,并不来自于分类网络或者其它的网络 3、可以空标签训练,对于误检测有一定的提升效果,已测试

他们提问的负样本就是没有目标的原图,而你说的负样本是anchor和gt最大iou之外的,不是一个东西

会将所有的先验框当做背景训练

Daisy-Zhang commented 3 years ago

请问按照前面朋友的说法:对于没有待检测目标只有背景的图片,生成无object标签的xml文件(如下),是可以将这部分数据加入训练正常更新参数的对吗?

前面朋友贴出来的xml:

<annotation>
    <folder>VOC2007</folder>
    <filename>000003.jpg</filename>
    <size>
        <width>640</width>
        <height>360</height>
        <depth>3</depth>
    </size>
</annotation>

这时运行voc_annotation.py后对于该部分数据只会生成一行路径,后续训练过程中在load data阶段对于该部分数据能正常load加入训练吗?