美文网首页
能见度进行分类

能见度进行分类

作者: 活体检测业余爱好 | 来源:发表于2017-06-30 16:38 被阅读52次

    使用caffeNet分类:

    主文件夹:/home/echo/caffe-master/examples/visionClass
    网址:blog.csdn.net/liumaolincycle/article/details/48475479
    参考:《Caffe的Mnist分类简单流程.docx》

    训练模型

    examples/visionClass/train_caffenet.sh

    copy caffeNet的deploy.prototxt,并且改一下:num_output: 5

    运行bp2npy.py文件,将C++可识别的mean.binaryproto的均值文件变成python可识别的.npy文件,代码:

    #coding:utf-8
    import caffe
    import numpy as np
    MEAN_PROTO_PATH = 'examples/cifar10/mean.binaryproto' # 待转换的 pb格式图像均值文件路径
    MEAN_NPY_PATH = 'examples/cifar10/mean.npy' # 转换后的 numpy格式图像均值文件路径
    blob = caffe.proto.caffe_pb2.BlobProto()# 创建protobuf blob
    data = open(MEAN_PROTO_PATH, 'rb' ).read()# 读入mean.binaryproto文件 内容
    blob.ParseFromString(data)# 解析文件内容到blob
    array = np.array(caffe.io.blobproto_to_array(blob))# 将blob中的均值转换成numpy 格式,array的shape (mean_number,channel, hight, width)
    mean_npy = array[0] # 一个array中可以有多组均值存 在,故需要通过下标选择其中一组均值
    np.save(MEAN_NPY_PATH ,mean_npy)



    补充:

    关于训练时候图像增强的几点:

    mirror: true
    crop_size: 227
    对图像进行增强用的,应该是网络有固定的输入大小就是227,这样可以将图像增强很多倍

    关于classify.py有几点疑问:

    (1)均值文件:之前训练的时候的均值文件是训练样本的均值,测试的时候需要的均值文件就是原来训练集的均值文件;
    (2)下面应该是输入图像进网络之前会下采样至256*256,甚至执行create_imagenet.sh制作lmdb图片格式的时候就应经是讲图片设置为256*256了。

    "--images_dim",default='256,256',help="Canonical 'height,width' dimensions of input images."

    (3)下面就是说有两种方式,一种是直接去只从中间crop一下,根据真个判定类别,另一种是四个角落,以及中间五个地方同时判定,取平均

    "--center_only",action='store_true',help="Switch for prediction from center crop alone instead of " +"averaging predictions across crops (default)."


    单张测试:

    echo@echo-PC:~/caffe-master$ python python/classify.py --model_def examples/visionClass/deploy.prototxt --pretrained_model examples/visionClass/caffenet_train/iter_50000.caffemodel --mean_file examples/visionClass/mean.npy --center_only --gpu examples/visionClass/visibData/4/YzPic20160407095646.bmp classOut

    出错:ValueError: Mean shape incompatible with input shape.估计还是得把图片变成一定大小的

    blog.csdn.net/fangjin_kl/article/details/50936925

    if ms != self.inputs[in_][1:]:
      print(self.inputs[in_])
      in_shape = self.inputs[in_][1:]
      m_min, m_max = mean.min(), mean.max()
      normal_mean = (mean - m_min) / (m_max - m_min)
      mean = resize_image(normal_mean.transpose((1,2,0)),
      in_shape[1:]).transpose((2,0,1)) * \
      (m_max - m_min) + m_min

    (10,3,227,227)应该是print(self.inputs[in_]) 这句话输出的,我估计10指的是四边以及中间,然后再镜像

    echo@echo-PC:~/caffe-master$ python python/classify.py --model_def examples/visionClass/deploy.prototxt --pretrained_model examples/visionClass/caffenet_train/iter_50000.caffemodel --mean_file examples/visionClass/mean.npy --center_only --gpu examples/visionClass/visibData/4/YzPic20160407095646.bmp classOut

    之后结果生成:classOut.npy的文件,保存各类的置信度,可以这样去查看内容

    >>> import numpy as np
    >>> np.load("classOut.npy")
    array([[  6.56269421e-08,  3.51868638e-11,  1.38281503e-05,
    3.01185180e-03,  9.96974230e-01]], dtype=float32)
    >>>

    但是最好通过以下方式去直观看到, 用我改进版的classify Visionclass.py

    echo@echo-PC:~/caffe-master$ python python/classifyVisionclass.py --print_results --model_def examples/visionClass/deploy.prototxt --pretrained_model examples/visionClass/caffenet_train/iter_50000.caffemodel --mean_file examples/visionClass/mean.npy --labels_file examples/visionClass/synset_words.txt  --center_only --gpu examples/visionClass/visibData/4/YzPic20160407095646.bmp classOut

    批量测试准确率:

    ./build/tools/caffe test --model examples/visionClass/train_val.prototxt --weights examples/visionClass/caffenet_train/iter_50000.caffemodel --gpu 0

    结果:

    I0609 14:53:45.144374  4707 caffe.cpp:313] Loss: 0.494232
    I0609 14:53:45.144385  4707 caffe.cpp:325] accuracy = 0.8104
    I0609 14:53:45.144395  4707 caffe.cpp:325] loss = 0.494232 (* 1 = 0.494232 loss)
    echo@echo-PC:~/caffe-master$

    训练过程画出loss曲线,类似如下,最后对log文件进行解析就好,暂时不做,请参考《Python 训练caffe之loss曲线绘制》

    /home/echo/caffe-master/build/tools/caffe train --solver=/home/echo/caffe-master/examples/mnist/lenet_solver.prototxt --gpu all 2>&1 |tee out.log

    相关文章

      网友评论

          本文标题:能见度进行分类

          本文链接:https://www.haomeiwen.com/subject/dekicxtx.html