Model Card for YOLOX-X 640 (IB-Robot)
YOLOX-X (COCO, 640Γ640) packaged for the IB-Robot framework. It is the person-detection front end of the HRI perception chain: it produces human bounding boxes that are handed to openEuler/pear_parameter_network for expressive 3D human parameter regression.
Repository Structure
inference_manifest.jsonβ deployment routing (schema v3)assets/adapter.jsonβ adapter identity (yolox_person/detect)assets/yolox_x.pthβ original PyTorch checkpoint the OM was converted fromartifacts/ascend_310p/yolox_x_640_bs1.omβ Ascend 310P1 OM (batch 1)
Deployment Backends
| Target | Backend | Runtime | Hardware |
|---|---|---|---|
ascend_310p |
ascend | ACL | Ascend 310P1 |
Input: observation.image float32 [1,3,640,640] NCHW (images)
Output: yolox.raw float32 [1,8400,85] (PartitionedCall_/head/Transpose_Transpose_29:0:output)
Output is undecoded head output
The exported graph ends at the head Transpose; it contains no grid/stride decode
(no Exp/grid-add nodes). The 85 channels are:
0:4 cx, cy, w, h (grid units, undecoded)
4 objectness
5:85 80 COCO class scores
Consumers must apply the decode themselves, per anchor level with stride 8/16/32:
cx = (raw_cx + grid_x) * stride
cy = (raw_cy + grid_y) * stride
w = exp(raw_w) * stride
h = exp(raw_h) * stride
then cxcywh β xyxy, score = objectness Γ class_conf, class-agnostic NMS
(conf_thre=0.01, nms_thre=0.65), keep COCO person (class_id=0).
This differs from the PyTorch path, where YOLOXHead.decode_outputs runs inside
model(x) because decode_in_inference=True; do not decode twice.
Preprocessing contract (yolox-rgb-letterbox640-v1)
ratio = min(640/H, 640/W)
resize the source frame by ratio
paste it at the top-left of a 640Γ640 canvas
pad value 114
Boxes are mapped back to source-image coordinates by dividing by ratio only β
the letterbox has no centring offset β then clipped to the frame.
Source Model
This bundle's torch weights (assets/yolox_x.pth) are the upstream Megvii YOLOX-X
COCO checkpoint, unmodified:
- Weights:
yolox_x.pth(release0.1.1rc0) yolox_x.pthβ 793,463,373 bytes, sha2565652330b6ae860043f091b8f550a60c10e1129f416edfdb65c259be6caf355cf
Source code
git clone https://github.com/Megvii-BaseDetection/YOLOX.git
git -C YOLOX checkout 6880e3999eb5cf83037e1818ee63d589384587bd
- Repository: https://github.com/Megvii-BaseDetection/YOLOX (Apache-2.0)
- Commit:
6880e3999eb5cf83037e1818ee63d589384587bdβ 2021-10-18, "fix hsv augment overflow error (#802)",yolox.__version__ == "0.1.0"
The export/validation environment used the inference-relevant subset of that commit
(yolox/, exps/ and the root packaging files); the demo/, docs/, tools/, assets/
trees and the seven yolox/data/datasets/* training loaders were not copied. All 62 copied
files were re-checked against the upstream tree at that commit and are byte-identical
(git blob hashes match; no local patches).
The Ascend OM was converted from those weights via ONNX
(yolox_x_640_bs1.onnx, sha256 8fc5c0159baea42463ea86d761754cd79605cb4ae95a3556beb3d59bb3aac390),
with ATC --soc_version=Ascend310P1. The OM
(yolox_x_640_bs1.om, sha256 8ac9a041e2eacb1a10a18098307d6bacefb74264d20cce91ac3e6cb6ebe77e4f)
is not a re-trained model; upstream COCO accuracy (51.1 mAP val, 51.5 mAP test) applies to the
source weights.
Validation
Board evidence recorded on a real Ascend 310P1 (npu-smi info SoC = Ascend310P1;
Ascend310P3 is not a valid target for this device):
PyTorch / ONNX Runtime / ACL final detection count: 4 persons, identical
minimum IoU vs. reference: 0.998113
max final detection score diff: 0.001894
max final bbox diff: 0.225 px
model-stage latency: mean ~19.000 ms, P95 ~19.667 ms, max ~20.064 ms
Latency is the model stage only; letterbox preprocessing, decode and NMS are additional host-side cost and must be budgeted separately.
In the validated HRI pipeline YOLOX runs every 5th frame (74 invocations over a 368-frame, 30 FPS clip) and the previous box is held on non-detection frames. Kalman/optical-flow box propagation, re-identification and quality-triggered re-detection are runtime work that is not part of this bundle.
Usage
Select the ascend_310p deployment through the IB-Robot unified inference runtime; the
bundle is consumed as an external model bundle (it is not stored in the IB-Robot Git
repository).
from inference_manifest import load_inference_manifest
validated = load_inference_manifest("models/yolox_x_640", "ascend_310p")
License
Code and packaging: Apache-2.0. The YOLOX weights are redistributed under the upstream Megvii YOLOX Apache-2.0 license.
Citation
@article{yolox2021,
title = {YOLOX: Exceeding YOLO Series in 2021},
author = {Ge, Zheng and Liu, Songtao and Wang, Feng and Li, Zeming and Sun, Jian},
journal = {arXiv preprint arXiv:2107.08430},
year = {2021}
}
@software{ib_robot,
title = {IB-Robot: Intelligence Boom Robot},
url = {https://atomgit.com/openeuler/IB_Robot},
license = {Apache-2.0}
}