win10 GPU 下caffe faster-rcnn C++版训练自己的图片

概述与效果展示:

说明: 记录一下caffe faster-rcnn学习和使用过程,部分图片和描述直接用网上的,如有雷同,不用怀疑,哪就是我抄的(手动滑稽)
效果图: 1表示长螺丝 2表示短螺丝
在这里插入图片描述

参考文档

下面是主要参考文档:

  1. https://blog.csdn.net/maltliquor/article/details/78261339 caffe 的编译
  2. https://blog.csdn.net/Angela_qin/article/details/79443115 caffe faster-rcnn编译和使用
  3. https://github.com/huaze555/windows-caffe-faster-rcnn C++ 版提供者的github
  4. https://blog.csdn.net/zxj942405301/article/details/78602671 C++ 版提供者的博客 底下有一些问题和解决方式(出了问题可以看下)

系统环境以及资源链接

环境以及相关连接 :

  1. 系统版本:win10 x64
  2. 显卡配置: NVIDIA GeForce GTX745 4GB
  3. CUDA 7.5 ————官网下载链接:https://developer.nvidia.com/cuda-75-downloads-archive
  4. Cudnn:6.0 ————官网下载链接:https://developer.nvidia.com/search/site/cudnn-7.5-windows10-x64-v6.0
  5. Anacanda2 ————官网下载链接:https://www.anaconda.com
  6. Visual Studio 2013 ————别人的网盘链接: https://pan.baidu.com/s/1o8aDsVK密码: 8fc9
  7. windows-caffe-faster-rcnn-master ———github链接:https://github.com/huaze555/windows-caffe-faster-rcnn

caffe配置环境

流程

  1. 安装Anacanda2
  2. 安装CUDA 7.5
  3. 下载Cudnn:6.0 并配置(这个是lib库caffe框架调用GPU会用得到)
  4. 安装Visual Studio 2013(最好使用2013,亲测其他版本编译问题挺多的)
  5. 下载windows-caffe-faster-rcnn-master
  6. 用Visual Studio 2013编译windows-caffe-faster-rcnn-master

具体步骤:
1 安装Anacanda2 在这里插入图片描述下载然后直接安装 记得不要有中文路径
(顺便提一句,如果你老是安装不上Anacanda(装不全),不要想了,直接重装系统吧,我下了各个版本,用不同方法装了20几遍,最后还是重装系统了)

2. 安装CUDA 7.5
你的显卡要是英伟达的, CUDA版本要和你的显卡版本对应(通常高板的cuda会向下兼容)

使用默认路径
在这里插入图片描述
检测兼容性时如果有什么问题可以直接忽略
在这里插入图片描述
选择精简安装
在这里插入图片描述
3. 下载Cudnn:6.0 并配置

安装cudnn,将cudnn解压后,cudnn中的cuda文件夹下有bin、include、lib文件夹,要把文件夹中的东西提取出来,放进cuda中C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5路径下对应的 bin、include、lib文件夹中

我的解压目录
在这里插入图片描述
将cuda下的三个文件夹下的文件放入 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5 下对应目录下
在这里插入图片描述
4. 安装Visual Studio 2013
这个没什么好说的,直接跳过

5. 下载windows-caffe-faster-rcnn-master
windows-caffe-faster-rcnn-master --github链接:https://github.com/huaze555/windows-caffe-faster-rcnn

在F盘建一个文件夹Caffe_FCNN_GPU(自己可在其他盘建文件夹,名字可以随意,不要有中文)将下载的windows-caffe-faster-rcnn-master 解压进去(这里其他文件请先忽略)

在这里插入图片描述

将前面解压的cudnn 文件夹中的cuda文件夹整个拷贝到Caffe_FCNN_GPU下

在这里插入图片描述
6. 用Visual Studio 2013编译windows-caffe-faster-rcnn-master
进入windows-caffe-faster-rcnn-master文件夹下的Windows文件夹
在这里插入图片描述
打开CommonSettings.props,更改参数
在这里插入图片描述在这里插入图片描述
打开windows-caffe-faster-rcnn-master\windows\Caffe.sln 对libcaffecaffe项目做如下设置:项目→属性→C/C++→常规→将警告视为错误
在这里插入图片描述
选择编译环境为Release,x64
在这里插入图片描述
编译工程:先编译libcaffe项目 再编译整个工程 (其他工程需要libcaffe的支持)
可以参考https://blog.csdn.net/nk_wavelet/article/details/78935511
编译很慢,最好在有网络的情况下编译(会自动下载一些依赖文件)

可能遇到的问题(大部分问题网上基本都有解决方案):

  1. Caffe.sln工程打开的时候加载不全(例如libcaffe等工程加载不上),一般是CommonSettings.props
    配置没搞好比如:配置的路径不对 或CommonSettings.props文件没有加载
    解决:打开CommonSettings.props修改配置再重新打开工程
  2. 编译报错 如
    在这里插入图片描述
    解决:
    进入错误代码中
    将:
    template <typename Dtype>
    inline void setConvolutionDesc(cudnnConvolutionDescriptor_t* conv,
        cudnnTensorDescriptor_t bottom, cudnnFilterDescriptor_t filter,
        int pad_h, int pad_w, int stride_h, int stride_w) {
      CUDNN_CHECK(cudnnSetConvolution2dDescriptor(*conv,
          pad_h, pad_w, stride_h, stride_w, 1, 1, CUDNN_CROSS_CORRELATION));
    }

修改为:

    template <typename Dtype>
    inline void setConvolutionDesc(cudnnConvolutionDescriptor_t* conv,
        cudnnTensorDescriptor_t bottom, cudnnFilterDescriptor_t filter,
        int pad_h, int pad_w, int stride_h, int stride_w) {
      //CUDNN_CHECK(cudnnSetConvolution2dDescriptor(*conv,
          //pad_h, pad_w, stride_h, stride_w, 1, 1, CUDNN_CROSS_CORRELATION));
    #if CUDNN_VERSION_MIN(6, 0, 0)
      CUDNN_CHECK(cudnnSetConvolution2dDescriptor(*conv,
          pad_h, pad_w, stride_h, stride_w, 1, 1, CUDNN_CROSS_CORRELATION,
          dataType<Dtype>::type));
    #else
      CUDNN_CHECK(cudnnSetConvolution2dDescriptor(*conv,
          pad_h, pad_w, stride_h, stride_w, 1, 1, CUDNN_CROSS_CORRELATION));
    #endif
    }

编译成功截图
在这里插入图片描述编译生成的可执行文件
在这里插入图片描述
--------------------------------------------编译caffe完成-------------------------------------------------------------------

训练自己的模型:

流程(以vgg16为例)

  1. 准备以及处理图片(人工标注),生成相应格式的文档
  2. 修改配置文件voc_config.json
  3. 修改训练和测试参数 (包括solver.prototxt test.prototxt train_val.prototxt)
  4. 进行训练
  5. 测试

1. 准备以及处理图片
网络需要的文件有
在这里插入图片描述.trainval 文件解析(windows-caffe-faster-rcnn-master\examples\FRCNN\dataset 下有个模板)(训练参数配置文件下面用到说):

#序号
图片名
目标个数
标签 左上角横坐标 左上角纵坐标 右下角横坐标 右下角纵坐标 0/1(是否容易识别?)
在这里插入图片描述注意点:
1)必须第一行是# 序号,
2)而且类别数(标签)必须从1开始(非0)
3)如果你用txt打开 对的可能没这么整齐 这个是用notepad++打开的

生成 .trainval 文件 :
思路:用 labelImg 工具对物体进行标注并生成xml, 再把xml转成 .trainval文件
labelImg工具 exe版 下载链接: https://pan.baidu.com/s/1YL6nief3yZw43VUQ33ANog 提取码: q76a
labelImg工具的使用教程网上很多自行观看

将生成的xml转换为 .trainval
转换工具下载链接:https://pan.baidu.com/s/1AwTrVcNRODW8Ya0mZVke4Q 提取码:qgxq(写的比较随意,将就着用吧,你也可以按上面.trainval格式自己写个小程序)

2. 修改配置文件
配置文件在 windows-caffe-faster-rcnn-master\examples\FRCNN\config 路径下可以找到
配置文件解析
在这里插入图片描述 修改配置文件voc_config.json
找到 windows-caffe-faster-rcnn-master\examples\FRCNN\config\voc_config.json修改n_classes 为自己的类别数加一 例如 长钉子 和 短钉子 两个类 n_classes 为3 (自己类数+背景类 =n_classes )
在这里插入图片描述

3. 修改训练和测试参数 (包括solver.prototxttrain_val.prototxttest.prototxt(测试用到一并改了))
训练流程解析:
windows-caffe-faster-rcnn-master\examples\FRCNN\vgg16 下有train_frcnn.bat文件
训练的开始train_frcnn.bat (作用:调用超参数文件)——> 超参数文件 solver.prototxt( 作用:配置和调用训练网络) ——>训练网络train_val.prototxt(作用:执行训练)

修改
1.改windows-caffe-faster-rcnn-master\models\FRCNN\vgg16\solver.prototxt
在这里插入图片描述
windows-caffe-faster-rcnn-master\models\FRCNN\vgg16\ train_val.prototxt
改为自己的路径
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

windows-caffe-faster-rcnn-master\models\FRCNN\vgg16\ test.prototxt
在这里插入图片描述

4. 进行训练
打开 windows-caffe-faster-rcnn-master\examples\FRCNN\vgg16\train_frcnn.bat
修改文件路径为自己的路径
在这里插入图片描述VGG16.v2.caffemodel下载 http://www.oubear.com/yun/1jInm5KE.html (非必须)

convert_model.py 需要依赖文件 把 windows-caffe-faster-rcnn-master\Build\x64\Release\pycaffe
下的caffe文件夹 复制到 Anaconda2\Lib\site-packages 下 如图:

在这里插入图片描述在这里插入图片描述

运行train_frcnn.bat 等待结果
save new model into … 表示成功
在这里插入图片描述测试
新建一个工程 新建caffe工程可参照 https://blog.csdn.net/auto1993/article/details/70198435](https://blog.csdn.net/auto1993/article/details/70198435)
代码如下:

#include "stdafx.h"
//Detect head file  
#include "C:\Users\Administrator\Documents\Visual Studio 2013\Projects\testImage\include\Register.h"           //This file is necessary used to register the relevant caffe layer 

using namespace std;
using namespace cv;
using namespace caffe::Frcnn;
int main(){
   Mat frame = imread("test.jpg");  //image  
   /* Initiaze the detector, the four parameters were:
   1. network file
   2. trained model file
   3. config file
   4. whether to open the GPU mode, default true
   5. whether to ignore print log, default true
   */
   FRCNN_API::Detector detect("test.prototxt", "vgg16.caffemodel", "voc_config.json", true, false);
   std::vector<caffe::Frcnn::BBox<float> > boxes = detect.predict(frame);
   // forward, detect results saved here 
   for (int i = 0; i < boxes.size(); i++)   //draw rects 
   {
   	cout << boxes[i].id << "\n";
   	cout << boxes[i].confidence << "\n";
   	rectangle(frame, cv::Point(boxes[i][0], boxes[i][1]), cv::Point(boxes[i][2], boxes[i][3]), Scalar(0, 0, 255));
   }
   imshow("demo", frame);
   waitKey(0);
   return 0;
}

完工!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值