dnt 0.2.4__py3-none-any.whl → 0.3.1.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. dnt/__init__.py +3 -2
  2. dnt/analysis/__init__.py +3 -2
  3. dnt/analysis/count.py +54 -37
  4. dnt/analysis/interaction2.py +518 -0
  5. dnt/analysis/stop.py +22 -17
  6. dnt/analysis/stop2.py +289 -0
  7. dnt/analysis/stop3.py +758 -0
  8. dnt/detect/signal/detector.py +326 -0
  9. dnt/detect/timestamp.py +105 -0
  10. dnt/detect/yolov8/detector.py +179 -36
  11. dnt/detect/yolov8/segmentor.py +60 -2
  12. dnt/engine/__init__.py +8 -0
  13. dnt/engine/bbox_interp.py +83 -0
  14. dnt/engine/bbox_iou.py +20 -0
  15. dnt/engine/cluster.py +31 -0
  16. dnt/engine/iob.py +66 -0
  17. dnt/filter/filter.py +333 -2
  18. dnt/label/labeler.py +4 -4
  19. dnt/label/labeler2.py +631 -0
  20. dnt/shared/__init__.py +2 -1
  21. dnt/shared/data/coco.names +0 -0
  22. dnt/shared/data/openimages.names +0 -0
  23. dnt/shared/data/voc.names +0 -0
  24. dnt/shared/download.py +12 -0
  25. dnt/shared/synhcro.py +150 -0
  26. dnt/shared/util.py +17 -4
  27. dnt/third_party/fast-reid/__init__.py +1 -0
  28. dnt/third_party/fast-reid/configs/Base-AGW.yml +19 -0
  29. dnt/third_party/fast-reid/configs/Base-MGN.yml +12 -0
  30. dnt/third_party/fast-reid/configs/Base-SBS.yml +63 -0
  31. dnt/third_party/fast-reid/configs/Base-bagtricks.yml +76 -0
  32. dnt/third_party/fast-reid/configs/DukeMTMC/AGW_R101-ibn.yml +12 -0
  33. dnt/third_party/fast-reid/configs/DukeMTMC/AGW_R50-ibn.yml +11 -0
  34. dnt/third_party/fast-reid/configs/DukeMTMC/AGW_R50.yml +7 -0
  35. dnt/third_party/fast-reid/configs/DukeMTMC/AGW_S50.yml +11 -0
  36. dnt/third_party/fast-reid/configs/DukeMTMC/bagtricks_R101-ibn.yml +12 -0
  37. dnt/third_party/fast-reid/configs/DukeMTMC/bagtricks_R50-ibn.yml +11 -0
  38. dnt/third_party/fast-reid/configs/DukeMTMC/bagtricks_R50.yml +7 -0
  39. dnt/third_party/fast-reid/configs/DukeMTMC/bagtricks_S50.yml +11 -0
  40. dnt/third_party/fast-reid/configs/DukeMTMC/mgn_R50-ibn.yml +11 -0
  41. dnt/third_party/fast-reid/configs/DukeMTMC/sbs_R101-ibn.yml +12 -0
  42. dnt/third_party/fast-reid/configs/DukeMTMC/sbs_R50-ibn.yml +11 -0
  43. dnt/third_party/fast-reid/configs/DukeMTMC/sbs_R50.yml +7 -0
  44. dnt/third_party/fast-reid/configs/DukeMTMC/sbs_S50.yml +11 -0
  45. dnt/third_party/fast-reid/configs/MOT17/AGW_R101-ibn.yml +12 -0
  46. dnt/third_party/fast-reid/configs/MOT17/AGW_R50-ibn.yml +11 -0
  47. dnt/third_party/fast-reid/configs/MOT17/AGW_R50.yml +7 -0
  48. dnt/third_party/fast-reid/configs/MOT17/AGW_S50.yml +11 -0
  49. dnt/third_party/fast-reid/configs/MOT17/bagtricks_R101-ibn.yml +12 -0
  50. dnt/third_party/fast-reid/configs/MOT17/bagtricks_R50-ibn.yml +11 -0
  51. dnt/third_party/fast-reid/configs/MOT17/bagtricks_R50.yml +7 -0
  52. dnt/third_party/fast-reid/configs/MOT17/bagtricks_S50.yml +11 -0
  53. dnt/third_party/fast-reid/configs/MOT17/mgn_R50-ibn.yml +11 -0
  54. dnt/third_party/fast-reid/configs/MOT17/sbs_R101-ibn.yml +12 -0
  55. dnt/third_party/fast-reid/configs/MOT17/sbs_R50-ibn.yml +11 -0
  56. dnt/third_party/fast-reid/configs/MOT17/sbs_R50.yml +7 -0
  57. dnt/third_party/fast-reid/configs/MOT17/sbs_S50.yml +11 -0
  58. dnt/third_party/fast-reid/configs/MOT20/AGW_R101-ibn.yml +12 -0
  59. dnt/third_party/fast-reid/configs/MOT20/AGW_R50-ibn.yml +11 -0
  60. dnt/third_party/fast-reid/configs/MOT20/AGW_R50.yml +7 -0
  61. dnt/third_party/fast-reid/configs/MOT20/AGW_S50.yml +11 -0
  62. dnt/third_party/fast-reid/configs/MOT20/bagtricks_R101-ibn.yml +12 -0
  63. dnt/third_party/fast-reid/configs/MOT20/bagtricks_R50-ibn.yml +11 -0
  64. dnt/third_party/fast-reid/configs/MOT20/bagtricks_R50.yml +7 -0
  65. dnt/third_party/fast-reid/configs/MOT20/bagtricks_S50.yml +11 -0
  66. dnt/third_party/fast-reid/configs/MOT20/mgn_R50-ibn.yml +11 -0
  67. dnt/third_party/fast-reid/configs/MOT20/sbs_R101-ibn.yml +12 -0
  68. dnt/third_party/fast-reid/configs/MOT20/sbs_R50-ibn.yml +11 -0
  69. dnt/third_party/fast-reid/configs/MOT20/sbs_R50.yml +7 -0
  70. dnt/third_party/fast-reid/configs/MOT20/sbs_S50.yml +11 -0
  71. dnt/third_party/fast-reid/configs/MSMT17/AGW_R101-ibn.yml +12 -0
  72. dnt/third_party/fast-reid/configs/MSMT17/AGW_R50-ibn.yml +11 -0
  73. dnt/third_party/fast-reid/configs/MSMT17/AGW_R50.yml +7 -0
  74. dnt/third_party/fast-reid/configs/MSMT17/AGW_S50.yml +11 -0
  75. dnt/third_party/fast-reid/configs/MSMT17/bagtricks_R101-ibn.yml +13 -0
  76. dnt/third_party/fast-reid/configs/MSMT17/bagtricks_R50-ibn.yml +12 -0
  77. dnt/third_party/fast-reid/configs/MSMT17/bagtricks_R50.yml +7 -0
  78. dnt/third_party/fast-reid/configs/MSMT17/bagtricks_S50.yml +12 -0
  79. dnt/third_party/fast-reid/configs/MSMT17/mgn_R50-ibn.yml +11 -0
  80. dnt/third_party/fast-reid/configs/MSMT17/sbs_R101-ibn.yml +12 -0
  81. dnt/third_party/fast-reid/configs/MSMT17/sbs_R50-ibn.yml +11 -0
  82. dnt/third_party/fast-reid/configs/MSMT17/sbs_R50.yml +7 -0
  83. dnt/third_party/fast-reid/configs/MSMT17/sbs_S50.yml +11 -0
  84. dnt/third_party/fast-reid/configs/Market1501/AGW_R101-ibn.yml +12 -0
  85. dnt/third_party/fast-reid/configs/Market1501/AGW_R50-ibn.yml +11 -0
  86. dnt/third_party/fast-reid/configs/Market1501/AGW_R50.yml +7 -0
  87. dnt/third_party/fast-reid/configs/Market1501/AGW_S50.yml +11 -0
  88. dnt/third_party/fast-reid/configs/Market1501/bagtricks_R101-ibn.yml +12 -0
  89. dnt/third_party/fast-reid/configs/Market1501/bagtricks_R50-ibn.yml +11 -0
  90. dnt/third_party/fast-reid/configs/Market1501/bagtricks_R50.yml +7 -0
  91. dnt/third_party/fast-reid/configs/Market1501/bagtricks_S50.yml +11 -0
  92. dnt/third_party/fast-reid/configs/Market1501/bagtricks_vit.yml +88 -0
  93. dnt/third_party/fast-reid/configs/Market1501/mgn_R50-ibn.yml +11 -0
  94. dnt/third_party/fast-reid/configs/Market1501/sbs_R101-ibn.yml +12 -0
  95. dnt/third_party/fast-reid/configs/Market1501/sbs_R50-ibn.yml +11 -0
  96. dnt/third_party/fast-reid/configs/Market1501/sbs_R50.yml +7 -0
  97. dnt/third_party/fast-reid/configs/Market1501/sbs_S50.yml +11 -0
  98. dnt/third_party/fast-reid/configs/VERIWild/bagtricks_R50-ibn.yml +35 -0
  99. dnt/third_party/fast-reid/configs/VeRi/sbs_R50-ibn.yml +35 -0
  100. dnt/third_party/fast-reid/configs/VehicleID/bagtricks_R50-ibn.yml +36 -0
  101. dnt/third_party/fast-reid/configs/__init__.py +0 -0
  102. dnt/third_party/fast-reid/fast_reid_interfece.py +175 -0
  103. dnt/third_party/fast-reid/fastreid/__init__.py +6 -0
  104. dnt/third_party/fast-reid/fastreid/config/__init__.py +15 -0
  105. dnt/third_party/fast-reid/fastreid/config/config.py +319 -0
  106. dnt/third_party/fast-reid/fastreid/config/defaults.py +329 -0
  107. dnt/third_party/fast-reid/fastreid/data/__init__.py +17 -0
  108. dnt/third_party/fast-reid/fastreid/data/build.py +194 -0
  109. dnt/third_party/fast-reid/fastreid/data/common.py +58 -0
  110. dnt/third_party/fast-reid/fastreid/data/data_utils.py +202 -0
  111. dnt/third_party/fast-reid/fastreid/data/datasets/AirportALERT.py +50 -0
  112. dnt/third_party/fast-reid/fastreid/data/datasets/__init__.py +43 -0
  113. dnt/third_party/fast-reid/fastreid/data/datasets/bases.py +183 -0
  114. dnt/third_party/fast-reid/fastreid/data/datasets/caviara.py +44 -0
  115. dnt/third_party/fast-reid/fastreid/data/datasets/cuhk03.py +274 -0
  116. dnt/third_party/fast-reid/fastreid/data/datasets/cuhk_sysu.py +58 -0
  117. dnt/third_party/fast-reid/fastreid/data/datasets/dukemtmcreid.py +70 -0
  118. dnt/third_party/fast-reid/fastreid/data/datasets/grid.py +44 -0
  119. dnt/third_party/fast-reid/fastreid/data/datasets/iLIDS.py +45 -0
  120. dnt/third_party/fast-reid/fastreid/data/datasets/lpw.py +49 -0
  121. dnt/third_party/fast-reid/fastreid/data/datasets/market1501.py +89 -0
  122. dnt/third_party/fast-reid/fastreid/data/datasets/msmt17.py +114 -0
  123. dnt/third_party/fast-reid/fastreid/data/datasets/pes3d.py +44 -0
  124. dnt/third_party/fast-reid/fastreid/data/datasets/pku.py +44 -0
  125. dnt/third_party/fast-reid/fastreid/data/datasets/prai.py +43 -0
  126. dnt/third_party/fast-reid/fastreid/data/datasets/prid.py +41 -0
  127. dnt/third_party/fast-reid/fastreid/data/datasets/saivt.py +47 -0
  128. dnt/third_party/fast-reid/fastreid/data/datasets/sensereid.py +47 -0
  129. dnt/third_party/fast-reid/fastreid/data/datasets/shinpuhkan.py +48 -0
  130. dnt/third_party/fast-reid/fastreid/data/datasets/sysu_mm.py +47 -0
  131. dnt/third_party/fast-reid/fastreid/data/datasets/thermalworld.py +43 -0
  132. dnt/third_party/fast-reid/fastreid/data/datasets/vehicleid.py +126 -0
  133. dnt/third_party/fast-reid/fastreid/data/datasets/veri.py +69 -0
  134. dnt/third_party/fast-reid/fastreid/data/datasets/veriwild.py +140 -0
  135. dnt/third_party/fast-reid/fastreid/data/datasets/viper.py +45 -0
  136. dnt/third_party/fast-reid/fastreid/data/datasets/wildtracker.py +59 -0
  137. dnt/third_party/fast-reid/fastreid/data/samplers/__init__.py +18 -0
  138. dnt/third_party/fast-reid/fastreid/data/samplers/data_sampler.py +85 -0
  139. dnt/third_party/fast-reid/fastreid/data/samplers/imbalance_sampler.py +67 -0
  140. dnt/third_party/fast-reid/fastreid/data/samplers/triplet_sampler.py +260 -0
  141. dnt/third_party/fast-reid/fastreid/data/transforms/__init__.py +11 -0
  142. dnt/third_party/fast-reid/fastreid/data/transforms/autoaugment.py +806 -0
  143. dnt/third_party/fast-reid/fastreid/data/transforms/build.py +100 -0
  144. dnt/third_party/fast-reid/fastreid/data/transforms/functional.py +180 -0
  145. dnt/third_party/fast-reid/fastreid/data/transforms/transforms.py +161 -0
  146. dnt/third_party/fast-reid/fastreid/engine/__init__.py +15 -0
  147. dnt/third_party/fast-reid/fastreid/engine/defaults.py +490 -0
  148. dnt/third_party/fast-reid/fastreid/engine/hooks.py +534 -0
  149. dnt/third_party/fast-reid/fastreid/engine/launch.py +103 -0
  150. dnt/third_party/fast-reid/fastreid/engine/train_loop.py +357 -0
  151. dnt/third_party/fast-reid/fastreid/evaluation/__init__.py +6 -0
  152. dnt/third_party/fast-reid/fastreid/evaluation/clas_evaluator.py +81 -0
  153. dnt/third_party/fast-reid/fastreid/evaluation/evaluator.py +176 -0
  154. dnt/third_party/fast-reid/fastreid/evaluation/query_expansion.py +46 -0
  155. dnt/third_party/fast-reid/fastreid/evaluation/rank.py +200 -0
  156. dnt/third_party/fast-reid/fastreid/evaluation/rank_cylib/__init__.py +20 -0
  157. dnt/third_party/fast-reid/fastreid/evaluation/rank_cylib/setup.py +32 -0
  158. dnt/third_party/fast-reid/fastreid/evaluation/rank_cylib/test_cython.py +106 -0
  159. dnt/third_party/fast-reid/fastreid/evaluation/reid_evaluation.py +143 -0
  160. dnt/third_party/fast-reid/fastreid/evaluation/rerank.py +73 -0
  161. dnt/third_party/fast-reid/fastreid/evaluation/roc.py +90 -0
  162. dnt/third_party/fast-reid/fastreid/evaluation/testing.py +88 -0
  163. dnt/third_party/fast-reid/fastreid/layers/__init__.py +19 -0
  164. dnt/third_party/fast-reid/fastreid/layers/activation.py +59 -0
  165. dnt/third_party/fast-reid/fastreid/layers/any_softmax.py +80 -0
  166. dnt/third_party/fast-reid/fastreid/layers/batch_norm.py +205 -0
  167. dnt/third_party/fast-reid/fastreid/layers/context_block.py +113 -0
  168. dnt/third_party/fast-reid/fastreid/layers/drop.py +161 -0
  169. dnt/third_party/fast-reid/fastreid/layers/frn.py +199 -0
  170. dnt/third_party/fast-reid/fastreid/layers/gather_layer.py +30 -0
  171. dnt/third_party/fast-reid/fastreid/layers/helpers.py +31 -0
  172. dnt/third_party/fast-reid/fastreid/layers/non_local.py +54 -0
  173. dnt/third_party/fast-reid/fastreid/layers/pooling.py +124 -0
  174. dnt/third_party/fast-reid/fastreid/layers/se_layer.py +25 -0
  175. dnt/third_party/fast-reid/fastreid/layers/splat.py +109 -0
  176. dnt/third_party/fast-reid/fastreid/layers/weight_init.py +122 -0
  177. dnt/third_party/fast-reid/fastreid/modeling/__init__.py +23 -0
  178. dnt/third_party/fast-reid/fastreid/modeling/backbones/__init__.py +18 -0
  179. dnt/third_party/fast-reid/fastreid/modeling/backbones/build.py +27 -0
  180. dnt/third_party/fast-reid/fastreid/modeling/backbones/mobilenet.py +195 -0
  181. dnt/third_party/fast-reid/fastreid/modeling/backbones/mobilenetv3.py +283 -0
  182. dnt/third_party/fast-reid/fastreid/modeling/backbones/osnet.py +525 -0
  183. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/__init__.py +4 -0
  184. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/config.py +396 -0
  185. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet/EN-B0_dds_8gpu.yaml +27 -0
  186. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet/EN-B1_dds_8gpu.yaml +27 -0
  187. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet/EN-B2_dds_8gpu.yaml +27 -0
  188. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet/EN-B3_dds_8gpu.yaml +27 -0
  189. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet/EN-B4_dds_8gpu.yaml +27 -0
  190. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet/EN-B5_dds_8gpu.yaml +27 -0
  191. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet.py +281 -0
  192. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnet.py +596 -0
  193. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-1.6GF_dds_8gpu.yaml +26 -0
  194. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-12GF_dds_8gpu.yaml +26 -0
  195. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-16GF_dds_8gpu.yaml +26 -0
  196. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-200MF_dds_8gpu.yaml +26 -0
  197. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-3.2GF_dds_8gpu.yaml +26 -0
  198. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-32GF_dds_8gpu.yaml +26 -0
  199. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-4.0GF_dds_8gpu.yaml +26 -0
  200. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-400MF_dds_8gpu.yaml +26 -0
  201. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-6.4GF_dds_8gpu.yaml +26 -0
  202. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-600MF_dds_8gpu.yaml +26 -0
  203. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-8.0GF_dds_8gpu.yaml +26 -0
  204. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-800MF_dds_8gpu.yaml +26 -0
  205. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-1.6GF_dds_8gpu.yaml +27 -0
  206. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-12GF_dds_8gpu.yaml +27 -0
  207. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-16GF_dds_8gpu.yaml +27 -0
  208. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-200MF_dds_8gpu.yaml +26 -0
  209. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-3.2GF_dds_8gpu.yaml +27 -0
  210. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-32GF_dds_8gpu.yaml +27 -0
  211. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-4.0GF_dds_8gpu.yaml +27 -0
  212. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-400MF_dds_8gpu.yaml +27 -0
  213. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-6.4GF_dds_8gpu.yaml +27 -0
  214. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-600MF_dds_8gpu.yaml +27 -0
  215. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-8.0GF_dds_8gpu.yaml +27 -0
  216. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-800MF_dds_8gpu.yaml +27 -0
  217. dnt/third_party/fast-reid/fastreid/modeling/backbones/repvgg.py +309 -0
  218. dnt/third_party/fast-reid/fastreid/modeling/backbones/resnest.py +365 -0
  219. dnt/third_party/fast-reid/fastreid/modeling/backbones/resnet.py +364 -0
  220. dnt/third_party/fast-reid/fastreid/modeling/backbones/resnext.py +335 -0
  221. dnt/third_party/fast-reid/fastreid/modeling/backbones/shufflenet.py +203 -0
  222. dnt/third_party/fast-reid/fastreid/modeling/backbones/vision_transformer.py +399 -0
  223. dnt/third_party/fast-reid/fastreid/modeling/heads/__init__.py +11 -0
  224. dnt/third_party/fast-reid/fastreid/modeling/heads/build.py +25 -0
  225. dnt/third_party/fast-reid/fastreid/modeling/heads/clas_head.py +36 -0
  226. dnt/third_party/fast-reid/fastreid/modeling/heads/embedding_head.py +151 -0
  227. dnt/third_party/fast-reid/fastreid/modeling/losses/__init__.py +12 -0
  228. dnt/third_party/fast-reid/fastreid/modeling/losses/circle_loss.py +71 -0
  229. dnt/third_party/fast-reid/fastreid/modeling/losses/cross_entroy_loss.py +54 -0
  230. dnt/third_party/fast-reid/fastreid/modeling/losses/focal_loss.py +92 -0
  231. dnt/third_party/fast-reid/fastreid/modeling/losses/triplet_loss.py +113 -0
  232. dnt/third_party/fast-reid/fastreid/modeling/losses/utils.py +48 -0
  233. dnt/third_party/fast-reid/fastreid/modeling/meta_arch/__init__.py +14 -0
  234. dnt/third_party/fast-reid/fastreid/modeling/meta_arch/baseline.py +188 -0
  235. dnt/third_party/fast-reid/fastreid/modeling/meta_arch/build.py +26 -0
  236. dnt/third_party/fast-reid/fastreid/modeling/meta_arch/distiller.py +140 -0
  237. dnt/third_party/fast-reid/fastreid/modeling/meta_arch/mgn.py +394 -0
  238. dnt/third_party/fast-reid/fastreid/modeling/meta_arch/moco.py +126 -0
  239. dnt/third_party/fast-reid/fastreid/solver/__init__.py +8 -0
  240. dnt/third_party/fast-reid/fastreid/solver/build.py +348 -0
  241. dnt/third_party/fast-reid/fastreid/solver/lr_scheduler.py +66 -0
  242. dnt/third_party/fast-reid/fastreid/solver/optim/__init__.py +10 -0
  243. dnt/third_party/fast-reid/fastreid/solver/optim/lamb.py +123 -0
  244. dnt/third_party/fast-reid/fastreid/solver/optim/radam.py +149 -0
  245. dnt/third_party/fast-reid/fastreid/solver/optim/swa.py +246 -0
  246. dnt/third_party/fast-reid/fastreid/utils/__init__.py +6 -0
  247. dnt/third_party/fast-reid/fastreid/utils/checkpoint.py +503 -0
  248. dnt/third_party/fast-reid/fastreid/utils/collect_env.py +158 -0
  249. dnt/third_party/fast-reid/fastreid/utils/comm.py +255 -0
  250. dnt/third_party/fast-reid/fastreid/utils/compute_dist.py +200 -0
  251. dnt/third_party/fast-reid/fastreid/utils/env.py +119 -0
  252. dnt/third_party/fast-reid/fastreid/utils/events.py +461 -0
  253. dnt/third_party/fast-reid/fastreid/utils/faiss_utils.py +127 -0
  254. dnt/third_party/fast-reid/fastreid/utils/file_io.py +520 -0
  255. dnt/third_party/fast-reid/fastreid/utils/history_buffer.py +71 -0
  256. dnt/third_party/fast-reid/fastreid/utils/logger.py +211 -0
  257. dnt/third_party/fast-reid/fastreid/utils/params.py +103 -0
  258. dnt/third_party/fast-reid/fastreid/utils/precision_bn.py +94 -0
  259. dnt/third_party/fast-reid/fastreid/utils/registry.py +66 -0
  260. dnt/third_party/fast-reid/fastreid/utils/summary.py +120 -0
  261. dnt/third_party/fast-reid/fastreid/utils/timer.py +68 -0
  262. dnt/third_party/fast-reid/fastreid/utils/visualizer.py +278 -0
  263. dnt/track/__init__.py +2 -0
  264. dnt/track/botsort/__init__.py +4 -0
  265. dnt/track/botsort/bot_tracker/__init__.py +3 -0
  266. dnt/track/botsort/bot_tracker/basetrack.py +60 -0
  267. dnt/track/botsort/bot_tracker/bot_sort.py +473 -0
  268. dnt/track/botsort/bot_tracker/gmc.py +316 -0
  269. dnt/track/botsort/bot_tracker/kalman_filter.py +269 -0
  270. dnt/track/botsort/bot_tracker/matching.py +194 -0
  271. dnt/track/botsort/bot_tracker/mc_bot_sort.py +505 -0
  272. dnt/track/{dsort/utils → botsort/bot_tracker/tracking_utils}/evaluation.py +14 -4
  273. dnt/track/{dsort/utils → botsort/bot_tracker/tracking_utils}/io.py +19 -36
  274. dnt/track/botsort/bot_tracker/tracking_utils/timer.py +37 -0
  275. dnt/track/botsort/inference.py +96 -0
  276. dnt/track/config.py +120 -0
  277. dnt/track/dsort/configs/bagtricks_R50.yml +7 -0
  278. dnt/track/dsort/configs/deep_sort.yaml +0 -0
  279. dnt/track/dsort/configs/fastreid.yaml +1 -1
  280. dnt/track/dsort/deep_sort/deep/checkpoint/ckpt.t7 +0 -0
  281. dnt/track/dsort/deep_sort/deep/feature_extractor.py +87 -8
  282. dnt/track/dsort/deep_sort/deep_sort.py +31 -20
  283. dnt/track/dsort/deep_sort/sort/detection.py +2 -1
  284. dnt/track/dsort/deep_sort/sort/iou_matching.py +0 -2
  285. dnt/track/dsort/deep_sort/sort/linear_assignment.py +0 -3
  286. dnt/track/dsort/deep_sort/sort/nn_matching.py +5 -5
  287. dnt/track/dsort/deep_sort/sort/preprocessing.py +1 -2
  288. dnt/track/dsort/deep_sort/sort/track.py +2 -1
  289. dnt/track/dsort/deep_sort/sort/tracker.py +1 -1
  290. dnt/track/dsort/dsort.py +43 -33
  291. dnt/track/re_class.py +117 -0
  292. dnt/track/sort/sort.py +9 -6
  293. dnt/track/tracker.py +213 -32
  294. dnt-0.3.1.8.dist-info/METADATA +117 -0
  295. dnt-0.3.1.8.dist-info/RECORD +315 -0
  296. {dnt-0.2.4.dist-info → dnt-0.3.1.8.dist-info}/WHEEL +1 -1
  297. dnt/analysis/yield.py +0 -9
  298. dnt/track/dsort/deep_sort/deep/evaluate.py +0 -15
  299. dnt/track/dsort/deep_sort/deep/original_model.py +0 -106
  300. dnt/track/dsort/deep_sort/deep/test.py +0 -77
  301. dnt/track/dsort/deep_sort/deep/train.py +0 -189
  302. dnt/track/dsort/utils/asserts.py +0 -13
  303. dnt/track/dsort/utils/draw.py +0 -36
  304. dnt/track/dsort/utils/json_logger.py +0 -383
  305. dnt/track/dsort/utils/log.py +0 -17
  306. dnt/track/dsort/utils/parser.py +0 -35
  307. dnt/track/dsort/utils/tools.py +0 -39
  308. dnt-0.2.4.dist-info/METADATA +0 -35
  309. dnt-0.2.4.dist-info/RECORD +0 -64
  310. /dnt/{track/dsort/utils → third_party/fast-reid/checkpoint}/__init__.py +0 -0
  311. {dnt-0.2.4.dist-info → dnt-0.3.1.8.dist-info/licenses}/LICENSE +0 -0
  312. {dnt-0.2.4.dist-info → dnt-0.3.1.8.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,69 @@
1
+ # encoding: utf-8
2
+ """
3
+ @author: Jinkai Zheng
4
+ @contact: 1315673509@qq.com
5
+ """
6
+
7
+ import glob
8
+ import os.path as osp
9
+ import re
10
+
11
+ from .bases import ImageDataset
12
+ from ..datasets import DATASET_REGISTRY
13
+
14
+
15
+ @DATASET_REGISTRY.register()
16
+ class VeRi(ImageDataset):
17
+ """VeRi.
18
+
19
+ Reference:
20
+ Xinchen Liu et al. A Deep Learning based Approach for Progressive Vehicle Re-Identification. ECCV 2016.
21
+ Xinchen Liu et al. PROVID: Progressive and Multimodal Vehicle Reidentification for Large-Scale Urban Surveillance. IEEE TMM 2018.
22
+
23
+ URL: `<https://vehiclereid.github.io/VeRi/>`_
24
+
25
+ Dataset statistics:
26
+ - identities: 775.
27
+ - images: 37778 (train) + 1678 (query) + 11579 (gallery).
28
+ """
29
+ dataset_dir = "veri"
30
+ dataset_name = "veri"
31
+
32
+ def __init__(self, root='datasets', **kwargs):
33
+ self.dataset_dir = osp.join(root, self.dataset_dir)
34
+
35
+ self.train_dir = osp.join(self.dataset_dir, 'image_train')
36
+ self.query_dir = osp.join(self.dataset_dir, 'image_query')
37
+ self.gallery_dir = osp.join(self.dataset_dir, 'image_test')
38
+
39
+ required_files = [
40
+ self.dataset_dir,
41
+ self.train_dir,
42
+ self.query_dir,
43
+ self.gallery_dir,
44
+ ]
45
+ self.check_before_run(required_files)
46
+
47
+ train = self.process_dir(self.train_dir)
48
+ query = self.process_dir(self.query_dir, is_train=False)
49
+ gallery = self.process_dir(self.gallery_dir, is_train=False)
50
+
51
+ super(VeRi, self).__init__(train, query, gallery, **kwargs)
52
+
53
+ def process_dir(self, dir_path, is_train=True):
54
+ img_paths = glob.glob(osp.join(dir_path, '*.jpg'))
55
+ pattern = re.compile(r'([\d]+)_c(\d\d\d)')
56
+
57
+ data = []
58
+ for img_path in img_paths:
59
+ pid, camid = map(int, pattern.search(img_path).groups())
60
+ if pid == -1: continue # junk images are just ignored
61
+ assert 0 <= pid <= 776
62
+ assert 1 <= camid <= 20
63
+ camid -= 1 # index starts from 0
64
+ if is_train:
65
+ pid = self.dataset_name + "_" + str(pid)
66
+ camid = self.dataset_name + "_" + str(camid)
67
+ data.append((img_path, pid, camid))
68
+
69
+ return data
@@ -0,0 +1,140 @@
1
+ # encoding: utf-8
2
+ """
3
+ @author: Jinkai Zheng
4
+ @contact: 1315673509@qq.com
5
+ """
6
+
7
+ import os.path as osp
8
+
9
+ from .bases import ImageDataset
10
+ from ..datasets import DATASET_REGISTRY
11
+
12
+
13
+ @DATASET_REGISTRY.register()
14
+ class VeRiWild(ImageDataset):
15
+ """VeRi-Wild.
16
+
17
+ Reference:
18
+ Lou et al. A Large-Scale Dataset for Vehicle Re-Identification in the Wild. CVPR 2019.
19
+
20
+ URL: `<https://github.com/PKU-IMRE/VERI-Wild>`_
21
+
22
+ Train dataset statistics:
23
+ - identities: 30671.
24
+ - images: 277797.
25
+ """
26
+ dataset_dir = "VERI-Wild"
27
+ dataset_name = "veriwild"
28
+
29
+ def __init__(self, root='datasets', query_list='', gallery_list='', **kwargs):
30
+ self.dataset_dir = osp.join(root, self.dataset_dir)
31
+
32
+ self.image_dir = osp.join(self.dataset_dir, 'images')
33
+ self.train_list = osp.join(self.dataset_dir, 'train_test_split/train_list.txt')
34
+ self.vehicle_info = osp.join(self.dataset_dir, 'train_test_split/vehicle_info.txt')
35
+ if query_list and gallery_list:
36
+ self.query_list = query_list
37
+ self.gallery_list = gallery_list
38
+ else:
39
+ self.query_list = osp.join(self.dataset_dir, 'train_test_split/test_10000_query.txt')
40
+ self.gallery_list = osp.join(self.dataset_dir, 'train_test_split/test_10000.txt')
41
+
42
+ required_files = [
43
+ self.image_dir,
44
+ self.train_list,
45
+ self.query_list,
46
+ self.gallery_list,
47
+ self.vehicle_info,
48
+ ]
49
+ self.check_before_run(required_files)
50
+
51
+ self.imgid2vid, self.imgid2camid, self.imgid2imgpath = self.process_vehicle(self.vehicle_info)
52
+
53
+ train = self.process_dir(self.train_list)
54
+ query = self.process_dir(self.query_list, is_train=False)
55
+ gallery = self.process_dir(self.gallery_list, is_train=False)
56
+
57
+ super(VeRiWild, self).__init__(train, query, gallery, **kwargs)
58
+
59
+ def process_dir(self, img_list, is_train=True):
60
+ img_list_lines = open(img_list, 'r').readlines()
61
+
62
+ dataset = []
63
+ for idx, line in enumerate(img_list_lines):
64
+ line = line.strip()
65
+ vid = int(line.split('/')[0])
66
+ imgid = line.split('/')[1].split('.')[0]
67
+ camid = int(self.imgid2camid[imgid])
68
+ if is_train:
69
+ vid = f"{self.dataset_name}_{vid}"
70
+ camid = f"{self.dataset_name}_{camid}"
71
+ dataset.append((self.imgid2imgpath[imgid], vid, camid))
72
+
73
+ assert len(dataset) == len(img_list_lines)
74
+ return dataset
75
+
76
+ def process_vehicle(self, vehicle_info):
77
+ imgid2vid = {}
78
+ imgid2camid = {}
79
+ imgid2imgpath = {}
80
+ vehicle_info_lines = open(vehicle_info, 'r').readlines()
81
+
82
+ for idx, line in enumerate(vehicle_info_lines[1:]):
83
+ vid = line.strip().split('/')[0]
84
+ imgid = line.strip().split(';')[0].split('/')[1]
85
+ camid = line.strip().split(';')[1]
86
+ img_path = osp.join(self.image_dir, vid, imgid + '.jpg')
87
+ imgid2vid[imgid] = vid
88
+ imgid2camid[imgid] = camid
89
+ imgid2imgpath[imgid] = img_path
90
+
91
+ assert len(imgid2vid) == len(vehicle_info_lines) - 1
92
+ return imgid2vid, imgid2camid, imgid2imgpath
93
+
94
+
95
+ @DATASET_REGISTRY.register()
96
+ class SmallVeRiWild(VeRiWild):
97
+ """VeRi-Wild.
98
+ Small test dataset statistics:
99
+ - identities: 3000.
100
+ - images: 41861.
101
+ """
102
+
103
+ def __init__(self, root='datasets', **kwargs):
104
+ dataset_dir = osp.join(root, self.dataset_dir)
105
+ self.query_list = osp.join(dataset_dir, 'train_test_split/test_3000_query.txt')
106
+ self.gallery_list = osp.join(dataset_dir, 'train_test_split/test_3000.txt')
107
+
108
+ super(SmallVeRiWild, self).__init__(root, self.query_list, self.gallery_list, **kwargs)
109
+
110
+
111
+ @DATASET_REGISTRY.register()
112
+ class MediumVeRiWild(VeRiWild):
113
+ """VeRi-Wild.
114
+ Medium test dataset statistics:
115
+ - identities: 5000.
116
+ - images: 69389.
117
+ """
118
+
119
+ def __init__(self, root='datasets', **kwargs):
120
+ dataset_dir = osp.join(root, self.dataset_dir)
121
+ self.query_list = osp.join(dataset_dir, 'train_test_split/test_5000_query.txt')
122
+ self.gallery_list = osp.join(dataset_dir, 'train_test_split/test_5000.txt')
123
+
124
+ super(MediumVeRiWild, self).__init__(root, self.query_list, self.gallery_list, **kwargs)
125
+
126
+
127
+ @DATASET_REGISTRY.register()
128
+ class LargeVeRiWild(VeRiWild):
129
+ """VeRi-Wild.
130
+ Large test dataset statistics:
131
+ - identities: 10000.
132
+ - images: 138517.
133
+ """
134
+
135
+ def __init__(self, root='datasets', **kwargs):
136
+ dataset_dir = osp.join(root, self.dataset_dir)
137
+ self.query_list = osp.join(dataset_dir, 'train_test_split/test_10000_query.txt')
138
+ self.gallery_list = osp.join(dataset_dir, 'train_test_split/test_10000.txt')
139
+
140
+ super(LargeVeRiWild, self).__init__(root, self.query_list, self.gallery_list, **kwargs)
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+ """
3
+ @author: xingyu liao
4
+ @contact: sherlockliao01@gmail.com
5
+ """
6
+
7
+ import os
8
+ from glob import glob
9
+
10
+ from fastreid.data.datasets import DATASET_REGISTRY
11
+ from fastreid.data.datasets.bases import ImageDataset
12
+
13
+ __all__ = ['VIPeR', ]
14
+
15
+
16
+ @DATASET_REGISTRY.register()
17
+ class VIPeR(ImageDataset):
18
+ dataset_dir = "VIPeR"
19
+ dataset_name = "viper"
20
+
21
+ def __init__(self, root='datasets', **kwargs):
22
+ self.root = root
23
+ self.train_path = os.path.join(self.root, self.dataset_dir)
24
+
25
+ required_files = [self.train_path]
26
+ self.check_before_run(required_files)
27
+
28
+ train = self.process_train(self.train_path)
29
+
30
+ super().__init__(train, [], [], **kwargs)
31
+
32
+ def process_train(self, train_path):
33
+ data = []
34
+
35
+ file_path_list = ['cam_a', 'cam_b']
36
+
37
+ for file_path in file_path_list:
38
+ camid = self.dataset_name + "_" + file_path
39
+ img_list = glob(os.path.join(train_path, file_path, "*.bmp"))
40
+ for img_path in img_list:
41
+ img_name = img_path.split('/')[-1]
42
+ pid = self.dataset_name + "_" + img_name.split('_')[0]
43
+ data.append([img_path, pid, camid])
44
+
45
+ return data
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+ """
3
+ @author: wangguanan
4
+ @contact: guan.wang0706@gmail.com
5
+ """
6
+
7
+ import glob
8
+ import os
9
+
10
+ from .bases import ImageDataset
11
+ from ..datasets import DATASET_REGISTRY
12
+
13
+
14
+ @DATASET_REGISTRY.register()
15
+ class WildTrackCrop(ImageDataset):
16
+ """WildTrack.
17
+ Reference:
18
+ WILDTRACK: A Multi-camera HD Dataset for Dense Unscripted Pedestrian Detection
19
+ T. Chavdarova; P. Baqué; A. Maksai; S. Bouquet; C. Jose et al.
20
+ URL: `<https://www.epfl.ch/labs/cvlab/data/data-wildtrack/>`_
21
+ Dataset statistics:
22
+ - identities: 313
23
+ - images: 33979 (train only)
24
+ - cameras: 7
25
+ Args:
26
+ data_path(str): path to WildTrackCrop dataset
27
+ combineall(bool): combine train and test sets as train set if True
28
+ """
29
+ dataset_url = None
30
+ dataset_dir = 'Wildtrack_crop_dataset'
31
+ dataset_name = 'wildtrack'
32
+
33
+ def __init__(self, root='datasets', **kwargs):
34
+ self.root = root
35
+ self.dataset_dir = os.path.join(self.root, self.dataset_dir)
36
+
37
+ self.train_dir = os.path.join(self.dataset_dir, "crop")
38
+
39
+ train = self.process_dir(self.train_dir)
40
+ query = []
41
+ gallery = []
42
+
43
+ super(WildTrackCrop, self).__init__(train, query, gallery, **kwargs)
44
+
45
+ def process_dir(self, dir_path):
46
+ r"""
47
+ :param dir_path: directory path saving images
48
+ Returns
49
+ data(list) = [img_path, pid, camid]
50
+ """
51
+ data = []
52
+ for dir_name in os.listdir(dir_path):
53
+ img_lists = glob.glob(os.path.join(dir_path, dir_name, "*.png"))
54
+ for img_path in img_lists:
55
+ pid = self.dataset_name + "_" + dir_name
56
+ camid = img_path.split('/')[-1].split('_')[0]
57
+ camid = self.dataset_name + "_" + camid
58
+ data.append([img_path, pid, camid])
59
+ return data
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+ """
3
+ @author: liaoxingyu
4
+ @contact: sherlockliao01@gmail.com
5
+ """
6
+
7
+ from .triplet_sampler import BalancedIdentitySampler, NaiveIdentitySampler, SetReWeightSampler
8
+ from .data_sampler import TrainingSampler, InferenceSampler
9
+ from .imbalance_sampler import ImbalancedDatasetSampler
10
+
11
+ __all__ = [
12
+ "BalancedIdentitySampler",
13
+ "NaiveIdentitySampler",
14
+ "SetReWeightSampler",
15
+ "TrainingSampler",
16
+ "InferenceSampler",
17
+ "ImbalancedDatasetSampler",
18
+ ]
@@ -0,0 +1,85 @@
1
+ # encoding: utf-8
2
+ """
3
+ @author: l1aoxingyu
4
+ @contact: sherlockliao01@gmail.com
5
+ """
6
+ import itertools
7
+ from typing import Optional
8
+
9
+ import numpy as np
10
+ from torch.utils.data import Sampler
11
+
12
+ from fastreid.utils import comm
13
+
14
+
15
+ class TrainingSampler(Sampler):
16
+ """
17
+ In training, we only care about the "infinite stream" of training data.
18
+ So this sampler produces an infinite stream of indices and
19
+ all workers cooperate to correctly shuffle the indices and sample different indices.
20
+ The samplers in each worker effectively produces `indices[worker_id::num_workers]`
21
+ where `indices` is an infinite stream of indices consisting of
22
+ `shuffle(range(size)) + shuffle(range(size)) + ...` (if shuffle is True)
23
+ or `range(size) + range(size) + ...` (if shuffle is False)
24
+ """
25
+
26
+ def __init__(self, size: int, shuffle: bool = True, seed: Optional[int] = None):
27
+ """
28
+ Args:
29
+ size (int): the total number of data of the underlying dataset to sample from
30
+ shuffle (bool): whether to shuffle the indices or not
31
+ seed (int): the initial seed of the shuffle. Must be the same
32
+ across all workers. If None, will use a random seed shared
33
+ among workers (require synchronization among all workers).
34
+ """
35
+ self._size = size
36
+ assert size > 0
37
+ self._shuffle = shuffle
38
+ if seed is None:
39
+ seed = comm.shared_random_seed()
40
+ self._seed = int(seed)
41
+
42
+ self._rank = comm.get_rank()
43
+ self._world_size = comm.get_world_size()
44
+
45
+ def __iter__(self):
46
+ start = self._rank
47
+ yield from itertools.islice(self._infinite_indices(), start, None, self._world_size)
48
+
49
+ def _infinite_indices(self):
50
+ np.random.seed(self._seed)
51
+ while True:
52
+ if self._shuffle:
53
+ yield from np.random.permutation(self._size)
54
+ else:
55
+ yield from np.arange(self._size)
56
+
57
+
58
+ class InferenceSampler(Sampler):
59
+ """
60
+ Produce indices for inference.
61
+ Inference needs to run on the __exact__ set of samples,
62
+ therefore when the total number of samples is not divisible by the number of workers,
63
+ this sampler produces different number of samples on different workers.
64
+ """
65
+
66
+ def __init__(self, size: int):
67
+ """
68
+ Args:
69
+ size (int): the total number of data of the underlying dataset to sample from
70
+ """
71
+ self._size = size
72
+ assert size > 0
73
+ self._rank = comm.get_rank()
74
+ self._world_size = comm.get_world_size()
75
+
76
+ shard_size = (self._size - 1) // self._world_size + 1
77
+ begin = shard_size * self._rank
78
+ end = min(shard_size * (self._rank + 1), self._size)
79
+ self._local_indices = range(begin, end)
80
+
81
+ def __iter__(self):
82
+ yield from self._local_indices
83
+
84
+ def __len__(self):
85
+ return len(self._local_indices)
@@ -0,0 +1,67 @@
1
+ # encoding: utf-8
2
+ """
3
+ @author: xingyu liao
4
+ @contact: sherlockliao01@gmail.com
5
+ """
6
+
7
+ # based on:
8
+ # https://github.com/ufoym/imbalanced-dataset-sampler/blob/master/torchsampler/imbalanced.py
9
+
10
+
11
+ import itertools
12
+ from typing import Optional, List, Callable
13
+
14
+ import numpy as np
15
+ import torch
16
+ from torch.utils.data.sampler import Sampler
17
+
18
+ from fastreid.utils import comm
19
+
20
+
21
+ class ImbalancedDatasetSampler(Sampler):
22
+ """Samples elements randomly from a given list of indices for imbalanced dataset
23
+ Arguments:
24
+ data_source: a list of data items
25
+ size: number of samples to draw
26
+ """
27
+
28
+ def __init__(self, data_source: List, size: int = None, seed: Optional[int] = None,
29
+ callback_get_label: Callable = None):
30
+ self.data_source = data_source
31
+ # consider all elements in the dataset
32
+ self.indices = list(range(len(data_source)))
33
+ # if num_samples is not provided, draw `len(indices)` samples in each iteration
34
+ self._size = len(self.indices) if size is None else size
35
+ self.callback_get_label = callback_get_label
36
+
37
+ # distribution of classes in the dataset
38
+ label_to_count = {}
39
+ for idx in self.indices:
40
+ label = self._get_label(data_source, idx)
41
+ label_to_count[label] = label_to_count.get(label, 0) + 1
42
+
43
+ # weight for each sample
44
+ weights = [1.0 / label_to_count[self._get_label(data_source, idx)] for idx in self.indices]
45
+ self.weights = torch.DoubleTensor(weights)
46
+
47
+ if seed is None:
48
+ seed = comm.shared_random_seed()
49
+ self._seed = int(seed)
50
+ self._rank = comm.get_rank()
51
+ self._world_size = comm.get_world_size()
52
+
53
+ def _get_label(self, dataset, idx):
54
+ if self.callback_get_label:
55
+ return self.callback_get_label(dataset, idx)
56
+ else:
57
+ return dataset[idx][1]
58
+
59
+ def __iter__(self):
60
+ start = self._rank
61
+ yield from itertools.islice(self._infinite_indices(), start, None, self._world_size)
62
+
63
+ def _infinite_indices(self):
64
+ np.random.seed(self._seed)
65
+ while True:
66
+ for i in torch.multinomial(self.weights, self._size, replacement=True):
67
+ yield self.indices[i]