说明
- 此篇文章写作时,ultralytics更新至8.0.117,后续版本可能已经针对以下问题进行更改;
- 因ultralytics当前更新比较频繁,前期使用时,不建议采用pip安装库,而采用拉取ultralytics仓放置在代码中调用;
- ultralytics训练过程中没有保留在验证集上的检测图,建议保留,方式为:屏蔽ultralytics/yolo/engine/validator.py BaseValidator类__call__函数中以下代码:
#self.args.plots = trainer.stopper.possible_stop or (trainer.epoch == trainer.epochs - 1)
-
跟踪训练过程中训练集和验证集上检测框最大边长:
-
训练集上最大边长:ultralytics/yolo/utils/loss.py(此为8.0.117版本位置,前期版本位置不太一样,找到训练的loss函数即可),在loss函数中加入打印,即以下代码中的print
pred_bboxes = self.bbox_decode(anchor_points, pred_distri) # xyxy, (b, h*w, 4) AA = (pred_bboxes.detach() * stride_tensor) print('pred w max:', (AA[:,:,2]-AA[:,:,0]).max()) print('pred h max:', (AA[:,:,3]-AA[:,:,1]).max()) _, target_bboxes, target_scores, fg_mask, target_gt_idx = self.assigner( pred_scores.detach().sigmoid(), (pred_bboxes.detach() * stride_tensor).type(gt_bboxes.dtype), anchor_points * stride_tensor, gt_labels, gt_bboxes, mask_gt)
-
验证集上最大边长:ultralytics/yolo/utils/plotting.py中 output_to_target函数中加入打印,以下代码中的try … except…代码:
def output_to_target(output, max_det=300): """Convert model output to target format [batch_id, class_id, x, y, w, h, conf] for plotting.""" targets = [] for i, o in enumerate(output):
-