目录
[yolov12 导出ncnn](#yolov12 导出ncnn)
搜索关键词:
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.
})