Spaces:
Runtime error
Runtime error
#!/usr/bin/env python3 | |
# -*- coding:utf-8 -*- | |
import megengine as mge | |
import megengine.module as M | |
from models.yolo_fpn import YOLOFPN | |
from models.yolo_head import YOLOXHead | |
from models.yolo_pafpn import YOLOPAFPN | |
from models.yolox import YOLOX | |
def build_yolox(name="yolox-s"): | |
num_classes = 80 | |
# value meaning: depth, width | |
param_dict = { | |
"yolox-nano": (0.33, 0.25), | |
"yolox-tiny": (0.33, 0.375), | |
"yolox-s": (0.33, 0.50), | |
"yolox-m": (0.67, 0.75), | |
"yolox-l": (1.0, 1.0), | |
"yolox-x": (1.33, 1.25), | |
} | |
if name == "yolov3": | |
depth = 1.0 | |
width = 1.0 | |
backbone = YOLOFPN() | |
head = YOLOXHead(num_classes, width, in_channels=[128, 256, 512], act="lrelu") | |
model = YOLOX(backbone, head) | |
else: | |
assert name in param_dict | |
kwargs = {} | |
depth, width = param_dict[name] | |
if name == "yolox-nano": | |
kwargs["depthwise"] = True | |
in_channels = [256, 512, 1024] | |
backbone = YOLOPAFPN(depth, width, in_channels=in_channels, **kwargs) | |
head = YOLOXHead(num_classes, width, in_channels=in_channels, **kwargs) | |
model = YOLOX(backbone, head) | |
for m in model.modules(): | |
if isinstance(m, M.BatchNorm2d): | |
m.eps = 1e-3 | |
return model | |
def build_and_load(weight_file, name="yolox-s"): | |
model = build_yolox(name) | |
model_weights = mge.load(weight_file) | |
model.load_state_dict(model_weights, strict=False) | |
return model | |