Refactor code structure for improved readability and maintainability

This commit is contained in:
sladro 2026-02-26 13:52:41 +08:00
parent fea530819c
commit 9e13a39194
3 changed files with 55 additions and 26 deletions

BIN
best.onnx Normal file

Binary file not shown.

BIN
best.pt Normal file

Binary file not shown.

View File

@ -1,6 +1,5 @@
#!/usr/bin/env python3
import argparse
import os
import subprocess
import sys
from pathlib import Path
@ -175,38 +174,36 @@ def build_rknn(
print(f"[OK] RKNN: {rknn_path}")
def main():
ap = argparse.ArgumentParser(description="YOLOv8 .pt -> .rknn for rk3588 media-server")
ap.add_argument("--pt", required=True, help="path to yolov8 .pt")
ap.add_argument("--onnx", default="", help="output onnx path")
ap.add_argument("--onnx_fixed", default="", help="onnx path after layout fix")
ap.add_argument("--out", required=True, help="output .rknn path")
ap.add_argument("--imgsz", type=int, default=640)
ap.add_argument("--opset", type=int, default=12)
ap.add_argument("--target", default="rk3588")
ap.add_argument("--quant", action="store_true", help="enable int8 quantization")
ap.add_argument("--dataset", default="", help="dataset txt for quantization")
ap.add_argument("--mean", type=float, default=0.0, help="default 0.0")
ap.add_argument("--std", type=float, default=255.0, help="default 255.0")
args = ap.parse_args()
def cmd_pt2onnx(args):
pt_path = Path(args.pt).resolve()
if not pt_path.exists():
raise SystemExit(f"pt file not found: {pt_path}")
onnx_path = Path(args.onnx).resolve() if args.onnx else pt_path.with_suffix(".onnx").resolve()
onnx_fixed = (
Path(args.onnx_fixed).resolve()
if args.onnx_fixed
else onnx_path.with_name(onnx_path.stem + "_cxn.onnx").resolve()
)
export_pt_to_onnx(pt_path, onnx_path, args.imgsz, args.opset)
print(f"[DONE] pt2onnx -> {onnx_path}")
def cmd_onnx2rknn(args):
onnx_path = Path(args.onnx).resolve()
if not onnx_path.exists():
raise SystemExit(f"onnx file not found: {onnx_path}")
out_path = Path(args.out).resolve()
out_path.parent.mkdir(parents=True, exist_ok=True)
export_pt_to_onnx(pt_path, onnx_path, args.imgsz, args.opset)
ensure_v8_output_layout_cxn(onnx_path, onnx_fixed)
build_input_onnx = onnx_path
if not args.no_fix_layout:
onnx_fixed = (
Path(args.onnx_fixed).resolve()
if args.onnx_fixed
else onnx_path.with_name(onnx_path.stem + "_cxn.onnx").resolve()
)
ensure_v8_output_layout_cxn(onnx_path, onnx_fixed)
build_input_onnx = onnx_fixed
build_rknn(
onnx_path=onnx_fixed,
onnx_path=build_input_onnx,
rknn_path=out_path,
target=args.target,
imgsz=args.imgsz,
@ -215,10 +212,42 @@ def main():
mean=args.mean,
std=args.std,
)
print(f"[DONE] onnx2rknn -> {out_path}")
print("[NEXT] config ai_yolo: model_version='v8', preprocess dst_w/dst_h == imgsz, keep_ratio=false")
print(
"[NEXT] config ai_yolo with model_version='v8', and preprocess dst_w/dst_h == imgsz, keep_ratio=false"
def build_parser():
ap = argparse.ArgumentParser(
description="YOLOv8 conversion for rk3588 media-server: step1 pt2onnx, step2 onnx2rknn"
)
sp = ap.add_subparsers(dest="cmd", required=True)
p1 = sp.add_parser("pt2onnx", help="step 1: export .pt to .onnx")
p1.add_argument("--pt", required=True, help="path to yolov8 .pt")
p1.add_argument("--onnx", default="", help="output onnx path (default: same name as pt)")
p1.add_argument("--imgsz", type=int, default=640)
p1.add_argument("--opset", type=int, default=12)
p1.set_defaults(func=cmd_pt2onnx)
p2 = sp.add_parser("onnx2rknn", help="step 2: convert .onnx to .rknn")
p2.add_argument("--onnx", required=True, help="input onnx path")
p2.add_argument("--onnx_fixed", default="", help="onnx path after layout fix")
p2.add_argument("--no_fix_layout", action="store_true", help="skip output CxN layout check/fix")
p2.add_argument("--out", required=True, help="output .rknn path")
p2.add_argument("--imgsz", type=int, default=640)
p2.add_argument("--target", default="rk3588")
p2.add_argument("--quant", action="store_true", help="enable int8 quantization")
p2.add_argument("--dataset", default="", help="dataset txt for quantization")
p2.add_argument("--mean", type=float, default=0.0, help="default 0.0")
p2.add_argument("--std", type=float, default=255.0, help="default 255.0")
p2.set_defaults(func=cmd_onnx2rknn)
return ap
def main():
parser = build_parser()
args = parser.parse_args()
args.func(args)
if __name__ == "__main__":