Refactor code structure for improved readability and maintainability
This commit is contained in:
parent
fea530819c
commit
9e13a39194
@ -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__":
|
||||
|
||||
Loading…
Reference in New Issue
Block a user