⽬标检测YOLOv5-早停机制(EarlyStopping ) ⽬标检测 - 早停机制(Early Stopping )
营养块
flyfish
YOLOv5:v5的版本没有早停机制,在2021年9⽉5⽇后的版本更新了早停机制
EarlyStopper updates #4679(Sep 5, 2021)
参数
patience:训练了多少个epoch,如果模型效果未提升,就让模型提前停⽌训练。 fitness监控的是增⼤的数值,例如mAP,如果mAP在连续训练patience次内没有增加就停⽌训练。如何使⽤
⽅式需要两步
⼀ 声明,初始化patience 参数
stopper = EarlyStopping(patience=3)
⼆ 训练过程中判断是否需要早停
stopper(epoch=epoch, fitness=mAP的数值)
下例中使⽤随机数替代传⼊的mAP,并编写代码进⾏测试
输出结果import random class EarlyStopping : # YOLOv5 simple early stopper def __init__(self , patience =30): self .best_fitness = 0.0 # i.e. mAP self .best_epoch = 0 self .patience = patience or float ('inf') # epochs to wait after fitness stops improving to stop self .possible_stop = False # possible stop may occur next epoch def __call__(self , epoch , fitness ): if fitness >= self .best_fitness : # >= 0 to allow for early zero-fitness stage of training self .best_epoch = epoch self .best_fitness = fitness delta = epoch - self .best_epoch # epochs without improvement print ("delta:",delta ) print ("best_fitness:", self .best_fitness ) self .possible_stop = delta >= (self .patience - 1) # possible stop may occur next epoch stop = delta >= self .patience # stop training if patience exceeded if stop : print (f'EarlyStopping patience {self .patience } exceeded, stopping training.') return stop #我们编写如下代码进⾏测试stopper = EarlyStopping (patience =3)epochs =10start_epoch =0for epoch in range (start_epoch , epochs ): random .seed (epoch ) print ("function:",stopper (epoch =epoch , fitness =random .uniform (0.1, 0.5))) print ("possible_stop:",stopper .possible_stop )
1
2
3
4
5
6
堆芯
7
8
释放器9
10
11
新型增塑剂
12
13虚拟地震台网
14
15
16
17
18
19
对路网20
21
22
23
24
25
26
27
28
29
30
# delta: 0# best_fitness: 0.43776874061001925# function: False # possible_stop: False # delta: 1# best_fitness: 0.43776874061001925# function: False # possible_stop: False # delta: 0# best_fitness: 0.4824137087556998# function: False # possible_stop: False # delta: 1# best_fitness: 0.4824137087556998# function: False # possible_stop: False # delta: 2# best_fitness: 0.482413708
7556998# function: False # possible_stop: True # delta: 3# best_fitness: 0.4824137087556998# EarlyStopping patience 3 exceeded, stopping training.# function: True # possible_stop: True 12345678910111213141516171819202122232425262728