卷积神经网络及其在iOS中的集成(第2部分)



在上一部分中,我们准备了数据,并检查了神经网络的实现工具和体系结构(链接)。让我们开始进行数据预处理的下一个开发阶段。

升级

Keras为数据预处理(尤其是图像)提供了广泛的工具。ImageDataGenerator方法(图7)使您可以通过人工转换来扩展数据集。


图7。-数据生成器。

第一个rotation_range是用于旋转生成器内部图像的随机数。 Width_shift_range-显示可以减少多少像素值的宽度。 Height_shift_range-每个像素将乘以该系数以压缩高度的系数。 Shear_range-剪切速率,逆时针方向的位移角度,以度为单位。 Zoom_range-随机缩放范围。 Horizo​​ntal_flip-水平随机显示图像。 Vertical_flip-垂直图像的随机显示。 Fill_mode-根据指定的模式填充输入数据外部的点。 Data_format-图像数据格式。因此,神经网络将有更好的概括性,因为原始数据集基本上具有干净的像素,数字在中间。在真实照片中,当手势处于角落或模糊时,其他情况也是可能的。学习过程正在用新数据重写。

在图8中,测试图开始减小,因此训练停止了。如果不使用val_acc度量来停止,该算法将继续其工作,从而导致重新训练的神经网络。

与过去的结果相比,损失函数的值减小了,因此,算法在预测中的置信度增加了。准确度略高于2%(图8,图9)。


图8-有关新数据的培训时间表。


图9。 -模型指标。

转换

要集成到iOS应用程序中,您需要获取某种格式的神经网络。这使您可以创建CoreML框架。它允许您以某种格式运行训练有素的机器学习模型。 mlmodel在应用程序中。为了处理图像,Vision框架基于Core ML进行工作,并有助于跟踪和识别人脸,文本,物体,条形码。还提供用于图像对齐的水平确定和矩阵获取。

将模型从.h5转换为。 mlmodel由Python Coremltools中的库使用。该库支持转换为mlmodel格式。

为了正确得出模型结论,指定了一个字典,该字典将对应于10位数字。下一行声明,Model_check.h5是模型的名称,它进一步指示它将在神经网络的输入层上接收图像。 image_scale字段将导致标准化像素矩阵。 (图10)图10


。 -转换。

移动应用。使用准备好的模型。

Apple开发人员的官方网站上的示例用作该项目的基础。最新的Xcode开发环境,编程语言是Swift的第五版。

考虑包含项目中代码的文件(图11)。 AppDelegate.swift启动应用程序启动窗口,并初始化连接到项目的所有文件。


图11。 -应用程序的结构。

在sign_lang.mlmodel转换之后,将准备好的模型添加到项目中(图12)。


图12。 -Xcode中的模型。

类型行表明添加到项目中的机器学习模型确实是一个分类神经网络。为了预测模型,将输入具有64x64尺寸的灰色元素的黑白图片,程序将使用Vision将其转换为这种格式。输出将是一个字典,其中的对将是转换期间指定的带有标签的行,以及神经预测它的置信度(概率)。

主应用程序文件。

考虑使用主文件-图像分类视图Controller.swift

ImageView-用于在电话屏幕上显示当前图像的窗口,该窗口发送到模型的输入。

CameraButton-单击此按钮时,将弹出一个上下文菜单,为用户提供以下操作:拍照,选择照片。第一步将打开智能手机的相机,在该相机中可以使用照片模式。 (图13)

选择其他动作时,选择“照片”,将打开一个内部图库。按下“使用照片”按钮将使用户返回到主屏幕,其中神经网络将分析图像并给出其预测,如图2所示。 14。

在“分类”一词之后,我们看到了该模型预测的两个最有可能的结果的结论。括号中的数字是神经网络对其预测正确的信心。从图14可以看出,置信度为0.99的算法表示显示了数字0,这与实际情况一致。没有机器学习算法可以对真实数据提供100%的准确度,并且构造的神经网络也不例外,并且错误的预测是可能的,如图7所示。 15.


图13。 -使用相机。


图14。 -神经网络的预测。


图15。 -错误的预测。

结果,我们设计了用于识别手语数字的卷积神经网络架构。进行了神经网络训练,并且由于训练数据的扩展和超参数的选择,在测试数据集上获得了81%的准确性。该算法已成功转换,可移植到智能手机。开发了其中集成了神经网络的移动应用程序。

代码链接

All Articles