微调(fine-tuning)caffemodel来得到属于自己的高精度分类模型

本文介绍了如何利用微调(fine-tuning)预训练的Caffe模型,如bvlc_reference_caffenet,来创建针对特定分类任务的高精度模型。步骤包括:下载预训练模型、收集和转换数据集、计算数据均值、修改网络和Solver参数、训练模型以及使用模型进行分类。通过调整全连接层以适应目标类别数,可以有效提高小样本量情况下的模型精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们想自己训练一个图片分类模型时,最让我们头疼的问题就是数据集的收集。一般深度学习都要求样本量在一万以上,当我们的样本量不足时,训练出来的model的精度必然大打折扣。在这种情况下我们其实可以通过微调(fine tuning)别人的model来得到一个符合我们自己分类要求的model。

因为训练好的model里面存放的就是各种各样的参数,微调实际上就是用别人预先训练好的参数,来作为我们的初始化参数,而不需要再去随机初始化了。尤其是在做图像识别分类时,其实深度神经网络的的前面那些层都是时在提取图片特征,最后那些层,尤其是全连接层才开始组合前面提取到的特征来做分类。所以,微调从本质上讲就是改了网络的全连接层,来让它的输出达到我们自己的实际需求。

caffe团队用imagenet数据集中的图片进行训练,迭代30多万次,训练出来一个model,bvlc_reference_caffenet.caffemodel。这个model将图片分为1000类,是目前为止最好的图片分类model了。

一般情况下,我们自己的要用的分类器根本不需要分1000类,所以我们就把网络最后一层的输出数量改成我们需要的分类个数。但对于其他层的结构就要和原网络保持一致,因为参数是根据network而来的。

下面我们就用一个小数据集为例,来介绍一下具体步骤。数据集来源于denny的学习专栏,在此安利一下该博客,很全很详细,值得一看。数据集的下载地址为http://pan.baidu.com/s/1MotUe 这个数据集共有500张图片,分为大巴车、恐龙、大象、鲜花和马五个类,每个类100张。命名分别以3,4,5,6,7开头,各为一类。我从其中每类选出20张作为测试,其余80张作为训练。因此最终训练图片400张(放在train文件夹内,每个类一个子文件夹),测试图片100张(放在test文件夹内,每个类一个子文件夹)。

下载成型model

将bvlc_reference_caffenet.caffemodel(点此下载)下载到caffe根目录下的 models/bvlc_reference_caffenet/ 文件夹下面。
也可以运行脚本文件进行下载:

sudo ./scripts/download_model_binary.py models/bvlc_reference_caffenet

收集数据集

根据自己的需求来寻找数据集,这里就以denny的学习专栏作者徐其华收集的数据集(点此下载)为例来讲解。

将图片下载下来后解压,有两个文件夹一个为训练样本train,一个为测试样本test。将其放在caffe的data文件夹中。

将数据集转化为lmdb格式

为了便于神经网络模型读取数据,我们一般都是要将图片数据转化为lmdb格式的。

首先我们要我们生成图片清单,来表面每张图片属于哪一类。

这里写图片描述

我们可以通过创建sh脚本文件,调用linux命令来生成图片清单:

create_filelist_train.sh

#!/usr/bin/env sh
DATA=train
echo "Create train.txt..."
rm -rf $DATA/train.txt
find $DATA -name 3*.jpg | cut -d '/' -f2 | sed "s/$/ 0/">>$DATA/train.txt
find $DATA -name 4*.jpg | cut -d '/' -f2 | sed "s/$/ 1/">>$DATA/tmp.txt
cat $DATA/tmp.txt>>$DATA/train.txt
rm -rf $DATA/tmp.txt
find $DATA -name 5*.jpg | cut -d '/' -f2 | sed "s/$/ 2/">>$DATA/tmp.txt
cat $DATA/tmp.txt>>$DATA/train.txt
rm -rf $DATA/tmp.txt
find $DATA -name 6*.jpg | cut -d '/' -f2 | sed "s/$/ 3/">>$DATA/tmp.txt
cat $DATA/tmp.txt>>$DATA/train.txt
rm -rf $DATA/tmp.txt
find $DATA -name 7*.jpg | cut -d '/' -f2 | sed "s/$/ 4/">>$DATA/tmp.txt
cat $DATA/tmp.txt>>$DATA/train.txt
rm -rf $DATA/tmp.txt
echo "Done.."

create_filelist_test.sh


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值