android yolo12 android 实战笔记

目录

[yolov12 导出ncnn](#yolov12 导出ncnn)

模型参数,分辨率:

yolov13


搜索关键词:

ncnn yolo

yolov12 导出ncnn

python 复制代码
import os
import subprocess
import glob

import torch
from ultralytics import YOLO

def export_one():
    
    MODEL_PATH = r"yolov12n.pt"  # YOLOv10 训练好的模型路径
    
    model = YOLO(MODEL_PATH)
    model.export(format="torchscript", optimize=False)
    save_dir ='yolon'
    os.makedirs(save_dir, exist_ok=True)
    
    print("正在导出TorchScript...")
    img_w = 640
    img_h = 640
    if 0:
        model = YOLO(MODEL_PATH).model  # 获取内部 PyTorch 模型(nn.Module)
        model.eval()
        dummy_input = torch.randn(1, 3, img_w, img_h)
        
        try:
            traced_script_module = torch.jit.trace(model, dummy_input)
            traced_script_module.save(f"{save_dir}/model_traced.pt")
            print("✓ TorchScript模型已保存为: model_traced.pt")
        except Exception as e:
            print(f"✗ 导出TorchScript失败: {e}")
            exit()
    
    pt_path = "B:\project\detect\yolov12-main_new\yolov12n.torchscript"
    # ===================== 3. 调用PNNX转换 =====================
    print("\n正在调用PNNX转换...")
    pnnx_cmd = [
        "pnnx",  # 确保 pnnx 在系统PATH中,或使用完整路径如 "./pnnx"
        f"{pt_path}",
        f"inputshape=[1,3,{img_w},{img_h}]"
    ]
    try:
        # 方法1:直接运行命令(推荐,可以看到详细输出)
        result = subprocess.run(pnnx_cmd, capture_output=True, text=True, check=True)
        print("✓ PNNX转换成功完成!")
        print("输出信息:", result.stdout)
        if result.stderr:
            print("注意信息:", result.stderr)
    
    except subprocess.CalledProcessError as e:
        print(f"✗ PNNX转换失败!")
        print("错误代码:", e.returncode)
        print("错误输出:", e.stderr)
        print("标准输出:", e.stdout)
    print("= " * 50)
    
    # 检查生成的文件
    expected_files = [f"{save_dir}/model_traced.ncnn.param", f"{save_dir}/model_traced.ncnn.bin"]
    for file in expected_files:
        if os.path.exists(file):
            print(f"✓ 已生成: {file}")
        else:
            print(f"✗ 未找到: {file}")

if __name__ == '__main__':

    export_one()

https://github.com/mpj1234/ncnn-yolov12-android/tree/main

模型参数,分辨率:

测试yolov12 n 报错,

但是yolov12n-turbo 可以运行,但是结果框是不准的。

cpp 复制代码
	const char *modeltypes[] =
			{
					"yolov12n",
					"yolov12s",
					"yolov12n-turbo",
					"yolov12s-turbo",
			};

	const int target_sizes[] =
			{
					320,
					320,
					320,
					320,
			};

	const float mean_vals[][3] =
			{
					{0.f, 0.f, 0.f},
					{0.f, 0.f, 0.f},
					{0.f, 0.f, 0.f},
					{0.f, 0.f, 0.f},
			};

	const float norm_vals[][3] =
			{
					{1 / 255.f, 1 / 255.f, 1 / 255.f},
					{1 / 255.f, 1 / 255.f, 1 / 255.f},
					{1 / 255.f, 1 / 255.f, 1 / 255.f},
					{1 / 255.f, 1 / 255.f, 1 / 255.f},
			};

yolov13

https://github.com/mpj1234/ncnn-yolov13-android

导出ncnn

python 复制代码
from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO("./weights/yolov13n.pt")
    model.export(**{
        'format': 'ncnn',
        'opset': 12,
        'simplify': True,
        'batch': 1,
        'imgsz': 320,  # This size should be consistent with the following code.
    })
相关推荐
工程师老罗14 小时前
如何在Android工程中配置NDK版本
android
wdfk_prog16 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
ouliten16 小时前
cuda编程笔记(36)-- 应用Tensor Core加速矩阵乘法
笔记·cuda
智驱力人工智能16 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
工程师老罗16 小时前
YOLOv1 核心结构解析
yolo
Lun3866buzha17 小时前
YOLOv10-BiFPN融合:危险物体检测与识别的革新方案,从模型架构到实战部署全解析
yolo
孞㐑¥17 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
Katecat9966317 小时前
YOLOv8-MambaOut在电子元器件缺陷检测中的应用与实践_1
yolo
Libraeking18 小时前
破壁行动:在旧项目中丝滑嵌入 Compose(混合开发实战)
android·经验分享·android jetpack
mango_mangojuice18 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习