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.
- {birder-0.2.0 → birder-0.2.1}/PKG-INFO +2 -2
- {birder-0.2.0 → birder-0.2.1}/birder/data/collators/detection.py +12 -0
- {birder-0.2.0 → birder-0.2.1}/birder/data/transforms/detection.py +29 -1
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/yolo_v3.py +35 -5
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/yolo_v4.py +21 -4
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/yolo_v4_tiny.py +4 -3
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/predict.py +9 -2
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_detection.py +1 -1
- {birder-0.2.0 → birder-0.2.1}/birder/tools/show_det_iterator.py +1 -1
- birder-0.2.1/birder/version.py +1 -0
- {birder-0.2.0 → birder-0.2.1}/birder.egg-info/PKG-INFO +2 -2
- {birder-0.2.0 → birder-0.2.1}/birder.egg-info/requires.txt +1 -1
- {birder-0.2.0 → birder-0.2.1}/requirements/_requirements-dev.txt +1 -1
- {birder-0.2.0 → birder-0.2.1}/tests/test_collators.py +19 -0
- birder-0.2.0/birder/version.py +0 -1
- {birder-0.2.0 → birder-0.2.1}/LICENSE +0 -0
- {birder-0.2.0 → birder-0.2.1}/README.md +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/adversarial/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/adversarial/fgsm.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/adversarial/pgd.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/common/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/common/cli.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/common/fs_ops.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/common/lib.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/common/masking.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/common/training_cli.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/common/training_utils.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/conf/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/conf/settings.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/data/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/data/collators/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/data/dataloader/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/data/dataloader/webdataset.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/data/datasets/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/data/datasets/coco.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/data/datasets/directory.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/data/datasets/fake.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/data/datasets/webdataset.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/data/transforms/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/data/transforms/classification.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/data/transforms/mosaic.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/datahub/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/datahub/_lib.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/datahub/classification.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/inference/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/inference/classification.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/inference/data_parallel.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/inference/detection.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/introspection/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/introspection/attention_rollout.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/introspection/base.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/introspection/gradcam.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/introspection/guided_backprop.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/cpu/ms_deform_attn_cpu.cpp +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/cpu/ms_deform_attn_cpu.h +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/cuda/ms_deform_attn_cuda.cu +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/cuda/ms_deform_attn_cuda.h +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/cuda/ms_deform_im2col_cuda.cuh +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/ms_deform_attn.h +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/deformable_detr/vision.cpp +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/load_kernel.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/soft_nms/op.cpp +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/soft_nms/soft_nms.cpp +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/soft_nms/soft_nms.h +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/av_bw_kernel.cu +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/av_fw_kernel.cu +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/qk_bw_kernel.cu +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/qk_fw_kernel.cu +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/qk_rpb_bw_kernel.cu +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/qk_rpb_fw_kernel.cu +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/kernels/transnext/swattention.cpp +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/layers/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/layers/activations.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/layers/attention_pool.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/layers/ffn.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/layers/gem.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/layers/layer_norm.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/layers/layer_scale.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/model_registry/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/model_registry/manifest.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/model_registry/model_registry.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/alexnet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/base.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/biformer.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/cait.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/cas_vit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/coat.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/conv2former.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/convmixer.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/convnext_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/convnext_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/crossformer.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/crossvit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/cspnet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/cswin_transformer.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/darknet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/davit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/deit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/deit3.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/densenet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/base.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/deformable_detr.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/detr.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/efficientdet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/faster_rcnn.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/fcos.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/retinanet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/rt_detr_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/ssd.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/ssdlite.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/vitdet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/detection/yolo_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/dpn.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/edgenext.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/edgevit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/efficientformer_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/efficientformer_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/efficientnet_lite.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/efficientnet_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/efficientnet_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/efficientvim.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/efficientvit_mit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/efficientvit_msft.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/fasternet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/fastvit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/flexivit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/focalnet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ghostnet_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ghostnet_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/groupmixformer.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/hgnet_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/hgnet_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/hiera.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/hieradet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/hornet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/iformer.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/inception_next.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/inception_resnet_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/inception_resnet_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/inception_v3.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/inception_v4.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/levit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/maxvit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/metaformer.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mim/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mim/base.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mim/crossmae.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mim/fcmae.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mim/mae_hiera.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mim/mae_vit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mim/simmim.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mnasnet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mobilenet_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mobilenet_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mobilenet_v3_large.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mobilenet_v3_small.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mobilenet_v4.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mobilenet_v4_hybrid.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mobileone.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mobilevit_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mobilevit_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/moganet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/mvit_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/nextvit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/nfnet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/pit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/pvt_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/pvt_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/rdnet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/regionvit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/regnet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/regnet_z.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/repghost.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/repvgg.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/repvit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/resmlp.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/resnest.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/resnet_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/resnet_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/resnext.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/rope_deit3.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/rope_flexivit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/rope_vit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/se_resnet_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/se_resnet_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/se_resnext.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/sequencer2d.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/shufflenet_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/shufflenet_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/simple_vit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/smt.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/squeezenet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/squeezenext.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/barlow_twins.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/base.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/byol.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/capi.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/data2vec.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/data2vec2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/dino_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/dino_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/franca.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/i_jepa.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/ibot.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/mmcr.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/simclr.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/sscd.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/ssl/vicreg.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/starnet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/swiftformer.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/swin_transformer_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/swin_transformer_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/tiny_vit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/transnext.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/uniformer.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/van.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/vgg.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/vgg_reduced.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/vit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/vit_parallel.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/vit_sam.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/vovnet_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/vovnet_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/wide_resnet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/xception.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/net/xcit.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/ops/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/ops/msda.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/ops/soft_nms.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/ops/swattention.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/optim/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/optim/lamb.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/optim/lars.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/py.typed +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/results/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/results/classification.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/results/detection.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/results/gui.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scheduler/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scheduler/cooldown.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/__main__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/benchmark.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/evaluate.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/predict_detection.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_barlow_twins.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_byol.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_capi.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_data2vec.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_data2vec2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_dino_v1.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_dino_v2.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_dino_v2_dist.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_franca.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_i_jepa.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_ibot.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_kd.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_mim.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_mmcr.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_rotnet.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_simclr.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/scripts/train_vicreg.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/__init__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/__main__.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/adversarial.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/avg_model.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/convert_model.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/det_results.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/download_model.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/ensemble_model.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/introspection.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/labelme_to_coco.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/list_models.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/model_info.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/pack.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/quantize_model.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/results.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/show_iterator.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/similarity.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/stats.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/verify_coco.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/verify_directory.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder/tools/voc_to_coco.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder.egg-info/SOURCES.txt +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder.egg-info/dependency_links.txt +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder.egg-info/entry_points.txt +0 -0
- {birder-0.2.0 → birder-0.2.1}/birder.egg-info/top_level.txt +0 -0
- {birder-0.2.0 → birder-0.2.1}/pyproject.toml +0 -0
- {birder-0.2.0 → birder-0.2.1}/requirements/requirements-hf.txt +0 -0
- {birder-0.2.0 → birder-0.2.1}/requirements/requirements.txt +0 -0
- {birder-0.2.0 → birder-0.2.1}/setup.cfg +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_common.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_datasets.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_inference.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_kernels.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_layers.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_model_registry.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_net.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_net_detection.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_net_mim.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_net_ssl.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_ops.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_optim.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_results.py +0 -0
- {birder-0.2.0 → birder-0.2.1}/tests/test_scheduler.py +0 -0
- {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.
|
|
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.
|
|
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[
|
|
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
|
|
633
|
-
|
|
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.
|
|
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.
|
|
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"
|
|
@@ -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))
|
birder-0.2.0/birder/version.py
DELETED
|
@@ -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
|
|
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
|
|
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
|