从CoreML入门机器学习

Posted Shayne_win

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从CoreML入门机器学习相关的知识,希望对你有一定的参考价值。


人工智能 && 机器学习

人工智能就是让机器拥有和人一样的智慧,它不仅仅限于机器学习,它还包括其他部分,比如:自然语言处理、计算机视觉等。关系就如图:

其中简单提示一下:

器学习:数据预处理、线性回归、监督学习、加强学习等
Deep Learning:人工神经网络、主成分分析、线性判别分析、模型选择等

还是一脸懵逼?never mind,不要在意这些细节

什么是机器学习

  • 机器学习原理:

主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法 —— “维基百科”

在相当一段时间里,我们都是生产数据,然后交付机器使用。但是随着时间的推移,我们发现数据的量已经变得无比庞大且无处不在——图片、音视频、文字等等。而机器学习的过程就是从这些数据中找出规律并加以利用的过程。

通俗一点说就是:计算机从历史数据中找出规律,并且把这些规律用到对未来不确定的场景对策上。简言之:“使用数据解决问题”

使用案例:Google搜索引擎、Siri、相册等

  • 机器学习的过程:

step1: 使用数据:即“训练”

step2: 解决问题:即“预测”

友情提示:数据才是核心!

说完原理,咱们先来玩一个Google推出的用于讲述AI原理的小实验Teachable Machine

视频链接


CoreML入门

苹果的人工智能举措:

  • ios5 推出NSLinguisticTagger用来分析自然语言
  • iOS8 推出Metal对底层GPU进行访问
  • iOS10 推出BNNS(神经网络子程序) 和 MPSCNN(Metal渲染) 是开发者可以构建用于推理的神经网络。
  • iOS11 推出CoreML和Vision

什么是CoreML和Vision:

Core ML: 是基于底层基本类型而建立的,它包括 Accelerate、BNNS 以及 Metal Performance Shaders 等。是开发者更专注于模型的使用而不是将大量的时间纠结在模型的训练和算法上。 即可以直接在app中使用训练好的模型。(这也秉承了类似苹果一贯不开源的作风。你永远不知道它里面到底做了什么)
Vision:对CoreML中图像分析的模型进行了更高层次的封装。

接下来,我们通过几个Demo来体验一把苹果带给我们那些可玩的东西:

01 体验:

1、利用iOS训练好的ResNet50来入门一个可以识别物件的一个训练好的模型。类似的效果就是(code01):

2、利用Inceptionv3 识别照片中的人脸数量(code02):

这里稍微解释一下Core ML 在代码中的使用情况:
最简单如果不用Vision的话(即不涉及音视频的情况),那Coremkl 就有两个部分组成:Input 、output;

玩了这两个demo之后,我们是不是发现苹果给我们的model类型真的是太少了,而且有的还不准。这时候我们就想到说用除苹果之外的Model。例如caffe、Keras,TensorFlow, 和SciKit-learn等。OK,接下来,我们去下载一个caffemodel,然后将其转换成.mlmodel。

02 转换别人的模型:

转换工具——Core ML Tools:它是一个可以把模型从机器学习工具箱转换成Core ML格式的Python包。
1、下载安装anaconda,完成后可以使用conda命令确认
2、使用conda安装Python,建议2.7.13

conda install python=2.7.13

3、开辟空间:

conda create --name flower1 #辨别花名

4、安装包指令(如果没有安装pip,就用命令:easy_install pip安装pip)

pip install -U coremltools

5、进入到flower1 环境

source activate flower

6、ok,这时候就可以使用python做点事情了:
6.1 去刚才的网址下载下来,然后按步骤生成model。

#这里需要友情提示一下,一般我们用的model会有三个文件,例如:
#'class_labels.txt':这个文件是包含所有结果的文件
#'deploy.prototxt':这个文件是包含模型结果的文件
#'oxford102.caffemodel':原始模型文件,算法什么都在这里

#有的也会有类似'mean.binaryproto'的文件:它是一个均值文件

6.2 开始命令生成model:

cd /Users/fengcaifan/Desktop/Caffemodel #记得cd到model文件夹下
python #开始编辑python
import coremltools #导入coremltools库
coreml_model = coremltools.converters.caffe.convert(('oxford102.caffemodel','deploy.prototxt'),image_input_names='data',class_labels='class_labels.txt') #convert这个就是将文件作为一个原组丢进去,比如有均值文件,这个也直接丢进去就好了;image_input_names='data'输入数据,class_labels='class_labels.txt' 輸出結果
coreml_model.save('Flowers.mlmodel') #将modle命名后保存

6.3 这样就可以直接在xcode上使用Flowers.mlmodel了。(code03)
效果图:

接下来的挑战就是自己写Model。然后训练自己的Model了:

03 创建训练自己的模型:

善意提醒一下:此时请忽略掉你心里的各种神奇的算法(因为我也不会)。咱们就写一个简单的从性别和身高预测一个人的体重:
不过这次将所有的内容写成python文件,模型转换的过程也写成python文件,代码如下:

计算文件

import numpy as np #numpy科学运算库

for index in range(0, 1000):
if (np.random.rand() >= 0.5):
gender = 1 # male
else:
gender = 0 # female

height = 7 * np.random.randn() + (172 if (gender == 1) else 163)
standand_weight = (height - 105) if (gender == 1) else (height - 110)
weight = 5 * np.random.randn() + standand_weight

print "%d,%d,%d"%(gender, height, weight)

训练文件

from sklearn.linear_model import LinearRegression
import pandas as pd

full_data = pd.read_csv("Data.csv") //数据自己提供
model = LinearRegression() #线性回归model
model.fit(full_data[['Gender', 'Height']], full_data["Weight"]) #喂养数据

print model.predict([[1, 172]]) #训练模型,返回预测结果

模型转换文件

from CoreMLModelDemo import model
import coremltools
#使用sklearn创建model
coreml_model = coremltools.converters.sklearn.convert(model, ["gender", "height"], "weight")
#model的一些基本描述
coreml_model.license = 'BSD'
coreml_model.short_description = 'Predicts weight by gender and height'

coreml_model.input_description['gender'] = "Gender:0 for male;1 for female."
coreml_model.input_description['height'] = "Height in cm."
coreml_model.output_description['weight'] = "Weight in kg."
#导出
coreml_model.save('weight.mlmodel')

最后执行python就可以生成mlmodel了。
效果:


随处可见的TensorFlow

TensorFlow是Google推出的深度学习开源库:
视为一套用于实现新型机器学习算法的工具集,它使用数据流图进行数值计算。

这是一个TensorFlow分布式计算图,不知大家能否看懂,反正我没明白.

conda create -n tensorflow python=2.7.14 #创建环境

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 
#添加Anaconda的TUNA镜像 因为国外的一般很难安装成功,所以最好使用这个清华大学提供的TUNA镜像

conda config --set show_channel_urls yes # 设置搜索时显示通道地址

source activate tensorflow #激活环境

pip install tensorflow #安装

# 验证是否成功
import tensorflow as tf
hello = tf.constant('hello tf')
sess = tf.Session()
print(sess.run(hello)) #打印hello tf

#source deactivate #关闭环境
#conda remove --name tensorflow --all #移除环境

将TensorFlow 部署到iOS项目中的使用结构图:

目前比较流行的机器学习框架包括:caffe tensorflow sklearn
caffe:仅仅关注计算机视觉,不够灵活
sklearn:它是一个简洁、高效的算法库,提供一系列的监督学习和无监督学习的算法,以用于数据挖掘和数据分析。tensorflow比sklearn更底层一定。


扩展:

1、斯坦福大学机器学习公开课
2、斯坦福大学机器学习笔记
3、开源model库:model zoo;
4、代码和书籍将陆续上传到github


可以去github上查看Demo,喜欢的话star一下哦
github
CSDN

以上是关于从CoreML入门机器学习的主要内容,如果未能解决你的问题,请参考以下文章

教程 | Apple机器学习框架Core ML入门教程

Core ML入门:构建一个简单的图像识别应用

iOS-机器学习框架CoreML

CoreML:我可以在一个项目中使用两个机器学习模型(mlmodel 文件)吗? [复制]

机器学习进化史:从线性模型到神经网络

OpenFace CoreML 模型。没有人脸检测