news 2026/4/16 11:52:39

YOLO-v5实战教程:移动端Android部署全流程详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO-v5实战教程:移动端Android部署全流程详解

YOLO-v5实战教程:移动端Android部署全流程详解

1. 引言

1.1 YOLO-v5技术背景

YOLO(You Only Look Once)是一种广泛应用于目标检测任务的深度学习模型,由华盛顿大学的Joseph Redmon和Ali Farhadi提出。自2015年首次发布以来,YOLO系列凭借其单次前向推理完成检测的高效机制,在速度与精度之间实现了良好平衡,迅速成为工业界和学术界的主流方案之一。

YOLO-v5是该系列中极具工程实用性的版本,虽非官方正式命名,但由Ultralytics团队开发并开源,以其轻量级设计、高推理速度和易部署特性,特别适合在边缘设备和移动端落地。相比早期版本,YOLO-v5在结构上进行了多项优化,包括引入Focus模块、CSPDarknet主干网络、PANet特征融合结构等,显著提升了小目标检测能力和训练稳定性。

1.2 移动端部署价值

随着智能终端对实时视觉能力需求的增长,将YOLO-v5部署到Android设备已成为许多AI应用的核心环节,如: - 实时人脸检测与跟踪 - 工业巡检中的缺陷识别 - 智能零售中的商品识别 - 自动驾驶辅助系统中的障碍物感知

本文将围绕“从模型导出到Android集成”的完整链路,详细讲解如何基于预训练YOLO-v5模型实现端到端的移动端部署流程,涵盖环境准备、模型转换、JNI调用、Java层集成等关键步骤。


2. 环境准备与模型获取

2.1 开发环境说明

本教程使用CSDN提供的YOLO-V5镜像环境,该镜像已预装以下核心组件: - Python 3.8 - PyTorch 1.10.0 - TorchVision 0.11.0 - OpenCV-Python - Ultralytics YOLOv5代码库

此环境极大简化了前期配置工作,开发者可直接进入模型操作阶段。

2.2 Jupyter与SSH接入方式

Jupyter Notebook 使用方式

通过浏览器访问Jupyter界面,可在图形化环境中进行模型调试与测试:

点击对应.ipynb文件即可运行交互式代码块,适用于快速验证模型输出。

SSH远程连接方式

对于命令行操作或自动化脚本执行,推荐使用SSH登录:

ssh root@<your-instance-ip> -p <port>

成功登录后可直接操作文件系统,便于后续模型导出与打包。


3. 模型导出为ONNX/TensorFlow Lite格式

3.1 下载并加载预训练模型

首先进入YOLOv5项目目录:

cd /root/yolov5/

使用PyTorch Hub加载YOLOv5s模型(轻量版,适合移动端):

import torch # Load a YOLOv5 model (options: yolov5n, yolov5s, yolov5m, yolov5l, yolov5x) model = torch.hub.load("ultralytics/yolov5", "yolov5s") # Default: yolov5s # Define the input image source (URL, local file, PIL image, OpenCV frame, numpy array, or list) img = "https://ultralytics.com/images/zidane.jpg" # Example image # Perform inference (handles batching, resizing, normalization automatically) results = model(img) # Process the results (options: .print(), .show(), .save(), .crop(), .pandas()) results.print() # Print results to console results.show() # Display results in a window results.save() # Save results to runs/detect/exp

上述代码将自动下载yolov5s.pt权重文件,并完成一次推理测试。

3.2 导出为ONNX格式

为后续转换至Android可用格式,需先将.pt模型导出为ONNX:

# Export to ONNX format model.model.export(format='onnx', imgsz=640)

或使用命令行方式:

python export.py --weights yolov5s.pt --include onnx --imgsz 640

生成的yolov5s.onnx位于当前目录,可用于进一步转换。

3.3 转换为TensorFlow Lite(TFLite)

由于Android原生支持TFLite推理引擎,建议最终采用TFLite格式部署。

安装依赖
pip install onnx onnx_tf tensorflow
执行ONNX → TensorFlow → TFLite转换
import onnx from onnx_tf.backend import prepare import tensorflow as tf # 加载ONNX模型并转换为TF onnx_model = onnx.load("yolov5s.onnx") tf_rep = prepare(onnx_model) tf_rep.export_graph("yolov5s_tf") # 导出为SavedModel格式 # 将SavedModel转换为TFLite converter = tf.lite.TFLiteConverter.from_saved_model("yolov5s_tf") converter.optimizations = [tf.lite.Optimize.DEFAULT] # 启用量化优化 converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS] converter.target_spec.supported_types = [tf.float16] # 半精度量化 tflite_model = converter.convert() # 保存TFLite模型 with open('yolov5s.tflite', 'wb') as f: f.write(tflite_model)

此时得到的yolov5s.tflite文件体积更小、更适合移动设备运行。


4. Android端集成与调用

4.1 创建Android项目

使用Android Studio创建新项目,选择Empty Activity模板,语言设为Java或Kotlin均可(本文以Java为例),最低API级别建议设置为API 21+

4.2 添加TFLite依赖

app/build.gradle中添加TFLite运行时依赖:

dependencies { implementation 'org.tensorflow:tensorflow-lite:2.13.0' implementation 'org.tensorflow:tensorflow-lite-support:0.4.4' implementation 'org.tensorflow:tensorflow-lite-gpu:2.13.0' // 可选:启用GPU加速 }

同步项目后即可使用TFLite API。

4.3 放置模型文件

将生成的yolov5s.tflite文件放入app/src/main/assets/目录下。若无该目录,请手动创建。

4.4 图像预处理封装类

创建ImageProcessor.java用于图像缩放、归一化和张量转换:

public class ImageProcessor { private static final int INPUT_SIZE = 640; private static final float MEAN = 0.0f; private static final float STD = 255.0f; public static float[][][][] bitmapToInput(Bitmap bitmap) { Bitmap resized = Bitmap.createScaledBitmap(bitmap, INPUT_SIZE, INPUT_SIZE, false); int batchNum = 1; int channel = 3; float[][][][] input = new float[batchNum][INPUT_SIZE][INPUT_SIZE][channel]; for (int x = 0; x < INPUT_SIZE; x++) { for (int y = 0; y < INPUT_SIZE; y++) { int pixel = resized.getPixel(y, x); input[0][x][y][0] = (Color.red(pixel) - MEAN) / STD; // R input[0][x][y][1] = (Color.green(pixel) - MEAN) / STD; // G input[0][x][y][2] = (Color.blue(pixel) - MEAN) / STD; // B } } return input; } }

4.5 初始化TFLite解释器

在Activity中初始化Interpreter:

private MappedByteBuffer tfliteModel; private Interpreter tflite; // 加载模型 private void loadModelFromAsset() throws IOException { AssetFileDescriptor fileDescriptor = getAssets().openFd("yolov5s.tflite"); FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor()); FileChannel fileChannel = inputStream.getChannel(); long startOffset = fileDescriptor.getStartOffset(); long declaredLength = fileDescriptor.getDeclaredLength(); tfliteModel = fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength); tflite = new Interpreter(tfliteModel); }

4.6 执行推理与结果解析

定义输出结构并执行推理:

private void runInference(Bitmap bitmap) { float[][][][] input = ImageProcessor.bitmapToInput(bitmap); float[][][] output = new float[1][25200][6]; // 假设输出为[x,y,w,h,conf,class] tflite.run(input, output); // 解析检测框(此处仅为示意,实际需结合YOLO解码逻辑) List<DetectorResult> results = new ArrayList<>(); for (int i = 0; i < output[0].length; i++) { float conf = output[0][i][4]; if (conf > 0.5) { // 置信度过滤 float x = output[0][i][0]; float y = output[0][i][1]; float w = output[0][i][2]; float h = output[0][i][3]; int cls = (int) output[0][i][5]; results.add(new DetectorResult(x, y, w, h, conf, cls)); } } // 显示或绘制结果 displayResults(results); }

注意:YOLO-v5的输出需要经过Anchor解码、NMS非极大值抑制等后处理步骤,建议参考Ultralytics官方后处理逻辑实现完整解码。


5. 性能优化与最佳实践

5.1 模型轻量化建议

模型类型参数量推理速度(ms)适用场景
yolov5n~1.9M<30极低延迟需求
yolov5s~7.2M~50平衡精度与速度
yolov5m~21M~80高精度要求

建议移动端优先选用yolov5nyolov5s

5.2 启用硬件加速

通过TFLite Delegate提升性能:

// GPU加速 GpuDelegate delegate = new GpuDelegate(); Interpreter.Options options = new Interpreter.Options(); options.addDelegate(delegate); tflite = new Interpreter(tfliteModel, options);

也可尝试NNAPI Delegate以利用设备专用NPU。

5.3 内存复用与线程管理

  • 使用ThreadHandlerThread执行推理,避免阻塞UI
  • 复用Bitmap和输入缓冲区减少GC压力
  • 控制帧率(如每秒15~20帧)以平衡流畅性与功耗

6. 总结

6.1 核心要点回顾

  1. 模型准备:利用CSDN YOLO-V5镜像快速获取并导出预训练模型。
  2. 格式转换:通过ONNX中间格式,成功将PyTorch模型转为Android兼容的TFLite格式。
  3. Android集成:完成模型加载、图像预处理、推理执行与结果解析全流程。
  4. 性能优化:采用轻量模型、硬件加速与合理线程调度提升移动端体验。

6.2 实践建议

  • 初学者建议从yolov5s开始实验,逐步尝试量化与剪枝。
  • 后处理逻辑复杂,建议封装为独立模块或调用NDK加速。
  • 实际部署前应在多款设备上测试兼容性与性能表现。

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 21:12:35

Hunyuan-MT支持葡萄牙语吗?真实语种测试部署案例

Hunyuan-MT支持葡萄牙语吗&#xff1f;真实语种测试部署案例 1. 背景与问题提出 随着全球化进程的加速&#xff0c;多语言翻译需求在企业出海、内容本地化、跨文化交流等场景中日益凸显。高质量的机器翻译模型成为支撑这些应用的核心技术之一。腾讯推出的混元大模型系列中&am…

作者头像 李华
网站建设 2026/4/2 3:23:19

使用CubeMX配置FreeRTOS实现SPI设备驱动开发

用CubeMXFreeRTOS重构SPI驱动&#xff1a;告别阻塞&#xff0c;打造高响应嵌入式系统你有没有遇到过这样的场景&#xff1f;一个STM32项目里接了OLED屏、温湿度传感器和Flash存储器&#xff0c;全都挂在同一根SPI总线上。主循环每秒读一次传感器&#xff0c;再刷到屏幕上——结…

作者头像 李华
网站建设 2026/4/5 14:35:17

如何提升Qwen2.5推理效率?GPU利用率优化部署教程

如何提升Qwen2.5推理效率&#xff1f;GPU利用率优化部署教程 1. 引言 随着大语言模型在实际业务场景中的广泛应用&#xff0c;推理效率和资源利用率成为影响用户体验和部署成本的关键因素。通义千问2.5-7B-Instruct作为Qwen系列中性能优异的指令调优模型&#xff0c;在编程、…

作者头像 李华
网站建设 2026/4/2 7:48:00

Python高效数据采集实战:基于IPIDEA代理的全方位教程

Python高效数据采集实战&#xff1a;基于IPIDEA代理的全方位教程准备工作安装必要的Python库&#xff0c;包括requests、beautifulsoup4和lxml。这些库用于发送HTTP请求、解析HTML内容。通过pip安装&#xff1a;pip install requests beautifulsoup4 lxml获取IPIDEA代理注册IPI…

作者头像 李华
网站建设 2026/4/9 19:34:56

惊艳!Qwen3-4B-Instruct-2507长文本处理案例展示

惊艳&#xff01;Qwen3-4B-Instruct-2507长文本处理案例展示 1. 导语 阿里通义千问团队推出的Qwen3-4B-Instruct-2507以40亿参数实现“小而全”的技术突破&#xff0c;通过Unsloth Dynamic 2.0量化技术和原生256K上下文能力&#xff0c;将企业级AI部署门槛降至消费级硬件水平…

作者头像 李华
网站建设 2026/4/16 0:31:23

GPT-OSS-20B-WEBUI最佳实践:缓存机制与请求队列优化

GPT-OSS-20B-WEBUI最佳实践&#xff1a;缓存机制与请求队列优化 1. 引言 1.1 业务场景描述 随着大模型在企业级应用和开发者社区中的广泛落地&#xff0c;高效、稳定的推理服务成为关键瓶颈。GPT-OSS-20B作为OpenAI开源的中大规模语言模型&#xff0c;在代码生成、自然语言理…

作者头像 李华