• caffe-windows之彩色图像分类例程cifar10


    一、caffe-windows之彩色图像分类例程cifar10

    训练测试网络模型【参考1】【参考2

    1. 准备数据

    1. 下载二进制数据集数据集,下载链接为http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz,在linux或是w10系统下,也可以直接运行.sh文件下载数据。

    2. 解压压缩包,得到6个bin文件和一个batches.meta.txt文件,其中data_batch_1.bin到bata_batch_5.bin是训练数据集,由50000张32*32的彩图组成,test_batch.bin是测试数据集,由10000张32*32的彩图组成,batches.meta.txt为标签文件。

    2. 数据格式转换

    1. 在examples/cifar10/下新建一个input_folder文件夹,将6个bin文件放入;

    2. 利用convert_cifar_data.exe可执行程序转换数据,可以转换成leveldb或mldb格式,直接存放在examples/cifar10/文件夹中。

       //leveldb	
       Buildx64Releaseconvert_cifar_data.exe examplescifar10input_folder examplescifar10 leveldb
      
       //lmdb
       Buildx64Releaseconvert_cifar_data.exe examplescifar10input_folder examplescifar10 lmdb
      

    3. 计算数据均值文件

    利用compute_image_mean.exe来得到数据集的均值文件,可以根据leveldb格式数据集或是lmdb格式数据集,命令如下:

    //leveldb,因为默认数据时lmdb格式,所以要用leveldb格式,需要用-backend字段指明。
    Buildx64Releasecompute_image_mean.exe  -backend=leveldb examplescifar10cifar10_train_leveldb examplescifar10mean.binaryproto
    
    //lmdb
    Buildx64Releasecompute_image_mean.exe examplescifar10cifar10_train_lmdbdb examplescifar10mean.binaryproto
    

    4. 训练模型

    1. 确定网络模型描述文件为examples/cifar10/cifar10_quick_train_test.prototxt,超参数配置文件为cifar10_quick_solver.prototxt.

    2. 如果是lmdb格式数据,只要修改cifar10_quick_solver.prototxt中的solver_mode改为CPU就好;

      如果是leveldb格式的话,cifar10_quick_train_test.prototxt中的数据source需要修改,同时backend需要改成LEVELDB。

    3. 执行训练命令

       Buildx64Releasecaffe.exe train -solver examplescifar10cifar10_quick_solver.prototxt
      

      【执行结果】:accruacy有0.7083,loss有0.867989,保存的快照文件为cifar10_quick_iter_4000.caffemodel.h5,cifar10_quick_iter_4000.solverstate.h5

    5. 测试网络模型

    1. 准备一张待识别的彩色图像,缩放到32*32.

    2. 确定识别网络模型描述文件为examplescifar10cifar10_quick.prototxt,模型权值文件为examplescifar10cifar10_quick_iter_4000.caffemodel.h5,数据集均值文件为examplescifar10mean.binaryproto,数据集标签文件为examplescifar10atches.meta.txt

    3. 利用classification.exe调用网络识别图像

       Buildx64Releaseclassification.exe examplescifar10cifar10_quick.prototxt examplescifar10cifar10_quick_iter_4000.caffemodel.h5 examplescifar10mean.binaryproto examplescifar10atches.meta.txt examplescifar10dog.jpg
      
    4. 识别结果0.7744的概率为狗。

    二、利用上述网络训练自己的24类字母数据集实现字母识别

    之前用mnist的网络去分类,发现效果不好,这次用cifar网络试一下。

    数据集包括24个类别的字母(A-Z),每类字母有90张左右的样本。抽取每类样本中的70张,共1680张样本组成训练数据集,剩余466张的样本组成测试数据集。

    训练网络的过程与上述过程类似:

    1. 准备数据,得到训练标签文件char-trainData.txt和测试标签文件char-testData.txt,文件中的每一行为“样本图像路径+' '+标签” ;

    2. 数据集格式转换为lmdb格式,因为cifar10数据集是32*32的彩图,因此这里也将数据集转换成32*32大小的。

       //train-data
       Buildx64Releaseconvert_imageset.exe --resize_height=32 --resize_width=32 examplesmy_projectchar examplesmy_projectcharchar-trainData.txt examplesmy_project/char/char_trainData_db
      
       //test-data
       Buildx64Releaseconvert_imageset.exe --resize_height=32 --resize_width=32 examplesmy_projectchar examplesmy_projectcharchar-testData.txt examplesmy_project/char/char_testData_db
      
    3. 得到数据集均值文件

       Buildx64Releasecompute_image_mean.exe examplesmy_projectcharchar_trainData_db examplesmy_projectcharmean.binaryproto
      
    4. 修改网络描述文件和超参数配置文件

      cifar10_quick_solver.prototxt里只要修改网络路径net、测试迭代次数test_iter、快照保存路径snapshot_prefix。

      cifar10_quick_train_test.prototxt里要修改的有:均值文件路径mean_file、训练或测试数据路径source、单批训练或测试的数量batch_size、最终网络输出的类别数num_output。

    5. 训练网络

      训练结果如下,最终可以得到0.975的识别准确率,如第一张图所示,但在迭代训练3500次的时候,网络识别准确率更好,达到了0.981818,如图第二张图所示。

       Buildx64Releasecaffe.exe train -solver examplesmy_projectcharcifar10_quick_solver.prototxt
      

  • 相关阅读:
    Android获取Java类名/文件名/方法名/行号
    Service的onStartCommand方法的返回值和参数详解
    Centos7 k8s Replication副本控制器
    Centos7 k8s 基础单元pod
    Linux问题故障定位
    Linux 搭建YUM仓库源详解
    Centos7 k8s安装部署
    Centos7 KVM热迁移
    Centos7 KVM热添加网卡、内存、CPU
    Centos7 KVM虚拟机硬盘热添加和扩容
  • 原文地址:https://www.cnblogs.com/ammyben/p/8481254.html
Copyright © 2020-2023  润新知