大家好:
在训练yolov7模型时,一直出现损失值为nan的情况,因此将解决方案供大家参考一下。
首先,应该都是遇见以下报错开始的:
关于这个报错,可以搜索到最多的解决方案是:
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
即在train.py文件的最开始加上上述两句语句,可以解决报错,即开始训练,但是所有的损失值均为nan,报错中最后也有提示"可能导致崩溃或带来不正确的结果",因此这种解决方案就不一定正确。
另外一种解决方案,报错中第一句提到一个文件:libiomp5md.dll,这个文件可以在虚拟环境文件目录下搜索,会有两个结果,其中一个存在于(我的虚拟环境为yolov7)如下图所示,另一个不用管。
将这个文件,移除出现在的位置,可以剪切到其他位置保存。
这个解决方法可以使box、cls损失正常,但是obj与total仍然为nan。
因此,继续寻找解决方案。
首先降低了torch版本:安装如下版本。我的之前都是2.X版本,与官网的版本相差较多。
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.6 -c pytorch -c nvidia
其中,可能出现一个报错:
TypeError:No loop matching the specified signature and casting was found for ufunc greater
这个需要降低numpy版本,我的是numpy版本是1.23.5。
至此,yolov7训练时出现损失值为loss的问题就可以解决啦。