From 6bb64670c08cc125054d7f59789508a2d0d0f779 Mon Sep 17 00:00:00 2001 From: wangwl Date: Tue, 9 Dec 2025 03:15:53 +0000 Subject: [PATCH 1/3] add VOLO --- .../build-in/Classification/VOLO/coverage.txt | 3 + PyTorch/build-in/Classification/VOLO/loss.jpg | Bin 0 -> 36793 bytes PyTorch/build-in/Classification/VOLO/loss.txt | 4 + PyTorch/build-in/Classification/VOLO/volo.py | 783 ++++++++++++++++++ .../Classification/VOLO/weloTrainStep.py | 647 +++++++++++++++ 5 files changed, 1437 insertions(+) create mode 100644 PyTorch/build-in/Classification/VOLO/coverage.txt create mode 100644 PyTorch/build-in/Classification/VOLO/loss.jpg create mode 100644 PyTorch/build-in/Classification/VOLO/loss.txt create mode 100644 PyTorch/build-in/Classification/VOLO/volo.py create mode 100644 PyTorch/build-in/Classification/VOLO/weloTrainStep.py diff --git a/PyTorch/build-in/Classification/VOLO/coverage.txt b/PyTorch/build-in/Classification/VOLO/coverage.txt new file mode 100644 index 000000000..c2616bee6 --- /dev/null +++ b/PyTorch/build-in/Classification/VOLO/coverage.txt @@ -0,0 +1,3 @@ +all api: ['_amp_foreach_non_finite_check_and_unscale_', '_amp_update_scale_', '_copy_from', '_has_compatible_shallow_copy_type', '_local_scalar_dense', '_log_softmax', '_log_softmax_backward_data', '_pin_memory', '_reshape_alias', '_softmax', '_softmax_backward_data', 'add', 'add_', 'addmm', 'as_strided', 'avg_pool2d', 'avg_pool2d_backward', 'bmm', 'bmm_backward', 'bmm_forward', 'cat', 'contiguous', 'convolution', 'convolution_backward', 'copy_stride', 'div', 'dropout', 'eq', 'fill_', 'fused_sgd', 'gelu', 'gelu_backward', 'is_pinned', 'linear', 'matmul', 'mm', 'mul', 'mul_', 'native_batch_norm', 'native_batch_norm_backward', 'native_layer_norm', 'native_layer_norm_backward', 'nll_loss_backward', 'nll_loss_forward', 'reciprocal', 'relu_', 'slice_backward', 'sum', 'threshold_backward', 'topk_out', 'view', 'zero_'], total: 52 +fallback op: ['avg_pool2d', 'avg_pool2d_backward', 'col2im', 'im2col'], total: 4 +coverage rate: 92.31% diff --git a/PyTorch/build-in/Classification/VOLO/loss.jpg b/PyTorch/build-in/Classification/VOLO/loss.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95029b9c1cc6fb2cbf405556c208fe03ada62f75 GIT binary patch literal 36793 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