Title: 3D Mesh Classification on ModelNet40

Problem statement
Build a model that classifies 3D objects into one of 40 categories directly from their CAD mesh geometry. Each sample is a 3D triangular mesh stored in OFF format. Predict the correct object category for every mesh in the test set.

This competition emphasizes robust 3D understanding. Strong solutions will combine mesh processing or conversion (e.g., voxelization, point sampling, multi-view rendering), feature engineering, data augmentation, and model training (e.g., point-based networks, voxel CNNs, mesh/graph networks, multi-view CNNs, or classical ML with handcrafted features).

Data description
- train.csv: CSV with columns id,label. Contains the training IDs and their ground-truth category labels.
- test.csv: CSV with column id. Contains the test IDs without labels.
- sample_submission.csv: CSV with columns id,label. Provides a valid example submission (with random labels). Your submission must follow this format.
- train_off/: Directory containing the training 3D meshes. Filenames are anonymized IDs with .off extension.
- test_off/: Directory containing the test 3D meshes. Filenames are anonymized IDs with .off extension.

Conventions and notes
- OFF format: Each file encodes a 3D triangular mesh (list of vertices and faces). You may parse OFF files directly or convert them to alternative 3D representations suitable for ML.
- Filenames and folder names do not contain class names to avoid label leakage. Use the CSVs to map IDs to labels.
- The basename of each mesh file matches the id in the CSVs (e.g., id == "mesh_000123" corresponds to mesh_000123.off).
- The dataset covers 40 everyday object categories and retains the full scale of the original ModelNet40 split.

Evaluation
- Primary metric: Macro-averaged F1 score across all classes present in the test set.
  - For each class c, F1_c = 2 * TP_c / (2 * TP_c + FP_c + FN_c). If the denominator is 0, F1_c is defined as 0.
  - The final score is the arithmetic mean of F1_c across all classes present in the test set.
- Submission format: A single CSV file with columns id,label for all rows in test.csv.
  - Each id must appear exactly once; no extra or missing IDs.
  - Predicted labels must be one of the training categories.

What you receive
- train.csv
- test.csv
- sample_submission.csv
- train_off/ (OFF meshes for training)
- test_off/ (OFF meshes for testing)
