• 快速构建ML Kit自定义模型,实现特定领域图像/文本分类


    一、前言

    如何以最低成本开发自定义深度学习模型?可以使用华为机器学习最近推出的自定义模型服务,该服务制作的模型大小可控,能够以最小成本运行到端侧。仅需要简单的接口调用就可以进行推断,主要支持图片分类和文本分类处理自己定义的特定场景分类。下面以图片分类为例让我们来看看自定义模型的训练和使用方法。

    二、训练和使用

    1、首先通过Android Studio的Marketplace安装HMS Toolkit,安装完成后需重启Android Studio。

    在这里插入图片描述

    2、通过AI Create功能完成迁移

    (1)基础配置

    AI Create训练框架采用MindSpore,推理框架采用MindSpore Lite。在Coding Assistant中,选择“AI > AI Create”。使用迁移学习则选择“Image”或“Text”,点击“Confirm”。需提前安装python环境,然后重启IDE。再次选择“Image”或“Text”,点击“Confirm”,会自动安装MindSpore工具。HMS Toolkit还提供一键生成模型调用的API文件和模型调用Demo示例工程的功能,方便开发者在应用程序中快速验证和调用图像分类AI模型。使用图像分类迁移学习能力前,需要按照要求准备用于训练的图像资源。训练图像需要按照图像进行分类,在每个分类的目录下,放入合适的清晰图像。

    在这里插入图片描述

    (2)模型训练

    图像分类针对特定领域(如汽车、动物等)百张级数据进行分钟级的学习训练,自动生成图像分类识别的新模型,该生成的新模型可以自动识别图像所属的类别。在Coding Assistant中,选择“AI > AI Create > Image”,设置图像训练模型的操作类型和模型部署位置,然后点击“Confirm”。Operation type(操作类型)部分固定选择“New Model”。Model Deployment Location(模型部署位置)固定选择“Deployment Cloud”。将分类好的图像文件夹拖入或添加到“Please select train image folder”,并设置生成的模型的存储路径(Output model file path)和训练参数(Train parameter)。训练参数保持默认值即可。Iteration count:迭代次数,默认值为100。Learning rate:学习速率,默认值为0.01。点击“Create Model”开始进行训练,生成图像分类识别模型。等待模型生成后,查看模型学习的结果(训练精度和验证精度)、对应的学习参数和训练数据等信息。

    在这里插入图片描述

    (3)模型验证

    模型训练完成后,在“Add test image”的“Please select test image folder”加入需要测试的图像文件夹进行模型验证。工具会自动利用训练好的模型进行测试,并显示测试结果。在模型训练结果中点击“Generate Demo”,HMS Toolkit会自动生成Demo工程,该工程自动集成了该训练后的图像分类识别模型,可以直接运行和编译该Demo工程,生成APK文件在模拟器或者真实设备上运行,查看图像分类识别的应用效果。

    在这里插入图片描述

    3、使用模型

    (1)上传模型

    通过对图片中的实体对象进行分类和添加标注信息,如:人、物、环境、活动、艺术形式等信息,帮助定义图片题材和适用场景等。图片分类支持端侧识别和云侧识别。同时,该服务提供了预置模型能力。在华为开发者联盟网站上,进入“我的项目”,选择“机器学习服务 > Custom ML”进入模型上传界面,把模型上传到云侧。另外也可以通过该界面对已有模型进行更新。

    在这里插入图片描述

    (2)加载远程模型

    先判断远程模型是否已经下载完成,然后加载模型,当远程模型未下载时加载本地模型。

    localModel = new MLCustomLocalModel.Factory("localModelName")
            .setAssetPathFile("assetpathname")
            .create();
        remoteModel =new MLCustomRemoteModel.Factory("yourremotemodelname").create();
        MLLocalModelManager.getInstance()
            // 判断远程模型是否存在。
            .isModelExist(remoteModel)
            .addOnSuccessListener(new OnSuccessListener<Boolean>() {
                @Override
                public void onSuccess(Boolean isDownloaded) {
                    MLModelExecutorSettings settings;
                    // 如果远程模型存在,优先加载本地已有的远程模型,否则加载本地已有的本地模型。
                    if (isDownloaded) {
                        settings = new MLModelExecutorSettings.Factory(remoteModel).create();
                    } else {
                        settings = new MLModelExecutorSettings.Factory(localModel).create();
                    }
                    final MLModelExecutor modelExecutor = MLModelExecutor.getInstance(settings);
                    executorImpl(modelExecutor, bitmap);
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(Exception e) {
                    // 异常处理。
                }
            });
    

    (3)使用模型推理器推理

    设置输入输出格式,把图片数据输入到推理器,然后使用加载好的modelExecutor(MLModelExecutor) 进行推理。

    private void executorImpl(final MLModelExecutor modelExecutor, Bitmap bitmap){
        // 准备输入数据。
        final Bitmap inputBitmap = Bitmap.createScaledBitmap(srcBitmap, 224, 224, true);
        final float[][][][] input = new float[1][224][224][3];
        for (int i = 0; i < 224; i++) {
            for (int j = 0; j < 224; j++) {
                int pixel = inputBitmap.getPixel(i, j);
                input[batchNum][j][i][0] = (Color.red(pixel) - 127) / 128.0f;
                input[batchNum][j][i][1] = (Color.green(pixel) - 127) / 128.0f;
                input[batchNum][j][i][2] = (Color.blue(pixel) - 127) / 128.0f;
            }
        }
        MLModelInputs inputs = null;
        try {
            inputs = new MLModelInputs.Factory().add(input).create();
            // 若模型需要多路输入,您需要多次调用add()以便图片数据能够一次输入到推理器。
        } catch (MLException e) {
            // 处理输入数据格式化异常。
        }
      
    // 执行推理。您可以通过“addOnSuccessListener”来监听推理成功,在“onSuccess”回调中处理推理成功。同时,可以通过“addOnFailureListener”来监听推理失败,在“onFailure”中处理推理失败。
        modelExecutor.exec(inputs, inOutSettings).addOnSuccessListener(new OnSuccessListener<MLModelOutputs>() {
            @Override
            public void onSuccess(MLModelOutputs mlModelOutputs) {
                float[][] output = mlModelOutputs.getOutput(0);
                    // 这里推理的返回结果在output数组里,可以进一步处理。
                    }
            }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(Exception e) {
                // 推理异常。
            }
        });
    }
    

    三、总结

    综上所述,利用华为的深度学习框架,通过简单几个步骤就可以创建和使用属于自己业务的深度学习模型,是不是十分高效?同时,华为机器学习服务自定义模型支持包括MindSpore、TensorFlow Lite、Caffe、Onnx在内的全部主流的模型推理,转换成MS格式后可以在端侧推理框架运行。另外通过量化压缩,可以采用更小的体积在端侧部署,如果想进一步降低APK体积,也可以直接托管到云端,通过这种方式即使不了解深度学习,也能够快速构建特定领域的AI应用。


    原文链接:
    https://developer.huawei.com/consumer/cn/forum/topic/0204424578775070680?fid=18
    作者:timer

  • 相关阅读:
    tomcat 服务器发布网站
    AJAX服务器返回数据 连接数据库查询数据
    MyEclipse jsp 中文乱码
    sql 数据库修复
    jquery checkbox
    Nexus介绍
    navicat for mysql快捷键
    Mysql limit offset用法举例
    tortoiseSVN如何发现和解决冲突?
    maven指定项目的构建、打包和tomcat插件的pom.xml配置
  • 原文地址:https://www.cnblogs.com/developer-huawei/p/14188869.html
Copyright © 2020-2023  润新知