【caffe-Windows_3】cifar实例编译之model的使用

本文介绍如何使用预训练的CIFAR模型对下载的图片进行分类,包括准备标签文件、设置bat文件及测试准确率等步骤。
转载自:http://blog.youkuaiyun.com/zb1165048017/article/details/51483206
本文讲解如何对网上下载的一个图片利用训练好的cifar模型进行分类

第一步

上一篇文章训练好以后会得到两个文件

从网上查阅资料解释来看,第一个caffemodel是训练完毕得到的模型参数文件,第二个solverstate是训练中断以后,可以用此文件从中断地方继续训练(具体使用方法目前尚未测试)

caffemodel的百度云地址:链接:http://pan.baidu.com/s/1sl6nPXb 密码:omow

第二步

新建一个代表cifar10数据标签txt文件,放在examples下的cifar10文件夹内,本文采用名称为synset_words的txt文件,内容如下:

从网上随便下载一个图片,但是注意,最好是cifar里面包含的种类,当然也可以下载其他的,不过分类得到的标签肯定不对,因为训练得到的模型不包含此种类。

比如我下载了一只猫:

第三步

使用模型进行分类,建立一个bat文件,比如我在E:\caffeDEV1\caffe-windows\Build\x64\Release下[同样可以在debug下]建立classification.bat,内容如下
  1. classification.exe E:\caffeDEV1\caffe-windows\examples\cifar10\cifar10_quick.prototxt E:\caffeDEV1\caffe-windows\examples\cifar10\cifar10_quick_iter_4000.caffemodel.h5 E:\caffeDEV1\caffe-windows\examples\cifar10\mean.binaryproto E:\caffeDEV1\caffe-windows\examples\cifar10\synset_words.txt E:\caffeDEV1\caffe-windows\examples\cifar10\dog.jpg  
  2. pause  
classification.exe E:\caffeDEV1\caffe-windows\examples\cifar10\cifar10_quick.prototxt E:\caffeDEV1\caffe-windows\examples\cifar10\cifar10_quick_iter_4000.caffemodel.h5 E:\caffeDEV1\caffe-windows\examples\cifar10\mean.binaryproto E:\caffeDEV1\caffe-windows\examples\cifar10\synset_words.txt E:\caffeDEV1\caffe-windows\examples\cifar10\dog.jpg
pause
如果你建立在其他地方,请注意你的路径。bat的格式为XX/XX/classification.exe  xx/xx/网络结构(cifar10_quick.prototxt) XX/XX/训练好的模型(.caffemodel.h5)  XX/XX/均值文件 XX/XX/下载的图片 (XX/XX代表路径 )

第四步

也就说最后一步,直接运行这个bat文件,双击就行,得到如下结果

【注】我在其中一个地方卡了很久,千万千万不要把modelcaffe.h5的后缀改为modelcaffe,也就是说,千万别删掉了h5,我一直以为调用cifar10_quick_iter_4000.caffemodel,结果呵呵了,卡了一下午

第五步

第四步实现得是单张图片的识别。第五步则对测试集进行准确率的分批测试
直接在E:\caffeDEV1\caffe-windows下建立一个bat文件(test_cifar.bat),内容如下:
  1. .\Build\x64\Release\caffe.exe test –model=examples/cifar10/cifar10_quick_train_test.prototxt -weights=examples/cifar10/cifar10_quick_iter_4000.caffemodel.h5 -gpu=0  
  2. pause  
.\Build\x64\Release\caffe.exe test --model=examples/cifar10/cifar10_quick_train_test.prototxt -weights=examples/cifar10/cifar10_quick_iter_4000.caffemodel.h5 -gpu=0
pause
【PS】注意,如果出现“cannot use GPU in CPU-only caffe :check mode.check failure stack trace.”问题,去掉后面的-gpu=0即可,代表使用CPU测试。
运行之后效果如下:
### 关于 CMake 工具链文件的配置 工具链文件(Toolchain File)用于指定交叉编译环境中的目标平台、编译器和其他构建选项。通过创建并设置 `CMAKE_TOOLCHAIN_FILE` 变量,可以自定义 CMake 的行为以适应特定的目标硬件架构。 #### 配置工具链文件的关键要素 以下是工具链文件的主要组成部分及其作用: 1. **系统名称和处理器** 定义目标系统的操作系统和处理器类型。这可以通过设置变量 `CMAKE_SYSTEM_NAME` 和 `CMAKE_SYSTEM_PROCESSOR` 来完成[^4]。 ```cmake set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) ``` 2. **编译器路径** 明确指定使用编译器路径。对于 Java 开发而言,可能需要集成 JNI(Java Native Interface),因此需确保支持跨语言调用的编译器被正确定位[^5]。 ```cmake set(CMAKE_C_COMPILER /path/to/cross/compiler/gcc) set(CMAKE_CXX_COMPILER /path/to/cross/compiler/g++) ``` 3. **库和头文件目录** 如果项目依赖外部库(如 OpenCV 或其他第三方库),则应在工具链文件中声明这些资源的位置。例如,在处理图像识别时可能会涉及多个模块加载[^6]。 ```cmake link_directories(/usr/local/lib) include_directories(/usr/local/include/opencv4) ``` 4. **强制汇编程序编译器** 对于某些版本较低的 CMake (< 2.8.5),可能需要显式设定 ASM 编译器来满足需求[^7]。 ```cmake enable_language(ASM) set(CMAKE_ASM_COMPILER "nasm") # 替换为实际使用的汇编器名 ``` 5. **验证更新后的状态** 当修改完毕后,应当再次执行 CMake 命令确认无误警告信息显示出来[^8]。 ```bash cmake .. ``` #### 使用 Java 调用原生代码实例 当希望采用 Java 实现类似功能时,可通过 JNI 接口实现交互操作。下面给出一段简单的例子展示如何初始化以及释放内存空间等基本流程[^9]: ```java public class QRCodeDetector { static { System.loadLibrary("native-lib"); } private long nativePtr; public QRCodeDetector() { this.nativePtr = createQRCodeDetector(); } protected void finalize() throws Throwable { try { destroyQRCodeDetector(nativePtr); } finally { super.finalize(); } } public String detect(String imagePath) { return doDetect(nativePtr, imagePath); } private native long createQRCodeDetector(); private native void destroyQRCodeDetector(long ptr); private native String doDetect(long ptr, String path); } ``` 对应 C++ 中部分逻辑如下所示: ```cpp extern "C" JNIEXPORT jlong JNICALL Java_QRCodeDetector_createQRCodeDetector(JNIEnv *env, jobject thiz){ auto detector = new cv::wechat_qrcode::WeChatQRCode("model.prototxt", "model.caffemodel"); return reinterpret_cast<jlong>(detector); } extern "C" JNIEXPORT void JNICALL Java_QRCodeDetector_destroyQRCodeDetector(JNIEnv *env, jobject thiz, jlong ptr){ delete reinterpret_cast<cv::wechat_qrcode::WeChatQRCode*>(ptr); } extern "C" JNIEXPORT jstring JNICALL Java_QRCodeDetector_doDetect(JNIEnv* env, jobject thiz, jlong ptr, jstring imgPath){ const char* utf_string = env->GetStringUTFChars(imgPath, nullptr); Mat image = imread(utf_string); vector<String> results; reinterpret_cast<cv::wechat_qrcode::WeChatQRCode*>(ptr)->detectAndDecode(image, results); if (!results.empty()) { return env->NewStringUTF(results[0].c_str()); } else { return env->NewStringUTF(""); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值