Caffe-Miscoroft无训练日志解决方法

26 篇文章 0 订阅

本文转自http://blog.csdn.net/sunshine_in_moon/article/details/53529028,并修改了其中一丁点儿问题。非常感谢博主的分享,跟着博主的攻略一步步做下来,完全实现,没有问题。


请注意如果.py文件中有中文,请在文件开头加上# -*- coding: utf-8 -*-,否则会报错yntaxError:Non-ASCII character '\xe6' in file

另外代码是Python2.7版本的,如果是Python3版本的,运行会出错,解决方案请参考http://blog.csdn.net/zyx19950825/article/details/61919038



Caffe的训练日志就是我们在命令窗口中看到的训练时打印出来的信息,我们可以利用这些信息画训练时loss

accruacy图,至于怎么利用这些信息画出这两个图是下一篇将要讲述的问题。我们先来看看这些保存在什么地方。如果你是使用的Caffe-Windows版本是happynear大神编译的老版本,那你应该会在bin文件下发现一个log文件夹,里面保存的就是我们需要的训练文件,文件名上有时间,可以很方便的找到我们想要的日志。

然而,很不幸的Caffe官方提供的Windows版本,即https://github.com/BVLC/caffe/tree/windows,找不到这个文件夹了(我找了很久都没有找到)。今天偶然间看了一篇大神的博客,发现他也遇到了和我同样的问题,大神博客地址如下,里面还有Ubuntu下的解决方案(http://blog.csdn.net/lishanlu136/article/details/51491301)。这篇博客给了我很大的灵感,我比较了新旧版本的Caffe,原来问题都出来src文件下的commom.cpp文件,新版本Caffe-Windows不知出于何种目的,将生成日志文件的函数去掉了,因此我们也就找不到日志文件了。既然问题的根源找到了,下面就说说解决方法,其实很简单,照葫芦画瓢。

使用VS2013打开Caffe,找到src/common.cpp文件,添加如下代码:


1、添加几个头文件

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include <boost/date_time.hpp>  
  2. #include <process.h>  
  3. #include <direct.h>  
2、添加一个生成日志的子函数

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. void initGlog() {  
  2.   FLAGS_log_dir = ".\\log\\";//存放日志文件的文件夹路径,我们可以自己指定  
  3.   _mkdir(FLAGS_log_dir.c_str());  
  4.   std::string LOG_INFO_FILE;  
  5.   std::string LOG_WARNING_FILE;  
  6.   std::string LOG_ERROR_FILE;  
  7.   std::string LOG_FATAL_FILE;  
  8.   std::string now_time = boost::posix_time::to_iso_extended_string(boost::posix_time::second_clock::local_time());  
  9.   now_time[13] = '-';  
  10.   now_time[16] = '-';  
  11.   LOG_INFO_FILE = FLAGS_log_dir + "INFO" + now_time + ".log"//将txt改为log,因为caffe处理脚本处理的是log类型,
  12.   google::SetLogDestination(google::GLOG_INFO, LOG_INFO_FILE.c_str());  
  13.   LOG_WARNING_FILE = FLAGS_log_dir + "WARNING" + now_time + ".txt";  
  14.   google::SetLogDestination(google::GLOG_WARNING, LOG_WARNING_FILE.c_str());  
  15.   LOG_ERROR_FILE = FLAGS_log_dir + "ERROR" + now_time + ".txt";  
  16.   google::SetLogDestination(google::GLOG_ERROR, LOG_ERROR_FILE.c_str());  
  17.   LOG_FATAL_FILE = FLAGS_log_dir + "FATAL" + now_time + ".txt";  
  18.   google::SetLogDestination(google::GLOG_FATAL, LOG_FATAL_FILE.c_str());  
  19. }  
需要注意的是这个子函数一定要定义在void GlobalInit(int* pargc, char*** pargv)之前,因为Globallnit函数要调用initGlob()子函数。

3、在void GlobalInit(int* pargc, char*** pargv)函数中调用2中定义的子函数

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. void GlobalInit(int* pargc, char*** pargv) {  
  2.   // Google flags.  
  3.   ::gflags::ParseCommandLineFlags(pargc, pargv, true);  
  4.   // Provide a backtrace on segfault.  
  5.   //::google::InstallFailureSignalHandler();  
  6.   // Google logging.  
  7.   /*******添加到下面位置*********/  
  8.   initGlog();  
  9.   /**************************/  
  10.   ::google::InitGoogleLogging(*(pargv)[0]);  
  11. }  
4、重新生成libcaffe

右击项目libcaffe->生成,等待就可以了。

5、重新生成caffe,这个很重要否则无法生效,我一开始就忘记这一步,所以没有成功。

右击项目caffe->生成,等待就OK!

6、分享两个很有用的连接

Linux下训练日志重定向及画loss与accuracy曲线:http://blog.csdn.net/fx409494616/article/details/53197209?ref=myread,这篇博客中的做法更加简洁

caffe中如何关闭命令行log输出:http://blog.csdn.net/zhangla1220/article/details/50999072,使用于工程。

一切搞定,赶紧去试试吧!

再次训练网络时,你会在Build\x64\Release下发现多出一个log文件夹,我们所要的训练日志就保存在里面了。至于如何利用这些日志文件,画loss曲线和accuracy曲线,下一篇再详细讲解。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,针对你的问题,这里简单介绍一下如何使用caffe-ssd预训练模型进行目标检测。 caffe-ssd是基于caffe框架实现的单阶段目标检测算法,使用预训练模型可以加快模型训练的速度,同时也可以提高模型的检测精度。下面是使用预训练模型做目标检测的步骤: 1. 下载预训练模型 caffe-ssd官方提供了一些预训练模型,可以在这里下载:https://github.com/weiliu89/caffe/tree/ssd#models。选择适合自己数据集的模型进行下载。 2. 准备数据集 准备自己的数据集,包括训练集、验证集和测试集。数据集需要满足SSD数据格式要求,即每个样本需要有对应的标注文件,标注文件格式为:类别id、xmin、ymin、xmax、ymax(例如:0 0.1 0.2 0.3 0.4,表示类别为0,左上角坐标为(0.1, 0.2),右下角坐标为(0.3, 0.4))。 3. 修改配置文件 修改caffe-ssd的配置文件,将模型路径、数据路径、类别数等参数配置正确。其中,模型路径需要指定为下载的预训练模型路径。 4. 训练模型 使用修改后的配置文件训练模型。训练过程中可以调整学习率、迭代次数等参数,以达到更好的效果。 5. 测试模型 使用测试集对训练好的模型进行测试,并计算模型在测试集上的精度和召回率等指标。 以上就是使用caffe-ssd预训练模型做目标检测的基本步骤。需要注意的是,使用预训练模型虽然可以加速模型训练过程,但是如果数据集和预训练模型的差异较大,仍然需要进行微调。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值