运行caffe识别数字的模型mnist
<!---title:运行caffe识别数字的模型mnist-->
<!---keywords:填写关键字, 以半角逗号分割-->
原始引用地址: [运行caffe识别数字的模型mnist](http://yangkuncn.cn/caffe_mnist.html)
time: 2020.5.17 23:28
## mnist是啥?
mnist是一个运用神经网络识别数字的模型,可以识别数字0到9.
### 获取mnist模块与数据
对于mnist(就是数字识别)例子,参考以下地址,获取数据训练相关数据:
<http://caffe.berkeleyvision.org/gathered/examples/mnist.html>
准备数据:
```
cd $CAFFE_ROOT
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh
```
### 运用多核,加速训练
caffe在纯CPU模式下,使用多核运行
<https://blog.csdn.net/b876144622/article/details/80009877>
1. sudo apt-get install -y libopenblas-dev
2、修改caffe目录下的Makefile.config文件,将BLAS: =atlas修改为BLAS: =open
3、再编译caffe,首先make clean,清除之前的编译结果,再依次执行make all -j16, make test -j16, make runtest -j16,编译caffe。-j16是指用16个核并行编译caffe,可以大大加快编译速度。
4、编译完成后,执行训练前,需要export OPENBLAS_NUM_THREADS=4, 即使用4个核进行训练
### 开始训练
因为编译时,选择使用cpu,使用要更改文件:
examples/mnist/lenet_solver.prototxt
把:solver_mode: GPU 改为:solver_mode: CPU
训练命令:
```
export PYTHONPATH=/home/xy/works/caffe/python/
time ./examples/mnist/train_lenet.sh #vm用时17m36s j1900 42m55
```
### 进行图片识别
#### 用软件手写一个图片
(注意:识别的图片,**一定要是黑底, 数字用白色写**)
安装画图软件gimp:
```
sudo apt-get install gimp
```
gimp 创建27*27的bmp图:
1. 新建file -> new 选width 27 height27 单位为像素, 底色选黑
2. 画图:选画笔,左边size ,可以选2,size太大,27*27的画布不够画的。
3. 导出:file->export as, 格式先jpg,
#### 识别手写的图片
在运行python/calssify前要运行安装 protobuf:
```sudo pip install protobuf```
在识别图片前,需要对classify进行更改:
```
git diff python/classify.py
diff --git a/python/classify.py b/python/classify.py
index 4544c51..446c55e 100755
--- a/python/classify.py
+++ b/python/classify.py
@@ -105,9 +105,9 @@ def main(argv):
# Make classifier.
classifier = caffe.Classifier(args.model_def, args.pretrained_model,
- image_dims=image_dims, mean=mean,
- input_scale=args.input_scale, raw_scale=args.raw_scale,
- channel_swap=channel_swap)
+ image_dims=None, mean=None,
+ input_scale=None, raw_scale=None,
+ channel_swap=None)
# Load numpy array (.npy), directory glob (*.jpg), or image file.
args.input_file = os.path.expanduser(args.input_file)
@@ -116,11 +116,11 @@ def main(argv):
inputs = np.load(args.input_file)
elif os.path.isdir(args.input_file):
print("Loading folder: %s" % args.input_file)
- inputs =[caffe.io.load_image(im_f)
+ inputs =[caffe.io.load_image(im_f, False)
for im_f in glob.glob(args.input_file + '/*.' + args.ext)]
else:
print("Loading file: %s" % args.input_file)
- inputs = [caffe.io.load_image(args.input_file)]
+ inputs = [caffe.io.load_image(args.input_file, False)]
print("Classifying %d inputs." % len(inputs))
@@ -131,6 +131,7 @@ def main(argv):
# Save
print("Saving results into %s" % args.output_file)
+ print(predictions)
np.save(args.output_file, predictions)
git diff python/caffe/classifier.py
diff --git a/python/caffe/classifier.py b/python/caffe/classifier.py
index 64d804be..65b0d881 100644
--- a/python/caffe/classifier.py
+++ b/python/caffe/classifier.py
@@ -69,18 +69,18 @@ class Classifier(caffe.Net):
for ix, in_ in enumerate(inputs):
input_[ix] = caffe.io.resize_image(in_, self.image_dims)
- if oversample:
- # Generate center, corner, and mirrored crops.
- input_ = caffe.io.oversample(input_, self.crop_dims)
- else:
- # Take center crop.
- center = np.array(self.image_dims) / 2.0
- crop = np.tile(center, (1, 2))[0] + np.concatenate([
- -self.crop_dims / 2.0,
- self.crop_dims / 2.0
- ])
- crop = crop.astype(int)
- input_ = input_[:, crop[0]:crop[2], crop[1]:crop[3], :]
+ #if oversample:
+ # # Generate center, corner, and mirrored crops.
+ # input_ = caffe.io.oversample(input_, self.crop_dims)
+ #else:
+ # # Take center crop.
+ # center = np.array(self.image_dims) / 2.0
+ # crop = np.tile(center, (1, 2))[0] + np.concatenate([
+ # -self.crop_dims / 2.0,
+ # self.crop_dims / 2.0
+ # ])
+ # crop = crop.astype(int)
+ # input_ = input_[:, crop[0]:crop[2], crop[1]:crop[3], :]
# Classify
caffe_in = np.zeros(np.array(input_.shape)[[0, 3, 1, 2]],
@@ -91,8 +91,8 @@ class Classifier(caffe.Net):
predictions = out[self.outputs[0]]
# For oversampling, average predictions across crops.
- if oversample:
- predictions = predictions.reshape((len(predictions) // 10, 10, -1))
- predictions = predictions.mean(1)
+ #if oversample:
+ # predictions = predictions.reshape((len(predictions) // 10, 10, -1))
+ # predictions = predictions.mean(1)
return predictions
```
最后,真正到运行命令的时候了:
```
使用命令计算图片:
python python/classify.py --model_def examples/mnist/lenet.prototxt --pretrained_model examples/mnist/lenet_iter_10000.caffemodel --center_only --images_dim 28,28 /home/user/Desktop/2.jpg FOO
```
更改上在py程序后,会输出以下内容 :
```
Saving results into FOO
[[2.63039285e-10 1.69570372e-10 1.00000000e+00 3.37297190e-10
1.04435086e-16 6.86246951e-15 1.50223258e-14 4.68932055e-12
6.54263449e-11 1.28875165e-14]]
```
由于输入的是2.jpg,所以第2个位置(从0开始)的概率最大,几乎是1.可以分别手写0到9图片,进行测试。
我分别在vm(i53230), j1900(真机), i737**m(真机)进行测试,cpu运行过,识别率还可以,速度感觉都比较慢在1s以上吧。
[首页](http://yangkuncn.cn/index.html)
运行caffe识别数字的模型mnist相关推荐
- 运行caffe自带的mnist实例详细教
为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载.但在caffe根目录下的data文件夹里,作者已经为我们编写好了下载数据的脚本文件,我们只需要联网,运行这些脚本文件就行了. Mni ...
- 奔跑吧Caffe(在MNIST手写体数字集上用Caffe框架训练LeNet模型)
数据集背景: MNIST 是一个大型的手写体数字数据库,广泛应用于机器学习领域的训练和测试,由纽约大学Yann LeCun教授整理. MNIST包括60000个训练集和10000测试集,图片固定尺寸为 ...
- 运行caffe自带的mnist实例教程
运行caffe自带的mnist实例教程 1.先进入caffe文件目录,(指令:cd ./caffe),再用data/mnist下的get_mnist.sh下載MNIST数据集,代码如下: cd ./c ...
- 【K210】K210学习笔记六——MaixHub在线模型训练识别数字
[K210]K210学习笔记六--MaixHub在线模型训练识别数字 前言 K210准备工作 数据的获取 MaixHub如何在线训练模型 训练模型在K210上的测试 小结 前言 本人大四学生,电赛生涯 ...
- Caffe学习系列(9):运行caffe自带的两个简单例子
为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载.但在caffe根目录下的data文件夹里,作者已经为我们编写好了下载数据的脚本文件,我们只需要联网,运行这些脚本文件就行了. 注意: ...
- 运行caffe自带的两个简单例子
为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载.但在caffe根目录下的data文件夹里,作者已经为我们编写好了下载数据的脚本文件,我们只需要联网,运行这些脚本文件就行了. 注意: ...
- Python 摄像头实时识别数字
2021.7.9 原标题:基于 TensorFlow 和 OpenCV 实现摄像头实时识别数字 最初写这篇的时候完全没有 ML 基础,代码都是直接 copy,这两天留了个相关的作业,翻出来发现升级到 ...
- 工厂数字孪生模型制作软件
如果您想制作工厂数字孪生模型,以下是一些流行的数字孪生模型制作软件: TensorFlow:这是由Google开发的深度学习框架,它支持数字孪生模型的构建.它提供了一个用于图像.文本.语音等不同类型数 ...
- 如何调用 caffe 训练好的模型对输入图片进行测试
如何调用 caffe 训练好的模型对输入图片进行测试 该部分包括两篇文章 win10 下 caffe 的第一个测试程序(附带详细讲解) 主要讲解如何利用 caffe 来训练模型. 如何调用 caffe ...
最新文章
- freemarker 读取字符串模板,(非文件)
- mxnet基础到提高(22)-C++-常量和变量
- 【计组实验】P3 Verilog多周期处理器开发 MIPS指令集
- wso2 安装_WSO2注册表安装简介
- 设计模式之——过滤器模式(Filter Pattern)
- php 获取数组第一个元素的几种方法
- (研究向)如何使用Windows任务管理器看BadApple
- 电脑可以使用QQ,但是无法上网的解决方案
- 中标麒麟服务器性能怎么样,中标麒麟Linux系统的性能分析及工具(74页)-原创力文档...
- 【金猿人物展】龙盈智达首席数据科学家王彦博:量子科技为AI大数据创新发展注入新动能...
- linux中expr命令
- 写点看Harvard CS50 公开课的感受
- 目前流行的Bug缺陷管理工具
- 性能测试--42性能测试报告编写专项技能
- python量化交易策略实例_python量化交易策略入门(一):MACD的威力
- 应对项目严重滞后4大有效补救方法
- ubuntu openpn 客户端连接
- 第22关 go的web框架-gin
- NC 报销单根据日期和单据号排序
- 《数据结构》个人笔记1(3月13日)
热门文章
- FutureTask使用
- android art虚拟机安装,Android中art虚拟机启动流程
- 微软应用商店_微软自家的软件也放弃Windows 10
- 在linux中的sort命令,linux中sort命令
- Windows Nginx 反向代理 Microsoft SQL Server (MSSQL)
- 10以内数的组成分解图_学前儿童如何学习20以内的加减法,收藏了
- python中class __str__怎么用_python中下划线的作用
- Pandas数据探索分析,分享两个神器!
- Power BI商业智能与业务分析的结合,让你在企业中脱颖而出
- 9名程序员被抓!这次真的活该.....