我们的网络在训练和检测之后,就可以下载并且使用了。我们利用 DIGITS 训练的每一个模型都有了一下载模型(Download Model)键,这也是我们在训练过程中选择不同 snapshots 的一种方法(例如 Epoch #30):
在点击 Download Model 之后,你就会下载一个 tar.gz 的文档,里面包含以下文件: deploy.prototxtmean.binaryprotosolver.prototxtinfo.jsonoriginal.prototxtlabels.txtsnapshot_iter_90.caffemodeltrain_val.prototxt 在 Caffe 文档中对我们所建立的模型使用有一段非常好的描述。如下: 一个网络是由其设计,也就是设计(prototxt)和权重(.caffemodel)决定。在网络被训练的过程中,网络权重的当前状态被存储在一个.caffemodel 中。这些东西我们可以从训练/检测阶段移到生产阶段。在它的当前状态中,网络的设计并不是为了部署的目的。在我们可以将我们的网络作为产品发布之前,我们通常需要通过几种方法对它进行修改: 1. 移除用来训练的数据层,因为在分类时,我们已经不再为数据提供标签了。 2. 移除所有依赖于数据标签的层。 3. 设置接收数据的网络。 4. 让网络输出结果。 DIGITS 已经为我们做了这些工作,它已经将我们 prototxt 文件中所有不同的版本都分离了出来。这些文档我们在使用网络时会用到: deploy.prototxt -是关于网络的定义,准备接收图像输入数据 mean.binaryproto - 我们的模型需要我们减去它处理的每张图像的图像均值,所产生的就是平均图像(mean image)。 labels.txt - 标签列表 (dolphin, seahorse),以防我们想要把它们打印出来,否则只有类别编号。 snapshot_iter_90.caffemodel -这些是我们网络的训练权重。 利用这些文件,我们可以通过多种方式对新的图像进行分类。例如,在 CAFFE_ROOT 中,我们可以使用 build/examples/cpp_classification/classification.bin 来对一个图像进行分类: $ cd $CAFFE_ROOT/build/examples/cpp_classification $ ./classification.bin deploy.prototxt snapshot_iter_90.caffemodel mean.binaryproto labels.txt dolphin1.jpg 这会产生很多的调试文本,后面会跟着对这两种分类的预测结果: 0.9997 -「dolphin」 0.0003 -「seahorse」 你可以在这个 Caffe 案例中查看完整的 C++ 源码:https://github.com/BVLC/caffe/tree/master/examples 使用 Python 界面和 DIGITS 进行分类的案例:https://github.com/NVIDIA/DIGITS/tree/master/examples/classification 最后,Caffe 的案例中还有一个非常好的 Python 演示:https://github.com/BVLC/caffe/blob/master/examples/00-classification.ipynb 我希望可以有更多更好的代码案例、API 和预先建立的模型等呈现给大家。老实说,我找到的大多数代码案例都非常的简短,并且文档介绍很少——Caffe 的文档虽然有很多,但也有好有坏。对我来说,这似乎意味着会有人为初学者建立比 Caffe 更高级的工具。如果说在高级语言中出现了更加简单的模型,我可以用我们的模型「做正确的事情」;应该有人将这样的设想付诸行动,让使用 Caffe 模型变得像使用 DIGITS 训练它们一样简单。当然我们不需要对这个模型或是 Caffe 的内部了解那么多。虽然目前我还没有使用过 DeepDetect,但是它看起来非常的有趣,另外仍然还有其他我不知道的工具。 结果 (责任编辑:本港台直播) |