bubbliiiing / yolov4-pytorch

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

怎么找最优权重? #342

Open ChenMaolong opened 1 year ago

ChenMaolong commented 1 year ago

大佬您好,我用验证集计算map best_epoch_weights.pth',#91.77% = nodule AP || score_threhold=0.5 : F1=0.89 ; Recall=87.39% ; Precision=91.23% ep277-loss0.027-val_loss0.038.pth',#91.77% = nodule AP || score_threhold=0.5 : F1=0.89 ; Recall=87.39% ; Precision=91.23% 训练自动计算的map 0 TOTALLOSS VALLOSS map 129 0.057131868 0.041256922 0.742858434 96 0.066630985 0.04313774 0.734250424 ep129-loss0.057-val_loss0.041.pth',#93.42% = nodule AP || score_threhold=0.5 : F1=0.89 ; Recall=89.08% ; Precision=89.08% ep096-loss0.067-val_loss0.043.pth',#89.63% = nodule AP || score_threhold=0.5 : F1=0.87 ; Recall=84.87% ; Precision=88.60% 相差太大了 ep265-loss0.028-val_loss0.038.pth', #91.84% = nodule AP || score_threhold=0.5 : F1=0.89 ; Recall=85.71% ; Precision=91.89% ep130-loss0.056-val_loss0.038.pth',#91.67% = nodule AP || score_threhold=0.5 : F1=0.84 ; Recall=82.35% ; Precision=85.96% 129epoch比265,130的totalloss valloss都高map却高,训练自动计算的map和实际运行getmap.py结果相差太大时高时低,怎么让训练自动计算的map和实际运行getmap.py一致呢(时间长点没关系)?或者有其他法子找最优权重?

bubbliiiing commented 1 year ago

验证集和测试集的mAP应该本来就是不同的吧?

ChenMaolong commented 1 year ago

验证集和测试集的mAP应该本来就是不同的吧?

我在getmap.py里面已经将test.txt改为val.txt了,上面全是验证集测试的结果,我最终是要test测试最好,我想着val好了test就不会差到哪去,现在自动计算的map和getmap.py都不一致咋整?

ChenMaolong commented 1 year ago

验证集和测试集的mAP应该本来就是不同的吧?

会是我使用了adam优化器的原因吗?

bubbliiiing commented 1 year ago

你把参数设置成一样吧,在callback.py里面设置训练时的评估参数

bubbliiiing commented 1 year ago

貌似和adam没什么关系

ChenMaolong commented 1 year ago

你把参数设置成一样吧,在callback.py里面设置训练时的评估参数

非常感谢你的解惑,我用你的yolov4-pytorch3.1版本就将sgd优化器换成adam其他都没改,然后在callbacks.py里面我把

class EvalCallback():

def init(self, net, input_shape, anchors, anchors_mask, class_names, num_classes, val_lines, log_dir, cuda, \

map_out_path=".temp_map_out", max_boxes=100, confidence=0.05, nms_iou=0.5, letterbox_image=True, MINOVERLAP=0.5, eval_flag=True, period=1):

换成和getmap.py一致 class EvalCallback(): def init(self, net, input_shape, anchors, anchors_mask, class_names, num_classes, val_lines, log_dir,cuda, \ map_out_path=".temp_map_out", max_boxes=100, confidence=0.001, nms_iou=0.5,letterbox_image=False, MINOVERLAP=0.5, eval_flag=True, period=1): 然后训练时计算的map还是和getmap.py跑的val验证集还是不一致,getmap算的map高,是max_boxes=100这个参数要修改吗?还是要在callbacks.py里面添加difficut参数,该怎么添加啊,不太会?目前我是手动一个一个试的太折腾人了

ChenMaolong commented 1 year ago

貌似和adam没什么关系

嗯嗯