diff --git a/.github/scripts/test_onnx2ncnn.py b/.github/scripts/test_onnx2ncnn.py index 89fec4465c..80b82efb69 100644 --- a/.github/scripts/test_onnx2ncnn.py +++ b/.github/scripts/test_onnx2ncnn.py @@ -19,13 +19,13 @@ 'mmpretrain/configs/resnet/resnet18_8xb32_in1k.py', 'https://download.openmmlab.com/mmclassification/v0/resnet/resnet18_8xb32_in1k_20210831-fbbb1da6.pth', # noqa: E501 'resnet18.onnx', - 'https://media.githubusercontent.com/media/tpoisonooo/mmdeploy-onnx2ncnn-testdata/main/resnet18.onnx', # noqa: E501 + 'https://github.com/open-mmlab/mmdeploy/releases/download/v0.1.0/resnet18.onnx', # noqa: E501 ), ( 'mmpretrain/configs/mobilenet_v2/mobilenet-v2_8xb32_in1k.py', 'https://download.openmmlab.com/mmclassification/v0/mobilenet_v2/mobilenet_v2_batch256_imagenet_20200708-3b2dc3af.pth', # noqa: E501 'mobilenet-v2.onnx', - 'https://media.githubusercontent.com/media/tpoisonooo/mmdeploy-onnx2ncnn-testdata/main/mobilenet-v2.onnx', # noqa: E501 + 'https://github.com/open-mmlab/mmdeploy/releases/download/v0.1.0/mobilenet-v2.onnx', # noqa: E501 ) ] diff --git a/.github/workflows/backend-ncnn.yml b/.github/workflows/backend-ncnn.yml index 4a068ea720..3459d77e2d 100644 --- a/.github/workflows/backend-ncnn.yml +++ b/.github/workflows/backend-ncnn.yml @@ -123,7 +123,7 @@ jobs: export input_img=tests/data/tiger.jpeg python3 -m mim download mmpretrain --config resnet18_8xb32_in1k --dest $work_dir python3 tools/torch2onnx.py $deploy_cfg $model_cfg $checkpoint $input_img --work-dir $work_dir - wget https://media.githubusercontent.com/media/tpoisonooo/mmdeploy-onnx2ncnn-testdata/main/dataset.tar + wget https://github.com/open-mmlab/mmdeploy/releases/download/v0.1.0/dataset.tar tar xvf dataset.tar python3 tools/onnx2ncnn_quant_table.py \ --onnx $work_dir/end2end.onnx \ diff --git a/.github/workflows/backend-snpe.yml b/.github/workflows/backend-snpe.yml index 1fec2afffd..ee565faf11 100644 --- a/.github/workflows/backend-snpe.yml +++ b/.github/workflows/backend-snpe.yml @@ -34,7 +34,7 @@ jobs: sudo apt install libopencv-dev - name: Install snpe run: | - wget https://media.githubusercontent.com/media/tpoisonooo/mmdeploy_snpe_testdata/main/snpe-1.59.tar.gz + wget https://github.com/open-mmlab/mmdeploy/releases/download/v0.1.0/snpe-1.59.tar.gz tar xf snpe-1.59.tar.gz pushd snpe-1.59.0.3230 pwd diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7217e68c93..e545d12cd2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -46,7 +46,7 @@ jobs: python -m pip install -r requirements/backends.txt python -m mim install "mmcv>=2.0.0" python -m mim install -r requirements/codebases.txt - python -m pip install clip numba transformers numpy==1.23 + python -m pip install clip numba transformers numpy==1.23 albumentations python -m pip list - name: Install mmyolo run: | @@ -145,23 +145,16 @@ jobs: COLOR: ${{ steps.badge_status.conclusion == 'success' && 'green' || 'red' }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - build_cuda102: + build_cuda117: runs-on: ubuntu-20.04 container: - image: pytorch/pytorch:1.9.0-cuda10.2-cudnn7-devel + image: pytorch/pytorch:2.0.0-cuda11.7-cudnn8-devel env: FORCE_CUDA: 1 - strategy: - matrix: - torch: [1.9.0+cu102] - include: - - torch: 1.9.0+cu102 - torchvision: 0.10.0+cu102 steps: - uses: actions/checkout@v2 - name: Install system dependencies run: | - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A4B469963BF863CC apt-get update && apt-get install -y ffmpeg libsm6 libxext6 git ninja-build libglib2.0-0 libxrender-dev apt-get clean rm -rf /var/lib/apt/lists/* @@ -170,33 +163,50 @@ jobs: python -V python -m pip show torch torchvision python -m pip install --no-cache-dir --upgrade pip - python -m pip install torch==${{matrix.torch}} torchvision==${{matrix.torchvision}} -f https://download.pytorch.org/whl/torch_stable.html + - name: Check disk space + continue-on-error: true + run: | + df -h + rm -rf /__t/go + rm -rf /__t/node + rm -rf /__t/Ruby + rm -rf /__t/CodeQL + cat /proc/cpuinfo | grep -ic proc + free + df -h - name: Install dependencies run: | python -V - export CFLAGS=`python -c 'import sysconfig;print("-I"+sysconfig.get_paths()["include"])'` python -m pip install --no-cache-dir openmim python -m pip install --no-cache-dir -r requirements.txt python -m pip install --no-cache-dir -r requirements/backends.txt - python -m mim install "mmcv>=2.0.0rc1" - CFLAGS=$CFLAGS python -m mim install -r requirements/codebases.txt - python -m pip install --no-cache-dir -U pycuda numpy clip numba transformers + python -m mim install "mmcv>=2.0.0" + python -m pip install --no-cache-dir -r requirements/codebases.txt + python -m pip install --no-cache-dir -U pycuda numpy==1.23 clip numba transformers albumentations python -m pip list - name: Build and install run: | rm -rf .eggs && python -m pip install -e . python tools/check_env.py - name: Run unittests and generate coverage report - id: badge_status run: | coverage run --branch --source mmdeploy -m pytest -rsE tests coverage xml coverage report -m + - name: Upload coverage to Codecov + id: badge_status + uses: codecov/codecov-action@v2 + with: + file: ./coverage.xml,./coverage.info + flags: unittests + env_vars: OS,PYTHON,CPLUS + name: codecov-umbrella + fail_ci_if_error: false - name: create badge if: always() uses: RubbaBoy/BYOB@v1.2.1 with: - NAME: build_cuda102 + NAME: build_cuda117 LABEL: 'build' STATUS: ${{ steps.badge_status.conclusion == 'success' && 'passing' || 'failing' }} COLOR: ${{ steps.badge_status.conclusion == 'success' && 'green' || 'red' }} @@ -210,7 +220,6 @@ jobs: - uses: actions/checkout@v2 - name: Install system dependencies run: | - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A4B469963BF863CC apt-get update && apt-get install -y ffmpeg libsm6 libxext6 git ninja-build libglib2.0-0 libxrender-dev apt-get clean rm -rf /var/lib/apt/lists/* @@ -219,16 +228,26 @@ jobs: python -V python -m pip show torch torchvision python -m pip install --no-cache-dir --upgrade pip + - name: Check disk space + continue-on-error: true + run: | + df -h + rm -rf /__t/go + rm -rf /__t/node + rm -rf /__t/Ruby + rm -rf /__t/CodeQL + cat /proc/cpuinfo | grep -ic proc + free + df -h - name: Install dependencies run: | python -V - export CFLAGS=`python -c 'import sysconfig;print("-I"+sysconfig.get_paths()["include"])'` python -m pip install --no-cache-dir openmim python -m pip install --no-cache-dir -r requirements.txt python -m pip install --no-cache-dir -r requirements/backends.txt - python -m mim install "mmcv>=2.0.0rc1" - python -m mim install -r requirements/codebases.txt - python -m pip install --no-cache-dir -U pycuda numpy clip numba transformers + python -m mim install --no-cache-dir "mmcv>=2.0.0" + python -m pip install --no-cache-dir -r requirements/codebases.txt + python -m pip install --no-cache-dir -U pycuda numpy clip numba transformers albumentations python -m pip list - name: Build and install run: | @@ -239,15 +258,6 @@ jobs: coverage run --branch --source mmdeploy -m pytest -rsE tests coverage xml coverage report -m - - name: Upload coverage to Codecov - id: badge_status - uses: codecov/codecov-action@v2 - with: - file: ./coverage.xml,./coverage.info - flags: unittests - env_vars: OS,PYTHON,CPLUS - name: codecov-umbrella - fail_ci_if_error: false - name: create badge if: always() uses: RubbaBoy/BYOB@v1.2.1 @@ -259,6 +269,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} build_cuda113_linux: + needs: [build_cpu_model_convert, build_cpu_sdk, build_cuda117] runs-on: [self-hosted, linux-3090] container: image: openmmlab/mmdeploy:ubuntu20.04-cuda11.3 @@ -309,6 +320,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} build_cuda113_windows: + needs: [build_cpu_model_convert, build_cpu_sdk, build_cuda117] runs-on: [self-hosted, win10-3080] env: BASE_ENV: cuda11.3-cudnn8.2-py3.8-torch1.10 diff --git a/.github/workflows/regression-test.yml b/.github/workflows/regression-test.yml index 2999e7c44c..69a68525f4 100644 --- a/.github/workflows/regression-test.yml +++ b/.github/workflows/regression-test.yml @@ -52,7 +52,7 @@ on: required: false description: 'Do not change it unless you know what you are doing!' type: string - default: 'https://8d17-103-108-182-56.ngrok-free.app' + default: 'https://e2e1-14-136-99-158.ngrok-free.app' concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 93df0cd47c..c1887e67d6 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -22,7 +22,7 @@ jobs: close-issue-message: 'This issue is closed because it has been stale for 5 days. Please open a new issue if you have similar issues or you have any new updates now.' close-pr-message: 'This PR is closed because it has been stale for 10 days. Please reopen this PR if you have any updates and want to keep contributing the code.' # only issues/PRS with following labels are checked - any-of-labels: 'invalid, awaiting response, duplicate' + any-of-labels: 'invalid, awaiting response, duplicate, Stale, upstream issue' days-before-issue-stale: 7 days-before-pr-stale: 45 days-before-issue-close: 5 diff --git a/.readthedocs.yml b/.readthedocs.yml index 6cfbf5d310..05ec15cca3 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -2,8 +2,12 @@ version: 2 formats: all +build: + os: "ubuntu-22.04" + tools: + python: "3.8" + python: - version: 3.7 install: - requirements: requirements/docs.txt - requirements: requirements/readthedocs.txt diff --git a/mmdeploy/apis/onnx/export.py b/mmdeploy/apis/onnx/export.py index 1b788e842d..76c4fb1003 100644 --- a/mmdeploy/apis/onnx/export.py +++ b/mmdeploy/apis/onnx/export.py @@ -132,7 +132,7 @@ def wrapper(*arg, **kwargs): if isinstance(args, torch.Tensor): args = args.cpu() elif isinstance(args, (tuple, list)): - args = [_.cpu() for _ in args] + args = tuple([_.cpu() for _ in args]) else: raise RuntimeError(f'Not supported args: {args}') torch.onnx.export( diff --git a/mmdeploy/codebase/mmdet/deploy/object_detection_model.py b/mmdeploy/codebase/mmdet/deploy/object_detection_model.py index e9f3b6cf7b..497408c7b5 100644 --- a/mmdeploy/codebase/mmdet/deploy/object_detection_model.py +++ b/mmdeploy/codebase/mmdet/deploy/object_detection_model.py @@ -199,19 +199,20 @@ def postprocessing_results(self, labels = labels.to(device) bboxes = dets[:, :4] scores = dets[:, 4] - scale_factor = bboxes.new_ones(1, 4) + scale_factor = bboxes.new_ones(4) # get scale_factor if 'scale_factor' in img_metas[i]: scale_factor = img_metas[i]['scale_factor'] - if isinstance(scale_factor, (list, tuple, np.ndarray)): + if isinstance(scale_factor, np.ndarray): + scale_factor = scale_factor.squeeze(0).tolist() + + if isinstance(scale_factor, (list, tuple)): if len(scale_factor) == 2: - scale_factor = np.array(scale_factor) - scale_factor = np.concatenate( - [scale_factor, scale_factor]) - scale_factor = np.array(scale_factor)[None, :] # [1,4] - scale_factor = torch.from_numpy(scale_factor).to(dets) + scale_factor = scale_factor + scale_factor + assert len(scale_factor) == 4 + scale_factor = torch.tensor(scale_factor).to(dets) if rescale: - bboxes /= scale_factor + bboxes /= scale_factor.view(1, 4) # Most of models in mmdetection 3.x use `pad_param`, but some # models like CenterNet uses `border`. diff --git a/tests/test_apis/test_onnx_passes.py b/tests/test_apis/test_onnx_passes.py index 8ed61dec73..bb0976644f 100644 --- a/tests/test_apis/test_onnx_passes.py +++ b/tests/test_apis/test_onnx_passes.py @@ -6,6 +6,7 @@ import pytest import torch import torch.nn as nn +from packaging import version from mmdeploy.apis.onnx.optimizer import \ model_to_graph__custom_optimizer # noqa @@ -195,7 +196,9 @@ def forward(self, x): def test_fuse_select_assign(): pytest.importorskip('mmdeploy.backend.torchscript.ts_optimizer.onnx') - + # TODO fix later + if version.parse(torch.__version__) >= version.parse('2.0.0'): + pytest.skip('ignore torch>=2.0.0') try: from mmdeploy.backend.torchscript import ts_optimizer opt_pass = ts_optimizer.onnx._jit_pass_fuse_select_assign