fangmingguo commited on
Commit
4f74920
·
verified ·
1 Parent(s): 5351249

Upload 575 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +486 -0
  2. calibration/calibration_can_bus.tar.gz +3 -0
  3. calibration/calibration_img.tar.gz +3 -0
  4. calibration/calibration_lidar2img.tar.gz +3 -0
  5. calibration/calibration_prev_bev.tar.gz +3 -0
  6. inference_axmodel.py +1002 -0
  7. inference_config.json +68 -0
  8. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000040.png +3 -0
  9. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000041.png +3 -0
  10. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000042.png +3 -0
  11. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000043.png +3 -0
  12. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000044.png +3 -0
  13. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000045.png +3 -0
  14. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000046.png +3 -0
  15. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000047.png +3 -0
  16. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000048.png +3 -0
  17. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000049.png +3 -0
  18. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000050.png +3 -0
  19. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000051.png +3 -0
  20. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000052.png +3 -0
  21. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000053.png +3 -0
  22. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000054.png +3 -0
  23. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000055.png +3 -0
  24. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000056.png +3 -0
  25. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000057.png +3 -0
  26. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000058.png +3 -0
  27. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000059.png +3 -0
  28. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000060.png +3 -0
  29. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000061.png +3 -0
  30. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000062.png +3 -0
  31. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000063.png +3 -0
  32. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000064.png +3 -0
  33. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000065.png +3 -0
  34. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000066.png +3 -0
  35. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000067.png +3 -0
  36. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000068.png +3 -0
  37. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000069.png +3 -0
  38. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000070.png +3 -0
  39. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000071.png +3 -0
  40. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000072.png +3 -0
  41. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000073.png +3 -0
  42. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000074.png +3 -0
  43. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000075.png +3 -0
  44. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000076.png +3 -0
  45. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000077.png +3 -0
  46. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000078.png +3 -0
  47. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000079.png +3 -0
  48. inference_data/325cef682f064c55a255f2625c533b75/cam_00_000080.png +3 -0
  49. inference_data/325cef682f064c55a255f2625c533b75/cam_01_000040.png +3 -0
  50. inference_data/325cef682f064c55a255f2625c533b75/cam_01_000041.png +3 -0
.gitattributes CHANGED
@@ -34,3 +34,489 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  output.gif filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
  output.gif filter=lfs diff=lfs merge=lfs -text
37
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000040.png filter=lfs diff=lfs merge=lfs -text
38
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000041.png filter=lfs diff=lfs merge=lfs -text
39
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000042.png filter=lfs diff=lfs merge=lfs -text
40
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000043.png filter=lfs diff=lfs merge=lfs -text
41
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000044.png filter=lfs diff=lfs merge=lfs -text
42
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000045.png filter=lfs diff=lfs merge=lfs -text
43
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000046.png filter=lfs diff=lfs merge=lfs -text
44
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000047.png filter=lfs diff=lfs merge=lfs -text
45
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000048.png filter=lfs diff=lfs merge=lfs -text
46
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000049.png filter=lfs diff=lfs merge=lfs -text
47
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000050.png filter=lfs diff=lfs merge=lfs -text
48
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000051.png filter=lfs diff=lfs merge=lfs -text
49
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000052.png filter=lfs diff=lfs merge=lfs -text
50
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000053.png filter=lfs diff=lfs merge=lfs -text
51
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000054.png filter=lfs diff=lfs merge=lfs -text
52
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000055.png filter=lfs diff=lfs merge=lfs -text
53
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000056.png filter=lfs diff=lfs merge=lfs -text
54
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000057.png filter=lfs diff=lfs merge=lfs -text
55
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000058.png filter=lfs diff=lfs merge=lfs -text
56
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000059.png filter=lfs diff=lfs merge=lfs -text
57
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000060.png filter=lfs diff=lfs merge=lfs -text
58
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000061.png filter=lfs diff=lfs merge=lfs -text
59
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000062.png filter=lfs diff=lfs merge=lfs -text
60
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000063.png filter=lfs diff=lfs merge=lfs -text
61
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000064.png filter=lfs diff=lfs merge=lfs -text
62
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000065.png filter=lfs diff=lfs merge=lfs -text
63
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000066.png filter=lfs diff=lfs merge=lfs -text
64
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000067.png filter=lfs diff=lfs merge=lfs -text
65
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000068.png filter=lfs diff=lfs merge=lfs -text
66
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000069.png filter=lfs diff=lfs merge=lfs -text
67
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000070.png filter=lfs diff=lfs merge=lfs -text
68
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000071.png filter=lfs diff=lfs merge=lfs -text
69
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000072.png filter=lfs diff=lfs merge=lfs -text
70
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000073.png filter=lfs diff=lfs merge=lfs -text
71
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000074.png filter=lfs diff=lfs merge=lfs -text
72
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000075.png filter=lfs diff=lfs merge=lfs -text
73
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000076.png filter=lfs diff=lfs merge=lfs -text
74
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000077.png filter=lfs diff=lfs merge=lfs -text
75
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000078.png filter=lfs diff=lfs merge=lfs -text
76
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000079.png filter=lfs diff=lfs merge=lfs -text
77
+ inference_data/325cef682f064c55a255f2625c533b75/cam_00_000080.png filter=lfs diff=lfs merge=lfs -text
78
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000040.png filter=lfs diff=lfs merge=lfs -text
79
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000041.png filter=lfs diff=lfs merge=lfs -text
80
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000042.png filter=lfs diff=lfs merge=lfs -text
81
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000043.png filter=lfs diff=lfs merge=lfs -text
82
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000044.png filter=lfs diff=lfs merge=lfs -text
83
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000045.png filter=lfs diff=lfs merge=lfs -text
84
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000046.png filter=lfs diff=lfs merge=lfs -text
85
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000047.png filter=lfs diff=lfs merge=lfs -text
86
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000048.png filter=lfs diff=lfs merge=lfs -text
87
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000049.png filter=lfs diff=lfs merge=lfs -text
88
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000050.png filter=lfs diff=lfs merge=lfs -text
89
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000051.png filter=lfs diff=lfs merge=lfs -text
90
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000052.png filter=lfs diff=lfs merge=lfs -text
91
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000053.png filter=lfs diff=lfs merge=lfs -text
92
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000054.png filter=lfs diff=lfs merge=lfs -text
93
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000055.png filter=lfs diff=lfs merge=lfs -text
94
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000056.png filter=lfs diff=lfs merge=lfs -text
95
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000057.png filter=lfs diff=lfs merge=lfs -text
96
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000058.png filter=lfs diff=lfs merge=lfs -text
97
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000059.png filter=lfs diff=lfs merge=lfs -text
98
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000060.png filter=lfs diff=lfs merge=lfs -text
99
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000061.png filter=lfs diff=lfs merge=lfs -text
100
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000062.png filter=lfs diff=lfs merge=lfs -text
101
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000063.png filter=lfs diff=lfs merge=lfs -text
102
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000064.png filter=lfs diff=lfs merge=lfs -text
103
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000065.png filter=lfs diff=lfs merge=lfs -text
104
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000066.png filter=lfs diff=lfs merge=lfs -text
105
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000067.png filter=lfs diff=lfs merge=lfs -text
106
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000068.png filter=lfs diff=lfs merge=lfs -text
107
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000069.png filter=lfs diff=lfs merge=lfs -text
108
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000070.png filter=lfs diff=lfs merge=lfs -text
109
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000071.png filter=lfs diff=lfs merge=lfs -text
110
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000072.png filter=lfs diff=lfs merge=lfs -text
111
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000073.png filter=lfs diff=lfs merge=lfs -text
112
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000074.png filter=lfs diff=lfs merge=lfs -text
113
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000075.png filter=lfs diff=lfs merge=lfs -text
114
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000076.png filter=lfs diff=lfs merge=lfs -text
115
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000077.png filter=lfs diff=lfs merge=lfs -text
116
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000078.png filter=lfs diff=lfs merge=lfs -text
117
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000079.png filter=lfs diff=lfs merge=lfs -text
118
+ inference_data/325cef682f064c55a255f2625c533b75/cam_01_000080.png filter=lfs diff=lfs merge=lfs -text
119
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000040.png filter=lfs diff=lfs merge=lfs -text
120
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000041.png filter=lfs diff=lfs merge=lfs -text
121
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000042.png filter=lfs diff=lfs merge=lfs -text
122
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000043.png filter=lfs diff=lfs merge=lfs -text
123
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000044.png filter=lfs diff=lfs merge=lfs -text
124
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000045.png filter=lfs diff=lfs merge=lfs -text
125
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000046.png filter=lfs diff=lfs merge=lfs -text
126
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000047.png filter=lfs diff=lfs merge=lfs -text
127
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000048.png filter=lfs diff=lfs merge=lfs -text
128
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000049.png filter=lfs diff=lfs merge=lfs -text
129
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000050.png filter=lfs diff=lfs merge=lfs -text
130
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000051.png filter=lfs diff=lfs merge=lfs -text
131
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000052.png filter=lfs diff=lfs merge=lfs -text
132
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000053.png filter=lfs diff=lfs merge=lfs -text
133
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000054.png filter=lfs diff=lfs merge=lfs -text
134
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000055.png filter=lfs diff=lfs merge=lfs -text
135
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000056.png filter=lfs diff=lfs merge=lfs -text
136
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000057.png filter=lfs diff=lfs merge=lfs -text
137
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000058.png filter=lfs diff=lfs merge=lfs -text
138
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000059.png filter=lfs diff=lfs merge=lfs -text
139
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000060.png filter=lfs diff=lfs merge=lfs -text
140
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000061.png filter=lfs diff=lfs merge=lfs -text
141
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000062.png filter=lfs diff=lfs merge=lfs -text
142
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000063.png filter=lfs diff=lfs merge=lfs -text
143
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000064.png filter=lfs diff=lfs merge=lfs -text
144
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000065.png filter=lfs diff=lfs merge=lfs -text
145
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000066.png filter=lfs diff=lfs merge=lfs -text
146
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000067.png filter=lfs diff=lfs merge=lfs -text
147
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000068.png filter=lfs diff=lfs merge=lfs -text
148
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000069.png filter=lfs diff=lfs merge=lfs -text
149
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000070.png filter=lfs diff=lfs merge=lfs -text
150
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000071.png filter=lfs diff=lfs merge=lfs -text
151
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000072.png filter=lfs diff=lfs merge=lfs -text
152
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000073.png filter=lfs diff=lfs merge=lfs -text
153
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000074.png filter=lfs diff=lfs merge=lfs -text
154
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000075.png filter=lfs diff=lfs merge=lfs -text
155
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000076.png filter=lfs diff=lfs merge=lfs -text
156
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000077.png filter=lfs diff=lfs merge=lfs -text
157
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000078.png filter=lfs diff=lfs merge=lfs -text
158
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000079.png filter=lfs diff=lfs merge=lfs -text
159
+ inference_data/325cef682f064c55a255f2625c533b75/cam_02_000080.png filter=lfs diff=lfs merge=lfs -text
160
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000040.png filter=lfs diff=lfs merge=lfs -text
161
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000041.png filter=lfs diff=lfs merge=lfs -text
162
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000042.png filter=lfs diff=lfs merge=lfs -text
163
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000043.png filter=lfs diff=lfs merge=lfs -text
164
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000044.png filter=lfs diff=lfs merge=lfs -text
165
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000045.png filter=lfs diff=lfs merge=lfs -text
166
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000046.png filter=lfs diff=lfs merge=lfs -text
167
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000047.png filter=lfs diff=lfs merge=lfs -text
168
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000048.png filter=lfs diff=lfs merge=lfs -text
169
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000049.png filter=lfs diff=lfs merge=lfs -text
170
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000050.png filter=lfs diff=lfs merge=lfs -text
171
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000051.png filter=lfs diff=lfs merge=lfs -text
172
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000052.png filter=lfs diff=lfs merge=lfs -text
173
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000053.png filter=lfs diff=lfs merge=lfs -text
174
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000054.png filter=lfs diff=lfs merge=lfs -text
175
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000055.png filter=lfs diff=lfs merge=lfs -text
176
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000056.png filter=lfs diff=lfs merge=lfs -text
177
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000057.png filter=lfs diff=lfs merge=lfs -text
178
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000058.png filter=lfs diff=lfs merge=lfs -text
179
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000059.png filter=lfs diff=lfs merge=lfs -text
180
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000060.png filter=lfs diff=lfs merge=lfs -text
181
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000061.png filter=lfs diff=lfs merge=lfs -text
182
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000062.png filter=lfs diff=lfs merge=lfs -text
183
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000063.png filter=lfs diff=lfs merge=lfs -text
184
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000064.png filter=lfs diff=lfs merge=lfs -text
185
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000065.png filter=lfs diff=lfs merge=lfs -text
186
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000066.png filter=lfs diff=lfs merge=lfs -text
187
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000067.png filter=lfs diff=lfs merge=lfs -text
188
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000068.png filter=lfs diff=lfs merge=lfs -text
189
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000069.png filter=lfs diff=lfs merge=lfs -text
190
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000070.png filter=lfs diff=lfs merge=lfs -text
191
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000071.png filter=lfs diff=lfs merge=lfs -text
192
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000072.png filter=lfs diff=lfs merge=lfs -text
193
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000073.png filter=lfs diff=lfs merge=lfs -text
194
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000074.png filter=lfs diff=lfs merge=lfs -text
195
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000075.png filter=lfs diff=lfs merge=lfs -text
196
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000076.png filter=lfs diff=lfs merge=lfs -text
197
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000077.png filter=lfs diff=lfs merge=lfs -text
198
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000078.png filter=lfs diff=lfs merge=lfs -text
199
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000079.png filter=lfs diff=lfs merge=lfs -text
200
+ inference_data/325cef682f064c55a255f2625c533b75/cam_03_000080.png filter=lfs diff=lfs merge=lfs -text
201
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000040.png filter=lfs diff=lfs merge=lfs -text
202
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000041.png filter=lfs diff=lfs merge=lfs -text
203
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000042.png filter=lfs diff=lfs merge=lfs -text
204
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000043.png filter=lfs diff=lfs merge=lfs -text
205
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000044.png filter=lfs diff=lfs merge=lfs -text
206
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000045.png filter=lfs diff=lfs merge=lfs -text
207
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000046.png filter=lfs diff=lfs merge=lfs -text
208
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000047.png filter=lfs diff=lfs merge=lfs -text
209
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000048.png filter=lfs diff=lfs merge=lfs -text
210
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000049.png filter=lfs diff=lfs merge=lfs -text
211
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000050.png filter=lfs diff=lfs merge=lfs -text
212
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000051.png filter=lfs diff=lfs merge=lfs -text
213
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000052.png filter=lfs diff=lfs merge=lfs -text
214
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000053.png filter=lfs diff=lfs merge=lfs -text
215
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000054.png filter=lfs diff=lfs merge=lfs -text
216
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000055.png filter=lfs diff=lfs merge=lfs -text
217
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000056.png filter=lfs diff=lfs merge=lfs -text
218
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000057.png filter=lfs diff=lfs merge=lfs -text
219
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000058.png filter=lfs diff=lfs merge=lfs -text
220
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000059.png filter=lfs diff=lfs merge=lfs -text
221
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000060.png filter=lfs diff=lfs merge=lfs -text
222
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000061.png filter=lfs diff=lfs merge=lfs -text
223
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000062.png filter=lfs diff=lfs merge=lfs -text
224
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000063.png filter=lfs diff=lfs merge=lfs -text
225
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000064.png filter=lfs diff=lfs merge=lfs -text
226
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000065.png filter=lfs diff=lfs merge=lfs -text
227
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000066.png filter=lfs diff=lfs merge=lfs -text
228
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000067.png filter=lfs diff=lfs merge=lfs -text
229
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000068.png filter=lfs diff=lfs merge=lfs -text
230
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000069.png filter=lfs diff=lfs merge=lfs -text
231
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000070.png filter=lfs diff=lfs merge=lfs -text
232
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000071.png filter=lfs diff=lfs merge=lfs -text
233
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000072.png filter=lfs diff=lfs merge=lfs -text
234
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000073.png filter=lfs diff=lfs merge=lfs -text
235
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000074.png filter=lfs diff=lfs merge=lfs -text
236
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000075.png filter=lfs diff=lfs merge=lfs -text
237
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000076.png filter=lfs diff=lfs merge=lfs -text
238
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000077.png filter=lfs diff=lfs merge=lfs -text
239
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000078.png filter=lfs diff=lfs merge=lfs -text
240
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000079.png filter=lfs diff=lfs merge=lfs -text
241
+ inference_data/325cef682f064c55a255f2625c533b75/cam_04_000080.png filter=lfs diff=lfs merge=lfs -text
242
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000040.png filter=lfs diff=lfs merge=lfs -text
243
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000041.png filter=lfs diff=lfs merge=lfs -text
244
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000042.png filter=lfs diff=lfs merge=lfs -text
245
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000043.png filter=lfs diff=lfs merge=lfs -text
246
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000044.png filter=lfs diff=lfs merge=lfs -text
247
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000045.png filter=lfs diff=lfs merge=lfs -text
248
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000046.png filter=lfs diff=lfs merge=lfs -text
249
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000047.png filter=lfs diff=lfs merge=lfs -text
250
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000048.png filter=lfs diff=lfs merge=lfs -text
251
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000049.png filter=lfs diff=lfs merge=lfs -text
252
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000050.png filter=lfs diff=lfs merge=lfs -text
253
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000051.png filter=lfs diff=lfs merge=lfs -text
254
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000052.png filter=lfs diff=lfs merge=lfs -text
255
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000053.png filter=lfs diff=lfs merge=lfs -text
256
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000054.png filter=lfs diff=lfs merge=lfs -text
257
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000055.png filter=lfs diff=lfs merge=lfs -text
258
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000056.png filter=lfs diff=lfs merge=lfs -text
259
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000057.png filter=lfs diff=lfs merge=lfs -text
260
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000058.png filter=lfs diff=lfs merge=lfs -text
261
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000059.png filter=lfs diff=lfs merge=lfs -text
262
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000060.png filter=lfs diff=lfs merge=lfs -text
263
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000061.png filter=lfs diff=lfs merge=lfs -text
264
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000062.png filter=lfs diff=lfs merge=lfs -text
265
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000063.png filter=lfs diff=lfs merge=lfs -text
266
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000064.png filter=lfs diff=lfs merge=lfs -text
267
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000065.png filter=lfs diff=lfs merge=lfs -text
268
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000066.png filter=lfs diff=lfs merge=lfs -text
269
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000067.png filter=lfs diff=lfs merge=lfs -text
270
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000068.png filter=lfs diff=lfs merge=lfs -text
271
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000069.png filter=lfs diff=lfs merge=lfs -text
272
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000070.png filter=lfs diff=lfs merge=lfs -text
273
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000071.png filter=lfs diff=lfs merge=lfs -text
274
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000072.png filter=lfs diff=lfs merge=lfs -text
275
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000073.png filter=lfs diff=lfs merge=lfs -text
276
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000074.png filter=lfs diff=lfs merge=lfs -text
277
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000075.png filter=lfs diff=lfs merge=lfs -text
278
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000076.png filter=lfs diff=lfs merge=lfs -text
279
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000077.png filter=lfs diff=lfs merge=lfs -text
280
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000078.png filter=lfs diff=lfs merge=lfs -text
281
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000079.png filter=lfs diff=lfs merge=lfs -text
282
+ inference_data/325cef682f064c55a255f2625c533b75/cam_05_000080.png filter=lfs diff=lfs merge=lfs -text
283
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000000.png filter=lfs diff=lfs merge=lfs -text
284
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000001.png filter=lfs diff=lfs merge=lfs -text
285
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000002.png filter=lfs diff=lfs merge=lfs -text
286
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000003.png filter=lfs diff=lfs merge=lfs -text
287
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000004.png filter=lfs diff=lfs merge=lfs -text
288
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000005.png filter=lfs diff=lfs merge=lfs -text
289
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000006.png filter=lfs diff=lfs merge=lfs -text
290
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000007.png filter=lfs diff=lfs merge=lfs -text
291
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000008.png filter=lfs diff=lfs merge=lfs -text
292
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000009.png filter=lfs diff=lfs merge=lfs -text
293
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000010.png filter=lfs diff=lfs merge=lfs -text
294
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000011.png filter=lfs diff=lfs merge=lfs -text
295
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000012.png filter=lfs diff=lfs merge=lfs -text
296
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000013.png filter=lfs diff=lfs merge=lfs -text
297
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000014.png filter=lfs diff=lfs merge=lfs -text
298
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000015.png filter=lfs diff=lfs merge=lfs -text
299
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000016.png filter=lfs diff=lfs merge=lfs -text
300
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000017.png filter=lfs diff=lfs merge=lfs -text
301
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000018.png filter=lfs diff=lfs merge=lfs -text
302
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000019.png filter=lfs diff=lfs merge=lfs -text
303
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000020.png filter=lfs diff=lfs merge=lfs -text
304
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000021.png filter=lfs diff=lfs merge=lfs -text
305
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000022.png filter=lfs diff=lfs merge=lfs -text
306
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000023.png filter=lfs diff=lfs merge=lfs -text
307
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000024.png filter=lfs diff=lfs merge=lfs -text
308
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000025.png filter=lfs diff=lfs merge=lfs -text
309
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000026.png filter=lfs diff=lfs merge=lfs -text
310
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000027.png filter=lfs diff=lfs merge=lfs -text
311
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000028.png filter=lfs diff=lfs merge=lfs -text
312
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000029.png filter=lfs diff=lfs merge=lfs -text
313
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000030.png filter=lfs diff=lfs merge=lfs -text
314
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000031.png filter=lfs diff=lfs merge=lfs -text
315
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000032.png filter=lfs diff=lfs merge=lfs -text
316
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000033.png filter=lfs diff=lfs merge=lfs -text
317
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000034.png filter=lfs diff=lfs merge=lfs -text
318
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000035.png filter=lfs diff=lfs merge=lfs -text
319
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000036.png filter=lfs diff=lfs merge=lfs -text
320
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000037.png filter=lfs diff=lfs merge=lfs -text
321
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000038.png filter=lfs diff=lfs merge=lfs -text
322
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_00_000039.png filter=lfs diff=lfs merge=lfs -text
323
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000000.png filter=lfs diff=lfs merge=lfs -text
324
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000001.png filter=lfs diff=lfs merge=lfs -text
325
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000002.png filter=lfs diff=lfs merge=lfs -text
326
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000003.png filter=lfs diff=lfs merge=lfs -text
327
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000004.png filter=lfs diff=lfs merge=lfs -text
328
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000005.png filter=lfs diff=lfs merge=lfs -text
329
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000006.png filter=lfs diff=lfs merge=lfs -text
330
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000007.png filter=lfs diff=lfs merge=lfs -text
331
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000008.png filter=lfs diff=lfs merge=lfs -text
332
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000009.png filter=lfs diff=lfs merge=lfs -text
333
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000010.png filter=lfs diff=lfs merge=lfs -text
334
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000011.png filter=lfs diff=lfs merge=lfs -text
335
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000012.png filter=lfs diff=lfs merge=lfs -text
336
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000013.png filter=lfs diff=lfs merge=lfs -text
337
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000014.png filter=lfs diff=lfs merge=lfs -text
338
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000015.png filter=lfs diff=lfs merge=lfs -text
339
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000016.png filter=lfs diff=lfs merge=lfs -text
340
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000017.png filter=lfs diff=lfs merge=lfs -text
341
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000018.png filter=lfs diff=lfs merge=lfs -text
342
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000019.png filter=lfs diff=lfs merge=lfs -text
343
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000020.png filter=lfs diff=lfs merge=lfs -text
344
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000021.png filter=lfs diff=lfs merge=lfs -text
345
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000022.png filter=lfs diff=lfs merge=lfs -text
346
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000023.png filter=lfs diff=lfs merge=lfs -text
347
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000024.png filter=lfs diff=lfs merge=lfs -text
348
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000025.png filter=lfs diff=lfs merge=lfs -text
349
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000026.png filter=lfs diff=lfs merge=lfs -text
350
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000027.png filter=lfs diff=lfs merge=lfs -text
351
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000028.png filter=lfs diff=lfs merge=lfs -text
352
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000029.png filter=lfs diff=lfs merge=lfs -text
353
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000030.png filter=lfs diff=lfs merge=lfs -text
354
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000031.png filter=lfs diff=lfs merge=lfs -text
355
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000032.png filter=lfs diff=lfs merge=lfs -text
356
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000033.png filter=lfs diff=lfs merge=lfs -text
357
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000034.png filter=lfs diff=lfs merge=lfs -text
358
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000035.png filter=lfs diff=lfs merge=lfs -text
359
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000036.png filter=lfs diff=lfs merge=lfs -text
360
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000037.png filter=lfs diff=lfs merge=lfs -text
361
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000038.png filter=lfs diff=lfs merge=lfs -text
362
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_01_000039.png filter=lfs diff=lfs merge=lfs -text
363
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000000.png filter=lfs diff=lfs merge=lfs -text
364
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000001.png filter=lfs diff=lfs merge=lfs -text
365
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000002.png filter=lfs diff=lfs merge=lfs -text
366
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000003.png filter=lfs diff=lfs merge=lfs -text
367
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000004.png filter=lfs diff=lfs merge=lfs -text
368
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000005.png filter=lfs diff=lfs merge=lfs -text
369
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000006.png filter=lfs diff=lfs merge=lfs -text
370
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000007.png filter=lfs diff=lfs merge=lfs -text
371
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000008.png filter=lfs diff=lfs merge=lfs -text
372
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000009.png filter=lfs diff=lfs merge=lfs -text
373
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000010.png filter=lfs diff=lfs merge=lfs -text
374
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000011.png filter=lfs diff=lfs merge=lfs -text
375
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000012.png filter=lfs diff=lfs merge=lfs -text
376
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000013.png filter=lfs diff=lfs merge=lfs -text
377
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000014.png filter=lfs diff=lfs merge=lfs -text
378
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000015.png filter=lfs diff=lfs merge=lfs -text
379
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000016.png filter=lfs diff=lfs merge=lfs -text
380
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000017.png filter=lfs diff=lfs merge=lfs -text
381
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000018.png filter=lfs diff=lfs merge=lfs -text
382
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000019.png filter=lfs diff=lfs merge=lfs -text
383
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000020.png filter=lfs diff=lfs merge=lfs -text
384
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000021.png filter=lfs diff=lfs merge=lfs -text
385
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000022.png filter=lfs diff=lfs merge=lfs -text
386
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000023.png filter=lfs diff=lfs merge=lfs -text
387
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000024.png filter=lfs diff=lfs merge=lfs -text
388
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000025.png filter=lfs diff=lfs merge=lfs -text
389
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000026.png filter=lfs diff=lfs merge=lfs -text
390
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000027.png filter=lfs diff=lfs merge=lfs -text
391
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000028.png filter=lfs diff=lfs merge=lfs -text
392
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000029.png filter=lfs diff=lfs merge=lfs -text
393
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000030.png filter=lfs diff=lfs merge=lfs -text
394
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000031.png filter=lfs diff=lfs merge=lfs -text
395
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000032.png filter=lfs diff=lfs merge=lfs -text
396
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000033.png filter=lfs diff=lfs merge=lfs -text
397
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000034.png filter=lfs diff=lfs merge=lfs -text
398
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000035.png filter=lfs diff=lfs merge=lfs -text
399
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000036.png filter=lfs diff=lfs merge=lfs -text
400
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000037.png filter=lfs diff=lfs merge=lfs -text
401
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000038.png filter=lfs diff=lfs merge=lfs -text
402
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_02_000039.png filter=lfs diff=lfs merge=lfs -text
403
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000000.png filter=lfs diff=lfs merge=lfs -text
404
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000001.png filter=lfs diff=lfs merge=lfs -text
405
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000002.png filter=lfs diff=lfs merge=lfs -text
406
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000003.png filter=lfs diff=lfs merge=lfs -text
407
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000004.png filter=lfs diff=lfs merge=lfs -text
408
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000005.png filter=lfs diff=lfs merge=lfs -text
409
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000006.png filter=lfs diff=lfs merge=lfs -text
410
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000007.png filter=lfs diff=lfs merge=lfs -text
411
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000008.png filter=lfs diff=lfs merge=lfs -text
412
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000009.png filter=lfs diff=lfs merge=lfs -text
413
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000010.png filter=lfs diff=lfs merge=lfs -text
414
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000011.png filter=lfs diff=lfs merge=lfs -text
415
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000012.png filter=lfs diff=lfs merge=lfs -text
416
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000013.png filter=lfs diff=lfs merge=lfs -text
417
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000014.png filter=lfs diff=lfs merge=lfs -text
418
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000015.png filter=lfs diff=lfs merge=lfs -text
419
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000016.png filter=lfs diff=lfs merge=lfs -text
420
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000017.png filter=lfs diff=lfs merge=lfs -text
421
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000018.png filter=lfs diff=lfs merge=lfs -text
422
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000019.png filter=lfs diff=lfs merge=lfs -text
423
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000020.png filter=lfs diff=lfs merge=lfs -text
424
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000021.png filter=lfs diff=lfs merge=lfs -text
425
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000022.png filter=lfs diff=lfs merge=lfs -text
426
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000023.png filter=lfs diff=lfs merge=lfs -text
427
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000024.png filter=lfs diff=lfs merge=lfs -text
428
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000025.png filter=lfs diff=lfs merge=lfs -text
429
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000026.png filter=lfs diff=lfs merge=lfs -text
430
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000027.png filter=lfs diff=lfs merge=lfs -text
431
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000028.png filter=lfs diff=lfs merge=lfs -text
432
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000029.png filter=lfs diff=lfs merge=lfs -text
433
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000030.png filter=lfs diff=lfs merge=lfs -text
434
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000031.png filter=lfs diff=lfs merge=lfs -text
435
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000032.png filter=lfs diff=lfs merge=lfs -text
436
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000033.png filter=lfs diff=lfs merge=lfs -text
437
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000034.png filter=lfs diff=lfs merge=lfs -text
438
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000035.png filter=lfs diff=lfs merge=lfs -text
439
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000036.png filter=lfs diff=lfs merge=lfs -text
440
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000037.png filter=lfs diff=lfs merge=lfs -text
441
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000038.png filter=lfs diff=lfs merge=lfs -text
442
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_03_000039.png filter=lfs diff=lfs merge=lfs -text
443
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000000.png filter=lfs diff=lfs merge=lfs -text
444
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000001.png filter=lfs diff=lfs merge=lfs -text
445
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000002.png filter=lfs diff=lfs merge=lfs -text
446
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000003.png filter=lfs diff=lfs merge=lfs -text
447
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000004.png filter=lfs diff=lfs merge=lfs -text
448
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000005.png filter=lfs diff=lfs merge=lfs -text
449
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000006.png filter=lfs diff=lfs merge=lfs -text
450
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000007.png filter=lfs diff=lfs merge=lfs -text
451
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000008.png filter=lfs diff=lfs merge=lfs -text
452
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000009.png filter=lfs diff=lfs merge=lfs -text
453
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000010.png filter=lfs diff=lfs merge=lfs -text
454
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000011.png filter=lfs diff=lfs merge=lfs -text
455
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000012.png filter=lfs diff=lfs merge=lfs -text
456
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000013.png filter=lfs diff=lfs merge=lfs -text
457
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000014.png filter=lfs diff=lfs merge=lfs -text
458
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000015.png filter=lfs diff=lfs merge=lfs -text
459
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000016.png filter=lfs diff=lfs merge=lfs -text
460
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000017.png filter=lfs diff=lfs merge=lfs -text
461
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000018.png filter=lfs diff=lfs merge=lfs -text
462
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000019.png filter=lfs diff=lfs merge=lfs -text
463
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000020.png filter=lfs diff=lfs merge=lfs -text
464
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000021.png filter=lfs diff=lfs merge=lfs -text
465
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000022.png filter=lfs diff=lfs merge=lfs -text
466
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000023.png filter=lfs diff=lfs merge=lfs -text
467
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000024.png filter=lfs diff=lfs merge=lfs -text
468
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000025.png filter=lfs diff=lfs merge=lfs -text
469
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000026.png filter=lfs diff=lfs merge=lfs -text
470
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000027.png filter=lfs diff=lfs merge=lfs -text
471
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000028.png filter=lfs diff=lfs merge=lfs -text
472
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000029.png filter=lfs diff=lfs merge=lfs -text
473
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000030.png filter=lfs diff=lfs merge=lfs -text
474
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000031.png filter=lfs diff=lfs merge=lfs -text
475
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000032.png filter=lfs diff=lfs merge=lfs -text
476
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000033.png filter=lfs diff=lfs merge=lfs -text
477
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000034.png filter=lfs diff=lfs merge=lfs -text
478
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000035.png filter=lfs diff=lfs merge=lfs -text
479
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000036.png filter=lfs diff=lfs merge=lfs -text
480
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000037.png filter=lfs diff=lfs merge=lfs -text
481
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000038.png filter=lfs diff=lfs merge=lfs -text
482
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_04_000039.png filter=lfs diff=lfs merge=lfs -text
483
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000000.png filter=lfs diff=lfs merge=lfs -text
484
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000001.png filter=lfs diff=lfs merge=lfs -text
485
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000002.png filter=lfs diff=lfs merge=lfs -text
486
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000003.png filter=lfs diff=lfs merge=lfs -text
487
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000004.png filter=lfs diff=lfs merge=lfs -text
488
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000005.png filter=lfs diff=lfs merge=lfs -text
489
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000006.png filter=lfs diff=lfs merge=lfs -text
490
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000007.png filter=lfs diff=lfs merge=lfs -text
491
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000008.png filter=lfs diff=lfs merge=lfs -text
492
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000009.png filter=lfs diff=lfs merge=lfs -text
493
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000010.png filter=lfs diff=lfs merge=lfs -text
494
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000011.png filter=lfs diff=lfs merge=lfs -text
495
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000012.png filter=lfs diff=lfs merge=lfs -text
496
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000013.png filter=lfs diff=lfs merge=lfs -text
497
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000014.png filter=lfs diff=lfs merge=lfs -text
498
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000015.png filter=lfs diff=lfs merge=lfs -text
499
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000016.png filter=lfs diff=lfs merge=lfs -text
500
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000017.png filter=lfs diff=lfs merge=lfs -text
501
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000018.png filter=lfs diff=lfs merge=lfs -text
502
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000019.png filter=lfs diff=lfs merge=lfs -text
503
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000020.png filter=lfs diff=lfs merge=lfs -text
504
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000021.png filter=lfs diff=lfs merge=lfs -text
505
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000022.png filter=lfs diff=lfs merge=lfs -text
506
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000023.png filter=lfs diff=lfs merge=lfs -text
507
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000024.png filter=lfs diff=lfs merge=lfs -text
508
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000025.png filter=lfs diff=lfs merge=lfs -text
509
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000026.png filter=lfs diff=lfs merge=lfs -text
510
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000027.png filter=lfs diff=lfs merge=lfs -text
511
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000028.png filter=lfs diff=lfs merge=lfs -text
512
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000029.png filter=lfs diff=lfs merge=lfs -text
513
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000030.png filter=lfs diff=lfs merge=lfs -text
514
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000031.png filter=lfs diff=lfs merge=lfs -text
515
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000032.png filter=lfs diff=lfs merge=lfs -text
516
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000033.png filter=lfs diff=lfs merge=lfs -text
517
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000034.png filter=lfs diff=lfs merge=lfs -text
518
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000035.png filter=lfs diff=lfs merge=lfs -text
519
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000036.png filter=lfs diff=lfs merge=lfs -text
520
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000037.png filter=lfs diff=lfs merge=lfs -text
521
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000038.png filter=lfs diff=lfs merge=lfs -text
522
+ inference_data/fcbccedd61424f1b85dcbf8f897f9754/cam_05_000039.png filter=lfs diff=lfs merge=lfs -text
calibration/calibration_can_bus.tar.gz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:590775d6c9346be0afbee45c26d1223a94f2f741ecc479104325455962afb1b7
3
+ size 2382
calibration/calibration_img.tar.gz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6877de53868893fbd19839c4e927ff6c016b2586a4c7c5e3718e56aa472c5411
3
+ size 195626176
calibration/calibration_lidar2img.tar.gz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c5195453bd8f61cbdddc24e63f57946ef8a7c34bf839c9cdd7f1b3a0c1e25979
3
+ size 9691
calibration/calibration_prev_bev.tar.gz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3b35488d037e8c070dde88296cda9cd6c54f70e8d885930cea2ccb128a430733
3
+ size 75938882
inference_axmodel.py ADDED
@@ -0,0 +1,1002 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ import argparse
3
+ import json
4
+ import os
5
+ import os.path as osp
6
+ import cv2
7
+ import numpy as np
8
+ import axengine as axe
9
+ from collections import defaultdict
10
+ from tqdm import tqdm
11
+
12
+
13
+ def parse_args():
14
+ parser = argparse.ArgumentParser(description='BEVFormer AXEngine Inference from Extracted Data')
15
+ parser.add_argument('model', help='AXModel path')
16
+ parser.add_argument('config_json', help='JSON config file path')
17
+ parser.add_argument('data_dir', help='extracted data directory (extracted_data)')
18
+ parser.add_argument('--output-dir', default='./inference_results_extracted', help='output directory')
19
+ parser.add_argument('--score-thr', type=float, default=0.1, help='score threshold')
20
+ parser.add_argument('--fps', type=int, default=3, help='video fps')
21
+ parser.add_argument('--start-scene', type=int, default=0, help='start scene index')
22
+ parser.add_argument('--end-scene', type=int, default=None, help='end scene index (None for all)')
23
+ return parser.parse_args()
24
+
25
+
26
+ def load_axmodel(axmodel_path):
27
+ """Load AXModel"""
28
+ session = axe.InferenceSession(axmodel_path)
29
+ return session
30
+
31
+
32
+ def load_config_from_json(config_path):
33
+ """Load configuration from JSON file"""
34
+ with open(config_path, 'r') as f:
35
+ config = json.load(f)
36
+ return config
37
+
38
+
39
+ def preprocess_image(img_path, img_norm_cfg, target_size=(480, 800)):
40
+ """Preprocess image: load, resize, normalize
41
+
42
+ Args:
43
+ img_path: path to image file
44
+ img_norm_cfg: normalization config with 'mean', 'std', 'to_rgb'
45
+ target_size: (H, W) target size
46
+
47
+ Returns:
48
+ img: (C, H, W) normalized numpy array, float32
49
+ """
50
+ # Load image
51
+ img = cv2.imread(img_path)
52
+ if img is None:
53
+ raise ValueError(f"Cannot load image: {img_path}")
54
+
55
+ # Convert BGR to RGB if needed
56
+ if img_norm_cfg.get('to_rgb', True):
57
+ img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
58
+
59
+ # Resize if needed
60
+ if img.shape[:2] != target_size:
61
+ img = cv2.resize(img, (target_size[1], target_size[0])) # (W, H)
62
+
63
+ # Convert to float and normalize
64
+ img = img.astype(np.float32)
65
+ mean = np.array(img_norm_cfg.get('mean', [123.675, 116.28, 103.53]), dtype=np.float32)
66
+ std = np.array(img_norm_cfg.get('std', [58.395, 57.12, 57.375]), dtype=np.float32)
67
+
68
+ img = (img - mean) / std
69
+ img = img.transpose(2, 0, 1) # (H, W, C) -> (C, H, W)
70
+
71
+ return img
72
+
73
+
74
+ def load_data(data_dir, scene_name, frame_idx):
75
+ """Load data
76
+
77
+ Args:
78
+ data_dir: data directory path
79
+ scene_name: scene name (scene token)
80
+ frame_idx: frame index (sample index)
81
+
82
+ Returns:
83
+ img: (1, N, C, H, W) numpy array
84
+ lidar2img: (1, N, 4, 4) numpy array
85
+ can_bus: (1, 18) numpy array
86
+ meta: dict with metadata
87
+ """
88
+ scene_dir = osp.join(data_dir, scene_name)
89
+
90
+ # Load meta
91
+ meta_path = osp.join(scene_dir, f'meta_{frame_idx:06d}.json')
92
+ with open(meta_path, 'r') as f:
93
+ meta = json.load(f)
94
+
95
+ # Get normalization config
96
+ img_norm_cfg = meta.get('img_norm_cfg', {
97
+ 'mean': [123.675, 116.28, 103.53],
98
+ 'std': [58.395, 57.12, 57.375],
99
+ 'to_rgb': True
100
+ })
101
+
102
+ # Get image shape
103
+ img_shape = meta.get('img_shape', [[480, 800, 3]] * 6)
104
+ target_size = (img_shape[0][0], img_shape[0][1]) # (H, W)
105
+
106
+ # Load images for all cameras
107
+ num_cams = meta.get('num_cams', 6)
108
+ imgs = []
109
+ for cam_idx in range(num_cams):
110
+ img_path = osp.join(scene_dir, f'cam_{cam_idx:02d}_{frame_idx:06d}.png')
111
+ img = preprocess_image(img_path, img_norm_cfg, target_size)
112
+ imgs.append(img)
113
+
114
+ # Stack images: (N, C, H, W) -> (1, N, C, H, W)
115
+ img = np.stack(imgs, axis=0) # (N, C, H, W)
116
+ img = img[np.newaxis, ...] # (1, N, C, H, W)
117
+
118
+ # Load lidar2img: (N, 4, 4) -> (1, N, 4, 4)
119
+ lidar2img = np.array(meta['lidar2img'], dtype=np.float32) # (N, 4, 4)
120
+ lidar2img = lidar2img[np.newaxis, ...] # (1, N, 4, 4)
121
+
122
+ # Load can_bus: (18,) -> (1, 18)
123
+ can_bus = np.array(meta['can_bus'], dtype=np.float32) # (18,)
124
+ can_bus = can_bus[np.newaxis, ...] # (1, 18)
125
+
126
+ return img, lidar2img, can_bus, meta
127
+
128
+ CLASS_COLORS = {
129
+ 0: (0, 255, 0), 1: (255, 255, 0), 2: (0, 0, 255), 3: (0, 165, 255),
130
+ 4: (255, 0, 255), 5: (0, 255, 255), 6: (128, 0, 128), 7: (255, 165, 0),
131
+ 8: (0, 0, 255), 9: (128, 128, 128),
132
+ }
133
+
134
+
135
+ def denormalize_bbox_np(normalized_bboxes, pc_range):
136
+ """Denormalize bbox using numpy only"""
137
+ # rotation
138
+ rot_sine = normalized_bboxes[..., 6:7]
139
+ rot_cosine = normalized_bboxes[..., 7:8]
140
+
141
+ rot = np.arctan2(rot_sine, rot_cosine)
142
+
143
+ # center in the bev
144
+ cx = normalized_bboxes[..., 0:1]
145
+ cy = normalized_bboxes[..., 1:2]
146
+ cz = normalized_bboxes[..., 4:5]
147
+
148
+ # size
149
+ w = normalized_bboxes[..., 2:3]
150
+ l = normalized_bboxes[..., 3:4]
151
+ h = normalized_bboxes[..., 5:6]
152
+
153
+ w = np.exp(w)
154
+ l = np.exp(l)
155
+ h = np.exp(h)
156
+
157
+ if normalized_bboxes.shape[-1] > 8:
158
+ # velocity
159
+ vx = normalized_bboxes[:, 8:9]
160
+ vy = normalized_bboxes[:, 9:10]
161
+ denormalized_bboxes = np.concatenate([cx, cy, cz, w, l, h, rot, vx, vy], axis=-1)
162
+ else:
163
+ denormalized_bboxes = np.concatenate([cx, cy, cz, w, l, h, rot], axis=-1)
164
+ return denormalized_bboxes
165
+
166
+ def decode_bboxes_custom_np(all_cls_scores, all_bbox_preds, pc_range, post_center_range, max_num=100, score_threshold=None, num_classes=10):
167
+ """Custom bbox decode function"""
168
+ # Use output from the last decoder layer
169
+ all_cls_scores = all_cls_scores[-1] # (bs, num_query, num_classes)
170
+ all_bbox_preds = all_bbox_preds[-1] # (bs, num_query, 10)
171
+
172
+ batch_size = all_cls_scores.shape[0]
173
+ predictions_list = []
174
+
175
+ for i in range(batch_size):
176
+ cls_scores = all_cls_scores[i] # (num_query, num_classes)
177
+ bbox_preds = all_bbox_preds[i] # (num_query, 10)
178
+
179
+ # Apply sigmoid
180
+ cls_scores = 1.0 / (1.0 + np.exp(-cls_scores))
181
+
182
+ # TopK selection
183
+ cls_scores_flat = cls_scores.reshape(-1)
184
+ topk_indices = np.argsort(cls_scores_flat)[::-1][:max_num]
185
+ scores = cls_scores_flat[topk_indices]
186
+ labels = topk_indices % num_classes
187
+ bbox_index = topk_indices // num_classes
188
+ bbox_preds = bbox_preds[bbox_index]
189
+
190
+ # Denormalize bbox
191
+ final_box_preds = denormalize_bbox_np(bbox_preds, pc_range) # (max_num, 9)
192
+ final_scores = scores
193
+ final_preds = labels
194
+
195
+ # Apply score threshold
196
+ if score_threshold is not None:
197
+ thresh_mask = final_scores > score_threshold
198
+ tmp_score = score_threshold
199
+ while thresh_mask.sum() == 0:
200
+ tmp_score *= 0.9
201
+ if tmp_score < 0.01:
202
+ thresh_mask = np.ones(len(final_scores), dtype=bool)
203
+ break
204
+ thresh_mask = final_scores >= tmp_score
205
+ else:
206
+ thresh_mask = np.ones(len(final_scores), dtype=bool)
207
+
208
+ # Apply post processing range filtering
209
+ if post_center_range is not None:
210
+ post_center_range_arr = np.array(post_center_range)
211
+ mask = (final_box_preds[..., :3] >= post_center_range_arr[:3]).all(1)
212
+ mask &= (final_box_preds[..., :3] <= post_center_range_arr[3:]).all(1)
213
+ mask &= thresh_mask
214
+
215
+ boxes3d = final_box_preds[mask]
216
+ scores = final_scores[mask]
217
+ labels = final_preds[mask]
218
+ else:
219
+ boxes3d = final_box_preds[thresh_mask]
220
+ scores = final_scores[thresh_mask]
221
+ labels = final_preds[thresh_mask]
222
+
223
+ predictions_list.append({
224
+ 'bboxes': boxes3d,
225
+ 'scores': scores,
226
+ 'labels': labels
227
+ })
228
+
229
+ return predictions_list
230
+
231
+
232
+ def get_bboxes_custom_np(preds_dicts, pc_range, post_center_range, max_num=100, score_threshold=None, num_classes=10):
233
+ """Custom get_bboxes function"""
234
+ # Decode bounding boxes
235
+ preds_list = decode_bboxes_custom_np(
236
+ preds_dicts['all_cls_scores'],
237
+ preds_dicts['all_bbox_preds'],
238
+ pc_range,
239
+ post_center_range,
240
+ max_num,
241
+ score_threshold,
242
+ num_classes
243
+ )
244
+
245
+ num_samples = len(preds_list)
246
+ ret_list = []
247
+
248
+ for i in range(num_samples):
249
+ preds = preds_list[i]
250
+ bboxes = preds['bboxes']
251
+
252
+ if len(bboxes) == 0:
253
+ ret_list.append((
254
+ np.zeros((0, 9), dtype=np.float32),
255
+ np.zeros((0,), dtype=np.float32),
256
+ np.zeros((0,), dtype=np.int64)
257
+ ))
258
+ continue
259
+
260
+ # Adjust z coordinate: convert center z to bottom center z
261
+ bboxes[:, 2] = bboxes[:, 2] - bboxes[:, 5] * 0.5
262
+
263
+ # Shrink box dimensions: multiply w, l, h by 0.9 to fix oversized boxes
264
+ bboxes[:, 3:6] = bboxes[:, 3:6] * 0.9
265
+
266
+ scores = preds['scores']
267
+ labels = preds['labels']
268
+
269
+ ret_list.append((bboxes, scores, labels))
270
+
271
+ return ret_list
272
+
273
+
274
+ def format_bbox_result_np(bboxes, scores, labels):
275
+ return {
276
+ 'boxes_3d': bboxes,
277
+ 'scores_3d': scores,
278
+ 'labels_3d': labels
279
+ }
280
+
281
+
282
+ def rotation_3d_in_axis_np(points, angles, axis=2):
283
+ """Rotate points by angles according to axis"""
284
+ rot_sin = np.sin(angles)
285
+ rot_cos = np.cos(angles)
286
+ ones = np.ones_like(rot_cos)
287
+ zeros = np.zeros_like(rot_cos)
288
+
289
+ if axis == 2 or axis == -1:
290
+ # Rotate around z-axis
291
+ # Build rotation matrix: (N, 3, 3)
292
+ N = len(angles)
293
+ rot_mat = np.zeros((N, 3, 3), dtype=points.dtype)
294
+ rot_mat[:, 0, 0] = rot_cos
295
+ rot_mat[:, 0, 1] = -rot_sin
296
+ rot_mat[:, 0, 2] = zeros
297
+ rot_mat[:, 1, 0] = rot_sin
298
+ rot_mat[:, 1, 1] = rot_cos
299
+ rot_mat[:, 1, 2] = zeros
300
+ rot_mat[:, 2, 0] = zeros
301
+ rot_mat[:, 2, 1] = zeros
302
+ rot_mat[:, 2, 2] = ones
303
+
304
+ # Apply rotation: (N, M, 3) @ (N, 3, 3) -> (N, M, 3)
305
+ return np.einsum('aij,ajk->aik', points, rot_mat)
306
+ else:
307
+ raise ValueError(f'Only axis=2 (z-axis) is supported for LiDAR boxes')
308
+
309
+
310
+ def compute_bbox_corners_np(bboxes):
311
+ """Compute 8 corners of 3D bbox"""
312
+ if len(bboxes) == 0:
313
+ return np.zeros((0, 8, 3), dtype=np.float32)
314
+
315
+ dtype = bboxes.dtype
316
+
317
+ # Extract bbox parameters
318
+ centers = bboxes[:, :3] # (N, 3) [x, y, z] - the bottom center
319
+ w = bboxes[:, 3:4] # width (y direction)
320
+ l = bboxes[:, 4:5] # length (x direction)
321
+ h = bboxes[:, 5:6] # height (z direction)
322
+ dims = np.concatenate([l, w, h], axis=1) # (N, 3) [x_size, y_size, z_size] = [l, w, h]
323
+ yaws = bboxes[:, 6] # (N,) yaw angle
324
+
325
+ # Key fix: offset yaw by -80 degrees
326
+ yaws = yaws - (np.pi / 2.0 - np.pi / 18.0)
327
+
328
+ # Generate corners
329
+ corners_norm = np.stack(np.unravel_index(np.arange(8), [2] * 3), axis=1).astype(dtype)
330
+
331
+ # Rearrange to [0, 1, 3, 2, 4, 5, 7, 6]
332
+ corners_norm = corners_norm[[0, 1, 3, 2, 4, 5, 7, 6]]
333
+
334
+ # Use relative origin [0.5, 0.5, 0] (bottom center)
335
+ corners_norm = corners_norm - np.array([0.5, 0.5, 0], dtype=dtype)
336
+
337
+ # Scale corners: dims is [x_size, y_size, z_size]
338
+ corners = dims[:, np.newaxis, :] * corners_norm[np.newaxis, :, :] # (N, 8, 3)
339
+
340
+ # Rotate around z-axis
341
+ corners = rotation_3d_in_axis_np(corners, yaws, axis=2)
342
+
343
+ # Translate to center point
344
+ corners += centers[:, np.newaxis, :]
345
+
346
+ return corners
347
+
348
+
349
+ def draw_bbox3d_on_img_custom_np(bboxes, raw_img, lidar2img_rt, color=(0, 255, 0), thickness=2):
350
+ """Custom 3D bbox drawing"""
351
+ img = raw_img.copy()
352
+
353
+ if len(bboxes) == 0:
354
+ return img
355
+
356
+ if not isinstance(bboxes, np.ndarray):
357
+ bboxes = np.array(bboxes)
358
+ if not isinstance(lidar2img_rt, np.ndarray):
359
+ lidar2img_rt = np.array(lidar2img_rt)
360
+
361
+ lidar2img_rt = lidar2img_rt.reshape(4, 4)
362
+
363
+ # Compute corners
364
+ corners_3d = compute_bbox_corners_np(bboxes) # (N, 8, 3)
365
+
366
+ num_bbox = corners_3d.shape[0]
367
+
368
+ # Project to 2D
369
+ corners_3d_flat = corners_3d.reshape(-1, 3) # (N*8, 3)
370
+ ones = np.ones((corners_3d_flat.shape[0], 1), dtype=np.float32)
371
+ pts_4d = np.concatenate([corners_3d_flat, ones], axis=-1) # (N*8, 4)
372
+
373
+ # Project
374
+ pts_2d = pts_4d @ lidar2img_rt.T # (N*8, 4)
375
+
376
+ # Perspective division
377
+ pts_2d[:, 2] = np.clip(pts_2d[:, 2], a_min=1e-5, a_max=1e5)
378
+ pts_2d[:, 0] /= pts_2d[:, 2]
379
+ pts_2d[:, 1] /= pts_2d[:, 2]
380
+
381
+ # Reshape to (N, 8, 2)
382
+ imgfov_pts_2d = pts_2d[:, :2].reshape(num_bbox, 8, 2)
383
+
384
+ # Draw 12 lines
385
+ line_indices = ((0, 1), (0, 3), (0, 4), (1, 2), (1, 5), (3, 2), (3, 7),
386
+ (4, 5), (4, 7), (2, 6), (5, 6), (6, 7))
387
+
388
+ for i in range(num_bbox):
389
+ corners = imgfov_pts_2d[i].astype(np.int32)
390
+ for start, end in line_indices:
391
+ pt1 = (int(corners[start, 0]), int(corners[start, 1]))
392
+ pt2 = (int(corners[end, 0]), int(corners[end, 1]))
393
+ # Check if points are within image range
394
+ h, w = img.shape[:2]
395
+ if (0 <= pt1[0] < w and 0 <= pt1[1] < h) or (0 <= pt2[0] < w and 0 <= pt2[1] < h):
396
+ cv2.line(img, pt1, pt2, color, thickness, cv2.LINE_AA)
397
+
398
+ return img.astype(np.uint8)
399
+
400
+
401
+ def post_process_outputs_np(all_cls_scores, all_bbox_preds, config, score_thr=0.1):
402
+ bbox_coder = config['model']['bbox_coder']
403
+ pc_range = bbox_coder['pc_range']
404
+ post_center_range = bbox_coder['post_center_range']
405
+ max_num = bbox_coder['max_num']
406
+ score_threshold = bbox_coder.get('score_threshold', None)
407
+ num_classes = bbox_coder['num_classes']
408
+
409
+ preds_dicts = {
410
+ 'all_cls_scores': all_cls_scores,
411
+ 'all_bbox_preds': all_bbox_preds
412
+ }
413
+
414
+ bbox_list = get_bboxes_custom_np(
415
+ preds_dicts, pc_range, post_center_range,
416
+ max_num, score_threshold, num_classes
417
+ )
418
+
419
+ results = []
420
+ for bboxes, scores, labels in bbox_list:
421
+ # Set class score thresholds
422
+ class_score_thrs = {
423
+ 0: 0.3, # Car
424
+ 1: 0.3, # Truck
425
+ 2: 0.3, # Construction vehicle
426
+ 3: 0.3, # Bus
427
+ 4: 0.3, # Trailer
428
+ 5: 0.3, # Barrier
429
+ 6: 0.3, # Motorcycle
430
+ 7: 0.3, # Bicycle
431
+ 8: 0.3, # Pedestrian
432
+ 9: 0.3, # Traffic cone
433
+ }
434
+ default_thr = score_thr
435
+
436
+ keep_indices = []
437
+ for i in range(len(scores)):
438
+ cls_id = int(labels[i])
439
+ thr = class_score_thrs.get(cls_id, default_thr)
440
+ if scores[i] > thr:
441
+ keep_indices.append(i)
442
+
443
+ if len(keep_indices) == 0:
444
+ results.append(format_bbox_result_np(
445
+ np.zeros((0, 9), dtype=np.float32),
446
+ np.zeros((0,), dtype=np.float32),
447
+ np.zeros((0,), dtype=np.int64)
448
+ ))
449
+ continue
450
+
451
+ keep_indices = np.array(keep_indices, dtype=np.int64)
452
+ bboxes = bboxes[keep_indices]
453
+ scores = scores[keep_indices]
454
+ labels = labels[keep_indices]
455
+
456
+ # Circle NMS
457
+ dist_thrs = {
458
+ 0: 2.0, 1: 3.0, 2: 2.5, 3: 4.0, 4: 3.0,
459
+ 5: 1.0, 6: 1.5, 7: 1.0, 8: 0.5, 9: 0.3,
460
+ }
461
+
462
+ if len(scores) > 0:
463
+ keep_nms = circle_nms_np(bboxes, scores, labels, dist_thrs)
464
+ if len(keep_nms) > 0:
465
+ bboxes = bboxes[keep_nms]
466
+ scores = scores[keep_nms]
467
+ labels = labels[keep_nms]
468
+ else:
469
+ results.append(format_bbox_result_np(
470
+ np.zeros((0, 9), dtype=np.float32),
471
+ np.zeros((0,), dtype=np.float32),
472
+ np.zeros((0,), dtype=np.int64)
473
+ ))
474
+ continue
475
+
476
+ results.append(format_bbox_result_np(bboxes, scores, labels))
477
+
478
+ return results
479
+
480
+
481
+ def circle_nms_np(bboxes, scores, labels, dist_thrs):
482
+ if len(bboxes) == 0:
483
+ return np.array([], dtype=np.int64)
484
+
485
+ keep = []
486
+ order = np.argsort(scores)[::-1]
487
+ bboxes = bboxes[order]
488
+ scores = scores[order]
489
+ labels = labels[order]
490
+
491
+ pts = bboxes[:, :2]
492
+ labels_np = labels
493
+
494
+ suppressed = np.zeros(len(bboxes), dtype=bool)
495
+
496
+ for i in range(len(bboxes)):
497
+ if suppressed[i]:
498
+ continue
499
+ keep.append(order[i])
500
+
501
+ curr_cls = int(labels_np[i])
502
+ radius = dist_thrs.get(curr_cls, 1.0)
503
+
504
+ if i + 1 < len(bboxes):
505
+ dists = np.linalg.norm(pts[i+1:] - pts[i], axis=1)
506
+ idx_to_suppress = np.where(
507
+ (dists < radius) & (labels_np[i+1:] == curr_cls)
508
+ )[0]
509
+ suppressed[i+1:][idx_to_suppress] = True
510
+
511
+ return np.array(keep, dtype=np.int64)
512
+
513
+
514
+ def denormalize_img_np(img_array, img_norm_cfg):
515
+ """Denormalize image array (C, H, W) to (H, W, C) BGR"""
516
+ mean = np.array(img_norm_cfg.get('mean', [123.675, 116.28, 103.53]))
517
+ std = np.array(img_norm_cfg.get('std', [58.395, 57.12, 57.375]))
518
+
519
+ # (C, H, W) RGB -> (H, W, C) RGB
520
+ if img_array.ndim == 3:
521
+ img = img_array.transpose(1, 2, 0)
522
+ else:
523
+ img = img_array
524
+ img = (img * std + mean)
525
+ img = np.clip(img, 0, 255).astype(np.uint8)
526
+ img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
527
+ return img
528
+
529
+
530
+ def draw_bev_map(bboxes, labels, scores, pc_range, bev_size=(800, 800), score_thr=0.1):
531
+ """Draw BEV (Bird's Eye View) map with detections
532
+
533
+ Args:
534
+ bboxes: (N, 9) numpy array, format: [x, y, z, w, l, h, yaw, vx, vy]
535
+ labels: (N,) numpy array, class labels
536
+ scores: (N,) numpy array, detection scores
537
+ pc_range: [x_min, y_min, z_min, x_max, y_max, z_max]
538
+ bev_size: (width, height) of BEV image
539
+ score_thr: score threshold
540
+
541
+ Returns:
542
+ bev_img: (H, W, 3) numpy array, BEV visualization
543
+ """
544
+ bev_w, bev_h = bev_size # BEV image size
545
+ bev_img = np.ones((bev_h, bev_w, 3), dtype=np.uint8) * 255 # White background
546
+
547
+ # Draw grid
548
+ x_min, y_min, z_min, x_max, y_max, z_max = pc_range
549
+ x_range = x_max - x_min
550
+ y_range = y_max - y_min
551
+
552
+ # Draw grid lines
553
+ grid_color = (200, 200, 200) # Light gray grid lines
554
+ for i in range(-5, 6):
555
+ x = x_min + (i + 5) * x_range / 10
556
+ y = y_min + (i + 5) * y_range / 10
557
+ # Vertical lines (y direction in LiDAR -> x direction in image)
558
+ img_x = int((y - y_min) / y_range * bev_w)
559
+ if 0 <= img_x < bev_w:
560
+ cv2.line(bev_img, (img_x, 0), (img_x, bev_h), grid_color, 1)
561
+ # Horizontal lines (x direction in LiDAR -> y direction in image, flipped)
562
+ img_y = int((x_max - x) / x_range * bev_h)
563
+ if 0 <= img_y < bev_h:
564
+ cv2.line(bev_img, (0, img_y), (bev_w, img_y), grid_color, 1)
565
+
566
+ # Draw center lines (ego vehicle position) - darker on white background
567
+ center_x = int((0 - y_min) / y_range * bev_w)
568
+ center_y = int((x_max - 0) / x_range * bev_h)
569
+ cv2.line(bev_img, (center_x, 0), (center_x, bev_h), (150, 150, 150), 2)
570
+ cv2.line(bev_img, (0, center_y), (bev_w, center_y), (150, 150, 150), 2)
571
+
572
+
573
+ ego_length_px = 30 # pixels (representing ~4.5m, along x-axis rightward)
574
+ ego_width_px = 12 # pixels (representing ~1.8m, along y-axis downward)
575
+
576
+ ego_corners_local = np.array([
577
+ [ego_length_px//2, -ego_width_px//2], # front-top (head)
578
+ [ego_length_px//2, ego_width_px//2], # front-bottom
579
+ [-ego_length_px//2, ego_width_px//2], # back-bottom
580
+ [-ego_length_px//2, -ego_width_px//2], # back-top
581
+ ], dtype=np.float32)
582
+
583
+
584
+ rotation_angle_90 = np.pi / 2 # 90 degrees in radians
585
+ cos_rot_90 = np.cos(rotation_angle_90)
586
+ sin_rot_90 = np.sin(rotation_angle_90)
587
+ rot_mat_90 = np.array([[cos_rot_90, -sin_rot_90], [sin_rot_90, cos_rot_90]])
588
+
589
+ ego_corners_rotated_90 = ego_corners_local @ rot_mat_90.T
590
+
591
+ ego_corners_rotated = ego_corners_rotated_90 @ rot_mat_90.T
592
+
593
+ # Translate to image coordinates (center position)
594
+ ego_corners = []
595
+ for corner in ego_corners_rotated:
596
+ corner_img_x = int(center_x + corner[0])
597
+ corner_img_y = int(center_y + corner[1])
598
+ ego_corners.append([corner_img_x, corner_img_y])
599
+ ego_corners = np.array(ego_corners, dtype=np.int32)
600
+
601
+ # Draw filled rectangle
602
+ cv2.fillPoly(bev_img, [ego_corners], (0, 0, 255)) # Red filled
603
+ cv2.polylines(bev_img, [ego_corners], True, (0, 0, 0), 2) # Black outline
604
+
605
+
606
+ arrow_length = ego_length_px // 2
607
+ initial_direction = np.array([1.0, 0.0])
608
+ arrow_dir_rotated_90 = initial_direction @ rot_mat_90.T
609
+ arrow_dir_rotated = arrow_dir_rotated_90 @ rot_mat_90.T
610
+ arrow_end_x = int(center_x + arrow_length * arrow_dir_rotated[0])
611
+ arrow_end_y = int(center_y + arrow_length * arrow_dir_rotated[1])
612
+ cv2.arrowedLine(bev_img, (center_x, center_y), (arrow_end_x, arrow_end_y),
613
+ (0, 0, 0), 3, tipLength=0.3) # Black arrow
614
+
615
+ if len(bboxes) == 0:
616
+ return bev_img
617
+
618
+ if score_thr > 0:
619
+ mask = scores > score_thr
620
+ bboxes = bboxes[mask]
621
+ labels = labels[mask]
622
+ scores = scores[mask]
623
+
624
+ if len(bboxes) == 0:
625
+ return bev_img
626
+
627
+ default_color = (255, 255, 255)
628
+
629
+
630
+ for i in range(len(bboxes)):
631
+ box = bboxes[i]
632
+ label = int(labels[i])
633
+ score = float(scores[i])
634
+ color = CLASS_COLORS.get(label, default_color)
635
+
636
+ x, y, z = box[0], box[1], box[2] # center position
637
+ w, l, h = box[3], box[4], box[5] # width, length, height
638
+ yaw = box[6] # yaw angle
639
+
640
+ yaw = yaw - np.pi / 2.0 # Subtract 90 degrees (counterclockwise)
641
+
642
+ # Convert to image coordinates
643
+ # Note: In LiDAR coordinate, x is forward, y is left, z is up
644
+ # In BEV image (top-down view):
645
+ # - x (forward) -> image y (downward, flipped)
646
+ # - y (left) -> image x (rightward)
647
+ # So: img_x = (y - y_min) / y_range * bev_w
648
+ # img_y = (x_max - x) / x_range * bev_h (flip x to get top-down view)
649
+ img_x = int((y - y_min) / y_range * bev_w)
650
+ img_y = int((x_max - x) / x_range * bev_h) # Flip x for top-down view
651
+
652
+ # Skip if outside image
653
+ if not (0 <= img_x < bev_w and 0 <= img_y < bev_h):
654
+ continue
655
+
656
+ # Calculate box dimensions in image space
657
+ box_w_px = int(w / x_range * bev_w)
658
+ box_l_px = int(l / y_range * bev_h)
659
+
660
+ # Draw rotated rectangle
661
+ # Calculate 4 corners of the box in LiDAR coordinates
662
+ cos_yaw = np.cos(yaw)
663
+ sin_yaw = np.sin(yaw)
664
+
665
+ # Box corners relative to center (in LiDAR frame: x forward, y left)
666
+ corners_local = np.array([
667
+ [l/2, w/2], # front-right
668
+ [l/2, -w/2], # front-left
669
+ [-l/2, -w/2], # back-left
670
+ [-l/2, w/2] # back-right
671
+ ])
672
+
673
+ # Rotate corners
674
+ rot_mat = np.array([[cos_yaw, -sin_yaw], [sin_yaw, cos_yaw]])
675
+ corners_rotated = corners_local @ rot_mat.T
676
+
677
+ # Translate to world coordinates and convert to image space
678
+ corners_img = []
679
+ for corner in corners_rotated:
680
+ corner_x = x + corner[0] # x in LiDAR (forward)
681
+ corner_y = y + corner[1] # y in LiDAR (left)
682
+ corner_img_x = int((corner_y - y_min) / y_range * bev_w) # y -> img_x
683
+ corner_img_y = int((x_max - corner_x) / x_range * bev_h) # x -> img_y (flipped)
684
+ corners_img.append([corner_img_x, corner_img_y])
685
+
686
+ corners_img = np.array(corners_img, dtype=np.int32)
687
+
688
+ # Draw filled polygon (semi-transparent on white background)
689
+ overlay = bev_img.copy()
690
+ cv2.fillPoly(overlay, [corners_img], color)
691
+ cv2.addWeighted(overlay, 0.5, bev_img, 0.5, 0, bev_img)
692
+ # Draw outline (black on white background)
693
+ cv2.polylines(bev_img, [corners_img], True, (0, 0, 0), 2)
694
+
695
+ # Draw direction arrow (forward direction) - black on white
696
+ # In LiDAR: forward is +x, left is +y
697
+ # In BEV image: x -> img_y (flipped), y -> img_x
698
+ # So rotation: img_x += sin(yaw) * length, img_y -= cos(yaw) * length
699
+ arrow_length = max(box_l_px // 2, 10)
700
+ arrow_end_x = int(img_x + arrow_length * sin_yaw) # y component -> img_x
701
+ arrow_end_y = int(img_y - arrow_length * cos_yaw) # x component -> img_y (flipped)
702
+ cv2.arrowedLine(bev_img, (img_x, img_y), (arrow_end_x, arrow_end_y),
703
+ (0, 0, 0), 2, tipLength=0.3) # Black arrow
704
+
705
+ # Draw center point
706
+ cv2.circle(bev_img, (img_x, img_y), 3, (0, 0, 0), -1) # Black center point
707
+
708
+ # Rotate BEV map counterclockwise by 90 degrees (map only, not text)
709
+ center = (bev_w // 2, bev_h // 2)
710
+ rotation_matrix = cv2.getRotationMatrix2D(center, 90, 1.0) # 90 degrees counterclockwise
711
+ bev_img = cv2.warpAffine(bev_img, rotation_matrix, (bev_w, bev_h), borderValue=(255, 255, 255))
712
+
713
+ # Flip horizontally to fix mirror effect
714
+ bev_img = cv2.flip(bev_img, 1) # 1 for horizontal flip
715
+
716
+ text = 'BEV Map'
717
+ font = cv2.FONT_HERSHEY_SIMPLEX
718
+ font_scale = 1
719
+ thickness = 2
720
+ (text_width, text_height), baseline = cv2.getTextSize(text, font, font_scale, thickness)
721
+ text_x = bev_w - text_width - 10
722
+ text_y = text_height + 10
723
+ cv2.putText(bev_img, text, (text_x, text_y), font, font_scale, (0, 0, 0), thickness)
724
+
725
+ return bev_img
726
+
727
+
728
+ def visualize_results_np(img, result, lidar2img, img_norm_cfg, class_names, score_thr=0.3, pc_range=None):
729
+ num_cams = img.shape[1] if img.ndim == 5 else 1
730
+ raw_imgs = [denormalize_img_np(img[0, cam_idx], img_norm_cfg) for cam_idx in range(num_cams)]
731
+ boxes_3d = result.get('boxes_3d')
732
+ scores_3d = result.get('scores_3d')
733
+ labels_3d = result.get('labels_3d')
734
+ vis_imgs = []
735
+ boxes_3d_for_bev = labels_3d_for_bev = scores_3d_for_bev = None
736
+
737
+ if boxes_3d is not None and len(boxes_3d) > 0:
738
+ mask = (scores_3d > score_thr) if (score_thr > 0 and scores_3d is not None) else np.ones_like(scores_3d, dtype=bool)
739
+ if np.any(mask):
740
+ boxes_3d = boxes_3d[mask]
741
+ scores_3d = scores_3d[mask]
742
+ labels_3d = labels_3d[mask]
743
+ boxes_3d_for_bev = boxes_3d.copy()
744
+ labels_3d_for_bev = labels_3d.copy()
745
+ scores_3d_for_bev = scores_3d.copy()
746
+ for cam_idx, vis_img in enumerate(raw_imgs):
747
+ vis_img = vis_img.copy()
748
+ if lidar2img.shape[1] > cam_idx:
749
+ cam_lidar2img = lidar2img[0, cam_idx]
750
+ for box, label in zip(boxes_3d, labels_3d):
751
+ color = CLASS_COLORS.get(int(label), (255, 255, 255))
752
+ try:
753
+ vis_img = draw_bbox3d_on_img_custom_np(box[None], vis_img, cam_lidar2img, color=color, thickness=2)
754
+ except Exception:
755
+ pass
756
+ vis_imgs.append(vis_img)
757
+ else:
758
+ vis_imgs = raw_imgs
759
+
760
+ if pc_range is None:
761
+ pc_range = [-51.2, -51.2, -5.0, 51.2, 51.2, 3.0]
762
+
763
+ if boxes_3d_for_bev is not None and len(boxes_3d_for_bev) > 0:
764
+ bev_size = (vis_imgs[0].shape[0], vis_imgs[0].shape[0]) if vis_imgs else (800, 800)
765
+ bev_img = draw_bev_map(boxes_3d_for_bev, labels_3d_for_bev, scores_3d_for_bev, pc_range, bev_size=bev_size, score_thr=score_thr)
766
+ else:
767
+ bev_size = (vis_imgs[0].shape[0], vis_imgs[0].shape[0]) if vis_imgs else (800, 800)
768
+ bev_img = np.full((bev_size[1], bev_size[0], 3), 255, np.uint8)
769
+ cv2.putText(bev_img, 'BEV Map (No Detections)', (10, bev_size[1]//2), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2)
770
+
771
+ if len(vis_imgs) == 6:
772
+ target_height = max(img.shape[0] for img in vis_imgs)
773
+ resized_imgs = [img if img.shape[0] == target_height else cv2.resize(img, (int(img.shape[1] * target_height / img.shape[0]), target_height)) for img in vis_imgs]
774
+
775
+ reordered_imgs = [
776
+ resized_imgs[2], resized_imgs[0], resized_imgs[1],
777
+ cv2.flip(resized_imgs[4], 1), cv2.flip(resized_imgs[3], 1), cv2.flip(resized_imgs[5], 1)
778
+ ]
779
+ top_row = np.hstack(reordered_imgs[:3])
780
+ bottom_row = np.hstack(reordered_imgs[3:])
781
+ left_side = np.vstack([top_row, bottom_row])
782
+ bev_img = cv2.resize(bev_img, (int(bev_img.shape[1] * left_side.shape[0] / bev_img.shape[0]), left_side.shape[0]))
783
+ vis_img = np.hstack([left_side, bev_img])
784
+ elif len(vis_imgs) > 1:
785
+ target_height = max(img.shape[0] for img in vis_imgs)
786
+ resized_imgs = [img if img.shape[0] == target_height else cv2.resize(img, (int(img.shape[1] * target_height / img.shape[0]), target_height)) for img in vis_imgs]
787
+ if bev_img.shape[0] != target_height:
788
+ bev_img = cv2.resize(bev_img, (int(bev_img.shape[1] * target_height / bev_img.shape[0]), target_height))
789
+ vis_img = np.hstack([np.hstack(resized_imgs), bev_img])
790
+ else:
791
+ cam_img = vis_imgs[0] if vis_imgs else bev_img
792
+ if bev_img.shape[0] != cam_img.shape[0]:
793
+ bev_img = cv2.resize(bev_img, (int(bev_img.shape[1] * cam_img.shape[0] / bev_img.shape[0]), cam_img.shape[0]))
794
+ vis_img = np.hstack([cam_img, bev_img]) if vis_imgs else bev_img
795
+
796
+ return vis_img
797
+
798
+
799
+ def create_video_from_images(image_dir, output_video_path, fps=3):
800
+ import subprocess
801
+
802
+ image_files = sorted([f for f in os.listdir(image_dir) if f.endswith(('.png', '.jpg', '.jpeg'))])
803
+ if len(image_files) == 0:
804
+ return
805
+
806
+ first_img = cv2.imread(osp.join(image_dir, image_files[0]))
807
+ if first_img is None:
808
+ return
809
+
810
+ height, width = first_img.shape[:2]
811
+
812
+ max_width, max_height = 1920, 1080
813
+ if width > max_width or height > max_height:
814
+ scale = min(max_width / width, max_height / height)
815
+ width, height = int(width * scale), int(height * scale)
816
+
817
+ fourcc = cv2.VideoWriter_fourcc(*'mp4v')
818
+ video_writer = cv2.VideoWriter(output_video_path, fourcc, fps, (width, height))
819
+ if not video_writer.isOpened():
820
+ fourcc = cv2.VideoWriter_fourcc(*'XVID')
821
+ video_writer = cv2.VideoWriter(output_video_path, fourcc, fps, (width, height))
822
+
823
+ for img_file in tqdm(image_files, desc=f"Creating video: {osp.basename(output_video_path)}"):
824
+ img_path = osp.join(image_dir, img_file)
825
+ img = cv2.imread(img_path)
826
+ if img is not None:
827
+ if img.shape[:2] != (height, width):
828
+ img = cv2.resize(img, (width, height))
829
+ video_writer.write(img)
830
+
831
+ video_writer.release()
832
+
833
+ def main():
834
+ args = parse_args()
835
+
836
+ # Load configuration from JSON
837
+ config = load_config_from_json(args.config_json)
838
+
839
+ # Create output directory
840
+ os.makedirs(args.output_dir, exist_ok=True)
841
+
842
+ # Load AXModel
843
+ ax_session = load_axmodel(args.axmodel)
844
+
845
+ # Get model parameters from config
846
+ transformer_cfg = config['model']['transformer']
847
+ bev_h = transformer_cfg['bev_h']
848
+ bev_w = transformer_cfg['bev_w']
849
+ embed_dims = transformer_cfg['embed_dims']
850
+
851
+ # Load scene index
852
+ scene_index_path = osp.join(args.data_dir, 'scene_index.json')
853
+ with open(scene_index_path, 'r') as f:
854
+ scene_index_data = json.load(f)
855
+
856
+ scenes_dict = scene_index_data['scenes']
857
+ scene_names = list(scenes_dict.keys())
858
+
859
+ end_scene = args.end_scene if args.end_scene is not None else len(scene_names)
860
+ end_scene = min(end_scene, len(scene_names))
861
+
862
+ prev_frame_info = {
863
+ 'prev_bev': None,
864
+ 'scene_token': None,
865
+ 'prev_pos': np.zeros(3, dtype=np.float32),
866
+ 'prev_angle': 0.0,
867
+ }
868
+
869
+ scene_results = defaultdict(list)
870
+
871
+ # Process all scenes
872
+ for scene_idx in range(args.start_scene, end_scene):
873
+ scene_name = scene_names[scene_idx]
874
+ scene_info = scenes_dict[scene_name]
875
+ sample_indices = scene_info['samples']
876
+ num_frames = len(sample_indices)
877
+
878
+ print(f"Processing scene {scene_idx+1}/{len(scene_names)}: {scene_name} ({num_frames} frames)")
879
+
880
+ # Reset prev_bev for new scene
881
+ if scene_name != prev_frame_info['scene_token']:
882
+ prev_frame_info['prev_bev'] = None
883
+ prev_frame_info['prev_pos'] = np.zeros(3, dtype=np.float32)
884
+ prev_frame_info['prev_angle'] = 0.0
885
+
886
+ prev_frame_info['scene_token'] = scene_name
887
+
888
+ # Process all frames in this scene
889
+ for local_idx, frame_idx in enumerate(tqdm(sample_indices, desc=f"Scene {scene_name}")):
890
+ # Load data
891
+ img, lidar2img, can_bus, meta = load_data(args.data_dir, scene_name, frame_idx)
892
+
893
+ # Process can_bus (compute delta)
894
+ curr_can_bus_np = can_bus[0] # (18,)
895
+
896
+ tmp_pos = curr_can_bus_np[:3].copy()
897
+ tmp_angle = curr_can_bus_np[-1]
898
+
899
+ delta_can_bus_np = curr_can_bus_np.copy()
900
+
901
+ if prev_frame_info['prev_bev'] is not None and prev_frame_info['scene_token'] == scene_name:
902
+ delta_can_bus_np[:3] -= prev_frame_info['prev_pos']
903
+ delta_can_bus_np[-1] -= prev_frame_info['prev_angle']
904
+ else:
905
+ delta_can_bus_np[:3] = 0.0
906
+ delta_can_bus_np[-1] = 0.0
907
+
908
+ prev_frame_info['prev_pos'] = tmp_pos
909
+ prev_frame_info['prev_angle'] = tmp_angle
910
+
911
+ # Prepare prev_bev
912
+ prev_bev_input = next((inp for inp in ax_session.get_inputs() if inp.name == 'prev_bev'), None)
913
+ expected_shape = (bev_h * bev_w, 1, embed_dims)
914
+ if prev_bev_input is not None:
915
+ expected_shape = list(prev_bev_input.shape)
916
+ for i, dim in enumerate(expected_shape):
917
+ if isinstance(dim, str) or dim < 0:
918
+ expected_shape[i] = (bev_h * bev_w, 1, embed_dims)[i] if i < 3 else 1
919
+ expected_shape = tuple(expected_shape)
920
+
921
+ if prev_frame_info['prev_bev'] is None:
922
+ prev_bev = np.zeros(expected_shape, dtype=np.float32)
923
+ else:
924
+ prev_bev = prev_frame_info['prev_bev']
925
+ if prev_bev.shape != expected_shape and len(prev_bev.shape) == 3:
926
+ prev_bev = prev_bev.reshape(expected_shape)
927
+
928
+ # Prepare AXEngine inputs
929
+ img_np = img.astype(np.float32)
930
+ lidar2img_np = lidar2img.astype(np.float32)
931
+ can_bus_np = delta_can_bus_np.reshape(1, -1).astype(np.float32)
932
+
933
+ input_names = [inp.name for inp in ax_session.get_inputs()]
934
+ ax_inputs = {}
935
+ for name in input_names:
936
+ if name == 'img':
937
+ ax_inputs['img'] = img_np
938
+ elif name == 'can_bus':
939
+ ax_inputs['can_bus'] = can_bus_np
940
+ elif name == 'lidar2img':
941
+ ax_inputs['lidar2img'] = lidar2img_np
942
+ elif name == 'prev_bev':
943
+ ax_inputs['prev_bev'] = prev_bev
944
+
945
+ # Run inference
946
+ ax_outputs = ax_session.run(None, ax_inputs)
947
+ bev_embed, all_cls_scores, all_bbox_preds = ax_outputs
948
+
949
+ prev_frame_info['prev_bev'] = bev_embed
950
+
951
+ # Post-process
952
+ results = post_process_outputs_np(
953
+ all_cls_scores, all_bbox_preds, config, args.score_thr
954
+ )
955
+
956
+ # Visualize
957
+ img_norm_cfg = config['img_norm']
958
+ class_names = config['dataset']['class_names']
959
+ pc_range = config['model']['bbox_coder']['pc_range']
960
+ vis_img = visualize_results_np(
961
+ img, results[0], lidar2img, img_norm_cfg, class_names, args.score_thr, pc_range=pc_range
962
+ )
963
+
964
+ scene_results[scene_name].append({
965
+ 'frame_idx': local_idx,
966
+ 'result': results[0],
967
+ 'vis_img': vis_img,
968
+ 'meta': meta
969
+ })
970
+
971
+ # Save results
972
+ for scene_name, frames in tqdm(scene_results.items(), desc="Save scene results"):
973
+ scene_dir = osp.join(args.output_dir, scene_name)
974
+ os.makedirs(scene_dir, exist_ok=True)
975
+ images_dir = osp.join(scene_dir, 'images')
976
+ os.makedirs(images_dir, exist_ok=True)
977
+
978
+ for local_idx, frame_data in enumerate(frames):
979
+ vis_img = frame_data['vis_img']
980
+
981
+ if vis_img is None:
982
+ continue
983
+
984
+ if not isinstance(vis_img, np.ndarray):
985
+ vis_img = np.array(vis_img)
986
+
987
+ if vis_img.dtype != np.uint8:
988
+ vis_img = (vis_img * 255).astype(np.uint8) if vis_img.max() <= 1.0 else vis_img.astype(np.uint8)
989
+
990
+ if len(vis_img.shape) == 3 and vis_img.shape[0] in (1, 3):
991
+ vis_img = vis_img.transpose(1, 2, 0)
992
+
993
+ if vis_img.shape[0] > 0 and vis_img.shape[1] > 0:
994
+ cv2.imwrite(osp.join(images_dir, f'frame_{local_idx:06d}.png'), vis_img)
995
+
996
+ create_video_from_images(images_dir, osp.join(scene_dir, f'{scene_name}_result.mp4'), args.fps)
997
+ print(f"✓ Scene {scene_name}: {len(frames)} frames, video: {osp.join(scene_dir, f'{scene_name}_result.mp4')}")
998
+
999
+
1000
+ if __name__ == '__main__':
1001
+ main()
1002
+
inference_config.json ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model": {
3
+ "bev_h": 50,
4
+ "bev_w": 50,
5
+ "num_query": 900,
6
+ "num_classes": 10,
7
+ "transformer": {
8
+ "embed_dims": 256,
9
+ "bev_h": 50,
10
+ "bev_w": 50
11
+ },
12
+ "bbox_coder": {
13
+ "pc_range": [
14
+ -51.2,
15
+ -51.2,
16
+ -5.0,
17
+ 51.2,
18
+ 51.2,
19
+ 3.0
20
+ ],
21
+ "post_center_range": [
22
+ -61.2,
23
+ -61.2,
24
+ -10.0,
25
+ 61.2,
26
+ 61.2,
27
+ 10.0
28
+ ],
29
+ "max_num": 300,
30
+ "num_classes": 10
31
+ }
32
+ },
33
+ "dataset": {
34
+ "class_names": [
35
+ "car",
36
+ "truck",
37
+ "construction_vehicle",
38
+ "bus",
39
+ "trailer",
40
+ "barrier",
41
+ "motorcycle",
42
+ "bicycle",
43
+ "pedestrian",
44
+ "traffic_cone"
45
+ ]
46
+ },
47
+ "img_norm": {
48
+ "mean": [
49
+ 123.675,
50
+ 116.28,
51
+ 103.53
52
+ ],
53
+ "std": [
54
+ 58.395,
55
+ 57.12,
56
+ 57.375
57
+ ],
58
+ "to_rgb": true
59
+ },
60
+ "point_cloud_range": [
61
+ -51.2,
62
+ -51.2,
63
+ -5.0,
64
+ 51.2,
65
+ 51.2,
66
+ 3.0
67
+ ]
68
+ }
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000040.png ADDED

Git LFS Details

  • SHA256: f7159e5b7aaea419bb0f7388aad92e8cc76956ddf286715b92912a77a2314646
  • Pointer size: 132 Bytes
  • Size of remote file: 1.34 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000041.png ADDED

Git LFS Details

  • SHA256: 796d504d0c36aa6502528b05aa048e38b9bf415d7dac2bc7783e51fcce963974
  • Pointer size: 132 Bytes
  • Size of remote file: 1.42 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000042.png ADDED

Git LFS Details

  • SHA256: 8339982885f5689e3d56e07f92581aba05f065e907c4af8a8ade0f8aacc7538c
  • Pointer size: 132 Bytes
  • Size of remote file: 1.46 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000043.png ADDED

Git LFS Details

  • SHA256: d762b7e99400d838dc9cb0bc7e4a8243555e0306eec6e0f2618d8441b6102fc6
  • Pointer size: 132 Bytes
  • Size of remote file: 1.51 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000044.png ADDED

Git LFS Details

  • SHA256: d19d5f9c07d897d1890354eca4e22295fddd94f972f5f42bab86ca0f988211a5
  • Pointer size: 132 Bytes
  • Size of remote file: 1.57 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000045.png ADDED

Git LFS Details

  • SHA256: 94d7ada15b04bfa521c16a71b1344d7ef048b6ef8ccac2953cfc0e94d8242ede
  • Pointer size: 132 Bytes
  • Size of remote file: 1.63 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000046.png ADDED

Git LFS Details

  • SHA256: 68dafc96accf6a74c39945594bf230baca2dc6915b74f5a8395a99fa1c4f0f11
  • Pointer size: 132 Bytes
  • Size of remote file: 1.71 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000047.png ADDED

Git LFS Details

  • SHA256: 12f5820365ae8324e740dcff6e7b6d692a4a40aa847ac55f2771dddf61994fb7
  • Pointer size: 132 Bytes
  • Size of remote file: 1.76 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000048.png ADDED

Git LFS Details

  • SHA256: b0ef6e21dc859166d224381761cc22a3681f9a1cda2c6618cbd5abc66ed45bea
  • Pointer size: 132 Bytes
  • Size of remote file: 1.76 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000049.png ADDED

Git LFS Details

  • SHA256: f05b423b51023686da40676bfd7e7d5602c4fe9cf81a7ec20442b158c96219e9
  • Pointer size: 132 Bytes
  • Size of remote file: 1.77 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000050.png ADDED

Git LFS Details

  • SHA256: eb36121349c93608089892411d37a75e062fa8eff4264d8fd8e84e194f330b4d
  • Pointer size: 132 Bytes
  • Size of remote file: 1.78 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000051.png ADDED

Git LFS Details

  • SHA256: 7b7b0f91f5def7615969460f516ba81337ae220cfb0168124503b961fba67775
  • Pointer size: 132 Bytes
  • Size of remote file: 1.73 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000052.png ADDED

Git LFS Details

  • SHA256: c77c95ea9c6826f6eeb440bd4c1a12c6defdc9335d2e505c73490fb8d977f130
  • Pointer size: 132 Bytes
  • Size of remote file: 1.69 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000053.png ADDED

Git LFS Details

  • SHA256: 0de605d203ddc3648cd4b0002ad6bf82bb128508ada3ba27d7d81462bc337def
  • Pointer size: 132 Bytes
  • Size of remote file: 1.66 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000054.png ADDED

Git LFS Details

  • SHA256: 93dc6465546718a9308e3c6a34b7090590455f09eeac785663df7ff665cd50cc
  • Pointer size: 132 Bytes
  • Size of remote file: 1.67 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000055.png ADDED

Git LFS Details

  • SHA256: 54f0afd3311e158f467e624284d692f15a6a5e821cb10bb751f42c9643161e57
  • Pointer size: 132 Bytes
  • Size of remote file: 1.72 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000056.png ADDED

Git LFS Details

  • SHA256: c6312c7fb5392e0b7d80b26c0ba0423b23684d872ceb22870e13a30cd88f4e20
  • Pointer size: 132 Bytes
  • Size of remote file: 1.74 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000057.png ADDED

Git LFS Details

  • SHA256: 2533657a8f6d65ce7bb1fe92a0e73350bf4fa3a3e62a6101eeb2093f6297fae9
  • Pointer size: 132 Bytes
  • Size of remote file: 1.66 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000058.png ADDED

Git LFS Details

  • SHA256: 1dbae9a80e9bd4df58fc8884e604621c1cbf01df0f771b98bd3879c8bd525995
  • Pointer size: 132 Bytes
  • Size of remote file: 1.58 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000059.png ADDED

Git LFS Details

  • SHA256: 43e39fb519cc3e88bd309a8047b57ffc9a160025d8eedf0ef82aa91070778b22
  • Pointer size: 132 Bytes
  • Size of remote file: 1.61 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000060.png ADDED

Git LFS Details

  • SHA256: 2b1efec9d5d95539a5148ac63737ecc190e174e7f4a28cfe76c5676483471b5d
  • Pointer size: 132 Bytes
  • Size of remote file: 1.82 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000061.png ADDED

Git LFS Details

  • SHA256: 3d0d1f3342db51ba4a23535a3115fc68881138907f69a49e79734c77fe45746d
  • Pointer size: 132 Bytes
  • Size of remote file: 1.87 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000062.png ADDED

Git LFS Details

  • SHA256: 1a4b6071a726b8140b81eb74955d7327bbefddc507d0c20574fbc440726354a3
  • Pointer size: 132 Bytes
  • Size of remote file: 1.81 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000063.png ADDED

Git LFS Details

  • SHA256: bbfb4cb0e230a3520347d746e898a71e1028c83c0b62fc814499e3bac1e2c10b
  • Pointer size: 132 Bytes
  • Size of remote file: 1.75 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000064.png ADDED

Git LFS Details

  • SHA256: e0eb4f134f5fc4fe89b798366b3bb55d47b786b990f2db2de17c52b1f55d8a0e
  • Pointer size: 132 Bytes
  • Size of remote file: 1.7 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000065.png ADDED

Git LFS Details

  • SHA256: ed6562e97dfcc78dfff3eb3885729c8c338a3d9f3971b9afc25a720ba4571a7f
  • Pointer size: 132 Bytes
  • Size of remote file: 1.7 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000066.png ADDED

Git LFS Details

  • SHA256: 5002b235b982f6326b351afaac5d4c75f304b377cddf184d37bdff341e8896dc
  • Pointer size: 132 Bytes
  • Size of remote file: 1.72 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000067.png ADDED

Git LFS Details

  • SHA256: 946e66e8fc62cf9daee9ae4de5ecb11e0cd9146164b6e7c6b1067eb768d529f8
  • Pointer size: 132 Bytes
  • Size of remote file: 1.75 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000068.png ADDED

Git LFS Details

  • SHA256: 1a782adaf319f6318b91881522ba16b460ee38fe6da4eb5b8b2d732c0a38c9f2
  • Pointer size: 132 Bytes
  • Size of remote file: 1.72 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000069.png ADDED

Git LFS Details

  • SHA256: ca43a88fe61cc78e1cac26f228ae44166c68ed003fb7a3f780e941cfedc5250c
  • Pointer size: 132 Bytes
  • Size of remote file: 1.68 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000070.png ADDED

Git LFS Details

  • SHA256: f93e88131abf591ca383521627910721da4afb2748f6dc6765871713b0904556
  • Pointer size: 132 Bytes
  • Size of remote file: 1.64 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000071.png ADDED

Git LFS Details

  • SHA256: d6b0df7d1efb2735a7539993f849aa4accb6912634efbd550ce6c029d6f00741
  • Pointer size: 132 Bytes
  • Size of remote file: 1.62 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000072.png ADDED

Git LFS Details

  • SHA256: 3eec7f5f9a2b28b75acd1d3c52aee457e31b75cbfa1ae14c0e08633f435dcee4
  • Pointer size: 132 Bytes
  • Size of remote file: 1.64 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000073.png ADDED

Git LFS Details

  • SHA256: 0cd74a87bdd431b99215c749d98f41b04d9b72044e2dd05a99d67975e4bada15
  • Pointer size: 132 Bytes
  • Size of remote file: 1.67 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000074.png ADDED

Git LFS Details

  • SHA256: 3e174985ae7f3042f3461c305a977e36356933d1df0a1541dc595982e422ab0b
  • Pointer size: 132 Bytes
  • Size of remote file: 1.65 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000075.png ADDED

Git LFS Details

  • SHA256: 2903b519a30503004815e4c0db14f97166bb5cb2136ebe2a20358c67df7ab4c0
  • Pointer size: 132 Bytes
  • Size of remote file: 1.62 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000076.png ADDED

Git LFS Details

  • SHA256: d54ebe42127846d8e2455467a5072d116f309ee6ffc6001c4bdab7cfcf7c3b37
  • Pointer size: 132 Bytes
  • Size of remote file: 1.58 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000077.png ADDED

Git LFS Details

  • SHA256: 63bf422ba06077b946ce323e88162daeeb03316a488c2a365e9fd58db1ecda71
  • Pointer size: 132 Bytes
  • Size of remote file: 1.56 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000078.png ADDED

Git LFS Details

  • SHA256: e5b989d9af8a3cb82652b425ddf77f68530f6410dd69f70c0470b1b4f14fecbb
  • Pointer size: 132 Bytes
  • Size of remote file: 1.62 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000079.png ADDED

Git LFS Details

  • SHA256: 7a273dfec0c84cd56df4d5130e4c5bc6605a611c5252b01965c96e02a6cd937f
  • Pointer size: 132 Bytes
  • Size of remote file: 1.57 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_00_000080.png ADDED

Git LFS Details

  • SHA256: c0d9f0c6f550ed036fb10832eef34ca444611797427fa6921864d99dec637dac
  • Pointer size: 132 Bytes
  • Size of remote file: 1.57 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_01_000040.png ADDED

Git LFS Details

  • SHA256: 1543ea5edc18f5f9124f55d398683a5da568aa849b6c9c7e3b5a7d5ae75c994b
  • Pointer size: 132 Bytes
  • Size of remote file: 1.61 MB
inference_data/325cef682f064c55a255f2625c533b75/cam_01_000041.png ADDED

Git LFS Details

  • SHA256: b309197d6e05f0ea3b34d9060e7d85778f711cbfa59a6c34ecb82fbccd55cc89
  • Pointer size: 132 Bytes
  • Size of remote file: 1.59 MB