Yolov3模型提高模型检测准确度 之 learning_rate与batch_size(Yolov3模型没有框的同学们看过来)

在这里插入图片描述

前言

我觉得我是真的和“YoloV3模型没有框”这个问题杠上了。

之前,我被这个问题卡了一个星期,后来虽然解决了,但总感觉这个解决方法看着不是很舒服。对于一个强迫症来说,你要我通过牺牲总体特征的检测效果来满足局部特征的检测,这个方法是有些无法接受的。具体我的解决方法是什么,大家可以参照我之前的两篇博客,我把博客链接写下来了,大家可以直接点击链接跳转过去看一下:

Yolov3训练模型没有框(理论上一定有用的解决方案)

Yolov3模型没有框的解决方案之——提高训练模型的置信度

在这里插入图片描述

上次有同学私信我,他遇到的情况比计较离谱,他修改了模型的batch_size,其余代码均依照原作者,没有进行改动,loss值降到了21,但是效果还是不行,可行度非常低,而且还出现了分类错误的情况。这种情况下,不仅准确率不高,而且很可能会出现过拟合的现象。

我认为,说到底,我们需要解决的问题还是如何提高模型检测的准确度,只要准确度足够高,anchor box是一定会出现的。

下面我会对这位同学的现象做一些分析。

(以下两张图片由这位同学提供)
同学提供的图片1在这里插入图片描述

减小Batch_size的负面效果:

在之前的博客中,我对batch_size的作用有比较详细的描述。如果我们一次性训练的图片比较多,对这一组图片的总体特征掌握会比较准确,但是在细节方面可能会有所缺失,所以我建议减小batch_size对图片精修,以达到提升准确率的问题。

但是,这样的做法有一个非常明显的问题,我们每次都在寻找当前区域的最小值,而不注重梯度下降的大方向,便非常容易陷在局部最小值中跳不出来。
在这里插入图片描述
于是,我们看到的现象就是,loss值下降到一定程度后,维持不变,模型出现过拟合现象,但是检测精度依旧非常不理想。

不知道大家能不能理解我的意思。你们可以想象一下,自己正在下山,如果你关注的只是你脚边坡度的下降方向,你一定能很快地往海拔低得位置前进,但是万一遇到一个小坑,你就踩进去了,而且出不来了。你如果看得比较长远,关注坡度的总体下降趋势,你可能有的时候还会走上坡路,但是不会陷在小坑里出不来。

这就是batch_size的实际影响。很显然,这位同学就是遇到了这种情况,因为batch_size减小,陷在一个海拔很高的坑里出不来了,于是导致检测准确度很低。

在这里插入图片描述

Learning_rate对检测效果的改善:

为了抵消batch_size减小对于模型带来的负面影响,我们需要调节learning_rate参数值。

调整方法为:初始学习率与batch_size反方向调节。

大家可以想象一下,如果你每次只关注脚下的坡度下降方向,如何防止陷在坑里出不来?方法就是把每一步的步长拉大。

看着眼前,就把步子迈大一点。看着远方,就小心地走好每一步。

在这里插入图片描述

Yolo模型的弊端

以上为提高检测精度的一些通用型做法,但是如果检测效果差得离谱,还是需要检查一下下载来的代码是不是真的可靠。

有一种说法是:Yolo源码里的loss没有处理正负样本不平很的问题,所以在训练时容易产生各种各样的问题。对应现象不容易训练出来,而batch_size的减小,使得个别均衡样本促进了模型的收敛,从而大幅提高检测效果。

很多其他的版本,比如darknet对Yolo模型的缺点进行了改进,使得效果更好更稳定。所以如果各位对于这一课题有兴趣,推荐去研究一下不同版本的loss。

如果大家有什么想法,或者什么新的发现,非常欢迎和大家的交流。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Nire_Yeyu/article/details/106053283