tkclam commited on
Commit
10c31bf
·
verified ·
1 Parent(s): f6486a5

Add 260927_mvt_dinov3b_512_hexaview_fly38

Browse files
260927_mvt_dinov3b_512_hexaview_fly38/README.md ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # `mvt_dinov3b_512_hexaview_fly38` -- the hexaview detector, round 11
2
+
3
+ A deeperfly 2 detector (`deeperfly-detector-1`, family `mvt`): a multiview transformer on a DINOv3 ViT-B/16 that predicts all 38 points of the `fly38` skeleton in the six views of the hexaview rig -- two cameras, each seeing the arena directly and through two prisms. It windows each view on the fly frame by frame, and a video holds three views of one fly, so it runs with its locator, `260920_fast_efficientvit_b1_352_hexaview_locator`, beside it.
4
+
5
+ Exported 2026-09-28 from `hexaview/runs/r11ship_all`, trained 2026-09-27: round 10's recipe unchanged, retrained on the labels of 2026-09-27.
6
+
7
+ | | |
8
+ |---|---|
9
+ | file | `mvt_dinov3b_512_hexaview_fly38.pth`, 383,792,459 bytes |
10
+ | sha256 | `a832147c1bef46006b7e034215467bca1505a0aba32a01e581db02e8fa8db285` |
11
+ | skeleton | `fly38` -- `fly38.toml` beside this file |
12
+ | backbone | `vit_base_patch16_dinov3.lvd1689m` (timm) |
13
+ | input | 512x512 per view: a square window centered on the fly in each frame |
14
+ | trained on | 16 hexaview recordings, 3,018 items (`report.json`); no holdout |
15
+ | recipe | `config.toml` beside this file |
16
+
17
+ ## What it scores
18
+
19
+ No held-out number of its own: a shipping model trains on every label. On the deeperfly repository's `examples/hexaview/` clip (250 frames of `260819_002`), the pictorial 3D reprojects at 3.15 px median through the recording's calibration. That is agreement across the six views, not an error against labels.
20
+
21
+ ## Using it
22
+
23
+ ```toml
24
+ [pose2d]
25
+ weights = ["/mnt/upramdya/data/TL/deeperfly-models/260927_mvt_dinov3b_512_hexaview_fly38/mvt_dinov3b_512_hexaview_fly38.pth"]
26
+ window = "per_frame"
27
+ locator = "/mnt/upramdya/data/TL/deeperfly-models/260920_fast_efficientvit_b1_352_hexaview_locator/fast_efficientvit_b1_352_hexaview_locator.pth"
28
+ ```
29
+
30
+ Copying this directory to the machine that runs it and naming the local path is the better habit. Verify a copy with `sha256sum -c SHA256SUMS`.
260927_mvt_dinov3b_512_hexaview_fly38/SHA256SUMS ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ 5aaa8857861800b1a797dc69a7da51838ebaa03059112f9608592f6e6dc11c3b ./config.toml
2
+ 56f9a33ea5c286bda06e599602e7b7adaefb7ba29a74a2516548b7cbb7776e52 ./fly38.toml
3
+ a832147c1bef46006b7e034215467bca1505a0aba32a01e581db02e8fa8db285 ./mvt_dinov3b_512_hexaview_fly38.pth
4
+ d15e43352ce008d3e5365b6aa126d5849f59d88ea7dfbd94838647129c9995a2 ./report.json
260927_mvt_dinov3b_512_hexaview_fly38/config.toml ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # r11ship_all: round 11's hexaview ship -- r10ship_all's recipe unchanged, retrained on
2
+ # the labels of 2026-09-27 (504 frames in 17 projects: the 10 of round 10 plus the 7
3
+ # large-arena GE recordings kept after the desync audit) by the code of main 796ae43.
4
+ # The split is still splits/r10_all.toml: its one exclusion, 260804_002 frame 29500,
5
+ # is still labeled. 260730_001's realignment (2026-09-25) split its labeled frames
6
+ # 441250 and 445750 into t-1 (top views only) and t (bottom views only); each is a
7
+ # partially labeled moment, which the fill completes like any other. No holdout.
8
+ #
9
+ # `transductive = true` as in `r6ship_all`: the ship trains on every label, so a
10
+ # teacher that has seen them all leaks nothing it does not already have.
11
+
12
+ format_version = 3
13
+
14
+ [data]
15
+ kind = "project"
16
+ projects = ["../recordings/*"]
17
+ split = "../splits/r10_all.toml"
18
+ cache = "../cache"
19
+
20
+ [data.crops]
21
+ tightness = [0.75, 2.2] # per-sample crop around the animal, log-uniform
22
+ jitter = 0.1
23
+ eval_tightness = 1.25
24
+ full_p = 0.0 # see above: a whole video frame is not one view's
25
+
26
+ [data.fill]
27
+ weight = 0.25
28
+ max_residual_px = 10.0
29
+
30
+ [model]
31
+ input_hw = [512, 512]
32
+ family = "mvt"
33
+ backbone = "vit_base_patch16_dinov3.lvd1689m"
34
+ pretrained = true
35
+ attn_scopes = "llllllllglgl"
36
+ margin = 64
37
+ reach = 2
38
+ drop_path = 0.0
39
+ token_mask = 0.0
40
+ token_pad = 2
41
+ init_from = "/home/tlam/deeperfly-projects/octacam/runs/mvt_dinov3/ship_vitb_distill_s0/model.pth"
42
+
43
+ [augment]
44
+ degrees = 180.0 # every view, day 1: a walking fly faces anywhere
45
+ scale = [1.0, 1.0] # the crop sampler supplies scale and shift
46
+ aspect = [0.85, 1.18]
47
+ translate = [0.0, 0.0]
48
+ flip_p = 0.5
49
+ brightness = 0.3
50
+ contrast = 0.3
51
+ gamma = [0.7, 1.4]
52
+ blur_sigma = [0.5, 1.5]
53
+ noise_std = 0.03
54
+ photometric_p = 0.5
55
+
56
+ [train]
57
+ grad_checkpoint = true
58
+ steps = 5000
59
+ images_per_batch = 24 # four 6-view moments per step
60
+ grad_clip = 1.0
61
+ amp = true
62
+ ema_decay = 0.999
63
+ view_drop_p = 0.3
64
+ view_min = 1
65
+ log_every = 100
66
+ seed = 0
67
+ out = "../runs/r11ship_all"
68
+
69
+ [train.optimizer]
70
+ lr = 1e-4
71
+ weight_decay = 0.05
72
+ warmup_steps = 500
73
+
74
+ [train.loss]
75
+ sigma = 2.0
76
+ field_weight = 1.0
77
+ coord_weight = 0.0
78
+ tri_weight = 0.0 # the calibration's units are arbitrary
79
+
80
+ [train.eval]
81
+ every = 0
82
+
83
+ [compute]
84
+ workers = 8
85
+
86
+ [unlabeled]
87
+ # No `teacher`: the teacher's points, confidences and windows come from each
88
+ # project's merged detections (ADR-0083): r10ship_all, or r10ship_all_realigned.
89
+ n_per_project = 250
90
+ transductive = true
91
+ agree_px = 6.0
92
+ min_views = 3
93
+ conf_min = 0.3
94
+ geom_weight = 0.3
95
+ weight = 0.5
96
+ mask_ratios = [0.0, 0.5, 0.9]
97
+ masked_weight = 1.0
98
+ unmasked_weight = 0.5
99
+ crop_tightness = [0.75, 1.6]
100
+ cache = "../cache/unlabeled"
260927_mvt_dinov3b_512_hexaview_fly38/fly38.toml ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # fly38 -- the 38 tracked points of a tethered Drosophila: six 5-point legs, two
2
+ # antennae, the neck, and a 5-point dorsal-midline abdomen chain (the tergite stripes).
3
+ #
4
+ # A skeleton is points, edges and point_symmetries -- the same decomposition as SLEAP
5
+ # and DeepLabCut -- plus an optional palette (point_colors / edge_colors). The palette
6
+ # is decoration, not identity: it draws the points but is kept out of the digest, so
7
+ # recoloring never reports a different skeleton.
8
+
9
+ [skeleton]
10
+ name = "fly38"
11
+
12
+ # The points IN ORDER: channel i of the detector is points[i]. This is the contract
13
+ # with the weights.
14
+ points = [
15
+ "lf_thorax_coxa", "lf_coxa_trochanter", "lf_femur_tibia", "lf_tibia_tarsus", "lf_pretarsus",
16
+ "lm_thorax_coxa", "lm_coxa_trochanter", "lm_femur_tibia", "lm_tibia_tarsus", "lm_pretarsus",
17
+ "lh_thorax_coxa", "lh_coxa_trochanter", "lh_femur_tibia", "lh_tibia_tarsus", "lh_pretarsus",
18
+ "l_antenna",
19
+ "rf_thorax_coxa", "rf_coxa_trochanter", "rf_femur_tibia", "rf_tibia_tarsus", "rf_pretarsus",
20
+ "rm_thorax_coxa", "rm_coxa_trochanter", "rm_femur_tibia", "rm_tibia_tarsus", "rm_pretarsus",
21
+ "rh_thorax_coxa", "rh_coxa_trochanter", "rh_femur_tibia", "rh_tibia_tarsus", "rh_pretarsus",
22
+ "r_antenna",
23
+ "neck",
24
+ "abdomen0", "abdomen1", "abdomen2", "abdomen3", "abdomen4",
25
+ ]
26
+
27
+ # The edges, as pairs of points. The antennae and neck appear in no edge -- tracked
28
+ # points with no bone.
29
+ edges = [
30
+ ["lf_thorax_coxa", "lf_coxa_trochanter"], ["lf_coxa_trochanter", "lf_femur_tibia"],
31
+ ["lf_femur_tibia", "lf_tibia_tarsus"], ["lf_tibia_tarsus", "lf_pretarsus"],
32
+ ["lm_thorax_coxa", "lm_coxa_trochanter"], ["lm_coxa_trochanter", "lm_femur_tibia"],
33
+ ["lm_femur_tibia", "lm_tibia_tarsus"], ["lm_tibia_tarsus", "lm_pretarsus"],
34
+ ["lh_thorax_coxa", "lh_coxa_trochanter"], ["lh_coxa_trochanter", "lh_femur_tibia"],
35
+ ["lh_femur_tibia", "lh_tibia_tarsus"], ["lh_tibia_tarsus", "lh_pretarsus"],
36
+ ["rf_thorax_coxa", "rf_coxa_trochanter"], ["rf_coxa_trochanter", "rf_femur_tibia"],
37
+ ["rf_femur_tibia", "rf_tibia_tarsus"], ["rf_tibia_tarsus", "rf_pretarsus"],
38
+ ["rm_thorax_coxa", "rm_coxa_trochanter"], ["rm_coxa_trochanter", "rm_femur_tibia"],
39
+ ["rm_femur_tibia", "rm_tibia_tarsus"], ["rm_tibia_tarsus", "rm_pretarsus"],
40
+ ["rh_thorax_coxa", "rh_coxa_trochanter"], ["rh_coxa_trochanter", "rh_femur_tibia"],
41
+ ["rh_femur_tibia", "rh_tibia_tarsus"], ["rh_tibia_tarsus", "rh_pretarsus"],
42
+ ["abdomen0", "abdomen1"], ["abdomen1", "abdomen2"], ["abdomen2", "abdomen3"], ["abdomen3", "abdomen4"],
43
+ ]
44
+
45
+ # What each point becomes under a left/right flip. Write each pair once; anything absent
46
+ # is on the midline and maps to itself (hence no neck, no abdomen). The loader checks
47
+ # the implied mirror against `edges`: applying it must give the edge set back, so a
48
+ # wrong side or two joints of one leg exchanged is named rather than trained on silently.
49
+ point_symmetries = [
50
+ ["lf_thorax_coxa", "rf_thorax_coxa"],
51
+ ["lf_coxa_trochanter", "rf_coxa_trochanter"],
52
+ ["lf_femur_tibia", "rf_femur_tibia"],
53
+ ["lf_tibia_tarsus", "rf_tibia_tarsus"],
54
+ ["lf_pretarsus", "rf_pretarsus"],
55
+ ["lm_thorax_coxa", "rm_thorax_coxa"],
56
+ ["lm_coxa_trochanter", "rm_coxa_trochanter"],
57
+ ["lm_femur_tibia", "rm_femur_tibia"],
58
+ ["lm_tibia_tarsus", "rm_tibia_tarsus"],
59
+ ["lm_pretarsus", "rm_pretarsus"],
60
+ ["lh_thorax_coxa", "rh_thorax_coxa"],
61
+ ["lh_coxa_trochanter", "rh_coxa_trochanter"],
62
+ ["lh_femur_tibia", "rh_femur_tibia"],
63
+ ["lh_tibia_tarsus", "rh_tibia_tarsus"],
64
+ ["lh_pretarsus", "rh_pretarsus"],
65
+ ["l_antenna", "r_antenna"],
66
+ ]
67
+
68
+ # The palette. One #rrggbb per point; a key is a point name or a `*` pattern (an exact
69
+ # name beats a pattern). Optional and may be partial -- an unnamed point takes tab10 by
70
+ # index. The scheme is anatomical, so it reads at a glance: left = blue, right = red,
71
+ # front -> hind lightening within a side; the midline neck and abdomen green. Edges take
72
+ # the average of their endpoints, so every leg bone comes out its own limb's color.
73
+ [skeleton.point_colors]
74
+ "lf_*" = "#0f7399"
75
+ "lm_*" = "#1a8daf"
76
+ "lh_*" = "#75becb"
77
+ l_antenna = "#0a4f6b"
78
+ "rf_*" = "#ba1e31"
79
+ "rm_*" = "#c9564f"
80
+ "rh_*" = "#d58579"
81
+ r_antenna = "#8c1525"
82
+ neck = "#15a315"
83
+ "abdomen*" = "#61e47b"
84
+
85
+ # A canonical neutral posture (NeuroMechFly's rest pose), one [x, y, z] per point
86
+ # in millimeters, with the body center of mass at the origin (x anterior, y the
87
+ # left-right axis, z dorsal). It is NOT part of the skeleton's identity (out of the
88
+ # digest); it draws the skeleton in 3D and SEEDS labeling: projected through a
89
+ # recording's calibration it drops a rough draggable instance into each view when
90
+ # nothing else (a prior labeled frame, another view) is available to seed from.
91
+ [skeleton.default_pose]
92
+ lf_thorax_coxa = [ 0.42966, 0.17200, 0.25226]
93
+ lf_coxa_trochanter = [ 0.31028, 0.06883, -0.07688]
94
+ lf_femur_tibia = [ 0.85227, 0.42043, 0.20537]
95
+ lf_tibia_tarsus = [ 1.05606, 0.65936, -0.20658]
96
+ lf_pretarsus = [ 1.45133, 1.02885, -0.58856]
97
+ lm_thorax_coxa = [ 0.03366, 0.12500, 0.00026]
98
+ lm_coxa_trochanter = [ 0.00831, 0.09367, -0.17620]
99
+ lm_femur_tibia = [ 0.11746, 0.70120, 0.30719]
100
+ lm_tibia_tarsus = [ 0.23055, 0.96680, -0.29411]
101
+ lm_pretarsus = [ 0.38484, 1.49119, -0.73358]
102
+ lh_thorax_coxa = [-0.19334, 0.08700, -0.01474]
103
+ lh_coxa_trochanter = [-0.27402, 0.09655, -0.19640]
104
+ lh_femur_tibia = [-0.64760, 0.63110, 0.32665]
105
+ lh_tibia_tarsus = [-0.96496, 0.77982, -0.26073]
106
+ lh_pretarsus = [-1.40791, 1.03885, -0.86325]
107
+ l_antenna = [ 1.04836, 0.08600, 0.56596]
108
+ rf_thorax_coxa = [ 0.42966, -0.17200, 0.25226]
109
+ rf_coxa_trochanter = [ 0.31028, -0.06883, -0.07688]
110
+ rf_femur_tibia = [ 0.85227, -0.42043, 0.20537]
111
+ rf_tibia_tarsus = [ 1.05606, -0.65936, -0.20658]
112
+ rf_pretarsus = [ 1.45133, -1.02885, -0.58856]
113
+ rm_thorax_coxa = [ 0.03366, -0.12500, 0.00026]
114
+ rm_coxa_trochanter = [ 0.00831, -0.09367, -0.17620]
115
+ rm_femur_tibia = [ 0.11746, -0.70120, 0.30719]
116
+ rm_tibia_tarsus = [ 0.23055, -0.96680, -0.29411]
117
+ rm_pretarsus = [ 0.38484, -1.49119, -0.73358]
118
+ rh_thorax_coxa = [-0.19334, -0.08700, -0.01474]
119
+ rh_coxa_trochanter = [-0.27402, -0.09655, -0.19640]
120
+ rh_femur_tibia = [-0.64760, -0.63110, 0.32665]
121
+ rh_tibia_tarsus = [-0.96496, -0.77982, -0.26073]
122
+ rh_pretarsus = [-1.40791, -1.03885, -0.86325]
123
+ r_antenna = [ 1.04836, -0.08600, 0.56596]
124
+ neck = [ 0.61936, 0.00000, 0.48296]
125
+ abdomen0 = [-0.71698, 0.00000, 0.71444]
126
+ abdomen1 = [-0.91268, 0.00000, 0.66169]
127
+ abdomen2 = [-1.10060, 0.00000, 0.61850]
128
+ abdomen3 = [-1.27163, 0.00000, 0.56551]
129
+ abdomen4 = [-1.48737, 0.00000, 0.46364]
260927_mvt_dinov3b_512_hexaview_fly38/mvt_dinov3b_512_hexaview_fly38.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a832147c1bef46006b7e034215467bca1505a0aba32a01e581db02e8fa8db285
3
+ size 383792459
260927_mvt_dinov3b_512_hexaview_fly38/report.json ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "projects": {
3
+ "260730_001": "/home/tlam/deeperfly-projects/hexaview/recordings/260730_001/deeperfly",
4
+ "260804_001": "/home/tlam/deeperfly-projects/hexaview/recordings/260804_001/deeperfly",
5
+ "260804_002": "/home/tlam/deeperfly-projects/hexaview/recordings/260804_002/deeperfly",
6
+ "260804_003": "/home/tlam/deeperfly-projects/hexaview/recordings/260804_003/deeperfly",
7
+ "260804_004": "/home/tlam/deeperfly-projects/hexaview/recordings/260804_004/deeperfly",
8
+ "260818_001": "/home/tlam/deeperfly-projects/hexaview/recordings/260818_001/deeperfly",
9
+ "260819_001": "/home/tlam/deeperfly-projects/hexaview/recordings/260819_001/deeperfly",
10
+ "260819_002": "/home/tlam/deeperfly-projects/hexaview/recordings/260819_002/deeperfly",
11
+ "260819_003": "/home/tlam/deeperfly-projects/hexaview/recordings/260819_003/deeperfly",
12
+ "260821_002": "/home/tlam/deeperfly-projects/hexaview/recordings/260821_002/deeperfly",
13
+ "260916_Fly10_001": "/home/tlam/deeperfly-projects/hexaview/recordings/260916_Fly10_001/deeperfly",
14
+ "260916_Fly1_001": "/home/tlam/deeperfly-projects/hexaview/recordings/260916_Fly1_001/deeperfly",
15
+ "260916_Fly3_001": "/home/tlam/deeperfly-projects/hexaview/recordings/260916_Fly3_001/deeperfly",
16
+ "260916_Fly5_001": "/home/tlam/deeperfly-projects/hexaview/recordings/260916_Fly5_001/deeperfly",
17
+ "260916_Fly6_001": "/home/tlam/deeperfly-projects/hexaview/recordings/260916_Fly6_001/deeperfly",
18
+ "260916_Fly9_001": "/home/tlam/deeperfly-projects/hexaview/recordings/260916_Fly9_001/deeperfly",
19
+ "260917_Fly8_001": "/home/tlam/deeperfly-projects/hexaview/recordings/260917_Fly8_001/deeperfly"
20
+ },
21
+ "train_projects": [
22
+ "260730_001",
23
+ "260804_001",
24
+ "260804_002",
25
+ "260804_003",
26
+ "260804_004",
27
+ "260818_001",
28
+ "260819_001",
29
+ "260819_002",
30
+ "260819_003",
31
+ "260821_002",
32
+ "260916_Fly10_001",
33
+ "260916_Fly1_001",
34
+ "260916_Fly3_001",
35
+ "260916_Fly5_001",
36
+ "260916_Fly9_001",
37
+ "260917_Fly8_001"
38
+ ],
39
+ "holdout": [],
40
+ "holdout_frames": {},
41
+ "n_train_items": 3018,
42
+ "augment": {
43
+ "degrees": 180.0,
44
+ "scale": [
45
+ 1.0,
46
+ 1.0
47
+ ],
48
+ "aspect": [
49
+ 0.85,
50
+ 1.18
51
+ ],
52
+ "translate": [
53
+ 0.0,
54
+ 0.0
55
+ ],
56
+ "flip_p": 0.5,
57
+ "brightness": 0.3,
58
+ "contrast": 0.3,
59
+ "gamma": [
60
+ 0.7,
61
+ 1.4
62
+ ],
63
+ "blur_sigma": [
64
+ 0.5,
65
+ 1.5
66
+ ],
67
+ "noise_std": 0.03,
68
+ "photometric_p": 0.5
69
+ },
70
+ "final_loss": 7.084183692932129,
71
+ "holdout_report": null,
72
+ "select_best": null,
73
+ "best_step": null,
74
+ "best_score": null
75
+ }