-
bbox_loss\cls_loss=0时
可能的情况:
-
数据可能出界了
from pycocotools.coco import COCO # 判断bbox是否出界 main = '/code/merge.json' coco=COCO(main) list_imgIds = coco.getImgIds(catIds=[]) error=[] for img_id in list_imgIds: ann_ids = coco.getAnnIds(imgIds=img_id) src_anns = coco.loadAnns(ann_ids) img_info=coco.loadImgs([img_id]) w,h=img_info[0]['width'],img_info[0]['height'] for ann in src_anns: x,y,w_,h_=ann['bbox'] if x+w_>w or y+h_>h: error.append({img_info[0]['id'],img_info[0]['file_name']}) print(error,len(error))
-
数据可能不对应
-
dataset加载时涉及classname与数据集本身不一致
这种情况下的评估会提示无am并无预测
具体需要统一的位置
mmyolo/mmyolo/datasets/yolov5_coco.py
-
数据config中的classname与dataset中不一致
需要注意的在多层继承config时,在mmyolo中最外层config修改的数据,会出现原继承的config覆盖的情况。【感觉是我自己没写好,多次实验都存在这个问题】
-
-
AP,recall从一开始为0
如果是多数据拼接得到数据集,需分步判断数据带来的影响
因为yolo中有
Mosaic
和Mosaic9
增强策略所以需要去dataset/transformer里面去找到这个的输出可视化,判断对数据集对象的影响 【对小的目标会有一定的影响】 所以根据具体情况判断是否需要取消这类增强。 若去掉 则需要在trainpipeline里面 添加数据中心变形【img和bbox都会进行】和padding【bbox的不会参与】 【为确保不同尺寸数据可以正常同时添加进patch中进行训练】,在训练中需要在第一步中同时添加img和bbox的数据,这样保证每次变形bbox会同步变形【因为在train的loss计算时不会还原原始bbox的位置】,bbox的padding需要单独进行。具体修改代码:
train_pipeline = [ *pre_transform, dict(type='YOLOv5KeepRatioResize', scale=img_scale), dict( type='mmdet.FixShapeResize', width=1280, height=1280, pad_val=dict(img=(114.0, 114.0, 114.0))), # 数据缩放、旋转等增强 dict( type='YOLOv5RandomAffine', max_rotate_degree=0.0, max_shear_degree=0.0, max_translate_ratio=max_translate_ratio, # note 0.2 scaling_ratio_range=scaling_ratio_range, # note # img_scale is (width, height) border=(0,0), border_val=(114, 114, 114)), dict(type='mmdet.RandomFlip', prob=0.5), dict( type='mmdet.FilterAnnotations', min_gt_bbox_wh=(1, 1), keep_empty=False), dict( type='mmdet.PackDetInputs', meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'flip', 'flip_direction')) ]
【mmyolo学习1】bbox_loss为0、去掉Mosaic增强
文章讨论了在YOLOv5训练过程中bbox_loss和cls_loss为0时可能的原因,包括数据出界和类别名称不匹配。通过使用COCO库检查图片边界框是否超出图像范围。此外,提到了多数据集拼接、数据增强策略如Mosaic的影响,以及配置文件中类别的一致性问题。还建议检查并调整训练管道中的图像变形和填充操作,以确保bbox同步变形,并处理小目标的影响。
摘要由CSDN通过智能技术生成