| 11 | |
| 12 | |
| 13 | def make_args_parser(): |
| 14 | |
| 15 | parser = argparse.ArgumentParser( |
| 16 | "MeshXL: Neural Coordinate Field for Generative 3D Foundation Models", |
| 17 | add_help=False |
| 18 | ) |
| 19 | |
| 20 | ##### Optimizer ##### |
| 21 | parser.add_argument("--base_lr", default=1e-4, type=float) |
| 22 | parser.add_argument("--final_lr", default=1e-6, type=float) |
| 23 | parser.add_argument("--weight_decay", default=0.1, type=float) |
| 24 | parser.add_argument( |
| 25 | "--clip_gradient", default=0.1, type=float, |
| 26 | help="Max L2 norm of the gradient" |
| 27 | ) |
| 28 | parser.add_argument("--warm_lr", default=1e-6, type=float) |
| 29 | parser.add_argument("--warm_lr_iters", default=1000, type=int) |
| 30 | |
| 31 | ##### Dataset Setups ##### |
| 32 | parser.add_argument("--pad_id", default=-1, type=int, help="padding id") |
| 33 | parser.add_argument("--dataset", default='shapenet_chair', help="dataset list split by ','") |
| 34 | parser.add_argument("--augment", default=False, action='store_true', help="whether use data augmentation") |
| 35 | parser.add_argument("--n_discrete_size", default=128, type=int, help="discretized 3D space") |
| 36 | parser.add_argument("--n_max_triangles", default=800, type=int, help="max number of triangles") |
| 37 | |
| 38 | ##### Model Setups ##### |
| 39 | parser.add_argument( |
| 40 | '--model', |
| 41 | default=None, |
| 42 | type=str, |
| 43 | help="The model folder: unconditional / conditional mesh generation" |
| 44 | ) |
| 45 | parser.add_argument( |
| 46 | '--llm', |
| 47 | default=None, |
| 48 | type=str, |
| 49 | help="The LLM super config and pre-trained weights" |
| 50 | ) |
| 51 | # conditonal mesh generation, set to None for unconditional generation |
| 52 | parser.add_argument('--text_condition', default=None, type=str, help="the conditional language model") |
| 53 | parser.add_argument('--image_condition', default=None, type=str, help="the conditional vision model") |
| 54 | parser.add_argument('--pretrained_weights', default=None, type=str, help='checkpoint to pre-trained weights') |
| 55 | parser.add_argument("--dataset_num_workers", default=4, type=int, help='number of workers for dataloader') |
| 56 | parser.add_argument("--batchsize_per_gpu", default=8, type=int, help='batch size for each GPU') |
| 57 | |
| 58 | ##### Training ##### |
| 59 | parser.add_argument("--start_epoch", default=-1, type=int, help='overwrite by pre-trained weights') |
| 60 | parser.add_argument("--max_epoch", default=16, type=int, help='number of traversals for the dataset') |
| 61 | parser.add_argument("--start_eval_after", default=-1, type=int, help='do not evaluate the model before xxx iterations') |
| 62 | parser.add_argument("--eval_every_iteration", default=4000, type=int, help='do evaluate the model every xxx iterations') |
| 63 | parser.add_argument("--seed", default=0, type=int, help='random seed') |
| 64 | |
| 65 | ##### Testing ##### |
| 66 | parser.add_argument("--test_only", default=False, action="store_true") |
| 67 | parser.add_argument("--sample_rounds", default=100, type=int, help='do sample for xxx rounds to produce 3D meshes') |
| 68 | |
| 69 | parser.add_argument( |
| 70 | "--criterion", default=None, type=str, |