caffe 训练自己的分类模型

article/2025/10/29 15:24:23

学习caffe的最终目的,是可以利用自己的数据集,训练模型,并解决实际问题。

所以在前面跑通了mnist和cifar-10例程的基础上,尝试训练自己的模型,从头到尾走一遍所有的流程。准备数据、训练并得到模型,利用模型进行分类预测。


一、准备数据

1、在网上找了一些图片,分为五类,编号为0,1,2,3,4,每类训练数据50张,测试数据20张。博主将所有的train图片都放在了train文件夹下,编号为0-49,100-149,200-249,300-349,400-449,把所有的test图片都放在了test文件夹下,编号为0-19,100-119,200-219,300-319,400-419。

2、得到train.txt和test.txt清单文件。网上有很多方法,也可以自己用C++写代码实现。部分清单如下所示:

3、将train.txt和test.txt放在 与 train和test文件夹同一目录下。我的为:caffe-master\examples\myExample。

0.jpg 0
1.jpg 0
2.jpg 0
3.jpg 0
4.jpg 0
5.jpg 0
6.jpg 0
7.jpg 0
8.jpg 0
9.jpg 0
10.jpg 0
11.jpg 0
12.jpg 0
13.jpg 0
14.jpg 0
15.jpg 0
16.jpg 0
17.jpg 0
18.jpg 0
19.jpg 0
100.jpg 1
101.jpg 1
102.jpg 1


二、转换为lmdb格式

1、安装git客户端,方便后面运行.sh文件。  安装教程 

2、找到caffe-master\examples\imagenet目录下的create_imagenet.sh文件,并对其进行修改。

#!/usr/bin/env sh
# Create the imagenet lmdb inputs
# N.B. set the path to the imagenet train + val data dirs
set -e#EXAMPLE=examples/imagenet
DATA=E:/NotFineshed/caffeWin10/caffe-master/examples/myExample
TOOLS=E:/NotFineshed/caffeWin10/caffe-master/Build/x64/ReleaseTRAIN_DATA_ROOT=E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/train/
VAL_DATA_ROOT=E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/test/# Set RESIZE=true to resize the images to 256x256. Leave as false if images have
# already been resized using another tool.
RESIZE=true
if $RESIZE; thenRESIZE_HEIGHT=256RESIZE_WIDTH=256
elseRESIZE_HEIGHT=0RESIZE_WIDTH=0
fiif [ ! -d "$TRAIN_DATA_ROOT" ]; thenecho "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT"echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \"where the ImageNet training data is stored."exit 1
fiif [ ! -d "$VAL_DATA_ROOT" ]; thenecho "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT"echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" \"where the ImageNet validation data is stored."exit 1
fiecho "Creating train lmdb..."GLOG_logtostderr=1 $TOOLS/convert_imageset \--resize_height=$RESIZE_HEIGHT \--resize_width=$RESIZE_WIDTH \--backend=lmdb \--shuffle \$TRAIN_DATA_ROOT \$DATA/train.txt \$EXAMPLE/mydata_train_lmdbecho "Creating val lmdb..."GLOG_logtostderr=1 $TOOLS/convert_imageset \--resize_height=$RESIZE_HEIGHT \--resize_width=$RESIZE_WIDTH \--backend=lmdb \--shuffle \$VAL_DATA_ROOT \$DATA/test.txt \$EXAMPLE/mydata_test_lmdbecho "Done."

3、运行完成后,在git的文件位置目录下,得到两个文件夹 madata_train_lmdb 和 mydata_test_lmdb


三、生成图像均值

1、修改make_imagenet_mean.sh文件,如下所示

#!/usr/bin/env sh
# Compute the mean image from the imagenet training lmdb
# N.B. this is available in data/ilsvrc12#EXAMPLE=examples/imagenet
DATA=E:/NotFineshed/caffeWin10/caffe-master/examples/myExample
TOOLS=E:/NotFineshed/caffeWin10/caffe-master/Build/x64/Release$TOOLS/compute_image_mean.exe $DATA/mydata_train_lmdb $DATA/mydata_mean.binaryproto --backend=lmdbecho "Done."
2、运行完成后,在caffe-master\examples\myExample目录下,生成mydata_mean.binaryproto文件。

四、创建模型并编写配置文件

1、模型就用caffe自带的caffenet模型,位置在 caffe-master\models\bvlc_reference_caffenet/文件夹下, 我们需要的三个文件是solver.prototxt 和train_val.prototxt、deploy.prototxt。博主将train_val.prototxt改名为train_test.prototxt。

2、修改其中的solver.prototxt,如下所示

net: "E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/train_test.prototxt"
test_iter: 5
test_interval: 10
base_lr: 0.001
lr_policy: "step"
gamma: 0.1
stepsize: 100
display: 20
max_iter: 1000
momentum: 0.9
weight_decay: 0.005
solver_mode: GPU
snapshot: 500
snapshot_prefix: "E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/minemodel"
3、修改train_test.protxt,需要修改两个阶段的data层。

    实际上就是修改两个data layer的mean_file和source这两个地方,其它都没有变化 。

    然后修改全连接层fc8的输出num,即分类数,我的为五类,所以改为5.

name: "CaffeNet"
layer {name: "data"type: "Data"top: "data"top: "label"include {phase: TRAIN}transform_param {mirror: truecrop_size: 227mean_file: "E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/mydata_mean.binaryproto"}
# mean pixel / channel-wise mean instead of mean image
#  transform_param {
#    crop_size: 227
#    mean_value: 104
#    mean_value: 117
#    mean_value: 123
#    mirror: true
#  }data_param {source: "E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/mydata_train_lmdb"batch_size: 25backend: LMDB}
}
layer {name: "data"type: "Data"top: "data"top: "label"include {phase: TEST}transform_param {mirror: falsecrop_size: 227mean_file: "E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/mydata_mean.binaryproto"}
# mean pixel / channel-wise mean instead of mean image
#  transform_param {
#    crop_size: 227
#    mean_value: 104
#    mean_value: 117
#    mean_value: 123
#    mirror: false
#  }data_param {source: "E:/NotFineshed/caffeWin10/caffe-master/examples/myExample/mydata_test_lmdb"batch_size: 20backend: LMDB}
}

4、修改deploy.prototxt文件

 同样的修改num_output为5(5个类别)。


五、开始训练

1、在caffe-master目录下,新建train-my-caffe-model.txt,并输添加以下代码,添加完成后,再将后缀名改为.bat

Build\x64\Release\caffe.exe train --solver=examples/myExample/solver.prototxt
pause

另一种方式:新建一个train-my-caffe-model.sh文件,添加一下代码,用git运行也可以的。

DATA=E:/NotFineshed/caffeWin10/caffe-master/examples/myExample
TOOLS=E:/NotFineshed/caffeWin10/caffe-master/Build/x64/Release
$TOOLS/caffe.exe train --solver=$DATA/solver.prototxt
read -p "press Enter to continue"

2、双击.bat文件,即可开始训练。


六、各种报错及解决办法

1、F0108 11:44:23.991556  8376 db_lmdb.hpp:15] Check failed: mdb_status == 0 (3 vs. 0) 系统找不到指定的路径。

 解决办法: http://blog.csdn.net/u012308979/article/details/72793108

2、F0108 13:05:50.865810  9376 syncedmem.cpp:56] Check failed: error == cudaSuccess (2 vs. 0)  out of memory

解决办法:GPU显存不够,修改batch_size的值,改为25


七、结果

如下图所示。


感觉训练的结果不够满意啊,接下来,需要了解模型网络参数,修改参数以得到更好的训练结果。


八、输入单张图片,进行分类预测

1、新建.sh文件,输入以下代码即可,然后用git运行

#EXAMPLE=examples/imagenet
DATA=E:/NotFineshed/caffeWin10/caffe-master/examples/myExample
TOOLS=E:/NotFineshed/caffeWin10/caffe-master/Build/x64/Release$TOOLS/classification.exe $DATA/deploy.prototxt $DATA/minemodel_iter_1000.caffemodel $DATA/mydata_mean.binaryproto $DATA/synset_words.txt $DATA/1.jpg
read -p "press Enter to continue"







http://chatgpt.dhexx.cn/article/v0WpbAsi.shtml

相关文章

bert中文分类模型训练+推理+部署

文章预览: 0. bert简介1. bert结构1. bert中文分类模型训练1 下载bert项目代码代码结构 2 下载中文预训练模型3 制作中文训练数据集 2. bert模型推理1.tensorflow推理 2. onnxruntime推理1. checkpoint格式转换为saveModel格式2. saveModel格式转换为onnx格式3. 使用…

Bert模型详解和训练实例

前面已经介绍了transformer,理解了transformer,那么理解bert就简单多了。对transformer不是很了解的可以跳转到https://blog.csdn.net/one_super_dreamer/article/details/105181690 bert的核心代码解读在https://blog.csdn.net/one_super_dreamer/arti…

无监督模型 训练过程_监督使用训练模型

无监督模型 训练过程 Machine Learning, Artificial Intelligence, and Deep Learning are some of the most complex, yet highly demanded fields of expertise today. There are innumerable resources and tools to work in these fields, and one such popular tool is Su…

Tensorflow V2 图像识别模型训练流程

Tensorflow V2.0 图像识别教程 代码: https://github.com/dwSun/classification-tutorial.git 教程参考官方专家高级教程: https://tensorflow.google.cn/tutorials/quickstart/advanced?hlen 这里以 TinyMind 《汉字书法识别》比赛数据为例&#xf…

(三)mmclassification图像分类——模型训练

(三)mmclassification图像分类——模型训练和测试 1.模型训练1.1使用预训练模型1.2使用自己的数据训练1.2.1制作数据集1.2.2修改模型参数(configs文件)(1)models(2)datasets(3)schedules(4)新建mobilenet_v2_b32x8_car.py 1.3训练…

tensorflow CNN模型训练+优化参数+实战

训练线性函数 import numpy as np import tensorflow.keras as keras # 构建模型 model keras.Sequential([keras.layers.Dense(units1,input_shape[1])]) # optimizer优化,loss损失 model.compile(optimizersgd, lossmean_squared_error) #准备训练数据 xsnp.ar…

nanodet训练手势识别模型

序言 前段时间nanodet爆火,以非常小的模型和运算量,取得了超过tiny-yolov4的精度,非常惊艳,因为时间问题一直没有尝试,最近有空决定尝试一下。先来看下作者给的模型效果 一、nanodet安装 首先安装nanodet的环境包…

Pytorch教程[10]完整模型训练套路

一般的模型构建都是按照下图这样的流程 下面分享一个自己手动搭建的网络 from model import * import torchvision import torch from torch.utils.tensorboard import SummaryWriter from torchvision import transforms from torch import nn from torch.utils.data import …

PaddleOCR学习(二)PaddleOCR检测模型训练

这一部分主要介绍,如何使用自己的数据库去训练PaddleOCR的文本检测模型。 官方教程https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/detection.md 一、准备训练数据 首先你需要有自己的数据,如果没有自己的数据,推荐使…

迁移学习的模型训练

用深度学习解决目标检测有两个重要工作: 1、设计、实现、训练和验证模型 模型如果设计模型如何编程实现如何收集足够的数据来训练并验证模型是否符合预期 从头开始设计、实现、训练和验证模型是需要有众多深度学习算法人才做支撑,并且极其耗时耗力 2、…

TF2.0模型训练

TF2.0模型训练 概述数据集介绍1、通过fit方法训练模型准备数据创建模型编译模型训练模型 2、通过fit_generator方法训练模型构建生成器创建模型编译模型训练模型 3、自定义训练准备数据创建模型定义损失函数及优化器训练模型 下一篇TF2.0模型保存 概述 这是TF2.0入门笔记【TF2…

TensorFlow 2.0 —— 模型训练

目录 1、Keras版本模型训练1.1 构造模型(顺序模型、函数式模型、子类模型)1.2 模型训练:model.fit()1.3 模型验证:model.evaluate()1.4 模型预测:model.predict()1.5 使用样本加权和类别加权1.6 回调函数1.6.1 EarlySt…

如何在jupyter上运行Java代码(适用LINUX)

如何在jupyter上运行Java代码 1.下载必须软件 下载JDK且JDK版本必须 ≥ 9 ≥9 ≥9从github上下载ijava 附 : ijava下载链接.装有jupyter,我在LINUX上是直接装的anaconda 安装过程 将下载的ijava压缩包解压出来,并在此路径用该命令 : sudo…

Java单元测试介绍

文章目录 单元测试单元测试基本介绍单元测试快速入门单元测试常用注解 单元测试 单元测试基本介绍 单元测试: 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,…

Jupyter 配置 Java环境,写Java代码,测试成功

本次简单诉说下怎么通过jupyter安装iJava,写Java代码。 安装Java的不说了 我使用的是Java15 然后去:https://github.com/SpencerPark/IJava/releases 下载zip,不要下载其他的 得到就是一个py文件 下面就是一个 python install.py 我这里就…

java调用python执行脚本,附代码

最近有个功能需要java调用python脚本实现一些功能,前期需要做好的准备:配置好python环境,如下: 以下展示的为两种,一种为生成图片,另一种为生成字符串。 package com.msdw.tms.common.utils.py;import ja…

Selenium Java自动化测试环境搭建

IDE用的是Eclipse。 步骤1:因为是基于Java,所以首先要下载与安装JDK(Java Development Kit) 下载: 点击这里下载JDK 安装:按照默认安装一路点next就可以了。 验证:安装完成后,在命…

java单元测试(Junit)

相关代码下载链接: http://download.csdn.net/detail/stevenhu_223/4884357 在有些时候,我们需要对我们自己编写的代码进行单元测试(好处是,减少后期维护的精力和费用),这是一些最基本的模块测试。当然&…

Java单元测试工具:JUnit4(一)——概述及简单例子

(一)JUnit概述及一个简单例子 看了慕课网的JUnit视频教程: http://www.imooc.com/learn/356,总结笔记。 这篇笔记记录JUnit的概述,以及一个快速入门的例子。 1.概述 1.1 什么是JUnit ①JUnit是用于编写可复用测试集的…

Linux下执行Python脚本

1.Linux Python环境 Linux系统一般集成Python,如果没有安装,可以手动安装,联网状态下可直接安装。Fedora下使用yum install,Ubuntu下使用apt-get install,前提都是root权限。安装完毕,可将Python加入环境变…