Summary
The database/ directory shipped in the Hugging Face releases (both https://huggingface.co/lycnight/ReMoMask/tree/main/database and https://huggingface.co/AIGeeksGroup/ReMoMask/tree/main/database — identical file sizes) contains exactly 32 entries. The retrieval-augmented pipeline is designed around a database built from every caption of every HumanML3D training motion, which yields tens of thousands of entries when build_rag_database.py is run end to end. As shipped, the database is far too small for the retrieval mechanism to function as described, and it cannot be the corpus that produced the published results.
Affected assets
File sizes as reported by the Hugging Face Hub API (GET /api/models/<repo>?blobs=true), identical across both repos:
| file |
size (bytes) |
database/encoded_motions.npy |
65,664 |
database/encoded_texts.npy |
65,664 |
database/all_captions.npy |
20,736 |
database/motion_ids.npy |
1,152 |
database/motion_tokens.npy |
6,610 |
database/tag_lists.npy |
640 |
Expected vs actual behavior
- Expected: a retrieval database covering the HumanML3D training corpus (tens of thousands of caption-level rows), in the documented format —
(N, 1, 512) float32 arrays for encoded_motions.npy / encoded_texts.npy (format description:
|
Overview of database files generated after running the script |
|
File Path Type Description |
|
database/motion_ids.npy List[str] Names of all motion samples; each item is in the form of motionid_index (e.g., 001_0) |
|
database/all_captions.npy List[str] Natural language description (caption) corresponding to each motion |
|
database/encoded_motions.npy np.ndarray (N, 1, D) Vector representation of each motion, obtained from model.encode_motion() |
|
database/encoded_texts.npy np.ndarray (N, 1, D) Vector representation of each caption, obtained from model.encode_text() |
|
database/tag_lists.npy List[[float, float]] Optional: Start and end time tags for each motion |
|
database/motion_tokens.npy Dict[str, np.ndarray] Optional: VQ-VAE token sequence for each motion, used for generation |
|
''' |
|
|
|
|
; array construction and saving:
|
motion_embeddings = np.array(motion_embeddings) # (25, 1, 256) |
|
# motion_embeddings.shape = (25, 1, 256) |
|
text_embeddings = np.array(text_embeddings) # (25, 1, 256) |
|
# text_embeddings.shape = (25, 1, 256) |
|
|
|
output_folder = cfg.rag.database_path |
|
os.makedirs(output_folder, exist_ok=True) |
|
|
|
path = os.path.join(output_folder, "all_captions.npy") |
|
np.save(path, caption_list) |
|
|
|
path = os.path.join(output_folder, "motion_ids.npy") |
|
np.save(path, motion_ids) |
|
|
|
path = os.path.join(output_folder, "tag_lists.npy") |
|
np.save(path, tag_lists) |
|
|
|
path = os.path.join(output_folder, "encoded_motions.npy") |
|
np.save(path, motion_embeddings) |
|
print(f"Encoding done, motion latent saved in:\n{path}") |
|
|
|
path = os.path.join(output_folder, "encoded_texts.npy") |
|
np.save(path, text_embeddings) |
).
- Actual: with a 128-byte
.npy header, N = (65664 - 128) / (512 * 4) = 32 exactly — the shipped arrays hold 32 rows.
Steps to reproduce
import numpy as np
from huggingface_hub import hf_hub_download
p = hf_hub_download("lycnight/ReMoMask", "database/encoded_motions.npy")
print(np.load(p).shape) # (32, 1, 512)
Impact
Anyone who downloads the released assets and evaluates the released checkpoints as-is runs retrieval against a 32-entry corpus instead of the intended full training corpus. This silently changes what the retrieval module returns and therefore the resulting generation metrics; it also makes the published numbers non-reproducible from the released assets without first rebuilding the database locally.
Summary
The
database/directory shipped in the Hugging Face releases (both https://huggingface.co/lycnight/ReMoMask/tree/main/database and https://huggingface.co/AIGeeksGroup/ReMoMask/tree/main/database — identical file sizes) contains exactly 32 entries. The retrieval-augmented pipeline is designed around a database built from every caption of every HumanML3D training motion, which yields tens of thousands of entries whenbuild_rag_database.pyis run end to end. As shipped, the database is far too small for the retrieval mechanism to function as described, and it cannot be the corpus that produced the published results.Affected assets
File sizes as reported by the Hugging Face Hub API (
GET /api/models/<repo>?blobs=true), identical across both repos:database/encoded_motions.npydatabase/encoded_texts.npydatabase/all_captions.npydatabase/motion_ids.npydatabase/motion_tokens.npydatabase/tag_lists.npyExpected vs actual behavior
(N, 1, 512)float32 arrays forencoded_motions.npy/encoded_texts.npy(format description:ReMoMask/build_rag_database.py
Lines 14 to 24 in 00499c3
ReMoMask/build_rag_database.py
Lines 240 to 262 in 00499c3
.npyheader,N = (65664 - 128) / (512 * 4) = 32exactly — the shipped arrays hold 32 rows.Steps to reproduce
Impact
Anyone who downloads the released assets and evaluates the released checkpoints as-is runs retrieval against a 32-entry corpus instead of the intended full training corpus. This silently changes what the retrieval module returns and therefore the resulting generation metrics; it also makes the published numbers non-reproducible from the released assets without first rebuilding the database locally.