"""demo.py
"""
import os
import torch
import mnasnet
from collections import OrderedDict
loc = "cpu"
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 build_model():
checkpoint = torch.load('checkpoint.pth.tar', map_location=loc)
checkpoint['state_dict'] = proc_node_module(checkpoint,'state_dict')
print("list -model "+"------"*10)
print("over "+"------"*10)
model = mnasnet.mnasnet1_0()
model.load_state_dict(checkpoint['state_dict'])
print("load")
model.eval()
print("return")
return model
def get_raw_data():
from PIL import Image
from urllib.request import urlretrieve
with open('url.ini', 'r') as f:
content = f.read()
img_url = content.split('img_url=')[1].split('\n')[0]
IMAGE_URL = img_url
urlretrieve(IMAGE_URL, 'tmp.jpg')
img = Image.open("tmp.jpg")
img = img.convert('RGB')
return img
def pre_process(raw_data):
from torchvision import transforms
normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
transforms_list = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
normalize
])
input_data = transforms_list(raw_data)
return input_data.unsqueeze(0)
def post_process(output_tensor):
return torch.argmax(output_tensor, 1)
if __name__ == '__main__':
raw_data = get_raw_data()
model = build_model()
input_tensor = pre_process(raw_data)
output_tensor = model(input_tensor)
result = post_process(output_tensor)
print(result)