PaddlePaddle / PaddleDetection

Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.
Apache License 2.0
12.6k stars 2.86k forks source link

请问coco格式数据如何加入没有目标的图片作为负样本进行训练 #5956

Closed Dandelion111 closed 2 years ago

Dandelion111 commented 2 years ago

labelme标注数据,没有目标的图片,需要手动生成对应的json文件,并转成coco格式的文件吗?用x2coco.py转换手动生成的没有目标的json文件会报错,求大佬帮主

nemonameless commented 2 years ago

如果很多,建议直接删去。如果不多,可用保留也可以不用。要保留的话,x2coco.py转 报错的地方跳过就行了。 在configs/dataset/coco.py 或者configs/dataset/voc.py中的TrainDataset下设置allow_empty: true, 此时允许数据集加载无标注框进行训练。该功能支持coco,voc数据格式,RCNN系列和YOLO系列模型验证能够正常训练。另外,如果无标注框数据过多,会影响模型收敛,在TrainDataset下可以设置empty_ratio: 0.1对无标注框数据进行随机采样,控制无标注框的数据量占总数据量的比例,默认值为1.,即使用全部无标注框。

https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.4/docs/tutorials/FAQ/FAQ%E7%AC%AC%E9%9B%B6%E6%9C%9F.md

Dandelion111 commented 2 years ago

如果很多,建议直接删去。如果不多,可用保留也可以不用。要保留的话,x2coco.py转 报错的地方跳过就行了。 在configs/dataset/coco.py 或者configs/dataset/voc.py中的TrainDataset下设置allow_empty: true, 此时允许数据集加载无标注框进行训练。该功能支持coco,voc数据格式,RCNN系列和YOLO系列模型验证能够正常训练。另外,如果无标注框数据过多,会影响模型收敛,在TrainDataset下可以设置empty_ratio: 0.1对无标注框数据进行随机采样,控制无标注框的数据量占总数据量的比例,默认值为1.,即使用全部无标注框。

https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.4/docs/tutorials/FAQ/FAQ%E7%AC%AC%E9%9B%B6%E6%9C%9F.md

谢谢大佬回复,因为我在训练picodet的时候发现,模型对于无目标的图像存在误检,所以想加入一些无目标的负样本进行训练试试

zgsxwsdxg commented 1 year ago

如果很多,建议直接删去。如果不多,可用保留也可以不用。要保留的话,x2coco.py转 报错的地方跳过就行了。 在configs/dataset/coco.py 或者configs/dataset/voc.py中的TrainDataset下设置allow_empty: true, 此时允许数据集加载无标注框进行训练。该功能支持coco,voc数据格式,RCNN系列和YOLO系列模型验证能够正常训练。另外,如果无标注框数据过多,会影响模型收敛,在TrainDataset下可以设置empty_ratio: 0.1对无标注框数据进行随机采样,控制无标注框的数据量占总数据量的比例,默认值为1.,即使用全部无标注框。

https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.4/docs/tutorials/FAQ/FAQ%E7%AC%AC%E9%9B%B6%E6%9C%9F.md

你好,请教您!如下问题:

  1. 在TrainDataset下可以设置empty_ratio: 0.1对无标注框数据进行随机采样,这个empty_ratio: 0.1指的是相对于图片样本的0.1,还是bbox的0.1?
  2. 在paddledetection 2.5版本中是否可以xml配置如:https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.5/configs/datasets/coco_detection.yml

是否可以给出xml配置示例,因为2.5版本中configs/datasets/下没有coco.py文件,只有xml,谢谢!期待您的回答

nemonameless commented 1 year ago

说的就是yml,这个问答faq太老了。 https://github.com/PaddlePaddle/PaddleDetection/blob/develop/configs/datasets/coco_detection.yml#L16
allow_empty: true 加在 TrainDataset就行

zgsxwsdxg commented 1 year ago

谢谢!在TrainDataset下可以设置empty_ratio: 0.1对无标注框数据进行随机采样,这个empty_ratio: 0.1指的是相对于总图片样本的0.1,还是总bbox的0.1?

gosling123456 commented 1 year ago

@nemonameless ,这个加在TrainDataset下面吗?但是你给的代码是加在EvalDataset下面,是有什么深意呢

linuxonly801 commented 9 months ago

如下,在TrainDataset里面直接添加allow_empty: true: metric: COCO num_classes: 80

TrainDataset: name: COCODataSet image_dir: train2017 anno_path: annotations/instances_train2017.json dataset_dir: dataset/coco data_fields: ['image', 'gt_bbox', 'gt_class', 'is_crowd'] allow_empty: true

EvalDataset: name: COCODataSet image_dir: val2017 anno_path: annotations/instances_val2017.json dataset_dir: dataset/coco allow_empty: true

TestDataset: name: ImageFolder anno_path: annotations/instances_val2017.json # also support txt (like VOC's label_list.txt) dataset_dir: dataset/coco # if set, anno_path will be 'dataset_dir/anno_path'

Light-- commented 5 months ago

如果很多,建议直接删去。如果不多,可用保留也可以不用。要保留的话,x2coco.py转 报错的地方跳过就行了。 在configs/dataset/coco.py 或者configs/dataset/voc.py中的TrainDataset下设置allow_empty: true, 此时允许数据集加载无标注框进行训练。该功能支持coco,voc数据格式,RCNN系列和YOLO系列模型验证能够正常训练。另外,如果无标注框数据过多,会影响模型收敛,在TrainDataset下可以设置empty_ratio: 0.1对无标注框数据进行随机采样,控制无标注框的数据量占总数据量的比例,默认值为1.,即使用全部无标注框。

在设置 allow_empty: true 之后实验发现:

  1. 只使用 无目标的图片作为训练数据会导致训练报错,因为某些标签字段为空
  2. 在1的基础上,同时加入有目标的图片作为训练数据,训练正常进行。why?为什么不报字段空的错误了