YOLOv8中RT-DETR训练训练记录3个bug:
1.RT-DETR的推理使用命令行运行,会出现KeyError: 196的错误
2.RT-DETR使用命令行进行断点训练,会报AttributeError: ‘RTDETRDecoder’ object has no attribute ‘stride’,可以通过代码推理规避
3.断点训练失效,可以通过临时修改ultralytics\engine\trainer.py中start_epoch改成继续训练的epoch,然后在ultralytics\cfg_init_.py文件中修改args.save_dir = "runs/detect/train16"即可
训练命令
yolo train data=rtdetr-x_ImageMatch/GAIIC2024_ImageMatchingFusion_Swin.yaml model=runs/detect/train16/weights/last.pt epochs=300 imgsz=640 workers=0 batch=4 amp=False pretrained=rtdetr-x_ImageMatch/rtdetr-x.pt
推理命令
yolo task=detect mode=predict model="./runs/detect/train12/weights/last.pt" conf=0.25 source="00001.jpg"
1.RT-DETR的推理使用命令行,发生了ultralytics\yolo\engine\results.py", line 265, in verbose
log_string += f"{n} {self.names[int©]}{‘s’ * (n > 1)}, " KeyError: 196 的错误,推测是由于实际分类标签少。使用推理代码可以规避这个错误。而使用推理代码进行推理可以规避这个错误。
断点训练命令
yolo train data=rtdetr-x_ImageMatch/GAIIC2024_ImageMatchingFusion_Swin.yaml model=runs/detect/train16/weights/last.pt epochs=300 imgsz=640 workers=0 batch=4 amp=False pretrained=rtdetr-x_ImageMatch/rtdetr-x.pt save_period=10 save=True resume=True
2.断点训练代码使用命令行执行,会报AttributeError: ‘RTDETRDecoder’ object has no attribute ‘stride’,而使用代码进行断点训练就可以规避这问题
from ultralytics import RTDETR
model = RTDETR('runs/detect/train16/weights/last.pt')
results = model.train(data="rtdetr-x_ImageMatch/GAIIC2024_ImageMatchingFusion_Swin.yaml", epochs=300, device='0',
batch=4,save=True, resume=True,amp=False,name="runs/detect/train16",save_dir="runs/detect/runs/detect/train16",workers=0
) # 断点恢复训练模型
3.断点训练有时不生效,可以修改ultralytics\engine\trainer.py中start_epoch改成继续训练的epoch,然后在ultralytics\cfg_init_.py文件中修改args.save_dir = "runs/detect/train16"即可。