Pytorch模型安卓部署

Pytorch是一种流行的深度学习框架,用于算法开发,而Android是一种广泛应用的操作系统,多应用于移动设备当中。目前多数的研究都是在于算法上,个人觉得把算法落地是一件很有意思的事情,因此本人准备分享一些模型落地的文章(后续可能分享微信小程序部署,PyQt部署以及exe打包,ncnn部署,tensorRT部署,MNN部署)。本篇文章主要分享Pytorch的Android端部署。

看这篇文章的读者,默认你具有以下的一些编程技能。

1. 熟悉Pytorch框架的使用

2. 熟悉计算机视觉模型的原理

3. 具有成熟的Java开发技术

4. 具有Python开发技术

5. 具有模型剪枝、量化,蒸馏技术(本文不介绍,通过这些技术可以对模型轻量化,便于部署)

5. 具有安卓应用开发技能

1. Android studio应用安装

下载开发工具,一直下一步就好了。

2. SDK和JDK安装

AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载

Java Downloads | Oracle 中国

3. Android页面布局

3. 按键功能绑定逻辑代码(给出功能绑定代码的例子)

mButtonAlbum = (Button) findViewById(R.id.button_album);
mButtonCamera = (Button) findViewById(R.id.button_camera);
mButtonRealtime = (Button) findViewById(R.id.button_realtime);

imageView = (ImageView) findViewById(R.id.imageView_logo2);
 if (vId == R.id.button_album){


            Toast.makeText(this,"打开相册",Toast.LENGTH_SHORT).show();

            Intent chooseIntent = new Intent(Intent.ACTION_GET_CONTENT);
            chooseIntent.setType("image/*");
            chooseIntent.addCategory(Intent.CATEGORY_OPENABLE);
//                startActivity(chooseIntent);
            startActivityForResult(chooseIntent, CODE_ALBUM);

        } else if (vId == R.id.button_camera) {

            Toast.makeText(this,"打开相机",Toast.LENGTH_SHORT).show();

            Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

            // 给拍摄的图片指定储存位置
            String f = System.currentTimeMillis()+".jpg";
            File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),f);
            camerafileUri = FileProvider.getUriForFile(MainActivity.this, getPackageName()+".fileprovider",file);
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, camerafileUri);
            startActivityForResult(cameraIntent, CODE_CAMERA);

        }

4. 训练深度学习模型(用Pytorch框架训练的,代码是Yolov5的代码)

5. 模型转换(以yolo为例)

终端输入一下代码,将.pt模型转换为其它格式。

python export.py --weighrs runs/train/18_custom/weights/best.pt --include torchscript

执行上方代码得到best.torchscript模型。

使用torch.jit.script库将模型转化为best.torchscript.ptl模型

6.Android studio中导入pytorch依赖

implementation ("org.pytorch:pytorch_android_lite:1.9.0")
implementation ("org.pytorch:pytorch_android_torchvision:1.9.0")

7.然后使用Java语言重写模型加载代码以及最大值抑制NMS和分类代码等(展示部分)

if (outputs[i* mOutputColumn +4]>mThreshold){
    float x = outputs[i* mOutputColumn];
    float y = outputs[i* mOutputColumn +1];
    float w = outputs[i* mOutputColumn +2];
    float h = outputs[i* mOutputColumn +3];
    float left = imgScaleX * (x - w/2);
    float top = imgScaleY * (y-h/2);
    float right = imgScaleX * (x + w/2);
    float bottom = imgScaleY * (y + h/2);
    float max = outputs[i* mOutputColumn +5];
    int cls = 0;
    for (int j=0; j<mOutputColumn-5;j++){
        if (outputs[i* mOutputColumn +5+j] > max){
            max = outputs[i * mOutputColumn +5+j];
            cls = j;
        }
    }
    Rect rect = new Rect((int)(startX + ivScaleX*left),(int)(startY+top*ivScaleY),
            (int)(startX+ivScaleX*right), (int) (startY+ivScaleY*bottom));
    Result result = new Result(cls, outputs[i * mOutputColumn+4], rect);
    results.add(result);
}

8.接着完善检测等代码,最后将代码打包成APK就可以应用了(手机直接安装就可以用了,这里只展示拍照后识别的结果。实时检测、拍照、相册图像检测都实现了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值