import json
import os
import numpy as np
import torch
import torch.nn as nn
import torch.onnx
from collections import OrderedDict
from alphapose.models import builder
from alphapose.opt import cfg, logger, opt
def proc_node_module(checkpoint, AttrName):
new_state_dict = OrderedDict()
for k, v in checkpoint[AttrName].items():
if(k[0:7] == "module."):
name = k[7:]
else:
name = k[0:]
new_state_dict[name] = v
return new_state_dict
def preset_model(cfg):
model = builder.build_sppe(cfg.MODEL, preset_cfg=cfg.DATA_PRESET)
'''
if cfg.MODEL.PRETRAINED:
logger.info(f'Loading model from {cfg.MODEL.PRETRAINED}...')
model.load_state_dict(torch.load(cfg.MODEL.PRETRAINED),map_location=torch.device('cpu'))
elif cfg.MODEL.TRY_LOAD:
logger.info(f'Loading model from {cfg.MODEL.TRY_LOAD}...')
pretrained_state = torch.load(cfg.MODEL.TRY_LOAD)
model_state = model.state_dict()
pretrained_state = {k: v for k, v in pretrained_state.items()
if k in model_state and v.size() == model_state[k].size()}
model_state.update(pretrained_state)
model.load_state_dict(model_state)
else:
logger.info('Create new model')
logger.info('=> init weights')
model._initialize()
'''
return model
def convert():
model = preset_model(cfg)
model.eval()
input_names = ["preact.conv1"]
output_names = ["conv_out"]
dummy_input = torch.randn(32, 3, 256, 192)
torch.onnx.export(model, dummy_input, "alphapose_fastpose_npu.onnx", input_names=input_names, output_names=output_names,
opset_version=11)
print('export onnx done!')
if __name__ == "__main__":
convert()