用自己的数据完成“分类”
来源:互联网 发布:广东11选5遗漏360数据 编辑:程序博客网 时间:2024/06/06 02:52
深度学习框架用的是caffe;网络模型是CaffeNet(AlexNet的变形)。
1.准备数据
我用的是Fish4knowledge数据集,数据集内总共有27370张图片,23类,每一类的数量不等且差异大。将其按照5:1:1的比例分为训练集、验证集、测试集。(记住由于每类的数据不均衡,所以一定要随机分配)
- 训练集:19550张图片
- 验证集:3910张图片
- 测试集:3910张图片
2.生成filelist的txt文件
接下来要生成三个文件列表,train.txt、val.txt、test.txt。文件中的每一行存放的是一张图片的文件名(包含相对路径)和类别号,中间用空格隔开。我的类别号从1开始,到23。
可以用python\matlab\shell,任意挑一种你熟练的语言遍历整个数据集,获取文件名列表以及每个文件的类别。
3.转换为lmdb格式
在深度学习的实际应用中,我们经常用到的原始数据是图片文件,如jpg,jpeg,png,tif等格式的,而且有可能图片的大小还不一致。因此我们可以调用caffe里的convert_imageset工具来将图片文件转换成caffe框架中能直接使用的db文件。create_lmdb.sh 且数据集中的图片大小根据情况统一成47*47。
#!/usr/bin/en shrm -rf img_lmdb_train/home/zh/caffe/build/tools/convert_imageset --shuffle \ # "\" 是另起一行的意思 --resize_height=47 --resize_width=47 \Image/train/ \ImageSets/train.txt img_lmdb_trainrm -rf img_lmdb_val/home/zh/caffe/build/tools/convert_imageset --shuffle \--resize_height=47 --resize_width=47 \Image/val/ \ImageSets/val.txt img_lmdb_valrm -rf img_lmdb_test/home/zh/caffe/build/tools/convert_imageset --shuffle \--resize_height=47 --resize_width=47 \Image/test/ \ImageSets/test.txt img_lmdb_test
convert_imageset的使用格式:
convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
FLAGS: 图片参数 # –shuffle是打乱数据顺序,–backend设置生成的数据形式:lmdb或者leveldb,默认生成lmdb。
ROOTFOLDER/: 图片存放路径
LISTFILE: 图片文件列表清单
DB_NAME: 最终生成的db文件存放目录
4.计算均值并保存
图片减去均值再训练,会提高训练速度和精度。因此,一般都会有这个操作。
caffe程序提供了一个计算均值的可执行文件compute_image_mean,我们直接使用就可以了。
compute_image_mean带两个参数,第一个参数是lmdb训练数据位置,第二个参数设定均值文件的名字及保存路径。
运行成功后,会在 设定的保存路径下面生成一个mean.binaryproto的均值文件。
5.创建模型并编写配置文件
模型就用caffe自带的”CaffeNet”模型( AlexNet的一个变体),位置在 models/bvlc_reference_caffenet/文件夹下, 将需要的两个配置文件solver.prototxt,train_val.prototxt 复制到自己的工程文件夹下;在models/文件夹下,除了CaffeNet还有AlexNet、GoogleNet、R-CNN等网络。
- 修改solver.prototxt
3910个测试数据,测试集的batch_size为50,因此test_iter设置为80,就能全cover了。
net: "/home/zh/data/fish4knowledge/Fish_species_recognition/train_val.prototxt"test_iter: 80 # 测试集的迭代次数test_interval: 80 #训练的时候,每迭代test_interval次就进行一次测试,得到准确率值。base_lr: 0.01 #初始的学习率lr_policy: "step"gamma: 0.1stepsize: 5000 #每隔stepsize次,学习率降低gamma倍display: 20 #每隔20次打印一次lossmax_iter: 25000 #训练的最大迭代次数momentum: 0.9weight_decay: 0.0005snapshot: 10000 #每迭代10000次备份一次中间caffemodelsnapshot_prefix: "models/bvlc_reference_caffenet/caffenet_train" #中间模型的保存地址和命名前缀solver_mode: GPU
2.修改train_val.prototx
只需要修改train和test的data层就可以了,其它可以不用管。
name: "CaffeNet"layer { name: "data" type: "Data" top: "data" top: "label" include { phase: TRAIN #这个层仅在train阶段 } transform_param { #数据的预处理 mirror: true crop_size: 47 ##change mean_file: "/home/zh/data/fish4knowledge/Fish_species_recognition/mean.binaryproto" ##change } data_param { source: "/home/zh/data/fish4knowledge/Fish_species_recognition/img_lmdb_train" ##change batch_size: 256 backend: LMDB }}layer { name: "data" type: "Data" top: "data" top: "label" include { phase: TEST #这个层仅在test阶段 } transform_param { mirror: false crop_size: 47 ##change mean_file: "/home/zh/data/fish4knowledge/Fish_species_recognition/mean.binaryproto" ##change } data_param { source: "/home/zh/data/fish4knowledge/Fish_species_recognition/img_lmdb_test" ##change batch_size: 50 #测试集的batch_size backend: LMDB }}
6.训练和测试
如果前面都没有问题,数据准备好了,配置文件也配置好了,这一步就比较简单了。
build/tools/caffe train -solver 绝对路径/solver.prototxt
- 用自己的数据完成“分类”
- 用Adaboost对自己的数据分类
- 用SVM对自己的数据分类
- 用ANN对自己的数据集分类
- 用CNN工具箱对自己的数据集分类
- 用Nodejs完成自己的个人博客
- 自己完成一个冒泡排序(bubble_sort),可以完成不同类型数据的排序
- caffe:用自己的图像数据训练模型(图片分类)
- yolo-v1 train和test自己的分类和数据
- 训练自己的分类数据(only cpu)
- 用libsvm完成分类试验
- 想方设法完成自己的课题
- 一步一步完成自己的梦想
- 自己实现一个bubble_sort(冒泡排序),可以完成不同类型数据的排序
- 自己收藏的文章分类
- 训练自己的分类器
- Java 实现 BP 神经网络完成 Iris 数据分类
- Android端运行Tensorflow的demo去分类自己的数据集
- PBFT(拜占庭容错)
- hibernate与spring整合
- 指针和一维数组关系
- hive安装配置
- t.xml文件中的Activity属性android:name必须和工程src目录下的相关类名保持一致
- 用自己的数据完成“分类”
- 什么是MyBatis
- 内存移动:memmove原理模拟实现
- 决策树算法之ID3
- 数据结构——链表之逆序建立链表
- (84)温度单位的转换工具(方法的使用)
- Linux系统下用find命令查找最近修改过的文件
- JVM内存区域划分
- Amazon Dynamo架构分析(一)