前言

近期博主在搞毕业设计,需要用yolov3网络来训练自己的数据集。但是在训练数据集的时候想要保存log数据,在网上找了几种方法都是使用Linux的tee命令,将输出的log保存到文件。但是tee命令要在命令执行结束后才能写入文件(可能跟缓冲区有关,但是博主试了几种方法没有解决),很不方便(训练途中可能出现各种情况导致异常退出,权重文件可使用backup保存,但log文件没办法保存)。

解决方案

最终想到一种比较好的解决方案就是修改detector.c这个文件的代码,该文件的目录为/darknet/src/detector.c
在该文件的大约第316行,添加如下代码即可(添加完成后要重新编译darknet):

        /************输出log到backup************/
        char fileNameStr[256];
        sprintf(fileNameStr, "%s/Log.txt", backup_directory);
        FILE* fl =fopen(fileNameStr,"a");
        if(fl) fprintf (LogFId,"\n %d: %f, %f avg loss, %f rate, %lf seconds, %d images, %f hours left\n", iteration, loss, avg_loss, get_current_rate(net), (what_time_is_it_now() - time), iteration*imgs, avg_time);
        fflush(fl);
        if(fl) fclose(fl);
        /*************************************/

detector.c

最终效果

每次迭代的log信息都会实时的保存到backup目录下的Log.txt文件。
最终效果

版权声明: 本博客所有文章除特别声明外,均采用署名-非商业性使用-相同方式共享 4.0 国际CC BY-NC-SA 4.0 )许可协议。转载请注明出处!
最后修改:2021 年 01 月 07 日 04 : 52 PM
如果觉得我的文章对你有用,请随意赞赏