|
|
|
"""Deploy demo for mmdeploy. |
|
|
|
This script help user to run mmdeploy demo after convert the |
|
checkpoint to backends. |
|
|
|
Usage: |
|
python deploy_demo.py img \ |
|
config \ |
|
checkpoint \ |
|
[--deploy-cfg DEPLOY_CFG] \ |
|
[--device DEVICE] \ |
|
[--out-dir OUT_DIR] \ |
|
[--show] \ |
|
[--score-thr SCORE_THR] |
|
|
|
Example: |
|
python deploy_demo.py \ |
|
${MMYOLO_PATH}/data/cat/images \ |
|
./yolov5_s-v61_syncbn_fast_1xb32-100e_cat.py \ |
|
./end2end.engine \ |
|
--deploy-cfg ./detection_tensorrt-fp16_dynamic-192x192-960x960.py \ |
|
--out-dir ${MMYOLO_PATH}/work_dirs/deploy_predict_out \ |
|
--device cuda:0 \ |
|
--score-thr 0.5 |
|
""" |
|
import argparse |
|
import os |
|
|
|
import torch |
|
from mmengine import ProgressBar |
|
|
|
from mmyolo.utils.misc import get_file_list |
|
|
|
try: |
|
from mmdeploy.apis.utils import build_task_processor |
|
from mmdeploy.utils import get_input_shape, load_config |
|
except ImportError: |
|
raise ImportError( |
|
'mmdeploy is not installed, please see ' |
|
'https://mmdeploy.readthedocs.io/en/1.x/01-how-to-build/build_from_source.html' |
|
) |
|
|
|
|
|
def parse_args(): |
|
parser = argparse.ArgumentParser(description='For mmdeploy predict') |
|
parser.add_argument( |
|
'img', help='Image path, include image file, dir and URL.') |
|
parser.add_argument('config', help='model config root') |
|
parser.add_argument('checkpoint', help='checkpoint backend model path') |
|
parser.add_argument('--deploy-cfg', help='deploy config path') |
|
parser.add_argument( |
|
'--device', default='cuda:0', help='device used for conversion') |
|
parser.add_argument( |
|
'--out-dir', default='./output', help='Path to output file') |
|
parser.add_argument( |
|
'--show', action='store_true', help='Show the detection results') |
|
parser.add_argument( |
|
'--score-thr', type=float, default=0.3, help='Bbox score threshold') |
|
args = parser.parse_args() |
|
return args |
|
|
|
|
|
|
|
def main(): |
|
args = parse_args() |
|
|
|
if not os.path.exists(args.out_dir) and not args.show: |
|
os.mkdir(args.out_dir) |
|
|
|
|
|
deploy_cfg, model_cfg = load_config(args.deploy_cfg, args.config) |
|
|
|
|
|
task_processor = build_task_processor(model_cfg, deploy_cfg, args.device) |
|
model = task_processor.build_backend_model([args.checkpoint]) |
|
|
|
|
|
input_shape = get_input_shape(deploy_cfg) |
|
|
|
|
|
files, source_type = get_file_list(args.img) |
|
|
|
|
|
progress_bar = ProgressBar(len(files)) |
|
for file in files: |
|
|
|
model_inputs, _ = task_processor.create_input(file, input_shape) |
|
|
|
|
|
with torch.no_grad(): |
|
result = model.test_step(model_inputs) |
|
|
|
if source_type['is_dir']: |
|
filename = os.path.relpath(file, args.img).replace('/', '_') |
|
else: |
|
filename = os.path.basename(file) |
|
out_file = None if args.show else os.path.join(args.out_dir, filename) |
|
|
|
|
|
result = result[0] |
|
result.pred_instances = result.pred_instances[ |
|
result.pred_instances.scores > args.score_thr] |
|
|
|
|
|
task_processor.visualize( |
|
image=file, |
|
model=model, |
|
result=result, |
|
show_result=args.show, |
|
window_name=os.path.basename(filename), |
|
output_file=out_file) |
|
|
|
progress_bar.update() |
|
|
|
print('All done!') |
|
|
|
|
|
if __name__ == '__main__': |
|
main() |
|
|