birder 0.2.0__tar.gz → 0.2.1__tar.gz

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. {birder-0.2.0 → birder-0.2.1}/PKG-INFO +2 -2
  2. {birder-0.2.0 → birder-0.2.1}/birder/data/collators/detection.py +12 -0
  3. {birder-0.2.0 → birder-0.2.1}/birder/data/transforms/detection.py +29 -1
  4. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/yolo_v3.py +35 -5
  5. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/yolo_v4.py +21 -4
  6. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/yolo_v4_tiny.py +4 -3
  7. {birder-0.2.0 → birder-0.2.1}/birder/scripts/predict.py +9 -2
  8. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_detection.py +1 -1
  9. {birder-0.2.0 → birder-0.2.1}/birder/tools/show_det_iterator.py +1 -1
  10. birder-0.2.1/birder/version.py +1 -0
  11. {birder-0.2.0 → birder-0.2.1}/birder.egg-info/PKG-INFO +2 -2
  12. {birder-0.2.0 → birder-0.2.1}/birder.egg-info/requires.txt +1 -1
  13. {birder-0.2.0 → birder-0.2.1}/requirements/_requirements-dev.txt +1 -1
  14. {birder-0.2.0 → birder-0.2.1}/tests/test_collators.py +19 -0
  15. birder-0.2.0/birder/version.py +0 -1
  16. {birder-0.2.0 → birder-0.2.1}/LICENSE +0 -0
  17. {birder-0.2.0 → birder-0.2.1}/README.md +0 -0
  18. {birder-0.2.0 → birder-0.2.1}/birder/__init__.py +0 -0
  19. {birder-0.2.0 → birder-0.2.1}/birder/adversarial/__init__.py +0 -0
  20. {birder-0.2.0 → birder-0.2.1}/birder/adversarial/fgsm.py +0 -0
  21. {birder-0.2.0 → birder-0.2.1}/birder/adversarial/pgd.py +0 -0
  22. {birder-0.2.0 → birder-0.2.1}/birder/common/__init__.py +0 -0
  23. {birder-0.2.0 → birder-0.2.1}/birder/common/cli.py +0 -0
  24. {birder-0.2.0 → birder-0.2.1}/birder/common/fs_ops.py +0 -0
  25. {birder-0.2.0 → birder-0.2.1}/birder/common/lib.py +0 -0
  26. {birder-0.2.0 → birder-0.2.1}/birder/common/masking.py +0 -0
  27. {birder-0.2.0 → birder-0.2.1}/birder/common/training_cli.py +0 -0
  28. {birder-0.2.0 → birder-0.2.1}/birder/common/training_utils.py +0 -0
  29. {birder-0.2.0 → birder-0.2.1}/birder/conf/__init__.py +0 -0
  30. {birder-0.2.0 → birder-0.2.1}/birder/conf/settings.py +0 -0
  31. {birder-0.2.0 → birder-0.2.1}/birder/data/__init__.py +0 -0
  32. {birder-0.2.0 → birder-0.2.1}/birder/data/collators/__init__.py +0 -0
  33. {birder-0.2.0 → birder-0.2.1}/birder/data/dataloader/__init__.py +0 -0
  34. {birder-0.2.0 → birder-0.2.1}/birder/data/dataloader/webdataset.py +0 -0
  35. {birder-0.2.0 → birder-0.2.1}/birder/data/datasets/__init__.py +0 -0
  36. {birder-0.2.0 → birder-0.2.1}/birder/data/datasets/coco.py +0 -0
  37. {birder-0.2.0 → birder-0.2.1}/birder/data/datasets/directory.py +0 -0
  38. {birder-0.2.0 → birder-0.2.1}/birder/data/datasets/fake.py +0 -0
  39. {birder-0.2.0 → birder-0.2.1}/birder/data/datasets/webdataset.py +0 -0
  40. {birder-0.2.0 → birder-0.2.1}/birder/data/transforms/__init__.py +0 -0
  41. {birder-0.2.0 → birder-0.2.1}/birder/data/transforms/classification.py +0 -0
  42. {birder-0.2.0 → birder-0.2.1}/birder/data/transforms/mosaic.py +0 -0
  43. {birder-0.2.0 → birder-0.2.1}/birder/datahub/__init__.py +0 -0
  44. {birder-0.2.0 → birder-0.2.1}/birder/datahub/_lib.py +0 -0
  45. {birder-0.2.0 → birder-0.2.1}/birder/datahub/classification.py +0 -0
  46. {birder-0.2.0 → birder-0.2.1}/birder/inference/__init__.py +0 -0
  47. {birder-0.2.0 → birder-0.2.1}/birder/inference/classification.py +0 -0
  48. {birder-0.2.0 → birder-0.2.1}/birder/inference/data_parallel.py +0 -0
  49. {birder-0.2.0 → birder-0.2.1}/birder/inference/detection.py +0 -0
  50. {birder-0.2.0 → birder-0.2.1}/birder/introspection/__init__.py +0 -0
  51. {birder-0.2.0 → birder-0.2.1}/birder/introspection/attention_rollout.py +0 -0
  52. {birder-0.2.0 → birder-0.2.1}/birder/introspection/base.py +0 -0
  53. {birder-0.2.0 → birder-0.2.1}/birder/introspection/gradcam.py +0 -0
  54. {birder-0.2.0 → birder-0.2.1}/birder/introspection/guided_backprop.py +0 -0
  55. {birder-0.2.0 → birder-0.2.1}/birder/kernels/__init__.py +0 -0
  56. {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/cpu/ms_deform_attn_cpu.cpp +0 -0
  57. {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/cpu/ms_deform_attn_cpu.h +0 -0
  58. {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/cuda/ms_deform_attn_cuda.cu +0 -0
  59. {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/cuda/ms_deform_attn_cuda.h +0 -0
  60. {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/cuda/ms_deform_im2col_cuda.cuh +0 -0
  61. {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/ms_deform_attn.h +0 -0
  62. {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/vision.cpp +0 -0
  63. {birder-0.2.0 → birder-0.2.1}/birder/kernels/load_kernel.py +0 -0
  64. {birder-0.2.0 → birder-0.2.1}/birder/kernels/soft_nms/op.cpp +0 -0
  65. {birder-0.2.0 → birder-0.2.1}/birder/kernels/soft_nms/soft_nms.cpp +0 -0
  66. {birder-0.2.0 → birder-0.2.1}/birder/kernels/soft_nms/soft_nms.h +0 -0
  67. {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/av_bw_kernel.cu +0 -0
  68. {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/av_fw_kernel.cu +0 -0
  69. {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/qk_bw_kernel.cu +0 -0
  70. {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/qk_fw_kernel.cu +0 -0
  71. {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/qk_rpb_bw_kernel.cu +0 -0
  72. {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/qk_rpb_fw_kernel.cu +0 -0
  73. {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/swattention.cpp +0 -0
  74. {birder-0.2.0 → birder-0.2.1}/birder/layers/__init__.py +0 -0
  75. {birder-0.2.0 → birder-0.2.1}/birder/layers/activations.py +0 -0
  76. {birder-0.2.0 → birder-0.2.1}/birder/layers/attention_pool.py +0 -0
  77. {birder-0.2.0 → birder-0.2.1}/birder/layers/ffn.py +0 -0
  78. {birder-0.2.0 → birder-0.2.1}/birder/layers/gem.py +0 -0
  79. {birder-0.2.0 → birder-0.2.1}/birder/layers/layer_norm.py +0 -0
  80. {birder-0.2.0 → birder-0.2.1}/birder/layers/layer_scale.py +0 -0
  81. {birder-0.2.0 → birder-0.2.1}/birder/model_registry/__init__.py +0 -0
  82. {birder-0.2.0 → birder-0.2.1}/birder/model_registry/manifest.py +0 -0
  83. {birder-0.2.0 → birder-0.2.1}/birder/model_registry/model_registry.py +0 -0
  84. {birder-0.2.0 → birder-0.2.1}/birder/net/__init__.py +0 -0
  85. {birder-0.2.0 → birder-0.2.1}/birder/net/alexnet.py +0 -0
  86. {birder-0.2.0 → birder-0.2.1}/birder/net/base.py +0 -0
  87. {birder-0.2.0 → birder-0.2.1}/birder/net/biformer.py +0 -0
  88. {birder-0.2.0 → birder-0.2.1}/birder/net/cait.py +0 -0
  89. {birder-0.2.0 → birder-0.2.1}/birder/net/cas_vit.py +0 -0
  90. {birder-0.2.0 → birder-0.2.1}/birder/net/coat.py +0 -0
  91. {birder-0.2.0 → birder-0.2.1}/birder/net/conv2former.py +0 -0
  92. {birder-0.2.0 → birder-0.2.1}/birder/net/convmixer.py +0 -0
  93. {birder-0.2.0 → birder-0.2.1}/birder/net/convnext_v1.py +0 -0
  94. {birder-0.2.0 → birder-0.2.1}/birder/net/convnext_v2.py +0 -0
  95. {birder-0.2.0 → birder-0.2.1}/birder/net/crossformer.py +0 -0
  96. {birder-0.2.0 → birder-0.2.1}/birder/net/crossvit.py +0 -0
  97. {birder-0.2.0 → birder-0.2.1}/birder/net/cspnet.py +0 -0
  98. {birder-0.2.0 → birder-0.2.1}/birder/net/cswin_transformer.py +0 -0
  99. {birder-0.2.0 → birder-0.2.1}/birder/net/darknet.py +0 -0
  100. {birder-0.2.0 → birder-0.2.1}/birder/net/davit.py +0 -0
  101. {birder-0.2.0 → birder-0.2.1}/birder/net/deit.py +0 -0
  102. {birder-0.2.0 → birder-0.2.1}/birder/net/deit3.py +0 -0
  103. {birder-0.2.0 → birder-0.2.1}/birder/net/densenet.py +0 -0
  104. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/__init__.py +0 -0
  105. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/base.py +0 -0
  106. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/deformable_detr.py +0 -0
  107. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/detr.py +0 -0
  108. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/efficientdet.py +0 -0
  109. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/faster_rcnn.py +0 -0
  110. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/fcos.py +0 -0
  111. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/retinanet.py +0 -0
  112. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/rt_detr_v1.py +0 -0
  113. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/ssd.py +0 -0
  114. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/ssdlite.py +0 -0
  115. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/vitdet.py +0 -0
  116. {birder-0.2.0 → birder-0.2.1}/birder/net/detection/yolo_v2.py +0 -0
  117. {birder-0.2.0 → birder-0.2.1}/birder/net/dpn.py +0 -0
  118. {birder-0.2.0 → birder-0.2.1}/birder/net/edgenext.py +0 -0
  119. {birder-0.2.0 → birder-0.2.1}/birder/net/edgevit.py +0 -0
  120. {birder-0.2.0 → birder-0.2.1}/birder/net/efficientformer_v1.py +0 -0
  121. {birder-0.2.0 → birder-0.2.1}/birder/net/efficientformer_v2.py +0 -0
  122. {birder-0.2.0 → birder-0.2.1}/birder/net/efficientnet_lite.py +0 -0
  123. {birder-0.2.0 → birder-0.2.1}/birder/net/efficientnet_v1.py +0 -0
  124. {birder-0.2.0 → birder-0.2.1}/birder/net/efficientnet_v2.py +0 -0
  125. {birder-0.2.0 → birder-0.2.1}/birder/net/efficientvim.py +0 -0
  126. {birder-0.2.0 → birder-0.2.1}/birder/net/efficientvit_mit.py +0 -0
  127. {birder-0.2.0 → birder-0.2.1}/birder/net/efficientvit_msft.py +0 -0
  128. {birder-0.2.0 → birder-0.2.1}/birder/net/fasternet.py +0 -0
  129. {birder-0.2.0 → birder-0.2.1}/birder/net/fastvit.py +0 -0
  130. {birder-0.2.0 → birder-0.2.1}/birder/net/flexivit.py +0 -0
  131. {birder-0.2.0 → birder-0.2.1}/birder/net/focalnet.py +0 -0
  132. {birder-0.2.0 → birder-0.2.1}/birder/net/ghostnet_v1.py +0 -0
  133. {birder-0.2.0 → birder-0.2.1}/birder/net/ghostnet_v2.py +0 -0
  134. {birder-0.2.0 → birder-0.2.1}/birder/net/groupmixformer.py +0 -0
  135. {birder-0.2.0 → birder-0.2.1}/birder/net/hgnet_v1.py +0 -0
  136. {birder-0.2.0 → birder-0.2.1}/birder/net/hgnet_v2.py +0 -0
  137. {birder-0.2.0 → birder-0.2.1}/birder/net/hiera.py +0 -0
  138. {birder-0.2.0 → birder-0.2.1}/birder/net/hieradet.py +0 -0
  139. {birder-0.2.0 → birder-0.2.1}/birder/net/hornet.py +0 -0
  140. {birder-0.2.0 → birder-0.2.1}/birder/net/iformer.py +0 -0
  141. {birder-0.2.0 → birder-0.2.1}/birder/net/inception_next.py +0 -0
  142. {birder-0.2.0 → birder-0.2.1}/birder/net/inception_resnet_v1.py +0 -0
  143. {birder-0.2.0 → birder-0.2.1}/birder/net/inception_resnet_v2.py +0 -0
  144. {birder-0.2.0 → birder-0.2.1}/birder/net/inception_v3.py +0 -0
  145. {birder-0.2.0 → birder-0.2.1}/birder/net/inception_v4.py +0 -0
  146. {birder-0.2.0 → birder-0.2.1}/birder/net/levit.py +0 -0
  147. {birder-0.2.0 → birder-0.2.1}/birder/net/maxvit.py +0 -0
  148. {birder-0.2.0 → birder-0.2.1}/birder/net/metaformer.py +0 -0
  149. {birder-0.2.0 → birder-0.2.1}/birder/net/mim/__init__.py +0 -0
  150. {birder-0.2.0 → birder-0.2.1}/birder/net/mim/base.py +0 -0
  151. {birder-0.2.0 → birder-0.2.1}/birder/net/mim/crossmae.py +0 -0
  152. {birder-0.2.0 → birder-0.2.1}/birder/net/mim/fcmae.py +0 -0
  153. {birder-0.2.0 → birder-0.2.1}/birder/net/mim/mae_hiera.py +0 -0
  154. {birder-0.2.0 → birder-0.2.1}/birder/net/mim/mae_vit.py +0 -0
  155. {birder-0.2.0 → birder-0.2.1}/birder/net/mim/simmim.py +0 -0
  156. {birder-0.2.0 → birder-0.2.1}/birder/net/mnasnet.py +0 -0
  157. {birder-0.2.0 → birder-0.2.1}/birder/net/mobilenet_v1.py +0 -0
  158. {birder-0.2.0 → birder-0.2.1}/birder/net/mobilenet_v2.py +0 -0
  159. {birder-0.2.0 → birder-0.2.1}/birder/net/mobilenet_v3_large.py +0 -0
  160. {birder-0.2.0 → birder-0.2.1}/birder/net/mobilenet_v3_small.py +0 -0
  161. {birder-0.2.0 → birder-0.2.1}/birder/net/mobilenet_v4.py +0 -0
  162. {birder-0.2.0 → birder-0.2.1}/birder/net/mobilenet_v4_hybrid.py +0 -0
  163. {birder-0.2.0 → birder-0.2.1}/birder/net/mobileone.py +0 -0
  164. {birder-0.2.0 → birder-0.2.1}/birder/net/mobilevit_v1.py +0 -0
  165. {birder-0.2.0 → birder-0.2.1}/birder/net/mobilevit_v2.py +0 -0
  166. {birder-0.2.0 → birder-0.2.1}/birder/net/moganet.py +0 -0
  167. {birder-0.2.0 → birder-0.2.1}/birder/net/mvit_v2.py +0 -0
  168. {birder-0.2.0 → birder-0.2.1}/birder/net/nextvit.py +0 -0
  169. {birder-0.2.0 → birder-0.2.1}/birder/net/nfnet.py +0 -0
  170. {birder-0.2.0 → birder-0.2.1}/birder/net/pit.py +0 -0
  171. {birder-0.2.0 → birder-0.2.1}/birder/net/pvt_v1.py +0 -0
  172. {birder-0.2.0 → birder-0.2.1}/birder/net/pvt_v2.py +0 -0
  173. {birder-0.2.0 → birder-0.2.1}/birder/net/rdnet.py +0 -0
  174. {birder-0.2.0 → birder-0.2.1}/birder/net/regionvit.py +0 -0
  175. {birder-0.2.0 → birder-0.2.1}/birder/net/regnet.py +0 -0
  176. {birder-0.2.0 → birder-0.2.1}/birder/net/regnet_z.py +0 -0
  177. {birder-0.2.0 → birder-0.2.1}/birder/net/repghost.py +0 -0
  178. {birder-0.2.0 → birder-0.2.1}/birder/net/repvgg.py +0 -0
  179. {birder-0.2.0 → birder-0.2.1}/birder/net/repvit.py +0 -0
  180. {birder-0.2.0 → birder-0.2.1}/birder/net/resmlp.py +0 -0
  181. {birder-0.2.0 → birder-0.2.1}/birder/net/resnest.py +0 -0
  182. {birder-0.2.0 → birder-0.2.1}/birder/net/resnet_v1.py +0 -0
  183. {birder-0.2.0 → birder-0.2.1}/birder/net/resnet_v2.py +0 -0
  184. {birder-0.2.0 → birder-0.2.1}/birder/net/resnext.py +0 -0
  185. {birder-0.2.0 → birder-0.2.1}/birder/net/rope_deit3.py +0 -0
  186. {birder-0.2.0 → birder-0.2.1}/birder/net/rope_flexivit.py +0 -0
  187. {birder-0.2.0 → birder-0.2.1}/birder/net/rope_vit.py +0 -0
  188. {birder-0.2.0 → birder-0.2.1}/birder/net/se_resnet_v1.py +0 -0
  189. {birder-0.2.0 → birder-0.2.1}/birder/net/se_resnet_v2.py +0 -0
  190. {birder-0.2.0 → birder-0.2.1}/birder/net/se_resnext.py +0 -0
  191. {birder-0.2.0 → birder-0.2.1}/birder/net/sequencer2d.py +0 -0
  192. {birder-0.2.0 → birder-0.2.1}/birder/net/shufflenet_v1.py +0 -0
  193. {birder-0.2.0 → birder-0.2.1}/birder/net/shufflenet_v2.py +0 -0
  194. {birder-0.2.0 → birder-0.2.1}/birder/net/simple_vit.py +0 -0
  195. {birder-0.2.0 → birder-0.2.1}/birder/net/smt.py +0 -0
  196. {birder-0.2.0 → birder-0.2.1}/birder/net/squeezenet.py +0 -0
  197. {birder-0.2.0 → birder-0.2.1}/birder/net/squeezenext.py +0 -0
  198. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/__init__.py +0 -0
  199. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/barlow_twins.py +0 -0
  200. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/base.py +0 -0
  201. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/byol.py +0 -0
  202. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/capi.py +0 -0
  203. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/data2vec.py +0 -0
  204. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/data2vec2.py +0 -0
  205. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/dino_v1.py +0 -0
  206. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/dino_v2.py +0 -0
  207. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/franca.py +0 -0
  208. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/i_jepa.py +0 -0
  209. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/ibot.py +0 -0
  210. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/mmcr.py +0 -0
  211. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/simclr.py +0 -0
  212. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/sscd.py +0 -0
  213. {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/vicreg.py +0 -0
  214. {birder-0.2.0 → birder-0.2.1}/birder/net/starnet.py +0 -0
  215. {birder-0.2.0 → birder-0.2.1}/birder/net/swiftformer.py +0 -0
  216. {birder-0.2.0 → birder-0.2.1}/birder/net/swin_transformer_v1.py +0 -0
  217. {birder-0.2.0 → birder-0.2.1}/birder/net/swin_transformer_v2.py +0 -0
  218. {birder-0.2.0 → birder-0.2.1}/birder/net/tiny_vit.py +0 -0
  219. {birder-0.2.0 → birder-0.2.1}/birder/net/transnext.py +0 -0
  220. {birder-0.2.0 → birder-0.2.1}/birder/net/uniformer.py +0 -0
  221. {birder-0.2.0 → birder-0.2.1}/birder/net/van.py +0 -0
  222. {birder-0.2.0 → birder-0.2.1}/birder/net/vgg.py +0 -0
  223. {birder-0.2.0 → birder-0.2.1}/birder/net/vgg_reduced.py +0 -0
  224. {birder-0.2.0 → birder-0.2.1}/birder/net/vit.py +0 -0
  225. {birder-0.2.0 → birder-0.2.1}/birder/net/vit_parallel.py +0 -0
  226. {birder-0.2.0 → birder-0.2.1}/birder/net/vit_sam.py +0 -0
  227. {birder-0.2.0 → birder-0.2.1}/birder/net/vovnet_v1.py +0 -0
  228. {birder-0.2.0 → birder-0.2.1}/birder/net/vovnet_v2.py +0 -0
  229. {birder-0.2.0 → birder-0.2.1}/birder/net/wide_resnet.py +0 -0
  230. {birder-0.2.0 → birder-0.2.1}/birder/net/xception.py +0 -0
  231. {birder-0.2.0 → birder-0.2.1}/birder/net/xcit.py +0 -0
  232. {birder-0.2.0 → birder-0.2.1}/birder/ops/__init__.py +0 -0
  233. {birder-0.2.0 → birder-0.2.1}/birder/ops/msda.py +0 -0
  234. {birder-0.2.0 → birder-0.2.1}/birder/ops/soft_nms.py +0 -0
  235. {birder-0.2.0 → birder-0.2.1}/birder/ops/swattention.py +0 -0
  236. {birder-0.2.0 → birder-0.2.1}/birder/optim/__init__.py +0 -0
  237. {birder-0.2.0 → birder-0.2.1}/birder/optim/lamb.py +0 -0
  238. {birder-0.2.0 → birder-0.2.1}/birder/optim/lars.py +0 -0
  239. {birder-0.2.0 → birder-0.2.1}/birder/py.typed +0 -0
  240. {birder-0.2.0 → birder-0.2.1}/birder/results/__init__.py +0 -0
  241. {birder-0.2.0 → birder-0.2.1}/birder/results/classification.py +0 -0
  242. {birder-0.2.0 → birder-0.2.1}/birder/results/detection.py +0 -0
  243. {birder-0.2.0 → birder-0.2.1}/birder/results/gui.py +0 -0
  244. {birder-0.2.0 → birder-0.2.1}/birder/scheduler/__init__.py +0 -0
  245. {birder-0.2.0 → birder-0.2.1}/birder/scheduler/cooldown.py +0 -0
  246. {birder-0.2.0 → birder-0.2.1}/birder/scripts/__init__.py +0 -0
  247. {birder-0.2.0 → birder-0.2.1}/birder/scripts/__main__.py +0 -0
  248. {birder-0.2.0 → birder-0.2.1}/birder/scripts/benchmark.py +0 -0
  249. {birder-0.2.0 → birder-0.2.1}/birder/scripts/evaluate.py +0 -0
  250. {birder-0.2.0 → birder-0.2.1}/birder/scripts/predict_detection.py +0 -0
  251. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train.py +0 -0
  252. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_barlow_twins.py +0 -0
  253. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_byol.py +0 -0
  254. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_capi.py +0 -0
  255. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_data2vec.py +0 -0
  256. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_data2vec2.py +0 -0
  257. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_dino_v1.py +0 -0
  258. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_dino_v2.py +0 -0
  259. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_dino_v2_dist.py +0 -0
  260. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_franca.py +0 -0
  261. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_i_jepa.py +0 -0
  262. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_ibot.py +0 -0
  263. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_kd.py +0 -0
  264. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_mim.py +0 -0
  265. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_mmcr.py +0 -0
  266. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_rotnet.py +0 -0
  267. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_simclr.py +0 -0
  268. {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_vicreg.py +0 -0
  269. {birder-0.2.0 → birder-0.2.1}/birder/tools/__init__.py +0 -0
  270. {birder-0.2.0 → birder-0.2.1}/birder/tools/__main__.py +0 -0
  271. {birder-0.2.0 → birder-0.2.1}/birder/tools/adversarial.py +0 -0
  272. {birder-0.2.0 → birder-0.2.1}/birder/tools/avg_model.py +0 -0
  273. {birder-0.2.0 → birder-0.2.1}/birder/tools/convert_model.py +0 -0
  274. {birder-0.2.0 → birder-0.2.1}/birder/tools/det_results.py +0 -0
  275. {birder-0.2.0 → birder-0.2.1}/birder/tools/download_model.py +0 -0
  276. {birder-0.2.0 → birder-0.2.1}/birder/tools/ensemble_model.py +0 -0
  277. {birder-0.2.0 → birder-0.2.1}/birder/tools/introspection.py +0 -0
  278. {birder-0.2.0 → birder-0.2.1}/birder/tools/labelme_to_coco.py +0 -0
  279. {birder-0.2.0 → birder-0.2.1}/birder/tools/list_models.py +0 -0
  280. {birder-0.2.0 → birder-0.2.1}/birder/tools/model_info.py +0 -0
  281. {birder-0.2.0 → birder-0.2.1}/birder/tools/pack.py +0 -0
  282. {birder-0.2.0 → birder-0.2.1}/birder/tools/quantize_model.py +0 -0
  283. {birder-0.2.0 → birder-0.2.1}/birder/tools/results.py +0 -0
  284. {birder-0.2.0 → birder-0.2.1}/birder/tools/show_iterator.py +0 -0
  285. {birder-0.2.0 → birder-0.2.1}/birder/tools/similarity.py +0 -0
  286. {birder-0.2.0 → birder-0.2.1}/birder/tools/stats.py +0 -0
  287. {birder-0.2.0 → birder-0.2.1}/birder/tools/verify_coco.py +0 -0
  288. {birder-0.2.0 → birder-0.2.1}/birder/tools/verify_directory.py +0 -0
  289. {birder-0.2.0 → birder-0.2.1}/birder/tools/voc_to_coco.py +0 -0
  290. {birder-0.2.0 → birder-0.2.1}/birder.egg-info/SOURCES.txt +0 -0
  291. {birder-0.2.0 → birder-0.2.1}/birder.egg-info/dependency_links.txt +0 -0
  292. {birder-0.2.0 → birder-0.2.1}/birder.egg-info/entry_points.txt +0 -0
  293. {birder-0.2.0 → birder-0.2.1}/birder.egg-info/top_level.txt +0 -0
  294. {birder-0.2.0 → birder-0.2.1}/pyproject.toml +0 -0
  295. {birder-0.2.0 → birder-0.2.1}/requirements/requirements-hf.txt +0 -0
  296. {birder-0.2.0 → birder-0.2.1}/requirements/requirements.txt +0 -0
  297. {birder-0.2.0 → birder-0.2.1}/setup.cfg +0 -0
  298. {birder-0.2.0 → birder-0.2.1}/tests/test_common.py +0 -0
  299. {birder-0.2.0 → birder-0.2.1}/tests/test_datasets.py +0 -0
  300. {birder-0.2.0 → birder-0.2.1}/tests/test_inference.py +0 -0
  301. {birder-0.2.0 → birder-0.2.1}/tests/test_kernels.py +0 -0
  302. {birder-0.2.0 → birder-0.2.1}/tests/test_layers.py +0 -0
  303. {birder-0.2.0 → birder-0.2.1}/tests/test_model_registry.py +0 -0
  304. {birder-0.2.0 → birder-0.2.1}/tests/test_net.py +0 -0
  305. {birder-0.2.0 → birder-0.2.1}/tests/test_net_detection.py +0 -0
  306. {birder-0.2.0 → birder-0.2.1}/tests/test_net_mim.py +0 -0
  307. {birder-0.2.0 → birder-0.2.1}/tests/test_net_ssl.py +0 -0
  308. {birder-0.2.0 → birder-0.2.1}/tests/test_ops.py +0 -0
  309. {birder-0.2.0 → birder-0.2.1}/tests/test_optim.py +0 -0
  310. {birder-0.2.0 → birder-0.2.1}/tests/test_results.py +0 -0
  311. {birder-0.2.0 → birder-0.2.1}/tests/test_scheduler.py +0 -0
  312. {birder-0.2.0 → birder-0.2.1}/tests/test_transforms.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: birder
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: An open-source computer vision framework for wildlife image analysis, featuring state-of-the-art models for species classification and detection.
5
5
  Author: Ofer Hasson
6
6
  License-Expression: Apache-2.0
@@ -48,7 +48,7 @@ Requires-Dist: black~=25.12.0; extra == "dev"
48
48
  Requires-Dist: build~=1.3.0; extra == "dev"
49
49
  Requires-Dist: bumpver~=2025.1131; extra == "dev"
50
50
  Requires-Dist: captum~=0.7.0; extra == "dev"
51
- Requires-Dist: coverage~=7.13.0; extra == "dev"
51
+ Requires-Dist: coverage~=7.13.1; extra == "dev"
52
52
  Requires-Dist: debugpy; extra == "dev"
53
53
  Requires-Dist: flake8-pep585~=0.1.7; extra == "dev"
54
54
  Requires-Dist: flake8~=7.3.0; extra == "dev"
@@ -3,7 +3,9 @@ import random
3
3
  from typing import Any
4
4
 
5
5
  import torch
6
+ from torchvision import tv_tensors
6
7
  from torchvision.transforms import v2
8
+ from torchvision.transforms.v2 import functional as F
7
9
 
8
10
  BATCH_MULTISCALE_SIZES = (480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800)
9
11
 
@@ -84,6 +86,16 @@ class BatchRandomResizeCollator(DetectionCollator):
84
86
  resized_images = []
85
87
  resized_targets = []
86
88
  for image, target in zip(images, targets):
89
+ if "boxes" in target:
90
+ boxes = target["boxes"]
91
+ if isinstance(boxes, tv_tensors.BoundingBoxes) is False:
92
+ if boxes.numel() == 0:
93
+ boxes = boxes.reshape(0, 4)
94
+ boxes = tv_tensors.BoundingBoxes(
95
+ boxes, format=tv_tensors.BoundingBoxFormat.XYXY, canvas_size=F.get_size(image)
96
+ )
97
+ target = {**target, "boxes": boxes}
98
+
87
99
  (image, target) = resize(image, target)
88
100
  resized_images.append(image)
89
101
  resized_targets.append(target)
@@ -129,7 +129,7 @@ def get_birder_augment(
129
129
  return v2.Compose(transformations) # type: ignore
130
130
 
131
131
 
132
- AugType = Literal["birder", "lsj", "multiscale", "ssd", "ssdlite", "detr"]
132
+ AugType = Literal["birder", "lsj", "multiscale", "ssd", "ssdlite", "yolo", "detr"]
133
133
 
134
134
 
135
135
  def training_preset(
@@ -235,6 +235,34 @@ def training_preset(
235
235
  ]
236
236
  )
237
237
 
238
+ if aug_type == "yolo":
239
+ return v2.Compose( # type: ignore
240
+ [
241
+ v2.ToImage(),
242
+ v2.RandomPhotometricDistort(),
243
+ (
244
+ v2.RandomAffine(
245
+ degrees=10.0,
246
+ translate=(0.1, 0.1),
247
+ scale=(0.5, 1.5),
248
+ shear=2.0,
249
+ interpolation=v2.InterpolationMode.BILINEAR,
250
+ fill=fill_value,
251
+ )
252
+ if post_mosaic is False
253
+ else v2.Identity()
254
+ ),
255
+ ResizeWithRandomInterpolation(
256
+ target_size, max_size, interpolation=[v2.InterpolationMode.BILINEAR, v2.InterpolationMode.BICUBIC]
257
+ ),
258
+ v2.RandomHorizontalFlip(0.5),
259
+ v2.SanitizeBoundingBoxes(),
260
+ v2.ToDtype(torch.float32, scale=True),
261
+ v2.Normalize(mean=mean, std=std),
262
+ v2.ToPureTensor(),
263
+ ]
264
+ )
265
+
238
266
  if aug_type == "detr":
239
267
  return v2.Compose( # type: ignore
240
268
  [
@@ -25,12 +25,26 @@ from birder.net.detection.base import ImageList
25
25
  # These values are in absolute pixels (width, height) computed using K-Means
26
26
  # on the COCO dataset with a reference input size of 416x416.
27
27
  DEFAULT_ANCHORS = [
28
- [(10, 13), (16, 30), (33, 23)], # Small objects (stride 8)
29
- [(30, 61), (62, 45), (59, 119)], # Medium objects (stride 16)
30
- [(116, 90), (156, 198), (373, 326)], # Large objects (stride 32)
28
+ [(10.0, 13.0), (16.0, 30.0), (33.0, 23.0)], # Small objects (stride 8)
29
+ [(30.0, 61.0), (62.0, 45.0), (59.0, 119.0)], # Medium objects (stride 16)
30
+ [(116.0, 90.0), (156.0, 198.0), (373.0, 326.0)], # Large objects (stride 32)
31
31
  ]
32
32
 
33
33
 
34
+ def scale_anchors(
35
+ anchors: list[list[tuple[float, float]]],
36
+ from_size: tuple[int, int],
37
+ to_size: tuple[int, int],
38
+ ) -> list[list[tuple[float, float]]]:
39
+ if from_size == to_size:
40
+ # Avoid aliasing default anchors in case they are mutated later.
41
+ return [list(scale) for scale in anchors]
42
+
43
+ scale_h = to_size[0] / from_size[0]
44
+ scale_w = to_size[1] / from_size[1]
45
+ return [[(w * scale_w, h * scale_h) for (w, h) in scale] for scale in anchors]
46
+
47
+
34
48
  def decode_predictions(
35
49
  predictions: torch.Tensor,
36
50
  anchors: torch.Tensor,
@@ -100,7 +114,7 @@ def decode_predictions(
100
114
 
101
115
 
102
116
  class YOLOAnchorGenerator(nn.Module):
103
- def __init__(self, anchors: list[list[tuple[int, int]]]) -> None:
117
+ def __init__(self, anchors: list[list[tuple[float, float]]]) -> None:
104
118
  super().__init__()
105
119
  self.anchors = anchors
106
120
  self.num_scales = len(anchors)
@@ -332,7 +346,7 @@ class YOLO_v3(DetectionBaseNet):
332
346
  self.obj_coeff = 1.0
333
347
  self.cls_coeff = 1.0
334
348
 
335
- self.anchors = DEFAULT_ANCHORS
349
+ self.anchors = scale_anchors(DEFAULT_ANCHORS, self.default_size, self.size)
336
350
  self.score_thresh = score_thresh
337
351
  self.nms_thresh = nms_thresh
338
352
  self.detections_per_img = detections_per_img
@@ -354,6 +368,15 @@ class YOLO_v3(DetectionBaseNet):
354
368
  num_anchors = self.anchor_generator.num_anchors_per_location()
355
369
  self.head = YOLOHead(self.neck.out_channels, num_anchors, self.num_classes)
356
370
 
371
+ def adjust_size(self, new_size: tuple[int, int]) -> None:
372
+ if new_size == self.size:
373
+ return
374
+
375
+ old_size = self.size
376
+ super().adjust_size(new_size)
377
+ self.anchors = scale_anchors(self.anchors, old_size, new_size)
378
+ self.anchor_generator.anchors = self.anchors
379
+
357
380
  def freeze(self, freeze_classifier: bool = True) -> None:
358
381
  for param in self.parameters():
359
382
  param.requires_grad = False
@@ -682,6 +705,13 @@ class YOLO_v3(DetectionBaseNet):
682
705
  neck_features = self.neck(features)
683
706
  predictions = self.head(neck_features)
684
707
  (anchors, grids, strides) = self.anchor_generator(images, neck_features)
708
+ if self.dynamic_size is True:
709
+ image_size = (images.tensors.shape[-2], images.tensors.shape[-1])
710
+ if image_size[0] != self.size[0] or image_size[1] != self.size[1]:
711
+ scale_w = image_size[1] / self.size[1]
712
+ scale_h = image_size[0] / self.size[0]
713
+ scale_tensor = torch.tensor([scale_w, scale_h], device=anchors[0].device, dtype=anchors[0].dtype)
714
+ anchors = [anchor * scale_tensor for anchor in anchors]
685
715
 
686
716
  losses: dict[str, torch.Tensor] = {}
687
717
  detections: list[dict[str, torch.Tensor]] = []
@@ -21,12 +21,13 @@ from birder.net.base import DetectorBackbone
21
21
  from birder.net.detection.base import DetectionBaseNet
22
22
  from birder.net.detection.yolo_v3 import YOLOAnchorGenerator
23
23
  from birder.net.detection.yolo_v3 import YOLOHead
24
+ from birder.net.detection.yolo_v3 import scale_anchors
24
25
 
25
26
  # Default anchors from YOLO v4 (COCO)
26
27
  DEFAULT_ANCHORS = [
27
- [(12, 16), (19, 36), (40, 28)], # Small
28
- [(36, 75), (76, 55), (72, 146)], # Medium
29
- [(142, 110), (192, 243), (459, 401)], # Large
28
+ [(12.0, 16.0), (19.0, 36.0), (40.0, 28.0)], # Small
29
+ [(36.0, 75.0), (76.0, 55.0), (72.0, 146.0)], # Medium
30
+ [(142.0, 110.0), (192.0, 243.0), (459.0, 401.0)], # Large
30
31
  ]
31
32
 
32
33
  # Scale factors per detection scale to eliminate grid sensitivity
@@ -410,7 +411,7 @@ class YOLO_v4(DetectionBaseNet):
410
411
  self.obj_coeff = 1.0
411
412
  self.cls_coeff = 1.0
412
413
 
413
- self.anchors = DEFAULT_ANCHORS
414
+ self.anchors = scale_anchors(DEFAULT_ANCHORS, self.default_size, self.size)
414
415
  self.scale_xy = DEFAULT_SCALE_XY
415
416
  self.score_thresh = score_thresh
416
417
  self.nms_thresh = nms_thresh
@@ -438,6 +439,15 @@ class YOLO_v4(DetectionBaseNet):
438
439
  num_anchors = self.anchor_generator.num_anchors_per_location()
439
440
  self.head = YOLOHead(self.neck.out_channels, num_anchors, self.num_classes)
440
441
 
442
+ def adjust_size(self, new_size: tuple[int, int]) -> None:
443
+ if new_size == self.size:
444
+ return
445
+
446
+ old_size = self.size
447
+ super().adjust_size(new_size)
448
+ self.anchors = scale_anchors(self.anchors, old_size, new_size)
449
+ self.anchor_generator = YOLOAnchorGenerator(self.anchors)
450
+
441
451
  def freeze(self, freeze_classifier: bool = True) -> None:
442
452
  for param in self.parameters():
443
453
  param.requires_grad = False
@@ -799,6 +809,13 @@ class YOLO_v4(DetectionBaseNet):
799
809
  neck_features = self.neck(features)
800
810
  predictions = self.head(neck_features)
801
811
  (anchors, grids, strides) = self.anchor_generator(images, neck_features)
812
+ if self.dynamic_size is True:
813
+ image_size = (images.tensors.shape[-2], images.tensors.shape[-1])
814
+ if image_size[0] != self.size[0] or image_size[1] != self.size[1]:
815
+ scale_w = image_size[1] / self.size[1]
816
+ scale_h = image_size[0] / self.size[0]
817
+ scale_tensor = torch.tensor([scale_w, scale_h], device=anchors[0].device, dtype=anchors[0].dtype)
818
+ anchors = [anchor * scale_tensor for anchor in anchors]
802
819
 
803
820
  losses: dict[str, torch.Tensor] = {}
804
821
  detections: list[dict[str, torch.Tensor]] = []
@@ -18,12 +18,13 @@ from torchvision.ops import Conv2dNormActivation
18
18
  from birder.net.base import DetectorBackbone
19
19
  from birder.net.detection.yolo_v3 import YOLOAnchorGenerator
20
20
  from birder.net.detection.yolo_v3 import YOLOHead
21
+ from birder.net.detection.yolo_v3 import scale_anchors
21
22
  from birder.net.detection.yolo_v4 import YOLO_v4
22
23
 
23
24
  # Default anchors from YOLO v4 Tiny (COCO)
24
25
  DEFAULT_ANCHORS = [
25
- [(10, 14), (23, 27), (37, 58)], # Medium
26
- [(81, 82), (135, 169), (344, 319)], # Large
26
+ [(10.0, 14.0), (23.0, 27.0), (37.0, 58.0)], # Medium
27
+ [(81.0, 82.0), (135.0, 169.0), (344.0, 319.0)], # Large
27
28
  ]
28
29
 
29
30
  # Scale factors per detection scale to eliminate grid sensitivity
@@ -118,7 +119,7 @@ class YOLO_v4_Tiny(YOLO_v4):
118
119
  self.obj_coeff = 1.0
119
120
  self.cls_coeff = 1.0
120
121
 
121
- self.anchors = DEFAULT_ANCHORS
122
+ self.anchors = scale_anchors(DEFAULT_ANCHORS, self.default_size, self.size)
122
123
  self.scale_xy = DEFAULT_SCALE_XY
123
124
  self.score_thresh = score_thresh
124
125
  self.nms_thresh = nms_thresh
@@ -629,8 +629,15 @@ def validate_args(args: argparse.Namespace) -> None:
629
629
 
630
630
  if args.wds is False and len(args.data_path) == 0:
631
631
  raise cli.ValidationError("Must provide at least one data source, --data-path or --wds")
632
- if args.wds is True and len(args.data_path) > 1:
633
- raise cli.ValidationError(f"--wds can have at most 1 --data-path, got {len(args.data_path)}")
632
+ if args.wds is True:
633
+ if args.wds_info is None and len(args.data_path) == 0:
634
+ raise cli.ValidationError("--wds requires a data path unless --wds-info is provided")
635
+ if len(args.data_path) > 1:
636
+ raise cli.ValidationError(f"--wds can have at most 1 --data-path, got {len(args.data_path)}")
637
+ if args.wds_info is None and len(args.data_path) == 1:
638
+ data_path = args.data_path[0]
639
+ if "://" in data_path and args.wds_size is None:
640
+ raise cli.ValidationError("--wds-size is required for remote --data-path")
634
641
  if args.wds is True and args.hierarchical is True:
635
642
  raise cli.ValidationError("--wds cannot be used with --hierarchical")
636
643
  if args.wds is True and args.ignore_dir_names is True:
@@ -936,7 +936,7 @@ def validate_args(args: argparse.Namespace) -> None:
936
936
  if args.aug_type in {"multiscale", "detr"}:
937
937
  raise cli.ValidationError(
938
938
  f"--batch-multiscale not supported with --aug-type {args.aug_type}, "
939
- "use a fixed-size aug type (e.g. birder, ssd, ssdlite)"
939
+ "use a fixed-size aug type (e.g. birder, ssd, ssdlite, yolo)"
940
940
  )
941
941
  if args.mosaic_stop_epoch is not None:
942
942
  if args.mosaic_stop_epoch <= 0:
@@ -314,7 +314,7 @@ def main(args: argparse.Namespace) -> None:
314
314
  if args.aug_type in {"multiscale", "detr"}:
315
315
  raise cli.ValidationError(
316
316
  f"--batch-multiscale not supported with --aug-type {args.aug_type}, "
317
- "use a fixed-size aug type (e.g. birder, ssd, ssdlite)"
317
+ "use a fixed-size aug type (e.g. birder, ssd, ssdlite, yolo)"
318
318
  )
319
319
 
320
320
  show_det_iterator(args)
@@ -0,0 +1 @@
1
+ __version__ = "v0.2.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: birder
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: An open-source computer vision framework for wildlife image analysis, featuring state-of-the-art models for species classification and detection.
5
5
  Author: Ofer Hasson
6
6
  License-Expression: Apache-2.0
@@ -48,7 +48,7 @@ Requires-Dist: black~=25.12.0; extra == "dev"
48
48
  Requires-Dist: build~=1.3.0; extra == "dev"
49
49
  Requires-Dist: bumpver~=2025.1131; extra == "dev"
50
50
  Requires-Dist: captum~=0.7.0; extra == "dev"
51
- Requires-Dist: coverage~=7.13.0; extra == "dev"
51
+ Requires-Dist: coverage~=7.13.1; extra == "dev"
52
52
  Requires-Dist: debugpy; extra == "dev"
53
53
  Requires-Dist: flake8-pep585~=0.1.7; extra == "dev"
54
54
  Requires-Dist: flake8~=7.3.0; extra == "dev"
@@ -24,7 +24,7 @@ black~=25.12.0
24
24
  build~=1.3.0
25
25
  bumpver~=2025.1131
26
26
  captum~=0.7.0
27
- coverage~=7.13.0
27
+ coverage~=7.13.1
28
28
  debugpy
29
29
  flake8-pep585~=0.1.7
30
30
  flake8~=7.3.0
@@ -4,7 +4,7 @@ black~=25.12.0
4
4
  build~=1.3.0
5
5
  bumpver~=2025.1131
6
6
  captum~=0.7.0
7
- coverage~=7.13.0
7
+ coverage~=7.13.1
8
8
  debugpy
9
9
  flake8-pep585~=0.1.7
10
10
  flake8~=7.3.0
@@ -29,3 +29,22 @@ class TestTransforms(unittest.TestCase):
29
29
 
30
30
  self.assertEqual(size_list[0], (10, 10))
31
31
  self.assertEqual(size_list[1], (12, 12))
32
+
33
+ def test_batch_random_resize_collator_scales_boxes(self) -> None:
34
+ collator = detection.BatchRandomResizeCollator(0, (32, 32))
35
+ collator.sizes = [20]
36
+
37
+ image = torch.zeros((3, 10, 20))
38
+ boxes = torch.tensor([[2.0, 1.0, 10.0, 5.0]], dtype=torch.float32)
39
+ labels = torch.tensor([1], dtype=torch.int64)
40
+ batch = [(image, {"boxes": boxes, "labels": labels})]
41
+
42
+ (images, targets, masks, size_list) = collator(batch)
43
+
44
+ # Collator pads to size_divisible=32
45
+ self.assertSequenceEqual(images.size(), (1, 3, 32, 32))
46
+ self.assertEqual(size_list[0], (20, 20))
47
+ self.assertTrue(torch.all(masks[:, :20, :20] == False)) # pylint: disable=singleton-comparison # noqa: E712
48
+
49
+ expected = torch.tensor([[2.0, 2.0, 10.0, 10.0]], dtype=torch.float32)
50
+ self.assertTrue(torch.allclose(targets[0]["boxes"], expected))
@@ -1 +0,0 @@
1
- __version__ = "v0.2.0"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes