Add fork README (mirror, contact, install) and ignore built DCNv4 .so.

Document the Gitea mirror for CVGL; extend .gitignore for extension artifacts.
Keep CUDA im2col/col2im and setup version tweaks in DCNv4_op.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
pikaliov
2026-05-12 12:41:36 +03:00
parent 4b848f7dd7
commit b0786ca876
5 changed files with 116 additions and 7 deletions

4
.gitignore vendored
View File

@@ -23,4 +23,6 @@ detection/ckpts
segmentation/data
segmentation/ckpts
work_dirs/
output
output
*.so
DCNv4_op/DCNv4/*.so

View File

@@ -62,7 +62,7 @@ def get_extensions():
setup(
name="DCNv4",
version="1.0.0.post2",
version="1.0.0.post3+cvgl_k57",
author="Yuwen Xiong, Feng Wang",
url="",
description="PyTorch Wrapper for CUDA Functions of DCNv4",

View File

@@ -410,8 +410,40 @@ void _dcnv4_col2im_cuda(
kernel = backward_kernel_dcn<scalar_t, d_stride, stride_type, 1, 8, true>;
}
break;
case 25:
if(check_backward_warpp(d_stride, D)){
kernel = backward_kernel_dcn_warp_primitive<scalar_t, d_stride, stride_type, 1, 25, true>;
}
else {
kernel = backward_kernel_dcn<scalar_t, d_stride, stride_type, 1, 25, true>;
}
break;
case 24:
if(check_backward_warpp(d_stride, D)){
kernel = backward_kernel_dcn_warp_primitive<scalar_t, d_stride, stride_type, 1, 24, true>;
}
else {
kernel = backward_kernel_dcn<scalar_t, d_stride, stride_type, 1, 24, true>;
}
break;
case 49:
if(check_backward_warpp(d_stride, D)){
kernel = backward_kernel_dcn_warp_primitive<scalar_t, d_stride, stride_type, 1, 49, true>;
}
else {
kernel = backward_kernel_dcn<scalar_t, d_stride, stride_type, 1, 49, true>;
}
break;
case 48:
if(check_backward_warpp(d_stride, D)){
kernel = backward_kernel_dcn_warp_primitive<scalar_t, d_stride, stride_type, 1, 48, true>;
}
else {
kernel = backward_kernel_dcn<scalar_t, d_stride, stride_type, 1, 48, true>;
}
break;
default:
printf("K=%ld\n", K);
printf("K=%d\n", K);
throw std::invalid_argument("invalid kernel shape");
}
} else {
@@ -432,8 +464,40 @@ void _dcnv4_col2im_cuda(
kernel = backward_kernel_dcn<scalar_t, d_stride, stride_type, 1, 8, false>;
}
break;
case 25:
if(check_backward_warpp(d_stride, D)){
kernel = backward_kernel_dcn_warp_primitive<scalar_t, d_stride, stride_type, 1, 25, false>;
}
else {
kernel = backward_kernel_dcn<scalar_t, d_stride, stride_type, 1, 25, false>;
}
break;
case 24:
if(check_backward_warpp(d_stride, D)){
kernel = backward_kernel_dcn_warp_primitive<scalar_t, d_stride, stride_type, 1, 24, false>;
}
else {
kernel = backward_kernel_dcn<scalar_t, d_stride, stride_type, 1, 24, false>;
}
break;
case 49:
if(check_backward_warpp(d_stride, D)){
kernel = backward_kernel_dcn_warp_primitive<scalar_t, d_stride, stride_type, 1, 49, false>;
}
else {
kernel = backward_kernel_dcn<scalar_t, d_stride, stride_type, 1, 49, false>;
}
break;
case 48:
if(check_backward_warpp(d_stride, D)){
kernel = backward_kernel_dcn_warp_primitive<scalar_t, d_stride, stride_type, 1, 48, false>;
}
else {
kernel = backward_kernel_dcn<scalar_t, d_stride, stride_type, 1, 48, false>;
}
break;
default:
printf("K=%ld\n", K);
printf("K=%d\n", K);
throw std::invalid_argument("invalid kernel shape");
}
}

View File

@@ -279,8 +279,20 @@ void _dcnv4_im2col_cuda(cudaStream_t stream,
case 8:
kernel = forward_kernel_dcn_reg<scalar_t, d_stride, stride_type, 1, 8, true>;
break;
case 25:
kernel = forward_kernel_dcn_reg<scalar_t, d_stride, stride_type, 1, 25, true>;
break;
case 24:
kernel = forward_kernel_dcn_reg<scalar_t, d_stride, stride_type, 1, 24, true>;
break;
case 49:
kernel = forward_kernel_dcn_reg<scalar_t, d_stride, stride_type, 1, 49, true>;
break;
case 48:
kernel = forward_kernel_dcn_reg<scalar_t, d_stride, stride_type, 1, 48, true>;
break;
default:
printf("K=%ld\n", K);
printf("K=%d\n", K);
throw std::invalid_argument("invalid kernel shape");
}
} else {
@@ -290,9 +302,21 @@ void _dcnv4_im2col_cuda(cudaStream_t stream,
break;
case 8:
kernel = forward_kernel_dcn_reg<scalar_t, d_stride, stride_type, 1, 8, false>;
break;
break;
case 25:
kernel = forward_kernel_dcn_reg<scalar_t, d_stride, stride_type, 1, 25, false>;
break;
case 24:
kernel = forward_kernel_dcn_reg<scalar_t, d_stride, stride_type, 1, 24, false>;
break;
case 49:
kernel = forward_kernel_dcn_reg<scalar_t, d_stride, stride_type, 1, 49, false>;
break;
case 48:
kernel = forward_kernel_dcn_reg<scalar_t, d_stride, stride_type, 1, 48, false>;
break;
default:
printf("K=%ld\n", K);
printf("K=%d\n", K);
throw std::invalid_argument("invalid kernel shape");
}
}

View File

@@ -1,4 +1,23 @@
## Зеркало и сборка (Pikaliov / CVGL)
**Автор зеркала:** Пикалиов (Pikaliov) · `i@pikaliov.ru`
**Репозиторий (Gitea):** https://git.lissad.keenetic.name/Pikaliov/DCN_custom_op
**Апстрим OpenGVLab:** https://github.com/OpenGVLab/DCNv4
Каталог **`DCNv4_op`** — PyTorch CUDA-расширение (модуль `DCNv4`). Сборка из исходников:
```bash
cd DCNv4_op
pip install -e .
```
Нужны **CUDA** и согласованные **PyTorch / nvcc**`setup.py` при отсутствии CUDA сборка не выполняется). Пример импорта: `from DCNv4 import DCNv4`.
Лицензия исходного кода — **Apache-2.0**, см. файл `LICENSE`.
Ниже — оригинальный README проекта OpenGVLab (модели, таблицы, ссылки на веса).
---
# [DCNv4](https://arxiv.org/pdf/2401.06197.pdf)