├── utils
├── __init__.py
├── aws
│ ├── __init__.py
│ ├── mime.sh
│ ├── resume.py
│ └── userdata.sh
├── wandb_logging
│ ├── __init__.py
│ └── log_dataset.py
├── __pycache__
│ ├── loss.cpython-36.pyc
│ ├── plots.cpython-36.pyc
│ ├── __init__.cpython-36.pyc
│ ├── add_nms.cpython-36.pyc
│ ├── datasets.cpython-36.pyc
│ ├── general.cpython-36.pyc
│ ├── metrics.cpython-36.pyc
│ ├── autoanchor.cpython-36.pyc
│ ├── activations.cpython-36.pyc
│ ├── carbox_auto.cpython-36.pyc
│ ├── google_utils.cpython-36.pyc
│ └── torch_utils.cpython-36.pyc
├── google_app_engine
│ ├── additional_requirements.txt
│ ├── app.yaml
│ └── Dockerfile
├── activations.py
├── google_utils.py
├── add_nms.py
├── autoanchor.py
└── metrics.py
├── models
├── __init__.py
└── __pycache__
│ ├── yolo.cpython-36.pyc
│ ├── common.cpython-36.pyc
│ ├── __init__.cpython-36.pyc
│ └── experimental.cpython-36.pyc
├── data
├── horses.jpg
├── coco.yaml
├── hyp.scratch.p5.yaml
├── hyp.scratch.p6.yaml
├── hyp.scratch.custom.yaml
├── hyp.scratch.tiny.yaml
└── hyp.scratch.mask.yaml
├── figures
├── 000000542426.jpg
├── 000000553267.jpg
├── 000000553735.jpg
├── 000000564532.jpg
├── 000000573973.jpg
└── 000000575916.jpg
├── results
├── 640_trt_cv2img_VP_0.jpg
├── 640_trt_cv2img_VP_1.jpg
├── 640_trt_cv2img_VP_2.jpg
├── 640_trt_cv2img_VP_3.jpg
├── 640_trt_cv2img_VP_4.jpg
└── 640_trt_cv2img_VP_5.jpg
├── __pycache__
├── carbox.cpython-36.pyc
├── carbox_160.cpython-36.pyc
└── carbox_auto.cpython-36.pyc
├── deploy
└── triton-inference-server
│ ├── data
│ ├── dog.jpg
│ └── dog_result.jpg
│ ├── boundingbox.py
│ ├── labels.py
│ ├── processing.py
│ ├── render.py
│ └── README.md
├── requirements.txt
├── cfg
├── baseline
│ ├── r50-csp.yaml
│ ├── x50-csp.yaml
│ ├── yolov3.yaml
│ ├── yolov3-spp.yaml
│ ├── yolor-csp.yaml
│ ├── yolov4-csp.yaml
│ ├── yolor-csp-x.yaml
│ ├── yolor-e6.yaml
│ ├── yolor-d6.yaml
│ ├── yolor-p6.yaml
│ └── yolor-w6.yaml
├── deploy
│ ├── yolov7-tiny-silu.yaml
│ ├── yolov7.yaml
│ ├── yolov7-tiny.yaml
│ ├── yolov7x.yaml
│ ├── yolov7-w6.yaml
│ ├── yolov7-e6.yaml
│ ├── yolov7-d6.yaml
│ └── yolov7-e6e.yaml
├── training
│ ├── yolov7.yaml
│ ├── yolov7-tiny.yaml
│ ├── yolov7x.yaml
│ ├── yolov7-w6.yaml
│ ├── yolov7-e6.yaml
│ ├── yolov7-d6.yaml
│ └── yolov7-e6e.yaml
└── yolov7-mask.yaml
├── hubconf.py
├── README.md
├── export_mask.py
└── segment_video.py
/utils/__init__.py:
--------------------------------------------------------------------------------
1 | # init
--------------------------------------------------------------------------------
/models/__init__.py:
--------------------------------------------------------------------------------
1 | # init
--------------------------------------------------------------------------------
/utils/aws/__init__.py:
--------------------------------------------------------------------------------
1 | #init
--------------------------------------------------------------------------------
/utils/wandb_logging/__init__.py:
--------------------------------------------------------------------------------
1 | # init
--------------------------------------------------------------------------------
/data/horses.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/data/horses.jpg
--------------------------------------------------------------------------------
/figures/000000542426.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/figures/000000542426.jpg
--------------------------------------------------------------------------------
/figures/000000553267.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/figures/000000553267.jpg
--------------------------------------------------------------------------------
/figures/000000553735.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/figures/000000553735.jpg
--------------------------------------------------------------------------------
/figures/000000564532.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/figures/000000564532.jpg
--------------------------------------------------------------------------------
/figures/000000573973.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/figures/000000573973.jpg
--------------------------------------------------------------------------------
/figures/000000575916.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/figures/000000575916.jpg
--------------------------------------------------------------------------------
/results/640_trt_cv2img_VP_0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/results/640_trt_cv2img_VP_0.jpg
--------------------------------------------------------------------------------
/results/640_trt_cv2img_VP_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/results/640_trt_cv2img_VP_1.jpg
--------------------------------------------------------------------------------
/results/640_trt_cv2img_VP_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/results/640_trt_cv2img_VP_2.jpg
--------------------------------------------------------------------------------
/results/640_trt_cv2img_VP_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/results/640_trt_cv2img_VP_3.jpg
--------------------------------------------------------------------------------
/results/640_trt_cv2img_VP_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/results/640_trt_cv2img_VP_4.jpg
--------------------------------------------------------------------------------
/results/640_trt_cv2img_VP_5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/results/640_trt_cv2img_VP_5.jpg
--------------------------------------------------------------------------------
/__pycache__/carbox.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/__pycache__/carbox.cpython-36.pyc
--------------------------------------------------------------------------------
/__pycache__/carbox_160.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/__pycache__/carbox_160.cpython-36.pyc
--------------------------------------------------------------------------------
/__pycache__/carbox_auto.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/__pycache__/carbox_auto.cpython-36.pyc
--------------------------------------------------------------------------------
/models/__pycache__/yolo.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/models/__pycache__/yolo.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/loss.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/utils/__pycache__/loss.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/plots.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/utils/__pycache__/plots.cpython-36.pyc
--------------------------------------------------------------------------------
/models/__pycache__/common.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/models/__pycache__/common.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/__init__.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/utils/__pycache__/__init__.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/add_nms.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/utils/__pycache__/add_nms.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/datasets.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/utils/__pycache__/datasets.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/general.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/utils/__pycache__/general.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/metrics.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/utils/__pycache__/metrics.cpython-36.pyc
--------------------------------------------------------------------------------
/deploy/triton-inference-server/data/dog.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/deploy/triton-inference-server/data/dog.jpg
--------------------------------------------------------------------------------
/models/__pycache__/__init__.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/models/__pycache__/__init__.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/autoanchor.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/utils/__pycache__/autoanchor.cpython-36.pyc
--------------------------------------------------------------------------------
/models/__pycache__/experimental.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/models/__pycache__/experimental.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/activations.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/utils/__pycache__/activations.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/carbox_auto.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/utils/__pycache__/carbox_auto.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/google_utils.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/utils/__pycache__/google_utils.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/__pycache__/torch_utils.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/utils/__pycache__/torch_utils.cpython-36.pyc
--------------------------------------------------------------------------------
/utils/google_app_engine/additional_requirements.txt:
--------------------------------------------------------------------------------
1 | # add these requirements in your app on top of the existing ones
2 | pip==18.1
3 | Flask==1.0.2
4 | gunicorn==19.9.0
5 |
--------------------------------------------------------------------------------
/deploy/triton-inference-server/data/dog_result.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/leandro-svg/Yolov7_Segmentation_Tensorrt/HEAD/deploy/triton-inference-server/data/dog_result.jpg
--------------------------------------------------------------------------------
/utils/google_app_engine/app.yaml:
--------------------------------------------------------------------------------
1 | runtime: custom
2 | env: flex
3 |
4 | service: yolorapp
5 |
6 | liveness_check:
7 | initial_delay_sec: 600
8 |
9 | manual_scaling:
10 | instances: 1
11 | resources:
12 | cpu: 1
13 | memory_gb: 4
14 | disk_size_gb: 20
--------------------------------------------------------------------------------
/utils/aws/mime.sh:
--------------------------------------------------------------------------------
1 | # AWS EC2 instance startup 'MIME' script https://aws.amazon.com/premiumsupport/knowledge-center/execute-user-data-ec2/
2 | # This script will run on every instance restart, not only on first start
3 | # --- DO NOT COPY ABOVE COMMENTS WHEN PASTING INTO USERDATA ---
4 |
5 | Content-Type: multipart/mixed; boundary="//"
6 | MIME-Version: 1.0
7 |
8 | --//
9 | Content-Type: text/cloud-config; charset="us-ascii"
10 | MIME-Version: 1.0
11 | Content-Transfer-Encoding: 7bit
12 | Content-Disposition: attachment; filename="cloud-config.txt"
13 |
14 | #cloud-config
15 | cloud_final_modules:
16 | - [scripts-user, always]
17 |
18 | --//
19 | Content-Type: text/x-shellscript; charset="us-ascii"
20 | MIME-Version: 1.0
21 | Content-Transfer-Encoding: 7bit
22 | Content-Disposition: attachment; filename="userdata.txt"
23 |
24 | #!/bin/bash
25 | # --- paste contents of userdata.sh here ---
26 | --//
27 |
--------------------------------------------------------------------------------
/utils/wandb_logging/log_dataset.py:
--------------------------------------------------------------------------------
1 | import argparse
2 |
3 | import yaml
4 |
5 | from wandb_utils import WandbLogger
6 |
7 | WANDB_ARTIFACT_PREFIX = 'wandb-artifact://'
8 |
9 |
10 | def create_dataset_artifact(opt):
11 | with open(opt.data) as f:
12 | data = yaml.load(f, Loader=yaml.SafeLoader) # data dict
13 | logger = WandbLogger(opt, '', None, data, job_type='Dataset Creation')
14 |
15 |
16 | if __name__ == '__main__':
17 | parser = argparse.ArgumentParser()
18 | parser.add_argument('--data', type=str, default='data/coco.yaml', help='data.yaml path')
19 | parser.add_argument('--single-cls', action='store_true', help='train as single-class dataset')
20 | parser.add_argument('--project', type=str, default='YOLOR', help='name of W&B Project')
21 | opt = parser.parse_args()
22 | opt.resume = False # Explicitly disallow resume check for dataset upload job
23 |
24 | create_dataset_artifact(opt)
25 |
--------------------------------------------------------------------------------
/utils/google_app_engine/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM gcr.io/google-appengine/python
2 |
3 | # Create a virtualenv for dependencies. This isolates these packages from
4 | # system-level packages.
5 | # Use -p python3 or -p python3.7 to select python version. Default is version 2.
6 | RUN virtualenv /env -p python3
7 |
8 | # Setting these environment variables are the same as running
9 | # source /env/bin/activate.
10 | ENV VIRTUAL_ENV /env
11 | ENV PATH /env/bin:$PATH
12 |
13 | RUN apt-get update && apt-get install -y python-opencv
14 |
15 | # Copy the application's requirements.txt and run pip to install all
16 | # dependencies into the virtualenv.
17 | ADD requirements.txt /app/requirements.txt
18 | RUN pip install -r /app/requirements.txt
19 |
20 | # Add the application source code.
21 | ADD . /app
22 |
23 | # Run a WSGI server to serve the application. gunicorn must be declared as
24 | # a dependency in requirements.txt.
25 | CMD gunicorn -b :$PORT main:app
26 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | # Usage: pip install -r requirements.txt
2 |
3 | # Base ----------------------------------------
4 | matplotlib>=3.2.2
5 | numpy>=1.18.5
6 | opencv-python>=4.1.1
7 | Pillow>=7.1.2
8 | PyYAML>=5.3.1
9 | requests>=2.23.0
10 | scipy>=1.4.1
11 | torch>=1.7.0,!=1.12.0
12 | torchvision>=0.8.1,!=0.13.0
13 | tqdm>=4.41.0
14 | protobuf<4.21.3
15 |
16 | # Logging -------------------------------------
17 | tensorboard>=2.4.1
18 | # wandb
19 |
20 | # Plotting ------------------------------------
21 | pandas>=1.1.4
22 | seaborn>=0.11.0
23 |
24 | # Export --------------------------------------
25 | # coremltools>=4.1 # CoreML export
26 | # onnx>=1.9.0 # ONNX export
27 | # onnx-simplifier>=0.3.6 # ONNX simplifier
28 | # scikit-learn==0.19.2 # CoreML quantization
29 | # tensorflow>=2.4.1 # TFLite export
30 | # tensorflowjs>=3.9.0 # TF.js export
31 | # openvino-dev # OpenVINO export
32 |
33 | # Extras --------------------------------------
34 | ipython # interactive notebook
35 | psutil # system utilization
36 | thop # FLOPs computation
37 | # albumentations>=1.0.3
38 | # pycocotools>=2.0 # COCO mAP
39 | # roboflow
40 |
--------------------------------------------------------------------------------
/deploy/triton-inference-server/boundingbox.py:
--------------------------------------------------------------------------------
1 | class BoundingBox:
2 | def __init__(self, classID, confidence, x1, x2, y1, y2, image_width, image_height):
3 | self.classID = classID
4 | self.confidence = confidence
5 | self.x1 = x1
6 | self.x2 = x2
7 | self.y1 = y1
8 | self.y2 = y2
9 | self.u1 = x1 / image_width
10 | self.u2 = x2 / image_width
11 | self.v1 = y1 / image_height
12 | self.v2 = y2 / image_height
13 |
14 | def box(self):
15 | return (self.x1, self.y1, self.x2, self.y2)
16 |
17 | def width(self):
18 | return self.x2 - self.x1
19 |
20 | def height(self):
21 | return self.y2 - self.y1
22 |
23 | def center_absolute(self):
24 | return (0.5 * (self.x1 + self.x2), 0.5 * (self.y1 + self.y2))
25 |
26 | def center_normalized(self):
27 | return (0.5 * (self.u1 + self.u2), 0.5 * (self.v1 + self.v2))
28 |
29 | def size_absolute(self):
30 | return (self.x2 - self.x1, self.y2 - self.y1)
31 |
32 | def size_normalized(self):
33 | return (self.u2 - self.u1, self.v2 - self.v1)
34 |
--------------------------------------------------------------------------------
/utils/aws/resume.py:
--------------------------------------------------------------------------------
1 | # Resume all interrupted trainings in yolor/ dir including DDP trainings
2 | # Usage: $ python utils/aws/resume.py
3 |
4 | import os
5 | import sys
6 | from pathlib import Path
7 |
8 | import torch
9 | import yaml
10 |
11 | sys.path.append('./') # to run '$ python *.py' files in subdirectories
12 |
13 | port = 0 # --master_port
14 | path = Path('').resolve()
15 | for last in path.rglob('*/**/last.pt'):
16 | ckpt = torch.load(last)
17 | if ckpt['optimizer'] is None:
18 | continue
19 |
20 | # Load opt.yaml
21 | with open(last.parent.parent / 'opt.yaml') as f:
22 | opt = yaml.load(f, Loader=yaml.SafeLoader)
23 |
24 | # Get device count
25 | d = opt['device'].split(',') # devices
26 | nd = len(d) # number of devices
27 | ddp = nd > 1 or (nd == 0 and torch.cuda.device_count() > 1) # distributed data parallel
28 |
29 | if ddp: # multi-GPU
30 | port += 1
31 | cmd = f'python -m torch.distributed.launch --nproc_per_node {nd} --master_port {port} train.py --resume {last}'
32 | else: # single-GPU
33 | cmd = f'python train.py --resume {last}'
34 |
35 | cmd += ' > /dev/null 2>&1 &' # redirect output to dev/null and run in daemon thread
36 | print(cmd)
37 | os.system(cmd)
38 |
--------------------------------------------------------------------------------
/utils/aws/userdata.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # AWS EC2 instance startup script https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html
3 | # This script will run only once on first instance start (for a re-start script see mime.sh)
4 | # /home/ubuntu (ubuntu) or /home/ec2-user (amazon-linux) is working dir
5 | # Use >300 GB SSD
6 |
7 | cd home/ubuntu
8 | if [ ! -d yolor ]; then
9 | echo "Running first-time script." # install dependencies, download COCO, pull Docker
10 | git clone -b paper https://github.com/WongKinYiu/yolor && sudo chmod -R 777 yolor
11 | cd yolor
12 | bash data/scripts/get_coco.sh && echo "Data done." &
13 | sudo docker pull nvcr.io/nvidia/pytorch:21.08-py3 && echo "Docker done." &
14 | python -m pip install --upgrade pip && pip install -r requirements.txt && python detect.py && echo "Requirements done." &
15 | wait && echo "All tasks done." # finish background tasks
16 | else
17 | echo "Running re-start script." # resume interrupted runs
18 | i=0
19 | list=$(sudo docker ps -qa) # container list i.e. $'one\ntwo\nthree\nfour'
20 | while IFS= read -r id; do
21 | ((i++))
22 | echo "restarting container $i: $id"
23 | sudo docker start $id
24 | # sudo docker exec -it $id python train.py --resume # single-GPU
25 | sudo docker exec -d $id python utils/aws/resume.py # multi-scenario
26 | done <<<"$list"
27 | fi
28 |
--------------------------------------------------------------------------------
/data/coco.yaml:
--------------------------------------------------------------------------------
1 | # COCO 2017 dataset http://cocodataset.org
2 |
3 | # download command/URL (optional)
4 | download: bash ./scripts/get_coco.sh
5 |
6 | # train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
7 | train: ./coco/train2017.txt # 118287 images
8 | val: ./coco/val2017.txt # 5000 images
9 | test: ./coco/test-dev2017.txt # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794
10 |
11 | # number of classes
12 | nc: 80
13 |
14 | # class names
15 | names: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
16 | 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
17 | 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
18 | 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
19 | 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
20 | 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
21 | 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
22 | 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
23 | 'hair drier', 'toothbrush' ]
24 |
--------------------------------------------------------------------------------
/data/hyp.scratch.p5.yaml:
--------------------------------------------------------------------------------
1 | lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
2 | lrf: 0.1 # final OneCycleLR learning rate (lr0 * lrf)
3 | momentum: 0.937 # SGD momentum/Adam beta1
4 | weight_decay: 0.0005 # optimizer weight decay 5e-4
5 | warmup_epochs: 3.0 # warmup epochs (fractions ok)
6 | warmup_momentum: 0.8 # warmup initial momentum
7 | warmup_bias_lr: 0.1 # warmup initial bias lr
8 | box: 0.05 # box loss gain
9 | cls: 0.3 # cls loss gain
10 | cls_pw: 1.0 # cls BCELoss positive_weight
11 | obj: 0.7 # obj loss gain (scale with pixels)
12 | obj_pw: 1.0 # obj BCELoss positive_weight
13 | iou_t: 0.20 # IoU training threshold
14 | anchor_t: 4.0 # anchor-multiple threshold
15 | # anchors: 3 # anchors per output layer (0 to ignore)
16 | fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
17 | hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
18 | hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)
19 | hsv_v: 0.4 # image HSV-Value augmentation (fraction)
20 | degrees: 0.0 # image rotation (+/- deg)
21 | translate: 0.2 # image translation (+/- fraction)
22 | scale: 0.9 # image scale (+/- gain)
23 | shear: 0.0 # image shear (+/- deg)
24 | perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
25 | flipud: 0.0 # image flip up-down (probability)
26 | fliplr: 0.5 # image flip left-right (probability)
27 | mosaic: 1.0 # image mosaic (probability)
28 | mixup: 0.15 # image mixup (probability)
29 | copy_paste: 0.0 # image copy paste (probability)
30 | paste_in: 0.15 # image copy paste (probability), use 0 for faster training
31 | loss_ota: 1 # use ComputeLossOTA, use 0 for faster training
--------------------------------------------------------------------------------
/data/hyp.scratch.p6.yaml:
--------------------------------------------------------------------------------
1 | lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
2 | lrf: 0.2 # final OneCycleLR learning rate (lr0 * lrf)
3 | momentum: 0.937 # SGD momentum/Adam beta1
4 | weight_decay: 0.0005 # optimizer weight decay 5e-4
5 | warmup_epochs: 3.0 # warmup epochs (fractions ok)
6 | warmup_momentum: 0.8 # warmup initial momentum
7 | warmup_bias_lr: 0.1 # warmup initial bias lr
8 | box: 0.05 # box loss gain
9 | cls: 0.3 # cls loss gain
10 | cls_pw: 1.0 # cls BCELoss positive_weight
11 | obj: 0.7 # obj loss gain (scale with pixels)
12 | obj_pw: 1.0 # obj BCELoss positive_weight
13 | iou_t: 0.20 # IoU training threshold
14 | anchor_t: 4.0 # anchor-multiple threshold
15 | # anchors: 3 # anchors per output layer (0 to ignore)
16 | fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
17 | hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
18 | hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)
19 | hsv_v: 0.4 # image HSV-Value augmentation (fraction)
20 | degrees: 0.0 # image rotation (+/- deg)
21 | translate: 0.2 # image translation (+/- fraction)
22 | scale: 0.9 # image scale (+/- gain)
23 | shear: 0.0 # image shear (+/- deg)
24 | perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
25 | flipud: 0.0 # image flip up-down (probability)
26 | fliplr: 0.5 # image flip left-right (probability)
27 | mosaic: 1.0 # image mosaic (probability)
28 | mixup: 0.15 # image mixup (probability)
29 | copy_paste: 0.0 # image copy paste (probability)
30 | paste_in: 0.15 # image copy paste (probability), use 0 for faster training
31 | loss_ota: 1 # use ComputeLossOTA, use 0 for faster training
--------------------------------------------------------------------------------
/data/hyp.scratch.custom.yaml:
--------------------------------------------------------------------------------
1 | lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
2 | lrf: 0.1 # final OneCycleLR learning rate (lr0 * lrf)
3 | momentum: 0.937 # SGD momentum/Adam beta1
4 | weight_decay: 0.0005 # optimizer weight decay 5e-4
5 | warmup_epochs: 3.0 # warmup epochs (fractions ok)
6 | warmup_momentum: 0.8 # warmup initial momentum
7 | warmup_bias_lr: 0.1 # warmup initial bias lr
8 | box: 0.05 # box loss gain
9 | cls: 0.3 # cls loss gain
10 | cls_pw: 1.0 # cls BCELoss positive_weight
11 | obj: 0.7 # obj loss gain (scale with pixels)
12 | obj_pw: 1.0 # obj BCELoss positive_weight
13 | iou_t: 0.20 # IoU training threshold
14 | anchor_t: 4.0 # anchor-multiple threshold
15 | # anchors: 3 # anchors per output layer (0 to ignore)
16 | fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
17 | hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
18 | hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)
19 | hsv_v: 0.4 # image HSV-Value augmentation (fraction)
20 | degrees: 0.0 # image rotation (+/- deg)
21 | translate: 0.2 # image translation (+/- fraction)
22 | scale: 0.5 # image scale (+/- gain)
23 | shear: 0.0 # image shear (+/- deg)
24 | perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
25 | flipud: 0.0 # image flip up-down (probability)
26 | fliplr: 0.5 # image flip left-right (probability)
27 | mosaic: 1.0 # image mosaic (probability)
28 | mixup: 0.0 # image mixup (probability)
29 | copy_paste: 0.0 # image copy paste (probability)
30 | paste_in: 0.0 # image copy paste (probability), use 0 for faster training
31 | loss_ota: 1 # use ComputeLossOTA, use 0 for faster training
--------------------------------------------------------------------------------
/cfg/baseline/r50-csp.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [12,16, 19,36, 40,28] # P3/8
9 | - [36,75, 76,55, 72,146] # P4/16
10 | - [142,110, 192,243, 459,401] # P5/32
11 |
12 | # CSP-ResNet backbone
13 | backbone:
14 | # [from, number, module, args]
15 | [[-1, 1, Stem, [128]], # 0-P1/2
16 | [-1, 3, ResCSPC, [128]],
17 | [-1, 1, Conv, [256, 3, 2]], # 2-P3/8
18 | [-1, 4, ResCSPC, [256]],
19 | [-1, 1, Conv, [512, 3, 2]], # 4-P3/8
20 | [-1, 6, ResCSPC, [512]],
21 | [-1, 1, Conv, [1024, 3, 2]], # 6-P3/8
22 | [-1, 3, ResCSPC, [1024]], # 7
23 | ]
24 |
25 | # CSP-Res-PAN head
26 | head:
27 | [[-1, 1, SPPCSPC, [512]], # 8
28 | [-1, 1, Conv, [256, 1, 1]],
29 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
30 | [5, 1, Conv, [256, 1, 1]], # route backbone P4
31 | [[-1, -2], 1, Concat, [1]],
32 | [-1, 2, ResCSPB, [256]], # 13
33 | [-1, 1, Conv, [128, 1, 1]],
34 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
35 | [3, 1, Conv, [128, 1, 1]], # route backbone P3
36 | [[-1, -2], 1, Concat, [1]],
37 | [-1, 2, ResCSPB, [128]], # 18
38 | [-1, 1, Conv, [256, 3, 1]],
39 | [-2, 1, Conv, [256, 3, 2]],
40 | [[-1, 13], 1, Concat, [1]], # cat
41 | [-1, 2, ResCSPB, [256]], # 22
42 | [-1, 1, Conv, [512, 3, 1]],
43 | [-2, 1, Conv, [512, 3, 2]],
44 | [[-1, 8], 1, Concat, [1]], # cat
45 | [-1, 2, ResCSPB, [512]], # 26
46 | [-1, 1, Conv, [1024, 3, 1]],
47 |
48 | [[19,23,27], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5)
49 | ]
50 |
--------------------------------------------------------------------------------
/data/hyp.scratch.tiny.yaml:
--------------------------------------------------------------------------------
1 | lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
2 | lrf: 0.01 # final OneCycleLR learning rate (lr0 * lrf)
3 | momentum: 0.937 # SGD momentum/Adam beta1
4 | weight_decay: 0.0005 # optimizer weight decay 5e-4
5 | warmup_epochs: 3.0 # warmup epochs (fractions ok)
6 | warmup_momentum: 0.8 # warmup initial momentum
7 | warmup_bias_lr: 0.1 # warmup initial bias lr
8 | box: 0.05 # box loss gain
9 | cls: 0.5 # cls loss gain
10 | cls_pw: 1.0 # cls BCELoss positive_weight
11 | obj: 1.0 # obj loss gain (scale with pixels)
12 | obj_pw: 1.0 # obj BCELoss positive_weight
13 | iou_t: 0.20 # IoU training threshold
14 | anchor_t: 4.0 # anchor-multiple threshold
15 | # anchors: 3 # anchors per output layer (0 to ignore)
16 | fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
17 | hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
18 | hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)
19 | hsv_v: 0.4 # image HSV-Value augmentation (fraction)
20 | degrees: 0.0 # image rotation (+/- deg)
21 | translate: 0.1 # image translation (+/- fraction)
22 | scale: 0.5 # image scale (+/- gain)
23 | shear: 0.0 # image shear (+/- deg)
24 | perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
25 | flipud: 0.0 # image flip up-down (probability)
26 | fliplr: 0.5 # image flip left-right (probability)
27 | mosaic: 1.0 # image mosaic (probability)
28 | mixup: 0.05 # image mixup (probability)
29 | copy_paste: 0.0 # image copy paste (probability)
30 | paste_in: 0.05 # image copy paste (probability), use 0 for faster training
31 | loss_ota: 1 # use ComputeLossOTA, use 0 for faster training
32 |
--------------------------------------------------------------------------------
/cfg/baseline/x50-csp.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [12,16, 19,36, 40,28] # P3/8
9 | - [36,75, 76,55, 72,146] # P4/16
10 | - [142,110, 192,243, 459,401] # P5/32
11 |
12 | # CSP-ResNeXt backbone
13 | backbone:
14 | # [from, number, module, args]
15 | [[-1, 1, Stem, [128]], # 0-P1/2
16 | [-1, 3, ResXCSPC, [128]],
17 | [-1, 1, Conv, [256, 3, 2]], # 2-P3/8
18 | [-1, 4, ResXCSPC, [256]],
19 | [-1, 1, Conv, [512, 3, 2]], # 4-P3/8
20 | [-1, 6, ResXCSPC, [512]],
21 | [-1, 1, Conv, [1024, 3, 2]], # 6-P3/8
22 | [-1, 3, ResXCSPC, [1024]], # 7
23 | ]
24 |
25 | # CSP-ResX-PAN head
26 | head:
27 | [[-1, 1, SPPCSPC, [512]], # 8
28 | [-1, 1, Conv, [256, 1, 1]],
29 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
30 | [5, 1, Conv, [256, 1, 1]], # route backbone P4
31 | [[-1, -2], 1, Concat, [1]],
32 | [-1, 2, ResXCSPB, [256]], # 13
33 | [-1, 1, Conv, [128, 1, 1]],
34 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
35 | [3, 1, Conv, [128, 1, 1]], # route backbone P3
36 | [[-1, -2], 1, Concat, [1]],
37 | [-1, 2, ResXCSPB, [128]], # 18
38 | [-1, 1, Conv, [256, 3, 1]],
39 | [-2, 1, Conv, [256, 3, 2]],
40 | [[-1, 13], 1, Concat, [1]], # cat
41 | [-1, 2, ResXCSPB, [256]], # 22
42 | [-1, 1, Conv, [512, 3, 1]],
43 | [-2, 1, Conv, [512, 3, 2]],
44 | [[-1, 8], 1, Concat, [1]], # cat
45 | [-1, 2, ResXCSPB, [512]], # 26
46 | [-1, 1, Conv, [1024, 3, 1]],
47 |
48 | [[19,23,27], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5)
49 | ]
50 |
--------------------------------------------------------------------------------
/data/hyp.scratch.mask.yaml:
--------------------------------------------------------------------------------
1 | lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
2 | lrf: 0.1 # final OneCycleLR learning rate (lr0 * lrf)
3 | momentum: 0.937 # SGD momentum/Adam beta1
4 | weight_decay: 0.0005 # optimizer weight decay 5e-4
5 | warmup_epochs: 3.0 # warmup epochs (fractions ok)
6 | warmup_momentum: 0.8 # warmup initial momentum
7 | warmup_bias_lr: 0.1 # warmup initial bias lr
8 | box: 0.05 # box loss gain
9 | cls: 0.3 # cls loss gain
10 | cls_pw: 1.0 # cls BCELoss positive_weight
11 | obj: 0.7 # obj loss gain (scale with pixels)
12 | obj_pw: 1.0 # obj BCELoss positive_weight
13 | mask: 0.05 # mask loss gain
14 | mask_pw: 1.0 # obj BCELoss positive_weight
15 | pointrend: 0.05 # pointrend loss gain
16 | iou_t: 0.20 # IoU training threshold
17 | anchor_t: 4.0 # anchor-multiple threshold
18 | # anchors: 3 # anchors per output layer (0 to ignore)
19 | fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
20 | hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
21 | hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)
22 | hsv_v: 0.4 # image HSV-Value augmentation (fraction)
23 | degrees: 0.0 # image rotation (+/- deg)
24 | translate: 0.1 # image translation (+/- fraction)
25 | scale: 0.5 # image scale (+/- gain)
26 | shear: 0.0 # image shear (+/- deg)
27 | perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
28 | flipud: 0.0 # image flip up-down (probability)
29 | fliplr: 0.5 # image flip left-right (probability)
30 | mosaic: 1.0 # image mosaic (probability)
31 | mixup: 0. # image mixup (probability)
32 | copy_paste: 0. #15 # image copy paste (probability)
33 | paste_in: 0. # image copy paste (probability)
34 | attn_resolution: 14
35 | num_base: 5
36 | mask_resolution: 56
37 |
38 |
--------------------------------------------------------------------------------
/cfg/baseline/yolov3.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [10,13, 16,30, 33,23] # P3/8
9 | - [30,61, 62,45, 59,119] # P4/16
10 | - [116,90, 156,198, 373,326] # P5/32
11 |
12 | # darknet53 backbone
13 | backbone:
14 | # [from, number, module, args]
15 | [[-1, 1, Conv, [32, 3, 1]], # 0
16 | [-1, 1, Conv, [64, 3, 2]], # 1-P1/2
17 | [-1, 1, Bottleneck, [64]],
18 | [-1, 1, Conv, [128, 3, 2]], # 3-P2/4
19 | [-1, 2, Bottleneck, [128]],
20 | [-1, 1, Conv, [256, 3, 2]], # 5-P3/8
21 | [-1, 8, Bottleneck, [256]],
22 | [-1, 1, Conv, [512, 3, 2]], # 7-P4/16
23 | [-1, 8, Bottleneck, [512]],
24 | [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32
25 | [-1, 4, Bottleneck, [1024]], # 10
26 | ]
27 |
28 | # YOLOv3 head
29 | head:
30 | [[-1, 1, Bottleneck, [1024, False]],
31 | [-1, 1, Conv, [512, [1, 1]]],
32 | [-1, 1, Conv, [1024, 3, 1]],
33 | [-1, 1, Conv, [512, 1, 1]],
34 | [-1, 1, Conv, [1024, 3, 1]], # 15 (P5/32-large)
35 |
36 | [-2, 1, Conv, [256, 1, 1]],
37 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
38 | [[-1, 8], 1, Concat, [1]], # cat backbone P4
39 | [-1, 1, Bottleneck, [512, False]],
40 | [-1, 1, Bottleneck, [512, False]],
41 | [-1, 1, Conv, [256, 1, 1]],
42 | [-1, 1, Conv, [512, 3, 1]], # 22 (P4/16-medium)
43 |
44 | [-2, 1, Conv, [128, 1, 1]],
45 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
46 | [[-1, 6], 1, Concat, [1]], # cat backbone P3
47 | [-1, 1, Bottleneck, [256, False]],
48 | [-1, 2, Bottleneck, [256, False]], # 27 (P3/8-small)
49 |
50 | [[27, 22, 15], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
51 | ]
52 |
--------------------------------------------------------------------------------
/cfg/baseline/yolov3-spp.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [10,13, 16,30, 33,23] # P3/8
9 | - [30,61, 62,45, 59,119] # P4/16
10 | - [116,90, 156,198, 373,326] # P5/32
11 |
12 | # darknet53 backbone
13 | backbone:
14 | # [from, number, module, args]
15 | [[-1, 1, Conv, [32, 3, 1]], # 0
16 | [-1, 1, Conv, [64, 3, 2]], # 1-P1/2
17 | [-1, 1, Bottleneck, [64]],
18 | [-1, 1, Conv, [128, 3, 2]], # 3-P2/4
19 | [-1, 2, Bottleneck, [128]],
20 | [-1, 1, Conv, [256, 3, 2]], # 5-P3/8
21 | [-1, 8, Bottleneck, [256]],
22 | [-1, 1, Conv, [512, 3, 2]], # 7-P4/16
23 | [-1, 8, Bottleneck, [512]],
24 | [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32
25 | [-1, 4, Bottleneck, [1024]], # 10
26 | ]
27 |
28 | # YOLOv3-SPP head
29 | head:
30 | [[-1, 1, Bottleneck, [1024, False]],
31 | [-1, 1, SPP, [512, [5, 9, 13]]],
32 | [-1, 1, Conv, [1024, 3, 1]],
33 | [-1, 1, Conv, [512, 1, 1]],
34 | [-1, 1, Conv, [1024, 3, 1]], # 15 (P5/32-large)
35 |
36 | [-2, 1, Conv, [256, 1, 1]],
37 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
38 | [[-1, 8], 1, Concat, [1]], # cat backbone P4
39 | [-1, 1, Bottleneck, [512, False]],
40 | [-1, 1, Bottleneck, [512, False]],
41 | [-1, 1, Conv, [256, 1, 1]],
42 | [-1, 1, Conv, [512, 3, 1]], # 22 (P4/16-medium)
43 |
44 | [-2, 1, Conv, [128, 1, 1]],
45 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
46 | [[-1, 6], 1, Concat, [1]], # cat backbone P3
47 | [-1, 1, Bottleneck, [256, False]],
48 | [-1, 2, Bottleneck, [256, False]], # 27 (P3/8-small)
49 |
50 | [[27, 22, 15], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
51 | ]
52 |
--------------------------------------------------------------------------------
/deploy/triton-inference-server/labels.py:
--------------------------------------------------------------------------------
1 | from enum import Enum
2 |
3 | class COCOLabels(Enum):
4 | PERSON = 0
5 | BICYCLE = 1
6 | CAR = 2
7 | MOTORBIKE = 3
8 | AEROPLANE = 4
9 | BUS = 5
10 | TRAIN = 6
11 | TRUCK = 7
12 | BOAT = 8
13 | TRAFFIC_LIGHT = 9
14 | FIRE_HYDRANT = 10
15 | STOP_SIGN = 11
16 | PARKING_METER = 12
17 | BENCH = 13
18 | BIRD = 14
19 | CAT = 15
20 | DOG = 16
21 | HORSE = 17
22 | SHEEP = 18
23 | COW = 19
24 | ELEPHANT = 20
25 | BEAR = 21
26 | ZEBRA = 22
27 | GIRAFFE = 23
28 | BACKPACK = 24
29 | UMBRELLA = 25
30 | HANDBAG = 26
31 | TIE = 27
32 | SUITCASE = 28
33 | FRISBEE = 29
34 | SKIS = 30
35 | SNOWBOARD = 31
36 | SPORTS_BALL = 32
37 | KITE = 33
38 | BASEBALL_BAT = 34
39 | BASEBALL_GLOVE = 35
40 | SKATEBOARD = 36
41 | SURFBOARD = 37
42 | TENNIS_RACKET = 38
43 | BOTTLE = 39
44 | WINE_GLASS = 40
45 | CUP = 41
46 | FORK = 42
47 | KNIFE = 43
48 | SPOON = 44
49 | BOWL = 45
50 | BANANA = 46
51 | APPLE = 47
52 | SANDWICH = 48
53 | ORANGE = 49
54 | BROCCOLI = 50
55 | CARROT = 51
56 | HOT_DOG = 52
57 | PIZZA = 53
58 | DONUT = 54
59 | CAKE = 55
60 | CHAIR = 56
61 | SOFA = 57
62 | POTTEDPLANT = 58
63 | BED = 59
64 | DININGTABLE = 60
65 | TOILET = 61
66 | TVMONITOR = 62
67 | LAPTOP = 63
68 | MOUSE = 64
69 | REMOTE = 65
70 | KEYBOARD = 66
71 | CELL_PHONE = 67
72 | MICROWAVE = 68
73 | OVEN = 69
74 | TOASTER = 70
75 | SINK = 71
76 | REFRIGERATOR = 72
77 | BOOK = 73
78 | CLOCK = 74
79 | VASE = 75
80 | SCISSORS = 76
81 | TEDDY_BEAR = 77
82 | HAIR_DRIER = 78
83 | TOOTHBRUSH = 79
84 |
--------------------------------------------------------------------------------
/cfg/baseline/yolor-csp.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [12,16, 19,36, 40,28] # P3/8
9 | - [36,75, 76,55, 72,146] # P4/16
10 | - [142,110, 192,243, 459,401] # P5/32
11 |
12 | # CSP-Darknet backbone
13 | backbone:
14 | # [from, number, module, args]
15 | [[-1, 1, Conv, [32, 3, 1]], # 0
16 | [-1, 1, Conv, [64, 3, 2]], # 1-P1/2
17 | [-1, 1, Bottleneck, [64]],
18 | [-1, 1, Conv, [128, 3, 2]], # 3-P2/4
19 | [-1, 2, BottleneckCSPC, [128]],
20 | [-1, 1, Conv, [256, 3, 2]], # 5-P3/8
21 | [-1, 8, BottleneckCSPC, [256]],
22 | [-1, 1, Conv, [512, 3, 2]], # 7-P4/16
23 | [-1, 8, BottleneckCSPC, [512]],
24 | [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32
25 | [-1, 4, BottleneckCSPC, [1024]], # 10
26 | ]
27 |
28 | # CSP-Dark-PAN head
29 | head:
30 | [[-1, 1, SPPCSPC, [512]], # 11
31 | [-1, 1, Conv, [256, 1, 1]],
32 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
33 | [8, 1, Conv, [256, 1, 1]], # route backbone P4
34 | [[-1, -2], 1, Concat, [1]],
35 | [-1, 2, BottleneckCSPB, [256]], # 16
36 | [-1, 1, Conv, [128, 1, 1]],
37 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
38 | [6, 1, Conv, [128, 1, 1]], # route backbone P3
39 | [[-1, -2], 1, Concat, [1]],
40 | [-1, 2, BottleneckCSPB, [128]], # 21
41 | [-1, 1, Conv, [256, 3, 1]],
42 | [-2, 1, Conv, [256, 3, 2]],
43 | [[-1, 16], 1, Concat, [1]], # cat
44 | [-1, 2, BottleneckCSPB, [256]], # 25
45 | [-1, 1, Conv, [512, 3, 1]],
46 | [-2, 1, Conv, [512, 3, 2]],
47 | [[-1, 11], 1, Concat, [1]], # cat
48 | [-1, 2, BottleneckCSPB, [512]], # 29
49 | [-1, 1, Conv, [1024, 3, 1]],
50 |
51 | [[22,26,30], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5)
52 | ]
53 |
--------------------------------------------------------------------------------
/cfg/baseline/yolov4-csp.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [12,16, 19,36, 40,28] # P3/8
9 | - [36,75, 76,55, 72,146] # P4/16
10 | - [142,110, 192,243, 459,401] # P5/32
11 |
12 | # CSP-Darknet backbone
13 | backbone:
14 | # [from, number, module, args]
15 | [[-1, 1, Conv, [32, 3, 1]], # 0
16 | [-1, 1, Conv, [64, 3, 2]], # 1-P1/2
17 | [-1, 1, Bottleneck, [64]],
18 | [-1, 1, Conv, [128, 3, 2]], # 3-P2/4
19 | [-1, 2, BottleneckCSPC, [128]],
20 | [-1, 1, Conv, [256, 3, 2]], # 5-P3/8
21 | [-1, 8, BottleneckCSPC, [256]],
22 | [-1, 1, Conv, [512, 3, 2]], # 7-P4/16
23 | [-1, 8, BottleneckCSPC, [512]],
24 | [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32
25 | [-1, 4, BottleneckCSPC, [1024]], # 10
26 | ]
27 |
28 | # CSP-Dark-PAN head
29 | head:
30 | [[-1, 1, SPPCSPC, [512]], # 11
31 | [-1, 1, Conv, [256, 1, 1]],
32 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
33 | [8, 1, Conv, [256, 1, 1]], # route backbone P4
34 | [[-1, -2], 1, Concat, [1]],
35 | [-1, 2, BottleneckCSPB, [256]], # 16
36 | [-1, 1, Conv, [128, 1, 1]],
37 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
38 | [6, 1, Conv, [128, 1, 1]], # route backbone P3
39 | [[-1, -2], 1, Concat, [1]],
40 | [-1, 2, BottleneckCSPB, [128]], # 21
41 | [-1, 1, Conv, [256, 3, 1]],
42 | [-2, 1, Conv, [256, 3, 2]],
43 | [[-1, 16], 1, Concat, [1]], # cat
44 | [-1, 2, BottleneckCSPB, [256]], # 25
45 | [-1, 1, Conv, [512, 3, 1]],
46 | [-2, 1, Conv, [512, 3, 2]],
47 | [[-1, 11], 1, Concat, [1]], # cat
48 | [-1, 2, BottleneckCSPB, [512]], # 29
49 | [-1, 1, Conv, [1024, 3, 1]],
50 |
51 | [[22,26,30], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
52 | ]
53 |
--------------------------------------------------------------------------------
/cfg/baseline/yolor-csp-x.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.33 # model depth multiple
4 | width_multiple: 1.25 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [12,16, 19,36, 40,28] # P3/8
9 | - [36,75, 76,55, 72,146] # P4/16
10 | - [142,110, 192,243, 459,401] # P5/32
11 |
12 | # CSP-Darknet backbone
13 | backbone:
14 | # [from, number, module, args]
15 | [[-1, 1, Conv, [32, 3, 1]], # 0
16 | [-1, 1, Conv, [64, 3, 2]], # 1-P1/2
17 | [-1, 1, Bottleneck, [64]],
18 | [-1, 1, Conv, [128, 3, 2]], # 3-P2/4
19 | [-1, 2, BottleneckCSPC, [128]],
20 | [-1, 1, Conv, [256, 3, 2]], # 5-P3/8
21 | [-1, 8, BottleneckCSPC, [256]],
22 | [-1, 1, Conv, [512, 3, 2]], # 7-P4/16
23 | [-1, 8, BottleneckCSPC, [512]],
24 | [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32
25 | [-1, 4, BottleneckCSPC, [1024]], # 10
26 | ]
27 |
28 | # CSP-Dark-PAN head
29 | head:
30 | [[-1, 1, SPPCSPC, [512]], # 11
31 | [-1, 1, Conv, [256, 1, 1]],
32 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
33 | [8, 1, Conv, [256, 1, 1]], # route backbone P4
34 | [[-1, -2], 1, Concat, [1]],
35 | [-1, 2, BottleneckCSPB, [256]], # 16
36 | [-1, 1, Conv, [128, 1, 1]],
37 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
38 | [6, 1, Conv, [128, 1, 1]], # route backbone P3
39 | [[-1, -2], 1, Concat, [1]],
40 | [-1, 2, BottleneckCSPB, [128]], # 21
41 | [-1, 1, Conv, [256, 3, 1]],
42 | [-2, 1, Conv, [256, 3, 2]],
43 | [[-1, 16], 1, Concat, [1]], # cat
44 | [-1, 2, BottleneckCSPB, [256]], # 25
45 | [-1, 1, Conv, [512, 3, 1]],
46 | [-2, 1, Conv, [512, 3, 2]],
47 | [[-1, 11], 1, Concat, [1]], # cat
48 | [-1, 2, BottleneckCSPB, [512]], # 29
49 | [-1, 1, Conv, [1024, 3, 1]],
50 |
51 | [[22,26,30], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5)
52 | ]
53 |
--------------------------------------------------------------------------------
/cfg/baseline/yolor-e6.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # expand model depth
4 | width_multiple: 1.25 # expand layer channels
5 |
6 | # anchors
7 | anchors:
8 | - [ 19,27, 44,40, 38,94 ] # P3/8
9 | - [ 96,68, 86,152, 180,137 ] # P4/16
10 | - [ 140,301, 303,264, 238,542 ] # P5/32
11 | - [ 436,615, 739,380, 925,792 ] # P6/64
12 |
13 | # CSP-Darknet backbone
14 | backbone:
15 | # [from, number, module, args]
16 | [[-1, 1, ReOrg, []], # 0
17 | [-1, 1, Conv, [64, 3, 1]], # 1-P1/2
18 | [-1, 1, DownC, [128]], # 2-P2/4
19 | [-1, 3, BottleneckCSPA, [128]],
20 | [-1, 1, DownC, [256]], # 4-P3/8
21 | [-1, 7, BottleneckCSPA, [256]],
22 | [-1, 1, DownC, [512]], # 6-P4/16
23 | [-1, 7, BottleneckCSPA, [512]],
24 | [-1, 1, DownC, [768]], # 8-P5/32
25 | [-1, 3, BottleneckCSPA, [768]],
26 | [-1, 1, DownC, [1024]], # 10-P6/64
27 | [-1, 3, BottleneckCSPA, [1024]], # 11
28 | ]
29 |
30 | # CSP-Dark-PAN head
31 | head:
32 | [[-1, 1, SPPCSPC, [512]], # 12
33 | [-1, 1, Conv, [384, 1, 1]],
34 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
35 | [-6, 1, Conv, [384, 1, 1]], # route backbone P5
36 | [[-1, -2], 1, Concat, [1]],
37 | [-1, 3, BottleneckCSPB, [384]], # 17
38 | [-1, 1, Conv, [256, 1, 1]],
39 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
40 | [-13, 1, Conv, [256, 1, 1]], # route backbone P4
41 | [[-1, -2], 1, Concat, [1]],
42 | [-1, 3, BottleneckCSPB, [256]], # 22
43 | [-1, 1, Conv, [128, 1, 1]],
44 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
45 | [-20, 1, Conv, [128, 1, 1]], # route backbone P3
46 | [[-1, -2], 1, Concat, [1]],
47 | [-1, 3, BottleneckCSPB, [128]], # 27
48 | [-1, 1, Conv, [256, 3, 1]],
49 | [-2, 1, DownC, [256]],
50 | [[-1, 22], 1, Concat, [1]], # cat
51 | [-1, 3, BottleneckCSPB, [256]], # 31
52 | [-1, 1, Conv, [512, 3, 1]],
53 | [-2, 1, DownC, [384]],
54 | [[-1, 17], 1, Concat, [1]], # cat
55 | [-1, 3, BottleneckCSPB, [384]], # 35
56 | [-1, 1, Conv, [768, 3, 1]],
57 | [-2, 1, DownC, [512]],
58 | [[-1, 12], 1, Concat, [1]], # cat
59 | [-1, 3, BottleneckCSPB, [512]], # 39
60 | [-1, 1, Conv, [1024, 3, 1]],
61 |
62 | [[28,32,36,40], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5, P6)
63 | ]
--------------------------------------------------------------------------------
/cfg/baseline/yolor-d6.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # expand model depth
4 | width_multiple: 1.25 # expand layer channels
5 |
6 | # anchors
7 | anchors:
8 | - [ 19,27, 44,40, 38,94 ] # P3/8
9 | - [ 96,68, 86,152, 180,137 ] # P4/16
10 | - [ 140,301, 303,264, 238,542 ] # P5/32
11 | - [ 436,615, 739,380, 925,792 ] # P6/64
12 |
13 | # CSP-Darknet backbone
14 | backbone:
15 | # [from, number, module, args]
16 | [[-1, 1, ReOrg, []], # 0
17 | [-1, 1, Conv, [64, 3, 1]], # 1-P1/2
18 | [-1, 1, DownC, [128]], # 2-P2/4
19 | [-1, 3, BottleneckCSPA, [128]],
20 | [-1, 1, DownC, [256]], # 4-P3/8
21 | [-1, 15, BottleneckCSPA, [256]],
22 | [-1, 1, DownC, [512]], # 6-P4/16
23 | [-1, 15, BottleneckCSPA, [512]],
24 | [-1, 1, DownC, [768]], # 8-P5/32
25 | [-1, 7, BottleneckCSPA, [768]],
26 | [-1, 1, DownC, [1024]], # 10-P6/64
27 | [-1, 7, BottleneckCSPA, [1024]], # 11
28 | ]
29 |
30 | # CSP-Dark-PAN head
31 | head:
32 | [[-1, 1, SPPCSPC, [512]], # 12
33 | [-1, 1, Conv, [384, 1, 1]],
34 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
35 | [-6, 1, Conv, [384, 1, 1]], # route backbone P5
36 | [[-1, -2], 1, Concat, [1]],
37 | [-1, 3, BottleneckCSPB, [384]], # 17
38 | [-1, 1, Conv, [256, 1, 1]],
39 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
40 | [-13, 1, Conv, [256, 1, 1]], # route backbone P4
41 | [[-1, -2], 1, Concat, [1]],
42 | [-1, 3, BottleneckCSPB, [256]], # 22
43 | [-1, 1, Conv, [128, 1, 1]],
44 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
45 | [-20, 1, Conv, [128, 1, 1]], # route backbone P3
46 | [[-1, -2], 1, Concat, [1]],
47 | [-1, 3, BottleneckCSPB, [128]], # 27
48 | [-1, 1, Conv, [256, 3, 1]],
49 | [-2, 1, DownC, [256]],
50 | [[-1, 22], 1, Concat, [1]], # cat
51 | [-1, 3, BottleneckCSPB, [256]], # 31
52 | [-1, 1, Conv, [512, 3, 1]],
53 | [-2, 1, DownC, [384]],
54 | [[-1, 17], 1, Concat, [1]], # cat
55 | [-1, 3, BottleneckCSPB, [384]], # 35
56 | [-1, 1, Conv, [768, 3, 1]],
57 | [-2, 1, DownC, [512]],
58 | [[-1, 12], 1, Concat, [1]], # cat
59 | [-1, 3, BottleneckCSPB, [512]], # 39
60 | [-1, 1, Conv, [1024, 3, 1]],
61 |
62 | [[28,32,36,40], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5, P6)
63 | ]
--------------------------------------------------------------------------------
/cfg/baseline/yolor-p6.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # expand model depth
4 | width_multiple: 1.0 # expand layer channels
5 |
6 | # anchors
7 | anchors:
8 | - [ 19,27, 44,40, 38,94 ] # P3/8
9 | - [ 96,68, 86,152, 180,137 ] # P4/16
10 | - [ 140,301, 303,264, 238,542 ] # P5/32
11 | - [ 436,615, 739,380, 925,792 ] # P6/64
12 |
13 | # CSP-Darknet backbone
14 | backbone:
15 | # [from, number, module, args]
16 | [[-1, 1, ReOrg, []], # 0
17 | [-1, 1, Conv, [64, 3, 1]], # 1-P1/2
18 | [-1, 1, Conv, [128, 3, 2]], # 2-P2/4
19 | [-1, 3, BottleneckCSPA, [128]],
20 | [-1, 1, Conv, [256, 3, 2]], # 4-P3/8
21 | [-1, 7, BottleneckCSPA, [256]],
22 | [-1, 1, Conv, [384, 3, 2]], # 6-P4/16
23 | [-1, 7, BottleneckCSPA, [384]],
24 | [-1, 1, Conv, [512, 3, 2]], # 8-P5/32
25 | [-1, 3, BottleneckCSPA, [512]],
26 | [-1, 1, Conv, [640, 3, 2]], # 10-P6/64
27 | [-1, 3, BottleneckCSPA, [640]], # 11
28 | ]
29 |
30 | # CSP-Dark-PAN head
31 | head:
32 | [[-1, 1, SPPCSPC, [320]], # 12
33 | [-1, 1, Conv, [256, 1, 1]],
34 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
35 | [-6, 1, Conv, [256, 1, 1]], # route backbone P5
36 | [[-1, -2], 1, Concat, [1]],
37 | [-1, 3, BottleneckCSPB, [256]], # 17
38 | [-1, 1, Conv, [192, 1, 1]],
39 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
40 | [-13, 1, Conv, [192, 1, 1]], # route backbone P4
41 | [[-1, -2], 1, Concat, [1]],
42 | [-1, 3, BottleneckCSPB, [192]], # 22
43 | [-1, 1, Conv, [128, 1, 1]],
44 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
45 | [-20, 1, Conv, [128, 1, 1]], # route backbone P3
46 | [[-1, -2], 1, Concat, [1]],
47 | [-1, 3, BottleneckCSPB, [128]], # 27
48 | [-1, 1, Conv, [256, 3, 1]],
49 | [-2, 1, Conv, [192, 3, 2]],
50 | [[-1, 22], 1, Concat, [1]], # cat
51 | [-1, 3, BottleneckCSPB, [192]], # 31
52 | [-1, 1, Conv, [384, 3, 1]],
53 | [-2, 1, Conv, [256, 3, 2]],
54 | [[-1, 17], 1, Concat, [1]], # cat
55 | [-1, 3, BottleneckCSPB, [256]], # 35
56 | [-1, 1, Conv, [512, 3, 1]],
57 | [-2, 1, Conv, [320, 3, 2]],
58 | [[-1, 12], 1, Concat, [1]], # cat
59 | [-1, 3, BottleneckCSPB, [320]], # 39
60 | [-1, 1, Conv, [640, 3, 1]],
61 |
62 | [[28,32,36,40], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5, P6)
63 | ]
--------------------------------------------------------------------------------
/cfg/baseline/yolor-w6.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # expand model depth
4 | width_multiple: 1.0 # expand layer channels
5 |
6 | # anchors
7 | anchors:
8 | - [ 19,27, 44,40, 38,94 ] # P3/8
9 | - [ 96,68, 86,152, 180,137 ] # P4/16
10 | - [ 140,301, 303,264, 238,542 ] # P5/32
11 | - [ 436,615, 739,380, 925,792 ] # P6/64
12 |
13 | # CSP-Darknet backbone
14 | backbone:
15 | # [from, number, module, args]
16 | [[-1, 1, ReOrg, []], # 0
17 | [-1, 1, Conv, [64, 3, 1]], # 1-P1/2
18 | [-1, 1, Conv, [128, 3, 2]], # 2-P2/4
19 | [-1, 3, BottleneckCSPA, [128]],
20 | [-1, 1, Conv, [256, 3, 2]], # 4-P3/8
21 | [-1, 7, BottleneckCSPA, [256]],
22 | [-1, 1, Conv, [512, 3, 2]], # 6-P4/16
23 | [-1, 7, BottleneckCSPA, [512]],
24 | [-1, 1, Conv, [768, 3, 2]], # 8-P5/32
25 | [-1, 3, BottleneckCSPA, [768]],
26 | [-1, 1, Conv, [1024, 3, 2]], # 10-P6/64
27 | [-1, 3, BottleneckCSPA, [1024]], # 11
28 | ]
29 |
30 | # CSP-Dark-PAN head
31 | head:
32 | [[-1, 1, SPPCSPC, [512]], # 12
33 | [-1, 1, Conv, [384, 1, 1]],
34 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
35 | [-6, 1, Conv, [384, 1, 1]], # route backbone P5
36 | [[-1, -2], 1, Concat, [1]],
37 | [-1, 3, BottleneckCSPB, [384]], # 17
38 | [-1, 1, Conv, [256, 1, 1]],
39 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
40 | [-13, 1, Conv, [256, 1, 1]], # route backbone P4
41 | [[-1, -2], 1, Concat, [1]],
42 | [-1, 3, BottleneckCSPB, [256]], # 22
43 | [-1, 1, Conv, [128, 1, 1]],
44 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
45 | [-20, 1, Conv, [128, 1, 1]], # route backbone P3
46 | [[-1, -2], 1, Concat, [1]],
47 | [-1, 3, BottleneckCSPB, [128]], # 27
48 | [-1, 1, Conv, [256, 3, 1]],
49 | [-2, 1, Conv, [256, 3, 2]],
50 | [[-1, 22], 1, Concat, [1]], # cat
51 | [-1, 3, BottleneckCSPB, [256]], # 31
52 | [-1, 1, Conv, [512, 3, 1]],
53 | [-2, 1, Conv, [384, 3, 2]],
54 | [[-1, 17], 1, Concat, [1]], # cat
55 | [-1, 3, BottleneckCSPB, [384]], # 35
56 | [-1, 1, Conv, [768, 3, 1]],
57 | [-2, 1, Conv, [512, 3, 2]],
58 | [[-1, 12], 1, Concat, [1]], # cat
59 | [-1, 3, BottleneckCSPB, [512]], # 39
60 | [-1, 1, Conv, [1024, 3, 1]],
61 |
62 | [[28,32,36,40], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5, P6)
63 | ]
--------------------------------------------------------------------------------
/deploy/triton-inference-server/processing.py:
--------------------------------------------------------------------------------
1 | from boundingbox import BoundingBox
2 |
3 | import cv2
4 | import numpy as np
5 |
6 | def preprocess(img, input_shape, letter_box=True):
7 | if letter_box:
8 | img_h, img_w, _ = img.shape
9 | new_h, new_w = input_shape[0], input_shape[1]
10 | offset_h, offset_w = 0, 0
11 | if (new_w / img_w) <= (new_h / img_h):
12 | new_h = int(img_h * new_w / img_w)
13 | offset_h = (input_shape[0] - new_h) // 2
14 | else:
15 | new_w = int(img_w * new_h / img_h)
16 | offset_w = (input_shape[1] - new_w) // 2
17 | resized = cv2.resize(img, (new_w, new_h))
18 | img = np.full((input_shape[0], input_shape[1], 3), 127, dtype=np.uint8)
19 | img[offset_h:(offset_h + new_h), offset_w:(offset_w + new_w), :] = resized
20 | else:
21 | img = cv2.resize(img, (input_shape[1], input_shape[0]))
22 |
23 | img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
24 | img = img.transpose((2, 0, 1)).astype(np.float32)
25 | img /= 255.0
26 | return img
27 |
28 | def postprocess(num_dets, det_boxes, det_scores, det_classes, img_w, img_h, input_shape, letter_box=True):
29 | boxes = det_boxes[0, :num_dets[0][0]] / np.array([input_shape[0], input_shape[1], input_shape[0], input_shape[1]], dtype=np.float32)
30 | scores = det_scores[0, :num_dets[0][0]]
31 | classes = det_classes[0, :num_dets[0][0]].astype(np.int)
32 |
33 | old_h, old_w = img_h, img_w
34 | offset_h, offset_w = 0, 0
35 | if letter_box:
36 | if (img_w / input_shape[1]) >= (img_h / input_shape[0]):
37 | old_h = int(input_shape[0] * img_w / input_shape[1])
38 | offset_h = (old_h - img_h) // 2
39 | else:
40 | old_w = int(input_shape[1] * img_h / input_shape[0])
41 | offset_w = (old_w - img_w) // 2
42 |
43 | boxes = boxes * np.array([old_w, old_h, old_w, old_h], dtype=np.float32)
44 | if letter_box:
45 | boxes -= np.array([offset_w, offset_h, offset_w, offset_h], dtype=np.float32)
46 | boxes = boxes.astype(np.int)
47 |
48 | detected_objects = []
49 | for box, score, label in zip(boxes, scores, classes):
50 | detected_objects.append(BoundingBox(label, score, box[0], box[2], box[1], box[3], img_w, img_h))
51 | return detected_objects
52 |
--------------------------------------------------------------------------------
/utils/activations.py:
--------------------------------------------------------------------------------
1 | # Activation functions
2 |
3 | import torch
4 | import torch.nn as nn
5 | import torch.nn.functional as F
6 |
7 |
8 | # SiLU https://arxiv.org/pdf/1606.08415.pdf ----------------------------------------------------------------------------
9 | class SiLU(nn.Module): # export-friendly version of nn.SiLU()
10 | @staticmethod
11 | def forward(x):
12 | return x * torch.sigmoid(x)
13 |
14 |
15 | class Hardswish(nn.Module): # export-friendly version of nn.Hardswish()
16 | @staticmethod
17 | def forward(x):
18 | # return x * F.hardsigmoid(x) # for torchscript and CoreML
19 | return x * F.hardtanh(x + 3, 0., 6.) / 6. # for torchscript, CoreML and ONNX
20 |
21 |
22 | class MemoryEfficientSwish(nn.Module):
23 | class F(torch.autograd.Function):
24 | @staticmethod
25 | def forward(ctx, x):
26 | ctx.save_for_backward(x)
27 | return x * torch.sigmoid(x)
28 |
29 | @staticmethod
30 | def backward(ctx, grad_output):
31 | x = ctx.saved_tensors[0]
32 | sx = torch.sigmoid(x)
33 | return grad_output * (sx * (1 + x * (1 - sx)))
34 |
35 | def forward(self, x):
36 | return self.F.apply(x)
37 |
38 |
39 | # Mish https://github.com/digantamisra98/Mish --------------------------------------------------------------------------
40 | class Mish(nn.Module):
41 | @staticmethod
42 | def forward(x):
43 | return x * F.softplus(x).tanh()
44 |
45 |
46 | class MemoryEfficientMish(nn.Module):
47 | class F(torch.autograd.Function):
48 | @staticmethod
49 | def forward(ctx, x):
50 | ctx.save_for_backward(x)
51 | return x.mul(torch.tanh(F.softplus(x))) # x * tanh(ln(1 + exp(x)))
52 |
53 | @staticmethod
54 | def backward(ctx, grad_output):
55 | x = ctx.saved_tensors[0]
56 | sx = torch.sigmoid(x)
57 | fx = F.softplus(x).tanh()
58 | return grad_output * (fx + x * sx * (1 - fx * fx))
59 |
60 | def forward(self, x):
61 | return self.F.apply(x)
62 |
63 |
64 | # FReLU https://arxiv.org/abs/2007.11824 -------------------------------------------------------------------------------
65 | class FReLU(nn.Module):
66 | def __init__(self, c1, k=3): # ch_in, kernel
67 | super().__init__()
68 | self.conv = nn.Conv2d(c1, c1, k, 1, 1, groups=c1, bias=False)
69 | self.bn = nn.BatchNorm2d(c1)
70 |
71 | def forward(self, x):
72 | return torch.max(x, self.bn(self.conv(x)))
73 |
--------------------------------------------------------------------------------
/cfg/deploy/yolov7-tiny-silu.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [10,13, 16,30, 33,23] # P3/8
9 | - [30,61, 62,45, 59,119] # P4/16
10 | - [116,90, 156,198, 373,326] # P5/32
11 |
12 | # YOLOv7-tiny backbone
13 | backbone:
14 | # [from, number, module, args]
15 | [[-1, 1, Conv, [32, 3, 2]], # 0-P1/2
16 |
17 | [-1, 1, Conv, [64, 3, 2]], # 1-P2/4
18 |
19 | [-1, 1, Conv, [32, 1, 1]],
20 | [-2, 1, Conv, [32, 1, 1]],
21 | [-1, 1, Conv, [32, 3, 1]],
22 | [-1, 1, Conv, [32, 3, 1]],
23 | [[-1, -2, -3, -4], 1, Concat, [1]],
24 | [-1, 1, Conv, [64, 1, 1]], # 7
25 |
26 | [-1, 1, MP, []], # 8-P3/8
27 | [-1, 1, Conv, [64, 1, 1]],
28 | [-2, 1, Conv, [64, 1, 1]],
29 | [-1, 1, Conv, [64, 3, 1]],
30 | [-1, 1, Conv, [64, 3, 1]],
31 | [[-1, -2, -3, -4], 1, Concat, [1]],
32 | [-1, 1, Conv, [128, 1, 1]], # 14
33 |
34 | [-1, 1, MP, []], # 15-P4/16
35 | [-1, 1, Conv, [128, 1, 1]],
36 | [-2, 1, Conv, [128, 1, 1]],
37 | [-1, 1, Conv, [128, 3, 1]],
38 | [-1, 1, Conv, [128, 3, 1]],
39 | [[-1, -2, -3, -4], 1, Concat, [1]],
40 | [-1, 1, Conv, [256, 1, 1]], # 21
41 |
42 | [-1, 1, MP, []], # 22-P5/32
43 | [-1, 1, Conv, [256, 1, 1]],
44 | [-2, 1, Conv, [256, 1, 1]],
45 | [-1, 1, Conv, [256, 3, 1]],
46 | [-1, 1, Conv, [256, 3, 1]],
47 | [[-1, -2, -3, -4], 1, Concat, [1]],
48 | [-1, 1, Conv, [512, 1, 1]], # 28
49 | ]
50 |
51 | # YOLOv7-tiny head
52 | head:
53 | [[-1, 1, Conv, [256, 1, 1]],
54 | [-2, 1, Conv, [256, 1, 1]],
55 | [-1, 1, SP, [5]],
56 | [-2, 1, SP, [9]],
57 | [-3, 1, SP, [13]],
58 | [[-1, -2, -3, -4], 1, Concat, [1]],
59 | [-1, 1, Conv, [256, 1, 1]],
60 | [[-1, -7], 1, Concat, [1]],
61 | [-1, 1, Conv, [256, 1, 1]], # 37
62 |
63 | [-1, 1, Conv, [128, 1, 1]],
64 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
65 | [21, 1, Conv, [128, 1, 1]], # route backbone P4
66 | [[-1, -2], 1, Concat, [1]],
67 |
68 | [-1, 1, Conv, [64, 1, 1]],
69 | [-2, 1, Conv, [64, 1, 1]],
70 | [-1, 1, Conv, [64, 3, 1]],
71 | [-1, 1, Conv, [64, 3, 1]],
72 | [[-1, -2, -3, -4], 1, Concat, [1]],
73 | [-1, 1, Conv, [128, 1, 1]], # 47
74 |
75 | [-1, 1, Conv, [64, 1, 1]],
76 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
77 | [14, 1, Conv, [64, 1, 1]], # route backbone P3
78 | [[-1, -2], 1, Concat, [1]],
79 |
80 | [-1, 1, Conv, [32, 1, 1]],
81 | [-2, 1, Conv, [32, 1, 1]],
82 | [-1, 1, Conv, [32, 3, 1]],
83 | [-1, 1, Conv, [32, 3, 1]],
84 | [[-1, -2, -3, -4], 1, Concat, [1]],
85 | [-1, 1, Conv, [64, 1, 1]], # 57
86 |
87 | [-1, 1, Conv, [128, 3, 2]],
88 | [[-1, 47], 1, Concat, [1]],
89 |
90 | [-1, 1, Conv, [64, 1, 1]],
91 | [-2, 1, Conv, [64, 1, 1]],
92 | [-1, 1, Conv, [64, 3, 1]],
93 | [-1, 1, Conv, [64, 3, 1]],
94 | [[-1, -2, -3, -4], 1, Concat, [1]],
95 | [-1, 1, Conv, [128, 1, 1]], # 65
96 |
97 | [-1, 1, Conv, [256, 3, 2]],
98 | [[-1, 37], 1, Concat, [1]],
99 |
100 | [-1, 1, Conv, [128, 1, 1]],
101 | [-2, 1, Conv, [128, 1, 1]],
102 | [-1, 1, Conv, [128, 3, 1]],
103 | [-1, 1, Conv, [128, 3, 1]],
104 | [[-1, -2, -3, -4], 1, Concat, [1]],
105 | [-1, 1, Conv, [256, 1, 1]], # 73
106 |
107 | [57, 1, Conv, [128, 3, 1]],
108 | [65, 1, Conv, [256, 3, 1]],
109 | [73, 1, Conv, [512, 3, 1]],
110 |
111 | [[74,75,76], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
112 | ]
113 |
--------------------------------------------------------------------------------
/deploy/triton-inference-server/render.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 |
3 | import cv2
4 |
5 | from math import sqrt
6 |
7 | _LINE_THICKNESS_SCALING = 500.0
8 |
9 | np.random.seed(0)
10 | RAND_COLORS = np.random.randint(50, 255, (64, 3), "int") # used for class visu
11 | RAND_COLORS[0] = [220, 220, 220]
12 |
13 | def render_box(img, box, color=(200, 200, 200)):
14 | """
15 | Render a box. Calculates scaling and thickness automatically.
16 | :param img: image to render into
17 | :param box: (x1, y1, x2, y2) - box coordinates
18 | :param color: (b, g, r) - box color
19 | :return: updated image
20 | """
21 | x1, y1, x2, y2 = box
22 | thickness = int(
23 | round(
24 | (img.shape[0] * img.shape[1])
25 | / (_LINE_THICKNESS_SCALING * _LINE_THICKNESS_SCALING)
26 | )
27 | )
28 | thickness = max(1, thickness)
29 | img = cv2.rectangle(
30 | img,
31 | (int(x1), int(y1)),
32 | (int(x2), int(y2)),
33 | color,
34 | thickness=thickness
35 | )
36 | return img
37 |
38 | def render_filled_box(img, box, color=(200, 200, 200)):
39 | """
40 | Render a box. Calculates scaling and thickness automatically.
41 | :param img: image to render into
42 | :param box: (x1, y1, x2, y2) - box coordinates
43 | :param color: (b, g, r) - box color
44 | :return: updated image
45 | """
46 | x1, y1, x2, y2 = box
47 | img = cv2.rectangle(
48 | img,
49 | (int(x1), int(y1)),
50 | (int(x2), int(y2)),
51 | color,
52 | thickness=cv2.FILLED
53 | )
54 | return img
55 |
56 | _TEXT_THICKNESS_SCALING = 700.0
57 | _TEXT_SCALING = 520.0
58 |
59 |
60 | def get_text_size(img, text, normalised_scaling=1.0):
61 | """
62 | Get calculated text size (as box width and height)
63 | :param img: image reference, used to determine appropriate text scaling
64 | :param text: text to display
65 | :param normalised_scaling: additional normalised scaling. Default 1.0.
66 | :return: (width, height) - width and height of text box
67 | """
68 | thickness = int(
69 | round(
70 | (img.shape[0] * img.shape[1])
71 | / (_TEXT_THICKNESS_SCALING * _TEXT_THICKNESS_SCALING)
72 | )
73 | * normalised_scaling
74 | )
75 | thickness = max(1, thickness)
76 | scaling = img.shape[0] / _TEXT_SCALING * normalised_scaling
77 | return cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, scaling, thickness)[0]
78 |
79 |
80 | def render_text(img, text, pos, color=(200, 200, 200), normalised_scaling=1.0):
81 | """
82 | Render a text into the image. Calculates scaling and thickness automatically.
83 | :param img: image to render into
84 | :param text: text to display
85 | :param pos: (x, y) - upper left coordinates of render position
86 | :param color: (b, g, r) - text color
87 | :param normalised_scaling: additional normalised scaling. Default 1.0.
88 | :return: updated image
89 | """
90 | x, y = pos
91 | thickness = int(
92 | round(
93 | (img.shape[0] * img.shape[1])
94 | / (_TEXT_THICKNESS_SCALING * _TEXT_THICKNESS_SCALING)
95 | )
96 | * normalised_scaling
97 | )
98 | thickness = max(1, thickness)
99 | scaling = img.shape[0] / _TEXT_SCALING * normalised_scaling
100 | size = get_text_size(img, text, normalised_scaling)
101 | cv2.putText(
102 | img,
103 | text,
104 | (int(x), int(y + size[1])),
105 | cv2.FONT_HERSHEY_SIMPLEX,
106 | scaling,
107 | color,
108 | thickness=thickness,
109 | )
110 | return img
111 |
--------------------------------------------------------------------------------
/hubconf.py:
--------------------------------------------------------------------------------
1 | """PyTorch Hub models
2 |
3 | Usage:
4 | import torch
5 | model = torch.hub.load('repo', 'model')
6 | """
7 |
8 | from pathlib import Path
9 |
10 | import torch
11 |
12 | from models.yolo import Model
13 | from utils.general import check_requirements, set_logging
14 | from utils.google_utils import attempt_download
15 | from utils.torch_utils import select_device
16 |
17 | dependencies = ['torch', 'yaml']
18 | check_requirements(Path(__file__).parent / 'requirements.txt', exclude=('pycocotools', 'thop'))
19 | set_logging()
20 |
21 |
22 | def create(name, pretrained, channels, classes, autoshape):
23 | """Creates a specified model
24 |
25 | Arguments:
26 | name (str): name of model, i.e. 'yolov7'
27 | pretrained (bool): load pretrained weights into the model
28 | channels (int): number of input channels
29 | classes (int): number of model classes
30 |
31 | Returns:
32 | pytorch model
33 | """
34 | try:
35 | cfg = list((Path(__file__).parent / 'cfg').rglob(f'{name}.yaml'))[0] # model.yaml path
36 | model = Model(cfg, channels, classes)
37 | if pretrained:
38 | fname = f'{name}.pt' # checkpoint filename
39 | attempt_download(fname) # download if not found locally
40 | ckpt = torch.load(fname, map_location=torch.device('cpu')) # load
41 | msd = model.state_dict() # model state_dict
42 | csd = ckpt['model'].float().state_dict() # checkpoint state_dict as FP32
43 | csd = {k: v for k, v in csd.items() if msd[k].shape == v.shape} # filter
44 | model.load_state_dict(csd, strict=False) # load
45 | if len(ckpt['model'].names) == classes:
46 | model.names = ckpt['model'].names # set class names attribute
47 | if autoshape:
48 | model = model.autoshape() # for file/URI/PIL/cv2/np inputs and NMS
49 | device = select_device('0' if torch.cuda.is_available() else 'cpu') # default to GPU if available
50 | return model.to(device)
51 |
52 | except Exception as e:
53 | s = 'Cache maybe be out of date, try force_reload=True.'
54 | raise Exception(s) from e
55 |
56 |
57 | def custom(path_or_model='path/to/model.pt', autoshape=True):
58 | """custom mode
59 |
60 | Arguments (3 options):
61 | path_or_model (str): 'path/to/model.pt'
62 | path_or_model (dict): torch.load('path/to/model.pt')
63 | path_or_model (nn.Module): torch.load('path/to/model.pt')['model']
64 |
65 | Returns:
66 | pytorch model
67 | """
68 | model = torch.load(path_or_model, map_location=torch.device('cpu')) if isinstance(path_or_model, str) else path_or_model # load checkpoint
69 | if isinstance(model, dict):
70 | model = model['ema' if model.get('ema') else 'model'] # load model
71 |
72 | hub_model = Model(model.yaml).to(next(model.parameters()).device) # create
73 | hub_model.load_state_dict(model.float().state_dict()) # load state_dict
74 | hub_model.names = model.names # class names
75 | if autoshape:
76 | hub_model = hub_model.autoshape() # for file/URI/PIL/cv2/np inputs and NMS
77 | device = select_device('0' if torch.cuda.is_available() else 'cpu') # default to GPU if available
78 | return hub_model.to(device)
79 |
80 |
81 | def yolov7(pretrained=True, channels=3, classes=80, autoshape=True):
82 | return create('yolov7', pretrained, channels, classes, autoshape)
83 |
84 |
85 | if __name__ == '__main__':
86 | model = custom(path_or_model='yolov7.pt') # custom example
87 | # model = create(name='yolov7', pretrained=True, channels=3, classes=80, autoshape=True) # pretrained example
88 |
89 | # Verify inference
90 | import numpy as np
91 | from PIL import Image
92 |
93 | imgs = [np.zeros((640, 480, 3))]
94 |
95 | results = model(imgs) # batched inference
96 | results.print()
97 | results.save()
98 |
--------------------------------------------------------------------------------
/cfg/deploy/yolov7.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [12,16, 19,36, 40,28] # P3/8
9 | - [36,75, 76,55, 72,146] # P4/16
10 | - [142,110, 192,243, 459,401] # P5/32
11 |
12 | # yolov7 backbone
13 | backbone:
14 | # [from, number, module, args]
15 | [[-1, 1, Conv, [32, 3, 1]], # 0
16 |
17 | [-1, 1, Conv, [64, 3, 2]], # 1-P1/2
18 | [-1, 1, Conv, [64, 3, 1]],
19 |
20 | [-1, 1, Conv, [128, 3, 2]], # 3-P2/4
21 | [-1, 1, Conv, [64, 1, 1]],
22 | [-2, 1, Conv, [64, 1, 1]],
23 | [-1, 1, Conv, [64, 3, 1]],
24 | [-1, 1, Conv, [64, 3, 1]],
25 | [-1, 1, Conv, [64, 3, 1]],
26 | [-1, 1, Conv, [64, 3, 1]],
27 | [[-1, -3, -5, -6], 1, Concat, [1]],
28 | [-1, 1, Conv, [256, 1, 1]], # 11
29 |
30 | [-1, 1, MP, []],
31 | [-1, 1, Conv, [128, 1, 1]],
32 | [-3, 1, Conv, [128, 1, 1]],
33 | [-1, 1, Conv, [128, 3, 2]],
34 | [[-1, -3], 1, Concat, [1]], # 16-P3/8
35 | [-1, 1, Conv, [128, 1, 1]],
36 | [-2, 1, Conv, [128, 1, 1]],
37 | [-1, 1, Conv, [128, 3, 1]],
38 | [-1, 1, Conv, [128, 3, 1]],
39 | [-1, 1, Conv, [128, 3, 1]],
40 | [-1, 1, Conv, [128, 3, 1]],
41 | [[-1, -3, -5, -6], 1, Concat, [1]],
42 | [-1, 1, Conv, [512, 1, 1]], # 24
43 |
44 | [-1, 1, MP, []],
45 | [-1, 1, Conv, [256, 1, 1]],
46 | [-3, 1, Conv, [256, 1, 1]],
47 | [-1, 1, Conv, [256, 3, 2]],
48 | [[-1, -3], 1, Concat, [1]], # 29-P4/16
49 | [-1, 1, Conv, [256, 1, 1]],
50 | [-2, 1, Conv, [256, 1, 1]],
51 | [-1, 1, Conv, [256, 3, 1]],
52 | [-1, 1, Conv, [256, 3, 1]],
53 | [-1, 1, Conv, [256, 3, 1]],
54 | [-1, 1, Conv, [256, 3, 1]],
55 | [[-1, -3, -5, -6], 1, Concat, [1]],
56 | [-1, 1, Conv, [1024, 1, 1]], # 37
57 |
58 | [-1, 1, MP, []],
59 | [-1, 1, Conv, [512, 1, 1]],
60 | [-3, 1, Conv, [512, 1, 1]],
61 | [-1, 1, Conv, [512, 3, 2]],
62 | [[-1, -3], 1, Concat, [1]], # 42-P5/32
63 | [-1, 1, Conv, [256, 1, 1]],
64 | [-2, 1, Conv, [256, 1, 1]],
65 | [-1, 1, Conv, [256, 3, 1]],
66 | [-1, 1, Conv, [256, 3, 1]],
67 | [-1, 1, Conv, [256, 3, 1]],
68 | [-1, 1, Conv, [256, 3, 1]],
69 | [[-1, -3, -5, -6], 1, Concat, [1]],
70 | [-1, 1, Conv, [1024, 1, 1]], # 50
71 | ]
72 |
73 | # yolov7 head
74 | head:
75 | [[-1, 1, SPPCSPC, [512]], # 51
76 |
77 | [-1, 1, Conv, [256, 1, 1]],
78 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
79 | [37, 1, Conv, [256, 1, 1]], # route backbone P4
80 | [[-1, -2], 1, Concat, [1]],
81 |
82 | [-1, 1, Conv, [256, 1, 1]],
83 | [-2, 1, Conv, [256, 1, 1]],
84 | [-1, 1, Conv, [128, 3, 1]],
85 | [-1, 1, Conv, [128, 3, 1]],
86 | [-1, 1, Conv, [128, 3, 1]],
87 | [-1, 1, Conv, [128, 3, 1]],
88 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
89 | [-1, 1, Conv, [256, 1, 1]], # 63
90 |
91 | [-1, 1, Conv, [128, 1, 1]],
92 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
93 | [24, 1, Conv, [128, 1, 1]], # route backbone P3
94 | [[-1, -2], 1, Concat, [1]],
95 |
96 | [-1, 1, Conv, [128, 1, 1]],
97 | [-2, 1, Conv, [128, 1, 1]],
98 | [-1, 1, Conv, [64, 3, 1]],
99 | [-1, 1, Conv, [64, 3, 1]],
100 | [-1, 1, Conv, [64, 3, 1]],
101 | [-1, 1, Conv, [64, 3, 1]],
102 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
103 | [-1, 1, Conv, [128, 1, 1]], # 75
104 |
105 | [-1, 1, MP, []],
106 | [-1, 1, Conv, [128, 1, 1]],
107 | [-3, 1, Conv, [128, 1, 1]],
108 | [-1, 1, Conv, [128, 3, 2]],
109 | [[-1, -3, 63], 1, Concat, [1]],
110 |
111 | [-1, 1, Conv, [256, 1, 1]],
112 | [-2, 1, Conv, [256, 1, 1]],
113 | [-1, 1, Conv, [128, 3, 1]],
114 | [-1, 1, Conv, [128, 3, 1]],
115 | [-1, 1, Conv, [128, 3, 1]],
116 | [-1, 1, Conv, [128, 3, 1]],
117 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
118 | [-1, 1, Conv, [256, 1, 1]], # 88
119 |
120 | [-1, 1, MP, []],
121 | [-1, 1, Conv, [256, 1, 1]],
122 | [-3, 1, Conv, [256, 1, 1]],
123 | [-1, 1, Conv, [256, 3, 2]],
124 | [[-1, -3, 51], 1, Concat, [1]],
125 |
126 | [-1, 1, Conv, [512, 1, 1]],
127 | [-2, 1, Conv, [512, 1, 1]],
128 | [-1, 1, Conv, [256, 3, 1]],
129 | [-1, 1, Conv, [256, 3, 1]],
130 | [-1, 1, Conv, [256, 3, 1]],
131 | [-1, 1, Conv, [256, 3, 1]],
132 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
133 | [-1, 1, Conv, [512, 1, 1]], # 101
134 |
135 | [75, 1, RepConv, [256, 3, 1]],
136 | [88, 1, RepConv, [512, 3, 1]],
137 | [101, 1, RepConv, [1024, 3, 1]],
138 |
139 | [[102,103,104], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
140 | ]
141 |
--------------------------------------------------------------------------------
/cfg/training/yolov7.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [12,16, 19,36, 40,28] # P3/8
9 | - [36,75, 76,55, 72,146] # P4/16
10 | - [142,110, 192,243, 459,401] # P5/32
11 |
12 | # yolov7 backbone
13 | backbone:
14 | # [from, number, module, args]
15 | [[-1, 1, Conv, [32, 3, 1]], # 0
16 |
17 | [-1, 1, Conv, [64, 3, 2]], # 1-P1/2
18 | [-1, 1, Conv, [64, 3, 1]],
19 |
20 | [-1, 1, Conv, [128, 3, 2]], # 3-P2/4
21 | [-1, 1, Conv, [64, 1, 1]],
22 | [-2, 1, Conv, [64, 1, 1]],
23 | [-1, 1, Conv, [64, 3, 1]],
24 | [-1, 1, Conv, [64, 3, 1]],
25 | [-1, 1, Conv, [64, 3, 1]],
26 | [-1, 1, Conv, [64, 3, 1]],
27 | [[-1, -3, -5, -6], 1, Concat, [1]],
28 | [-1, 1, Conv, [256, 1, 1]], # 11
29 |
30 | [-1, 1, MP, []],
31 | [-1, 1, Conv, [128, 1, 1]],
32 | [-3, 1, Conv, [128, 1, 1]],
33 | [-1, 1, Conv, [128, 3, 2]],
34 | [[-1, -3], 1, Concat, [1]], # 16-P3/8
35 | [-1, 1, Conv, [128, 1, 1]],
36 | [-2, 1, Conv, [128, 1, 1]],
37 | [-1, 1, Conv, [128, 3, 1]],
38 | [-1, 1, Conv, [128, 3, 1]],
39 | [-1, 1, Conv, [128, 3, 1]],
40 | [-1, 1, Conv, [128, 3, 1]],
41 | [[-1, -3, -5, -6], 1, Concat, [1]],
42 | [-1, 1, Conv, [512, 1, 1]], # 24
43 |
44 | [-1, 1, MP, []],
45 | [-1, 1, Conv, [256, 1, 1]],
46 | [-3, 1, Conv, [256, 1, 1]],
47 | [-1, 1, Conv, [256, 3, 2]],
48 | [[-1, -3], 1, Concat, [1]], # 29-P4/16
49 | [-1, 1, Conv, [256, 1, 1]],
50 | [-2, 1, Conv, [256, 1, 1]],
51 | [-1, 1, Conv, [256, 3, 1]],
52 | [-1, 1, Conv, [256, 3, 1]],
53 | [-1, 1, Conv, [256, 3, 1]],
54 | [-1, 1, Conv, [256, 3, 1]],
55 | [[-1, -3, -5, -6], 1, Concat, [1]],
56 | [-1, 1, Conv, [1024, 1, 1]], # 37
57 |
58 | [-1, 1, MP, []],
59 | [-1, 1, Conv, [512, 1, 1]],
60 | [-3, 1, Conv, [512, 1, 1]],
61 | [-1, 1, Conv, [512, 3, 2]],
62 | [[-1, -3], 1, Concat, [1]], # 42-P5/32
63 | [-1, 1, Conv, [256, 1, 1]],
64 | [-2, 1, Conv, [256, 1, 1]],
65 | [-1, 1, Conv, [256, 3, 1]],
66 | [-1, 1, Conv, [256, 3, 1]],
67 | [-1, 1, Conv, [256, 3, 1]],
68 | [-1, 1, Conv, [256, 3, 1]],
69 | [[-1, -3, -5, -6], 1, Concat, [1]],
70 | [-1, 1, Conv, [1024, 1, 1]], # 50
71 | ]
72 |
73 | # yolov7 head
74 | head:
75 | [[-1, 1, SPPCSPC, [512]], # 51
76 |
77 | [-1, 1, Conv, [256, 1, 1]],
78 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
79 | [37, 1, Conv, [256, 1, 1]], # route backbone P4
80 | [[-1, -2], 1, Concat, [1]],
81 |
82 | [-1, 1, Conv, [256, 1, 1]],
83 | [-2, 1, Conv, [256, 1, 1]],
84 | [-1, 1, Conv, [128, 3, 1]],
85 | [-1, 1, Conv, [128, 3, 1]],
86 | [-1, 1, Conv, [128, 3, 1]],
87 | [-1, 1, Conv, [128, 3, 1]],
88 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
89 | [-1, 1, Conv, [256, 1, 1]], # 63
90 |
91 | [-1, 1, Conv, [128, 1, 1]],
92 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
93 | [24, 1, Conv, [128, 1, 1]], # route backbone P3
94 | [[-1, -2], 1, Concat, [1]],
95 |
96 | [-1, 1, Conv, [128, 1, 1]],
97 | [-2, 1, Conv, [128, 1, 1]],
98 | [-1, 1, Conv, [64, 3, 1]],
99 | [-1, 1, Conv, [64, 3, 1]],
100 | [-1, 1, Conv, [64, 3, 1]],
101 | [-1, 1, Conv, [64, 3, 1]],
102 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
103 | [-1, 1, Conv, [128, 1, 1]], # 75
104 |
105 | [-1, 1, MP, []],
106 | [-1, 1, Conv, [128, 1, 1]],
107 | [-3, 1, Conv, [128, 1, 1]],
108 | [-1, 1, Conv, [128, 3, 2]],
109 | [[-1, -3, 63], 1, Concat, [1]],
110 |
111 | [-1, 1, Conv, [256, 1, 1]],
112 | [-2, 1, Conv, [256, 1, 1]],
113 | [-1, 1, Conv, [128, 3, 1]],
114 | [-1, 1, Conv, [128, 3, 1]],
115 | [-1, 1, Conv, [128, 3, 1]],
116 | [-1, 1, Conv, [128, 3, 1]],
117 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
118 | [-1, 1, Conv, [256, 1, 1]], # 88
119 |
120 | [-1, 1, MP, []],
121 | [-1, 1, Conv, [256, 1, 1]],
122 | [-3, 1, Conv, [256, 1, 1]],
123 | [-1, 1, Conv, [256, 3, 2]],
124 | [[-1, -3, 51], 1, Concat, [1]],
125 |
126 | [-1, 1, Conv, [512, 1, 1]],
127 | [-2, 1, Conv, [512, 1, 1]],
128 | [-1, 1, Conv, [256, 3, 1]],
129 | [-1, 1, Conv, [256, 3, 1]],
130 | [-1, 1, Conv, [256, 3, 1]],
131 | [-1, 1, Conv, [256, 3, 1]],
132 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
133 | [-1, 1, Conv, [512, 1, 1]], # 101
134 |
135 | [75, 1, RepConv, [256, 3, 1]],
136 | [88, 1, RepConv, [512, 3, 1]],
137 | [101, 1, RepConv, [1024, 3, 1]],
138 |
139 | [[102,103,104], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5)
140 | ]
141 |
--------------------------------------------------------------------------------
/cfg/deploy/yolov7-tiny.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [10,13, 16,30, 33,23] # P3/8
9 | - [30,61, 62,45, 59,119] # P4/16
10 | - [116,90, 156,198, 373,326] # P5/32
11 |
12 | # yolov7-tiny backbone
13 | backbone:
14 | # [from, number, module, args] c2, k=1, s=1, p=None, g=1, act=True
15 | [[-1, 1, Conv, [32, 3, 2, None, 1, nn.LeakyReLU(0.1)]], # 0-P1/2
16 |
17 | [-1, 1, Conv, [64, 3, 2, None, 1, nn.LeakyReLU(0.1)]], # 1-P2/4
18 |
19 | [-1, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
20 | [-2, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
21 | [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
22 | [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
23 | [[-1, -2, -3, -4], 1, Concat, [1]],
24 | [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 7
25 |
26 | [-1, 1, MP, []], # 8-P3/8
27 | [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
28 | [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
29 | [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
30 | [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
31 | [[-1, -2, -3, -4], 1, Concat, [1]],
32 | [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 14
33 |
34 | [-1, 1, MP, []], # 15-P4/16
35 | [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
36 | [-2, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
37 | [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
38 | [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
39 | [[-1, -2, -3, -4], 1, Concat, [1]],
40 | [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 21
41 |
42 | [-1, 1, MP, []], # 22-P5/32
43 | [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
44 | [-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
45 | [-1, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
46 | [-1, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
47 | [[-1, -2, -3, -4], 1, Concat, [1]],
48 | [-1, 1, Conv, [512, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 28
49 | ]
50 |
51 | # yolov7-tiny head
52 | head:
53 | [[-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
54 | [-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
55 | [-1, 1, SP, [5]],
56 | [-2, 1, SP, [9]],
57 | [-3, 1, SP, [13]],
58 | [[-1, -2, -3, -4], 1, Concat, [1]],
59 | [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
60 | [[-1, -7], 1, Concat, [1]],
61 | [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 37
62 |
63 | [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
64 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
65 | [21, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # route backbone P4
66 | [[-1, -2], 1, Concat, [1]],
67 |
68 | [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
69 | [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
70 | [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
71 | [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
72 | [[-1, -2, -3, -4], 1, Concat, [1]],
73 | [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 47
74 |
75 | [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
76 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
77 | [14, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # route backbone P3
78 | [[-1, -2], 1, Concat, [1]],
79 |
80 | [-1, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
81 | [-2, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
82 | [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
83 | [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
84 | [[-1, -2, -3, -4], 1, Concat, [1]],
85 | [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 57
86 |
87 | [-1, 1, Conv, [128, 3, 2, None, 1, nn.LeakyReLU(0.1)]],
88 | [[-1, 47], 1, Concat, [1]],
89 |
90 | [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
91 | [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
92 | [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
93 | [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
94 | [[-1, -2, -3, -4], 1, Concat, [1]],
95 | [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 65
96 |
97 | [-1, 1, Conv, [256, 3, 2, None, 1, nn.LeakyReLU(0.1)]],
98 | [[-1, 37], 1, Concat, [1]],
99 |
100 | [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
101 | [-2, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
102 | [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
103 | [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
104 | [[-1, -2, -3, -4], 1, Concat, [1]],
105 | [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 73
106 |
107 | [57, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
108 | [65, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
109 | [73, 1, Conv, [512, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
110 |
111 | [[74,75,76], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
112 | ]
113 |
--------------------------------------------------------------------------------
/cfg/training/yolov7-tiny.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [10,13, 16,30, 33,23] # P3/8
9 | - [30,61, 62,45, 59,119] # P4/16
10 | - [116,90, 156,198, 373,326] # P5/32
11 |
12 | # yolov7-tiny backbone
13 | backbone:
14 | # [from, number, module, args] c2, k=1, s=1, p=None, g=1, act=True
15 | [[-1, 1, Conv, [32, 3, 2, None, 1, nn.LeakyReLU(0.1)]], # 0-P1/2
16 |
17 | [-1, 1, Conv, [64, 3, 2, None, 1, nn.LeakyReLU(0.1)]], # 1-P2/4
18 |
19 | [-1, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
20 | [-2, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
21 | [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
22 | [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
23 | [[-1, -2, -3, -4], 1, Concat, [1]],
24 | [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 7
25 |
26 | [-1, 1, MP, []], # 8-P3/8
27 | [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
28 | [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
29 | [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
30 | [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
31 | [[-1, -2, -3, -4], 1, Concat, [1]],
32 | [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 14
33 |
34 | [-1, 1, MP, []], # 15-P4/16
35 | [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
36 | [-2, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
37 | [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
38 | [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
39 | [[-1, -2, -3, -4], 1, Concat, [1]],
40 | [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 21
41 |
42 | [-1, 1, MP, []], # 22-P5/32
43 | [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
44 | [-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
45 | [-1, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
46 | [-1, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
47 | [[-1, -2, -3, -4], 1, Concat, [1]],
48 | [-1, 1, Conv, [512, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 28
49 | ]
50 |
51 | # yolov7-tiny head
52 | head:
53 | [[-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
54 | [-2, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
55 | [-1, 1, SP, [5]],
56 | [-2, 1, SP, [9]],
57 | [-3, 1, SP, [13]],
58 | [[-1, -2, -3, -4], 1, Concat, [1]],
59 | [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
60 | [[-1, -7], 1, Concat, [1]],
61 | [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 37
62 |
63 | [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
64 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
65 | [21, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # route backbone P4
66 | [[-1, -2], 1, Concat, [1]],
67 |
68 | [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
69 | [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
70 | [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
71 | [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
72 | [[-1, -2, -3, -4], 1, Concat, [1]],
73 | [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 47
74 |
75 | [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
76 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
77 | [14, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # route backbone P3
78 | [[-1, -2], 1, Concat, [1]],
79 |
80 | [-1, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
81 | [-2, 1, Conv, [32, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
82 | [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
83 | [-1, 1, Conv, [32, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
84 | [[-1, -2, -3, -4], 1, Concat, [1]],
85 | [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 57
86 |
87 | [-1, 1, Conv, [128, 3, 2, None, 1, nn.LeakyReLU(0.1)]],
88 | [[-1, 47], 1, Concat, [1]],
89 |
90 | [-1, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
91 | [-2, 1, Conv, [64, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
92 | [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
93 | [-1, 1, Conv, [64, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
94 | [[-1, -2, -3, -4], 1, Concat, [1]],
95 | [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 65
96 |
97 | [-1, 1, Conv, [256, 3, 2, None, 1, nn.LeakyReLU(0.1)]],
98 | [[-1, 37], 1, Concat, [1]],
99 |
100 | [-1, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
101 | [-2, 1, Conv, [128, 1, 1, None, 1, nn.LeakyReLU(0.1)]],
102 | [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
103 | [-1, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
104 | [[-1, -2, -3, -4], 1, Concat, [1]],
105 | [-1, 1, Conv, [256, 1, 1, None, 1, nn.LeakyReLU(0.1)]], # 73
106 |
107 | [57, 1, Conv, [128, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
108 | [65, 1, Conv, [256, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
109 | [73, 1, Conv, [512, 3, 1, None, 1, nn.LeakyReLU(0.1)]],
110 |
111 | [[74,75,76], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5)
112 | ]
113 |
--------------------------------------------------------------------------------
/cfg/deploy/yolov7x.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [12,16, 19,36, 40,28] # P3/8
9 | - [36,75, 76,55, 72,146] # P4/16
10 | - [142,110, 192,243, 459,401] # P5/32
11 |
12 | # yolov7x backbone
13 | backbone:
14 | # [from, number, module, args]
15 | [[-1, 1, Conv, [40, 3, 1]], # 0
16 |
17 | [-1, 1, Conv, [80, 3, 2]], # 1-P1/2
18 | [-1, 1, Conv, [80, 3, 1]],
19 |
20 | [-1, 1, Conv, [160, 3, 2]], # 3-P2/4
21 | [-1, 1, Conv, [64, 1, 1]],
22 | [-2, 1, Conv, [64, 1, 1]],
23 | [-1, 1, Conv, [64, 3, 1]],
24 | [-1, 1, Conv, [64, 3, 1]],
25 | [-1, 1, Conv, [64, 3, 1]],
26 | [-1, 1, Conv, [64, 3, 1]],
27 | [-1, 1, Conv, [64, 3, 1]],
28 | [-1, 1, Conv, [64, 3, 1]],
29 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
30 | [-1, 1, Conv, [320, 1, 1]], # 13
31 |
32 | [-1, 1, MP, []],
33 | [-1, 1, Conv, [160, 1, 1]],
34 | [-3, 1, Conv, [160, 1, 1]],
35 | [-1, 1, Conv, [160, 3, 2]],
36 | [[-1, -3], 1, Concat, [1]], # 18-P3/8
37 | [-1, 1, Conv, [128, 1, 1]],
38 | [-2, 1, Conv, [128, 1, 1]],
39 | [-1, 1, Conv, [128, 3, 1]],
40 | [-1, 1, Conv, [128, 3, 1]],
41 | [-1, 1, Conv, [128, 3, 1]],
42 | [-1, 1, Conv, [128, 3, 1]],
43 | [-1, 1, Conv, [128, 3, 1]],
44 | [-1, 1, Conv, [128, 3, 1]],
45 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
46 | [-1, 1, Conv, [640, 1, 1]], # 28
47 |
48 | [-1, 1, MP, []],
49 | [-1, 1, Conv, [320, 1, 1]],
50 | [-3, 1, Conv, [320, 1, 1]],
51 | [-1, 1, Conv, [320, 3, 2]],
52 | [[-1, -3], 1, Concat, [1]], # 33-P4/16
53 | [-1, 1, Conv, [256, 1, 1]],
54 | [-2, 1, Conv, [256, 1, 1]],
55 | [-1, 1, Conv, [256, 3, 1]],
56 | [-1, 1, Conv, [256, 3, 1]],
57 | [-1, 1, Conv, [256, 3, 1]],
58 | [-1, 1, Conv, [256, 3, 1]],
59 | [-1, 1, Conv, [256, 3, 1]],
60 | [-1, 1, Conv, [256, 3, 1]],
61 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
62 | [-1, 1, Conv, [1280, 1, 1]], # 43
63 |
64 | [-1, 1, MP, []],
65 | [-1, 1, Conv, [640, 1, 1]],
66 | [-3, 1, Conv, [640, 1, 1]],
67 | [-1, 1, Conv, [640, 3, 2]],
68 | [[-1, -3], 1, Concat, [1]], # 48-P5/32
69 | [-1, 1, Conv, [256, 1, 1]],
70 | [-2, 1, Conv, [256, 1, 1]],
71 | [-1, 1, Conv, [256, 3, 1]],
72 | [-1, 1, Conv, [256, 3, 1]],
73 | [-1, 1, Conv, [256, 3, 1]],
74 | [-1, 1, Conv, [256, 3, 1]],
75 | [-1, 1, Conv, [256, 3, 1]],
76 | [-1, 1, Conv, [256, 3, 1]],
77 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
78 | [-1, 1, Conv, [1280, 1, 1]], # 58
79 | ]
80 |
81 | # yolov7x head
82 | head:
83 | [[-1, 1, SPPCSPC, [640]], # 59
84 |
85 | [-1, 1, Conv, [320, 1, 1]],
86 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
87 | [43, 1, Conv, [320, 1, 1]], # route backbone P4
88 | [[-1, -2], 1, Concat, [1]],
89 |
90 | [-1, 1, Conv, [256, 1, 1]],
91 | [-2, 1, Conv, [256, 1, 1]],
92 | [-1, 1, Conv, [256, 3, 1]],
93 | [-1, 1, Conv, [256, 3, 1]],
94 | [-1, 1, Conv, [256, 3, 1]],
95 | [-1, 1, Conv, [256, 3, 1]],
96 | [-1, 1, Conv, [256, 3, 1]],
97 | [-1, 1, Conv, [256, 3, 1]],
98 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
99 | [-1, 1, Conv, [320, 1, 1]], # 73
100 |
101 | [-1, 1, Conv, [160, 1, 1]],
102 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
103 | [28, 1, Conv, [160, 1, 1]], # route backbone P3
104 | [[-1, -2], 1, Concat, [1]],
105 |
106 | [-1, 1, Conv, [128, 1, 1]],
107 | [-2, 1, Conv, [128, 1, 1]],
108 | [-1, 1, Conv, [128, 3, 1]],
109 | [-1, 1, Conv, [128, 3, 1]],
110 | [-1, 1, Conv, [128, 3, 1]],
111 | [-1, 1, Conv, [128, 3, 1]],
112 | [-1, 1, Conv, [128, 3, 1]],
113 | [-1, 1, Conv, [128, 3, 1]],
114 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
115 | [-1, 1, Conv, [160, 1, 1]], # 87
116 |
117 | [-1, 1, MP, []],
118 | [-1, 1, Conv, [160, 1, 1]],
119 | [-3, 1, Conv, [160, 1, 1]],
120 | [-1, 1, Conv, [160, 3, 2]],
121 | [[-1, -3, 73], 1, Concat, [1]],
122 |
123 | [-1, 1, Conv, [256, 1, 1]],
124 | [-2, 1, Conv, [256, 1, 1]],
125 | [-1, 1, Conv, [256, 3, 1]],
126 | [-1, 1, Conv, [256, 3, 1]],
127 | [-1, 1, Conv, [256, 3, 1]],
128 | [-1, 1, Conv, [256, 3, 1]],
129 | [-1, 1, Conv, [256, 3, 1]],
130 | [-1, 1, Conv, [256, 3, 1]],
131 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
132 | [-1, 1, Conv, [320, 1, 1]], # 102
133 |
134 | [-1, 1, MP, []],
135 | [-1, 1, Conv, [320, 1, 1]],
136 | [-3, 1, Conv, [320, 1, 1]],
137 | [-1, 1, Conv, [320, 3, 2]],
138 | [[-1, -3, 59], 1, Concat, [1]],
139 |
140 | [-1, 1, Conv, [512, 1, 1]],
141 | [-2, 1, Conv, [512, 1, 1]],
142 | [-1, 1, Conv, [512, 3, 1]],
143 | [-1, 1, Conv, [512, 3, 1]],
144 | [-1, 1, Conv, [512, 3, 1]],
145 | [-1, 1, Conv, [512, 3, 1]],
146 | [-1, 1, Conv, [512, 3, 1]],
147 | [-1, 1, Conv, [512, 3, 1]],
148 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
149 | [-1, 1, Conv, [640, 1, 1]], # 117
150 |
151 | [87, 1, Conv, [320, 3, 1]],
152 | [102, 1, Conv, [640, 3, 1]],
153 | [117, 1, Conv, [1280, 3, 1]],
154 |
155 | [[118,119,120], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
156 | ]
157 |
--------------------------------------------------------------------------------
/cfg/training/yolov7x.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [12,16, 19,36, 40,28] # P3/8
9 | - [36,75, 76,55, 72,146] # P4/16
10 | - [142,110, 192,243, 459,401] # P5/32
11 |
12 | # yolov7 backbone
13 | backbone:
14 | # [from, number, module, args]
15 | [[-1, 1, Conv, [40, 3, 1]], # 0
16 |
17 | [-1, 1, Conv, [80, 3, 2]], # 1-P1/2
18 | [-1, 1, Conv, [80, 3, 1]],
19 |
20 | [-1, 1, Conv, [160, 3, 2]], # 3-P2/4
21 | [-1, 1, Conv, [64, 1, 1]],
22 | [-2, 1, Conv, [64, 1, 1]],
23 | [-1, 1, Conv, [64, 3, 1]],
24 | [-1, 1, Conv, [64, 3, 1]],
25 | [-1, 1, Conv, [64, 3, 1]],
26 | [-1, 1, Conv, [64, 3, 1]],
27 | [-1, 1, Conv, [64, 3, 1]],
28 | [-1, 1, Conv, [64, 3, 1]],
29 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
30 | [-1, 1, Conv, [320, 1, 1]], # 13
31 |
32 | [-1, 1, MP, []],
33 | [-1, 1, Conv, [160, 1, 1]],
34 | [-3, 1, Conv, [160, 1, 1]],
35 | [-1, 1, Conv, [160, 3, 2]],
36 | [[-1, -3], 1, Concat, [1]], # 18-P3/8
37 | [-1, 1, Conv, [128, 1, 1]],
38 | [-2, 1, Conv, [128, 1, 1]],
39 | [-1, 1, Conv, [128, 3, 1]],
40 | [-1, 1, Conv, [128, 3, 1]],
41 | [-1, 1, Conv, [128, 3, 1]],
42 | [-1, 1, Conv, [128, 3, 1]],
43 | [-1, 1, Conv, [128, 3, 1]],
44 | [-1, 1, Conv, [128, 3, 1]],
45 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
46 | [-1, 1, Conv, [640, 1, 1]], # 28
47 |
48 | [-1, 1, MP, []],
49 | [-1, 1, Conv, [320, 1, 1]],
50 | [-3, 1, Conv, [320, 1, 1]],
51 | [-1, 1, Conv, [320, 3, 2]],
52 | [[-1, -3], 1, Concat, [1]], # 33-P4/16
53 | [-1, 1, Conv, [256, 1, 1]],
54 | [-2, 1, Conv, [256, 1, 1]],
55 | [-1, 1, Conv, [256, 3, 1]],
56 | [-1, 1, Conv, [256, 3, 1]],
57 | [-1, 1, Conv, [256, 3, 1]],
58 | [-1, 1, Conv, [256, 3, 1]],
59 | [-1, 1, Conv, [256, 3, 1]],
60 | [-1, 1, Conv, [256, 3, 1]],
61 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
62 | [-1, 1, Conv, [1280, 1, 1]], # 43
63 |
64 | [-1, 1, MP, []],
65 | [-1, 1, Conv, [640, 1, 1]],
66 | [-3, 1, Conv, [640, 1, 1]],
67 | [-1, 1, Conv, [640, 3, 2]],
68 | [[-1, -3], 1, Concat, [1]], # 48-P5/32
69 | [-1, 1, Conv, [256, 1, 1]],
70 | [-2, 1, Conv, [256, 1, 1]],
71 | [-1, 1, Conv, [256, 3, 1]],
72 | [-1, 1, Conv, [256, 3, 1]],
73 | [-1, 1, Conv, [256, 3, 1]],
74 | [-1, 1, Conv, [256, 3, 1]],
75 | [-1, 1, Conv, [256, 3, 1]],
76 | [-1, 1, Conv, [256, 3, 1]],
77 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
78 | [-1, 1, Conv, [1280, 1, 1]], # 58
79 | ]
80 |
81 | # yolov7 head
82 | head:
83 | [[-1, 1, SPPCSPC, [640]], # 59
84 |
85 | [-1, 1, Conv, [320, 1, 1]],
86 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
87 | [43, 1, Conv, [320, 1, 1]], # route backbone P4
88 | [[-1, -2], 1, Concat, [1]],
89 |
90 | [-1, 1, Conv, [256, 1, 1]],
91 | [-2, 1, Conv, [256, 1, 1]],
92 | [-1, 1, Conv, [256, 3, 1]],
93 | [-1, 1, Conv, [256, 3, 1]],
94 | [-1, 1, Conv, [256, 3, 1]],
95 | [-1, 1, Conv, [256, 3, 1]],
96 | [-1, 1, Conv, [256, 3, 1]],
97 | [-1, 1, Conv, [256, 3, 1]],
98 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
99 | [-1, 1, Conv, [320, 1, 1]], # 73
100 |
101 | [-1, 1, Conv, [160, 1, 1]],
102 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
103 | [28, 1, Conv, [160, 1, 1]], # route backbone P3
104 | [[-1, -2], 1, Concat, [1]],
105 |
106 | [-1, 1, Conv, [128, 1, 1]],
107 | [-2, 1, Conv, [128, 1, 1]],
108 | [-1, 1, Conv, [128, 3, 1]],
109 | [-1, 1, Conv, [128, 3, 1]],
110 | [-1, 1, Conv, [128, 3, 1]],
111 | [-1, 1, Conv, [128, 3, 1]],
112 | [-1, 1, Conv, [128, 3, 1]],
113 | [-1, 1, Conv, [128, 3, 1]],
114 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
115 | [-1, 1, Conv, [160, 1, 1]], # 87
116 |
117 | [-1, 1, MP, []],
118 | [-1, 1, Conv, [160, 1, 1]],
119 | [-3, 1, Conv, [160, 1, 1]],
120 | [-1, 1, Conv, [160, 3, 2]],
121 | [[-1, -3, 73], 1, Concat, [1]],
122 |
123 | [-1, 1, Conv, [256, 1, 1]],
124 | [-2, 1, Conv, [256, 1, 1]],
125 | [-1, 1, Conv, [256, 3, 1]],
126 | [-1, 1, Conv, [256, 3, 1]],
127 | [-1, 1, Conv, [256, 3, 1]],
128 | [-1, 1, Conv, [256, 3, 1]],
129 | [-1, 1, Conv, [256, 3, 1]],
130 | [-1, 1, Conv, [256, 3, 1]],
131 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
132 | [-1, 1, Conv, [320, 1, 1]], # 102
133 |
134 | [-1, 1, MP, []],
135 | [-1, 1, Conv, [320, 1, 1]],
136 | [-3, 1, Conv, [320, 1, 1]],
137 | [-1, 1, Conv, [320, 3, 2]],
138 | [[-1, -3, 59], 1, Concat, [1]],
139 |
140 | [-1, 1, Conv, [512, 1, 1]],
141 | [-2, 1, Conv, [512, 1, 1]],
142 | [-1, 1, Conv, [512, 3, 1]],
143 | [-1, 1, Conv, [512, 3, 1]],
144 | [-1, 1, Conv, [512, 3, 1]],
145 | [-1, 1, Conv, [512, 3, 1]],
146 | [-1, 1, Conv, [512, 3, 1]],
147 | [-1, 1, Conv, [512, 3, 1]],
148 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
149 | [-1, 1, Conv, [640, 1, 1]], # 117
150 |
151 | [87, 1, Conv, [320, 3, 1]],
152 | [102, 1, Conv, [640, 3, 1]],
153 | [117, 1, Conv, [1280, 3, 1]],
154 |
155 | [[118,119,120], 1, IDetect, [nc, anchors]], # Detect(P3, P4, P5)
156 | ]
157 |
--------------------------------------------------------------------------------
/cfg/deploy/yolov7-w6.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [ 19,27, 44,40, 38,94 ] # P3/8
9 | - [ 96,68, 86,152, 180,137 ] # P4/16
10 | - [ 140,301, 303,264, 238,542 ] # P5/32
11 | - [ 436,615, 739,380, 925,792 ] # P6/64
12 |
13 | # yolov7-w6 backbone
14 | backbone:
15 | # [from, number, module, args]
16 | [[-1, 1, ReOrg, []], # 0
17 | [-1, 1, Conv, [64, 3, 1]], # 1-P1/2
18 |
19 | [-1, 1, Conv, [128, 3, 2]], # 2-P2/4
20 | [-1, 1, Conv, [64, 1, 1]],
21 | [-2, 1, Conv, [64, 1, 1]],
22 | [-1, 1, Conv, [64, 3, 1]],
23 | [-1, 1, Conv, [64, 3, 1]],
24 | [-1, 1, Conv, [64, 3, 1]],
25 | [-1, 1, Conv, [64, 3, 1]],
26 | [[-1, -3, -5, -6], 1, Concat, [1]],
27 | [-1, 1, Conv, [128, 1, 1]], # 10
28 |
29 | [-1, 1, Conv, [256, 3, 2]], # 11-P3/8
30 | [-1, 1, Conv, [128, 1, 1]],
31 | [-2, 1, Conv, [128, 1, 1]],
32 | [-1, 1, Conv, [128, 3, 1]],
33 | [-1, 1, Conv, [128, 3, 1]],
34 | [-1, 1, Conv, [128, 3, 1]],
35 | [-1, 1, Conv, [128, 3, 1]],
36 | [[-1, -3, -5, -6], 1, Concat, [1]],
37 | [-1, 1, Conv, [256, 1, 1]], # 19
38 |
39 | [-1, 1, Conv, [512, 3, 2]], # 20-P4/16
40 | [-1, 1, Conv, [256, 1, 1]],
41 | [-2, 1, Conv, [256, 1, 1]],
42 | [-1, 1, Conv, [256, 3, 1]],
43 | [-1, 1, Conv, [256, 3, 1]],
44 | [-1, 1, Conv, [256, 3, 1]],
45 | [-1, 1, Conv, [256, 3, 1]],
46 | [[-1, -3, -5, -6], 1, Concat, [1]],
47 | [-1, 1, Conv, [512, 1, 1]], # 28
48 |
49 | [-1, 1, Conv, [768, 3, 2]], # 29-P5/32
50 | [-1, 1, Conv, [384, 1, 1]],
51 | [-2, 1, Conv, [384, 1, 1]],
52 | [-1, 1, Conv, [384, 3, 1]],
53 | [-1, 1, Conv, [384, 3, 1]],
54 | [-1, 1, Conv, [384, 3, 1]],
55 | [-1, 1, Conv, [384, 3, 1]],
56 | [[-1, -3, -5, -6], 1, Concat, [1]],
57 | [-1, 1, Conv, [768, 1, 1]], # 37
58 |
59 | [-1, 1, Conv, [1024, 3, 2]], # 38-P6/64
60 | [-1, 1, Conv, [512, 1, 1]],
61 | [-2, 1, Conv, [512, 1, 1]],
62 | [-1, 1, Conv, [512, 3, 1]],
63 | [-1, 1, Conv, [512, 3, 1]],
64 | [-1, 1, Conv, [512, 3, 1]],
65 | [-1, 1, Conv, [512, 3, 1]],
66 | [[-1, -3, -5, -6], 1, Concat, [1]],
67 | [-1, 1, Conv, [1024, 1, 1]], # 46
68 | ]
69 |
70 | # yolov7-w6 head
71 | head:
72 | [[-1, 1, SPPCSPC, [512]], # 47
73 |
74 | [-1, 1, Conv, [384, 1, 1]],
75 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
76 | [37, 1, Conv, [384, 1, 1]], # route backbone P5
77 | [[-1, -2], 1, Concat, [1]],
78 |
79 | [-1, 1, Conv, [384, 1, 1]],
80 | [-2, 1, Conv, [384, 1, 1]],
81 | [-1, 1, Conv, [192, 3, 1]],
82 | [-1, 1, Conv, [192, 3, 1]],
83 | [-1, 1, Conv, [192, 3, 1]],
84 | [-1, 1, Conv, [192, 3, 1]],
85 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
86 | [-1, 1, Conv, [384, 1, 1]], # 59
87 |
88 | [-1, 1, Conv, [256, 1, 1]],
89 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
90 | [28, 1, Conv, [256, 1, 1]], # route backbone P4
91 | [[-1, -2], 1, Concat, [1]],
92 |
93 | [-1, 1, Conv, [256, 1, 1]],
94 | [-2, 1, Conv, [256, 1, 1]],
95 | [-1, 1, Conv, [128, 3, 1]],
96 | [-1, 1, Conv, [128, 3, 1]],
97 | [-1, 1, Conv, [128, 3, 1]],
98 | [-1, 1, Conv, [128, 3, 1]],
99 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
100 | [-1, 1, Conv, [256, 1, 1]], # 71
101 |
102 | [-1, 1, Conv, [128, 1, 1]],
103 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
104 | [19, 1, Conv, [128, 1, 1]], # route backbone P3
105 | [[-1, -2], 1, Concat, [1]],
106 |
107 | [-1, 1, Conv, [128, 1, 1]],
108 | [-2, 1, Conv, [128, 1, 1]],
109 | [-1, 1, Conv, [64, 3, 1]],
110 | [-1, 1, Conv, [64, 3, 1]],
111 | [-1, 1, Conv, [64, 3, 1]],
112 | [-1, 1, Conv, [64, 3, 1]],
113 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
114 | [-1, 1, Conv, [128, 1, 1]], # 83
115 |
116 | [-1, 1, Conv, [256, 3, 2]],
117 | [[-1, 71], 1, Concat, [1]], # cat
118 |
119 | [-1, 1, Conv, [256, 1, 1]],
120 | [-2, 1, Conv, [256, 1, 1]],
121 | [-1, 1, Conv, [128, 3, 1]],
122 | [-1, 1, Conv, [128, 3, 1]],
123 | [-1, 1, Conv, [128, 3, 1]],
124 | [-1, 1, Conv, [128, 3, 1]],
125 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
126 | [-1, 1, Conv, [256, 1, 1]], # 93
127 |
128 | [-1, 1, Conv, [384, 3, 2]],
129 | [[-1, 59], 1, Concat, [1]], # cat
130 |
131 | [-1, 1, Conv, [384, 1, 1]],
132 | [-2, 1, Conv, [384, 1, 1]],
133 | [-1, 1, Conv, [192, 3, 1]],
134 | [-1, 1, Conv, [192, 3, 1]],
135 | [-1, 1, Conv, [192, 3, 1]],
136 | [-1, 1, Conv, [192, 3, 1]],
137 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
138 | [-1, 1, Conv, [384, 1, 1]], # 103
139 |
140 | [-1, 1, Conv, [512, 3, 2]],
141 | [[-1, 47], 1, Concat, [1]], # cat
142 |
143 | [-1, 1, Conv, [512, 1, 1]],
144 | [-2, 1, Conv, [512, 1, 1]],
145 | [-1, 1, Conv, [256, 3, 1]],
146 | [-1, 1, Conv, [256, 3, 1]],
147 | [-1, 1, Conv, [256, 3, 1]],
148 | [-1, 1, Conv, [256, 3, 1]],
149 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
150 | [-1, 1, Conv, [512, 1, 1]], # 113
151 |
152 | [83, 1, Conv, [256, 3, 1]],
153 | [93, 1, Conv, [512, 3, 1]],
154 | [103, 1, Conv, [768, 3, 1]],
155 | [113, 1, Conv, [1024, 3, 1]],
156 |
157 | [[114,115,116,117], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6)
158 | ]
159 |
--------------------------------------------------------------------------------
/utils/google_utils.py:
--------------------------------------------------------------------------------
1 | # Google utils: https://cloud.google.com/storage/docs/reference/libraries
2 |
3 | import os
4 | import platform
5 | import subprocess
6 | import time
7 | from pathlib import Path
8 |
9 | import requests
10 | import torch
11 |
12 |
13 | def gsutil_getsize(url=''):
14 | # gs://bucket/file size https://cloud.google.com/storage/docs/gsutil/commands/du
15 | s = subprocess.check_output(f'gsutil du {url}', shell=True).decode('utf-8')
16 | return eval(s.split(' ')[0]) if len(s) else 0 # bytes
17 |
18 |
19 | def attempt_download(file, repo='WongKinYiu/yolov7'):
20 | # Attempt file download if does not exist
21 | file = Path(str(file).strip().replace("'", '').lower())
22 |
23 | if not file.exists():
24 | try:
25 | response = requests.get(f'https://api.github.com/repos/{repo}/releases/latest').json() # github api
26 | assets = [x['name'] for x in response['assets']] # release assets
27 | tag = response['tag_name'] # i.e. 'v1.0'
28 | except: # fallback plan
29 | assets = ['yolov7.pt', 'yolov7-tiny.pt', 'yolov7x.pt', 'yolov7-d6.pt', 'yolov7-e6.pt',
30 | 'yolov7-e6e.pt', 'yolov7-w6.pt']
31 | tag = subprocess.check_output('git tag', shell=True).decode().split()[-1]
32 |
33 | name = file.name
34 | if name in assets:
35 | msg = f'{file} missing, try downloading from https://github.com/{repo}/releases/'
36 | redundant = False # second download option
37 | try: # GitHub
38 | url = f'https://github.com/{repo}/releases/download/{tag}/{name}'
39 | print(f'Downloading {url} to {file}...')
40 | torch.hub.download_url_to_file(url, file)
41 | assert file.exists() and file.stat().st_size > 1E6 # check
42 | except Exception as e: # GCP
43 | print(f'Download error: {e}')
44 | assert redundant, 'No secondary mirror'
45 | url = f'https://storage.googleapis.com/{repo}/ckpt/{name}'
46 | print(f'Downloading {url} to {file}...')
47 | os.system(f'curl -L {url} -o {file}') # torch.hub.download_url_to_file(url, weights)
48 | finally:
49 | if not file.exists() or file.stat().st_size < 1E6: # check
50 | file.unlink(missing_ok=True) # remove partial downloads
51 | print(f'ERROR: Download failure: {msg}')
52 | print('')
53 | return
54 |
55 |
56 | def gdrive_download(id='', file='tmp.zip'):
57 | # Downloads a file from Google Drive. from yolov7.utils.google_utils import *; gdrive_download()
58 | t = time.time()
59 | file = Path(file)
60 | cookie = Path('cookie') # gdrive cookie
61 | print(f'Downloading https://drive.google.com/uc?export=download&id={id} as {file}... ', end='')
62 | file.unlink(missing_ok=True) # remove existing file
63 | cookie.unlink(missing_ok=True) # remove existing cookie
64 |
65 | # Attempt file download
66 | out = "NUL" if platform.system() == "Windows" else "/dev/null"
67 | os.system(f'curl -c ./cookie -s -L "drive.google.com/uc?export=download&id={id}" > {out}')
68 | if os.path.exists('cookie'): # large file
69 | s = f'curl -Lb ./cookie "drive.google.com/uc?export=download&confirm={get_token()}&id={id}" -o {file}'
70 | else: # small file
71 | s = f'curl -s -L -o {file} "drive.google.com/uc?export=download&id={id}"'
72 | r = os.system(s) # execute, capture return
73 | cookie.unlink(missing_ok=True) # remove existing cookie
74 |
75 | # Error check
76 | if r != 0:
77 | file.unlink(missing_ok=True) # remove partial
78 | print('Download error ') # raise Exception('Download error')
79 | return r
80 |
81 | # Unzip if archive
82 | if file.suffix == '.zip':
83 | print('unzipping... ', end='')
84 | os.system(f'unzip -q {file}') # unzip
85 | file.unlink() # remove zip to free space
86 |
87 | print(f'Done ({time.time() - t:.1f}s)')
88 | return r
89 |
90 |
91 | def get_token(cookie="./cookie"):
92 | with open(cookie) as f:
93 | for line in f:
94 | if "download" in line:
95 | return line.split()[-1]
96 | return ""
97 |
98 | # def upload_blob(bucket_name, source_file_name, destination_blob_name):
99 | # # Uploads a file to a bucket
100 | # # https://cloud.google.com/storage/docs/uploading-objects#storage-upload-object-python
101 | #
102 | # storage_client = storage.Client()
103 | # bucket = storage_client.get_bucket(bucket_name)
104 | # blob = bucket.blob(destination_blob_name)
105 | #
106 | # blob.upload_from_filename(source_file_name)
107 | #
108 | # print('File {} uploaded to {}.'.format(
109 | # source_file_name,
110 | # destination_blob_name))
111 | #
112 | #
113 | # def download_blob(bucket_name, source_blob_name, destination_file_name):
114 | # # Uploads a blob from a bucket
115 | # storage_client = storage.Client()
116 | # bucket = storage_client.get_bucket(bucket_name)
117 | # blob = bucket.blob(source_blob_name)
118 | #
119 | # blob.download_to_filename(destination_file_name)
120 | #
121 | # print('Blob {} downloaded to {}.'.format(
122 | # source_blob_name,
123 | # destination_file_name))
124 |
--------------------------------------------------------------------------------
/cfg/training/yolov7-w6.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [ 19,27, 44,40, 38,94 ] # P3/8
9 | - [ 96,68, 86,152, 180,137 ] # P4/16
10 | - [ 140,301, 303,264, 238,542 ] # P5/32
11 | - [ 436,615, 739,380, 925,792 ] # P6/64
12 |
13 | # yolov7 backbone
14 | backbone:
15 | # [from, number, module, args]
16 | [[-1, 1, ReOrg, []], # 0
17 | [-1, 1, Conv, [64, 3, 1]], # 1-P1/2
18 |
19 | [-1, 1, Conv, [128, 3, 2]], # 2-P2/4
20 | [-1, 1, Conv, [64, 1, 1]],
21 | [-2, 1, Conv, [64, 1, 1]],
22 | [-1, 1, Conv, [64, 3, 1]],
23 | [-1, 1, Conv, [64, 3, 1]],
24 | [-1, 1, Conv, [64, 3, 1]],
25 | [-1, 1, Conv, [64, 3, 1]],
26 | [[-1, -3, -5, -6], 1, Concat, [1]],
27 | [-1, 1, Conv, [128, 1, 1]], # 10
28 |
29 | [-1, 1, Conv, [256, 3, 2]], # 11-P3/8
30 | [-1, 1, Conv, [128, 1, 1]],
31 | [-2, 1, Conv, [128, 1, 1]],
32 | [-1, 1, Conv, [128, 3, 1]],
33 | [-1, 1, Conv, [128, 3, 1]],
34 | [-1, 1, Conv, [128, 3, 1]],
35 | [-1, 1, Conv, [128, 3, 1]],
36 | [[-1, -3, -5, -6], 1, Concat, [1]],
37 | [-1, 1, Conv, [256, 1, 1]], # 19
38 |
39 | [-1, 1, Conv, [512, 3, 2]], # 20-P4/16
40 | [-1, 1, Conv, [256, 1, 1]],
41 | [-2, 1, Conv, [256, 1, 1]],
42 | [-1, 1, Conv, [256, 3, 1]],
43 | [-1, 1, Conv, [256, 3, 1]],
44 | [-1, 1, Conv, [256, 3, 1]],
45 | [-1, 1, Conv, [256, 3, 1]],
46 | [[-1, -3, -5, -6], 1, Concat, [1]],
47 | [-1, 1, Conv, [512, 1, 1]], # 28
48 |
49 | [-1, 1, Conv, [768, 3, 2]], # 29-P5/32
50 | [-1, 1, Conv, [384, 1, 1]],
51 | [-2, 1, Conv, [384, 1, 1]],
52 | [-1, 1, Conv, [384, 3, 1]],
53 | [-1, 1, Conv, [384, 3, 1]],
54 | [-1, 1, Conv, [384, 3, 1]],
55 | [-1, 1, Conv, [384, 3, 1]],
56 | [[-1, -3, -5, -6], 1, Concat, [1]],
57 | [-1, 1, Conv, [768, 1, 1]], # 37
58 |
59 | [-1, 1, Conv, [1024, 3, 2]], # 38-P6/64
60 | [-1, 1, Conv, [512, 1, 1]],
61 | [-2, 1, Conv, [512, 1, 1]],
62 | [-1, 1, Conv, [512, 3, 1]],
63 | [-1, 1, Conv, [512, 3, 1]],
64 | [-1, 1, Conv, [512, 3, 1]],
65 | [-1, 1, Conv, [512, 3, 1]],
66 | [[-1, -3, -5, -6], 1, Concat, [1]],
67 | [-1, 1, Conv, [1024, 1, 1]], # 46
68 | ]
69 |
70 | # yolov7 head
71 | head:
72 | [[-1, 1, SPPCSPC, [512]], # 47
73 |
74 | [-1, 1, Conv, [384, 1, 1]],
75 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
76 | [37, 1, Conv, [384, 1, 1]], # route backbone P5
77 | [[-1, -2], 1, Concat, [1]],
78 |
79 | [-1, 1, Conv, [384, 1, 1]],
80 | [-2, 1, Conv, [384, 1, 1]],
81 | [-1, 1, Conv, [192, 3, 1]],
82 | [-1, 1, Conv, [192, 3, 1]],
83 | [-1, 1, Conv, [192, 3, 1]],
84 | [-1, 1, Conv, [192, 3, 1]],
85 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
86 | [-1, 1, Conv, [384, 1, 1]], # 59
87 |
88 | [-1, 1, Conv, [256, 1, 1]],
89 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
90 | [28, 1, Conv, [256, 1, 1]], # route backbone P4
91 | [[-1, -2], 1, Concat, [1]],
92 |
93 | [-1, 1, Conv, [256, 1, 1]],
94 | [-2, 1, Conv, [256, 1, 1]],
95 | [-1, 1, Conv, [128, 3, 1]],
96 | [-1, 1, Conv, [128, 3, 1]],
97 | [-1, 1, Conv, [128, 3, 1]],
98 | [-1, 1, Conv, [128, 3, 1]],
99 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
100 | [-1, 1, Conv, [256, 1, 1]], # 71
101 |
102 | [-1, 1, Conv, [128, 1, 1]],
103 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
104 | [19, 1, Conv, [128, 1, 1]], # route backbone P3
105 | [[-1, -2], 1, Concat, [1]],
106 |
107 | [-1, 1, Conv, [128, 1, 1]],
108 | [-2, 1, Conv, [128, 1, 1]],
109 | [-1, 1, Conv, [64, 3, 1]],
110 | [-1, 1, Conv, [64, 3, 1]],
111 | [-1, 1, Conv, [64, 3, 1]],
112 | [-1, 1, Conv, [64, 3, 1]],
113 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
114 | [-1, 1, Conv, [128, 1, 1]], # 83
115 |
116 | [-1, 1, Conv, [256, 3, 2]],
117 | [[-1, 71], 1, Concat, [1]], # cat
118 |
119 | [-1, 1, Conv, [256, 1, 1]],
120 | [-2, 1, Conv, [256, 1, 1]],
121 | [-1, 1, Conv, [128, 3, 1]],
122 | [-1, 1, Conv, [128, 3, 1]],
123 | [-1, 1, Conv, [128, 3, 1]],
124 | [-1, 1, Conv, [128, 3, 1]],
125 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
126 | [-1, 1, Conv, [256, 1, 1]], # 93
127 |
128 | [-1, 1, Conv, [384, 3, 2]],
129 | [[-1, 59], 1, Concat, [1]], # cat
130 |
131 | [-1, 1, Conv, [384, 1, 1]],
132 | [-2, 1, Conv, [384, 1, 1]],
133 | [-1, 1, Conv, [192, 3, 1]],
134 | [-1, 1, Conv, [192, 3, 1]],
135 | [-1, 1, Conv, [192, 3, 1]],
136 | [-1, 1, Conv, [192, 3, 1]],
137 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
138 | [-1, 1, Conv, [384, 1, 1]], # 103
139 |
140 | [-1, 1, Conv, [512, 3, 2]],
141 | [[-1, 47], 1, Concat, [1]], # cat
142 |
143 | [-1, 1, Conv, [512, 1, 1]],
144 | [-2, 1, Conv, [512, 1, 1]],
145 | [-1, 1, Conv, [256, 3, 1]],
146 | [-1, 1, Conv, [256, 3, 1]],
147 | [-1, 1, Conv, [256, 3, 1]],
148 | [-1, 1, Conv, [256, 3, 1]],
149 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
150 | [-1, 1, Conv, [512, 1, 1]], # 113
151 |
152 | [83, 1, Conv, [256, 3, 1]],
153 | [93, 1, Conv, [512, 3, 1]],
154 | [103, 1, Conv, [768, 3, 1]],
155 | [113, 1, Conv, [1024, 3, 1]],
156 |
157 | [83, 1, Conv, [320, 3, 1]],
158 | [71, 1, Conv, [640, 3, 1]],
159 | [59, 1, Conv, [960, 3, 1]],
160 | [47, 1, Conv, [1280, 3, 1]],
161 |
162 | [[114,115,116,117,118,119,120,121], 1, IAuxDetect, [nc, anchors]], # Detect(P3, P4, P5, P6)
163 | ]
164 |
--------------------------------------------------------------------------------
/cfg/yolov7-mask.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 | pooler_scale: 0.25
6 |
7 | # anchors
8 | anchors:
9 | - [12,16, 19,36, 40,28] # P3/8
10 | - [36,75, 76,55, 72,146] # P4/16
11 | - [142,110, 192,243, 459,401] # P5/32
12 |
13 | # yolov7 backbone
14 | backbone:
15 | [[-1, 1, Conv, [32, 3, 1]], # 0
16 |
17 | [-1, 1, Conv, [64, 3, 2]], # 1-P1/2
18 | [-1, 1, Conv, [64, 3, 1]],
19 |
20 | [-1, 1, Conv, [128, 3, 2]], # 3-P2/4
21 | [-1, 1, Conv, [64, 1, 1]],
22 | [-2, 1, Conv, [64, 1, 1]],
23 | [-1, 1, Conv, [64, 3, 1]],
24 | [-1, 1, Conv, [64, 3, 1]],
25 | [-1, 1, Conv, [64, 3, 1]],
26 | [-1, 1, Conv, [64, 3, 1]],
27 | [[-1, -3, -5, -6], 1, Concat, [1]],
28 | [-1, 1, Conv, [256, 1, 1]], # 11
29 |
30 | [-1, 1, MP, []],
31 | [-1, 1, Conv, [128, 1, 1]],
32 | [-3, 1, Conv, [128, 1, 1]],
33 | [-1, 1, Conv, [128, 3, 2]],
34 | [[-1, -3], 1, Concat, [1]], # 16-P3/8
35 | [-1, 1, Conv, [128, 1, 1]],
36 | [-2, 1, Conv, [128, 1, 1]],
37 | [-1, 1, Conv, [128, 3, 1]],
38 | [-1, 1, Conv, [128, 3, 1]],
39 | [-1, 1, Conv, [128, 3, 1]],
40 | [-1, 1, Conv, [128, 3, 1]],
41 | [[-1, -3, -5, -6], 1, Concat, [1]],
42 | [-1, 1, Conv, [512, 1, 1]], # 24
43 |
44 | [-1, 1, MP, []],
45 | [-1, 1, Conv, [256, 1, 1]],
46 | [-3, 1, Conv, [256, 1, 1]],
47 | [-1, 1, Conv, [256, 3, 2]],
48 | [[-1, -3], 1, Concat, [1]], # 29-P4/16
49 | [-1, 1, Conv, [256, 1, 1]],
50 | [-2, 1, Conv, [256, 1, 1]],
51 | [-1, 1, Conv, [256, 3, 1]],
52 | [-1, 1, Conv, [256, 3, 1]],
53 | [-1, 1, Conv, [256, 3, 1]],
54 | [-1, 1, Conv, [256, 3, 1]],
55 | [[-1, -3, -5, -6], 1, Concat, [1]],
56 | [-1, 1, Conv, [1024, 1, 1]], # 37
57 |
58 | [-1, 1, MP, []],
59 | [-1, 1, Conv, [512, 1, 1]],
60 | [-3, 1, Conv, [512, 1, 1]],
61 | [-1, 1, Conv, [512, 3, 2]],
62 | [[-1, -3], 1, Concat, [1]], # 42-P5/32
63 | [-1, 1, Conv, [256, 1, 1]],
64 | [-2, 1, Conv, [256, 1, 1]],
65 | [-1, 1, Conv, [256, 3, 1]],
66 | [-1, 1, Conv, [256, 3, 1]],
67 | [-1, 1, Conv, [256, 3, 1]],
68 | [-1, 1, Conv, [256, 3, 1]],
69 | [[-1, -3, -5, -6], 1, Concat, [1]],
70 | [-1, 1, Conv, [1024, 1, 1]], # 50
71 | ]
72 |
73 | # yolov7 head
74 | head:
75 | [[-1, 1, SPPCSPC, [512]], # 51
76 |
77 | [-1, 1, Conv, [256, 1, 1]],
78 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
79 | [37, 1, Conv, [256, 1, 1]], # route backbone P4
80 | [[-1, -2], 1, Concat, [1]],
81 |
82 | [-1, 1, Conv, [256, 1, 1]],
83 | [-2, 1, Conv, [256, 1, 1]],
84 | [-1, 1, Conv, [128, 3, 1]],
85 | [-1, 1, Conv, [128, 3, 1]],
86 | [-1, 1, Conv, [128, 3, 1]],
87 | [-1, 1, Conv, [128, 3, 1]],
88 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
89 | [-1, 1, Conv, [256, 1, 1]], # 63
90 |
91 | [-1, 1, Conv, [128, 1, 1]],
92 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
93 | [24, 1, Conv, [128, 1, 1]], # route backbone P3
94 | [[-1, -2], 1, Concat, [1]],
95 |
96 | [-1, 1, Conv, [128, 1, 1]],
97 | [-2, 1, Conv, [128, 1, 1]],
98 | [-1, 1, Conv, [64, 3, 1]],
99 | [-1, 1, Conv, [64, 3, 1]],
100 | [-1, 1, Conv, [64, 3, 1]],
101 | [-1, 1, Conv, [64, 3, 1]],
102 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
103 | [-1, 1, Conv, [128, 1, 1]], # 75
104 |
105 | [-1, 1, MP, []],
106 | [-1, 1, Conv, [128, 1, 1]],
107 | [-3, 1, Conv, [128, 1, 1]],
108 | [-1, 1, Conv, [128, 3, 2]],
109 | [[-1, -3, 63], 1, Concat, [1]],
110 |
111 | [-1, 1, Conv, [256, 1, 1]],
112 | [-2, 1, Conv, [256, 1, 1]],
113 | [-1, 1, Conv, [128, 3, 1]],
114 | [-1, 1, Conv, [128, 3, 1]],
115 | [-1, 1, Conv, [128, 3, 1]],
116 | [-1, 1, Conv, [128, 3, 1]],
117 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
118 | [-1, 1, Conv, [256, 1, 1]], # 88
119 |
120 | [-1, 1, MP, []],
121 | [-1, 1, Conv, [256, 1, 1]],
122 | [-3, 1, Conv, [256, 1, 1]],
123 | [-1, 1, Conv, [256, 3, 2]],
124 | [[-1, -3, 51], 1, Concat, [1]],
125 |
126 | [-1, 1, Conv, [512, 1, 1]],
127 | [-2, 1, Conv, [512, 1, 1]],
128 | [-1, 1, Conv, [256, 3, 1]],
129 | [-1, 1, Conv, [256, 3, 1]],
130 | [-1, 1, Conv, [256, 3, 1]],
131 | [-1, 1, Conv, [256, 3, 1]],
132 | [[-1, -2, -3, -4, -5, -6], 1, Concat, [1]],
133 | [-1, 1, Conv, [512, 1, 1]], # 101
134 |
135 | [75, 1, Conv, [256, 3, 1] ],
136 | [88, 1, Conv, [512, 3, 1] ],
137 | [101, 1, Conv, [1024, 3, 1]],
138 |
139 | [[102, 103, 104], 1, Merge, [[256, 512, 1024]]], # 105
140 |
141 | [75, 1, Conv, [64, 1, 1] ],
142 | [-1, 1, nn.Upsample, [None, 2, 'nearest'] ],
143 | [11, 1, Conv, [64, 1, 1] ], # route backbone P2
144 | [[-1, -2], 1, Concat, [1] ],
145 | [-1, 2, BottleneckCSPB, [64] ],
146 | [-1, 1, Conv, [64, 1, 1] ], # 111
147 |
148 | [[75, 88, 101], 1, Refine, [128, 3, 1]],
149 | [-1, 1, Conv, [128, 3, 1]],
150 | [-1, 1, nn.Upsample, [None, 2, 'bilinear']],
151 | [-1, 1, Conv, [128, 3, 1]],
152 | [111, 1, Conv, [128, 3, 1]],
153 | [[-1, -2], 1, Shortcut, [1]],
154 | [-1, 1, Conv, [128, 3, 1]],
155 | [-1, 1, nn.Conv2d, [4, 1]], # 119
156 |
157 | [[75, 63, 51], 1, Refine, [128, 3, 1]],
158 | [-1, 1, Conv, [128, 3, 1]],
159 | [-1, 1, nn.Upsample, [None, 2, 'bilinear']],
160 | [-1, 1, Conv, [128, 3, 1]],
161 | [111, 1, Conv, [128, 3, 1]],
162 | [[-1, -2], 1, Shortcut, [1]],
163 | [-1, 1, Conv, [128, 3, 1]],
164 | [-1, 1, nn.Conv2d, [1, 1]], # 127
165 |
166 | [[105, 119, 127], 1, MT, [nc, anchors, 980]], # Detect(P3, P4, P5)
167 | ]
168 |
169 |
--------------------------------------------------------------------------------
/cfg/deploy/yolov7-e6.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [ 19,27, 44,40, 38,94 ] # P3/8
9 | - [ 96,68, 86,152, 180,137 ] # P4/16
10 | - [ 140,301, 303,264, 238,542 ] # P5/32
11 | - [ 436,615, 739,380, 925,792 ] # P6/64
12 |
13 | # yolov7-e6 backbone
14 | backbone:
15 | # [from, number, module, args],
16 | [[-1, 1, ReOrg, []], # 0
17 | [-1, 1, Conv, [80, 3, 1]], # 1-P1/2
18 |
19 | [-1, 1, DownC, [160]], # 2-P2/4
20 | [-1, 1, Conv, [64, 1, 1]],
21 | [-2, 1, Conv, [64, 1, 1]],
22 | [-1, 1, Conv, [64, 3, 1]],
23 | [-1, 1, Conv, [64, 3, 1]],
24 | [-1, 1, Conv, [64, 3, 1]],
25 | [-1, 1, Conv, [64, 3, 1]],
26 | [-1, 1, Conv, [64, 3, 1]],
27 | [-1, 1, Conv, [64, 3, 1]],
28 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
29 | [-1, 1, Conv, [160, 1, 1]], # 12
30 |
31 | [-1, 1, DownC, [320]], # 13-P3/8
32 | [-1, 1, Conv, [128, 1, 1]],
33 | [-2, 1, Conv, [128, 1, 1]],
34 | [-1, 1, Conv, [128, 3, 1]],
35 | [-1, 1, Conv, [128, 3, 1]],
36 | [-1, 1, Conv, [128, 3, 1]],
37 | [-1, 1, Conv, [128, 3, 1]],
38 | [-1, 1, Conv, [128, 3, 1]],
39 | [-1, 1, Conv, [128, 3, 1]],
40 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
41 | [-1, 1, Conv, [320, 1, 1]], # 23
42 |
43 | [-1, 1, DownC, [640]], # 24-P4/16
44 | [-1, 1, Conv, [256, 1, 1]],
45 | [-2, 1, Conv, [256, 1, 1]],
46 | [-1, 1, Conv, [256, 3, 1]],
47 | [-1, 1, Conv, [256, 3, 1]],
48 | [-1, 1, Conv, [256, 3, 1]],
49 | [-1, 1, Conv, [256, 3, 1]],
50 | [-1, 1, Conv, [256, 3, 1]],
51 | [-1, 1, Conv, [256, 3, 1]],
52 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
53 | [-1, 1, Conv, [640, 1, 1]], # 34
54 |
55 | [-1, 1, DownC, [960]], # 35-P5/32
56 | [-1, 1, Conv, [384, 1, 1]],
57 | [-2, 1, Conv, [384, 1, 1]],
58 | [-1, 1, Conv, [384, 3, 1]],
59 | [-1, 1, Conv, [384, 3, 1]],
60 | [-1, 1, Conv, [384, 3, 1]],
61 | [-1, 1, Conv, [384, 3, 1]],
62 | [-1, 1, Conv, [384, 3, 1]],
63 | [-1, 1, Conv, [384, 3, 1]],
64 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
65 | [-1, 1, Conv, [960, 1, 1]], # 45
66 |
67 | [-1, 1, DownC, [1280]], # 46-P6/64
68 | [-1, 1, Conv, [512, 1, 1]],
69 | [-2, 1, Conv, [512, 1, 1]],
70 | [-1, 1, Conv, [512, 3, 1]],
71 | [-1, 1, Conv, [512, 3, 1]],
72 | [-1, 1, Conv, [512, 3, 1]],
73 | [-1, 1, Conv, [512, 3, 1]],
74 | [-1, 1, Conv, [512, 3, 1]],
75 | [-1, 1, Conv, [512, 3, 1]],
76 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
77 | [-1, 1, Conv, [1280, 1, 1]], # 56
78 | ]
79 |
80 | # yolov7-e6 head
81 | head:
82 | [[-1, 1, SPPCSPC, [640]], # 57
83 |
84 | [-1, 1, Conv, [480, 1, 1]],
85 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
86 | [45, 1, Conv, [480, 1, 1]], # route backbone P5
87 | [[-1, -2], 1, Concat, [1]],
88 |
89 | [-1, 1, Conv, [384, 1, 1]],
90 | [-2, 1, Conv, [384, 1, 1]],
91 | [-1, 1, Conv, [192, 3, 1]],
92 | [-1, 1, Conv, [192, 3, 1]],
93 | [-1, 1, Conv, [192, 3, 1]],
94 | [-1, 1, Conv, [192, 3, 1]],
95 | [-1, 1, Conv, [192, 3, 1]],
96 | [-1, 1, Conv, [192, 3, 1]],
97 | [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]],
98 | [-1, 1, Conv, [480, 1, 1]], # 71
99 |
100 | [-1, 1, Conv, [320, 1, 1]],
101 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
102 | [34, 1, Conv, [320, 1, 1]], # route backbone P4
103 | [[-1, -2], 1, Concat, [1]],
104 |
105 | [-1, 1, Conv, [256, 1, 1]],
106 | [-2, 1, Conv, [256, 1, 1]],
107 | [-1, 1, Conv, [128, 3, 1]],
108 | [-1, 1, Conv, [128, 3, 1]],
109 | [-1, 1, Conv, [128, 3, 1]],
110 | [-1, 1, Conv, [128, 3, 1]],
111 | [-1, 1, Conv, [128, 3, 1]],
112 | [-1, 1, Conv, [128, 3, 1]],
113 | [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]],
114 | [-1, 1, Conv, [320, 1, 1]], # 85
115 |
116 | [-1, 1, Conv, [160, 1, 1]],
117 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
118 | [23, 1, Conv, [160, 1, 1]], # route backbone P3
119 | [[-1, -2], 1, Concat, [1]],
120 |
121 | [-1, 1, Conv, [128, 1, 1]],
122 | [-2, 1, Conv, [128, 1, 1]],
123 | [-1, 1, Conv, [64, 3, 1]],
124 | [-1, 1, Conv, [64, 3, 1]],
125 | [-1, 1, Conv, [64, 3, 1]],
126 | [-1, 1, Conv, [64, 3, 1]],
127 | [-1, 1, Conv, [64, 3, 1]],
128 | [-1, 1, Conv, [64, 3, 1]],
129 | [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]],
130 | [-1, 1, Conv, [160, 1, 1]], # 99
131 |
132 | [-1, 1, DownC, [320]],
133 | [[-1, 85], 1, Concat, [1]],
134 |
135 | [-1, 1, Conv, [256, 1, 1]],
136 | [-2, 1, Conv, [256, 1, 1]],
137 | [-1, 1, Conv, [128, 3, 1]],
138 | [-1, 1, Conv, [128, 3, 1]],
139 | [-1, 1, Conv, [128, 3, 1]],
140 | [-1, 1, Conv, [128, 3, 1]],
141 | [-1, 1, Conv, [128, 3, 1]],
142 | [-1, 1, Conv, [128, 3, 1]],
143 | [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]],
144 | [-1, 1, Conv, [320, 1, 1]], # 111
145 |
146 | [-1, 1, DownC, [480]],
147 | [[-1, 71], 1, Concat, [1]],
148 |
149 | [-1, 1, Conv, [384, 1, 1]],
150 | [-2, 1, Conv, [384, 1, 1]],
151 | [-1, 1, Conv, [192, 3, 1]],
152 | [-1, 1, Conv, [192, 3, 1]],
153 | [-1, 1, Conv, [192, 3, 1]],
154 | [-1, 1, Conv, [192, 3, 1]],
155 | [-1, 1, Conv, [192, 3, 1]],
156 | [-1, 1, Conv, [192, 3, 1]],
157 | [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]],
158 | [-1, 1, Conv, [480, 1, 1]], # 123
159 |
160 | [-1, 1, DownC, [640]],
161 | [[-1, 57], 1, Concat, [1]],
162 |
163 | [-1, 1, Conv, [512, 1, 1]],
164 | [-2, 1, Conv, [512, 1, 1]],
165 | [-1, 1, Conv, [256, 3, 1]],
166 | [-1, 1, Conv, [256, 3, 1]],
167 | [-1, 1, Conv, [256, 3, 1]],
168 | [-1, 1, Conv, [256, 3, 1]],
169 | [-1, 1, Conv, [256, 3, 1]],
170 | [-1, 1, Conv, [256, 3, 1]],
171 | [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]],
172 | [-1, 1, Conv, [640, 1, 1]], # 135
173 |
174 | [99, 1, Conv, [320, 3, 1]],
175 | [111, 1, Conv, [640, 3, 1]],
176 | [123, 1, Conv, [960, 3, 1]],
177 | [135, 1, Conv, [1280, 3, 1]],
178 |
179 | [[136,137,138,139], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6)
180 | ]
181 |
--------------------------------------------------------------------------------
/utils/add_nms.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | import onnx
3 | from onnx import shape_inference
4 | try:
5 | import onnx_graphsurgeon as gs
6 | except Exception as e:
7 | print('Import onnx_graphsurgeon failure: %s' % e)
8 |
9 | import logging
10 |
11 | LOGGER = logging.getLogger(__name__)
12 |
13 | class RegisterNMS(object):
14 | def __init__(
15 | self,
16 | onnx_model_path: str,
17 | precision: str = "fp32",
18 | ):
19 |
20 | self.graph = gs.import_onnx(onnx.load(onnx_model_path))
21 | assert self.graph
22 | LOGGER.info("ONNX graph created successfully")
23 | # Fold constants via ONNX-GS that PyTorch2ONNX may have missed
24 | self.graph.fold_constants()
25 | self.precision = precision
26 | self.batch_size = 1
27 | def infer(self):
28 | """
29 | Sanitize the graph by cleaning any unconnected nodes, do a topological resort,
30 | and fold constant inputs values. When possible, run shape inference on the
31 | ONNX graph to determine tensor shapes.
32 | """
33 | for _ in range(3):
34 | count_before = len(self.graph.nodes)
35 |
36 | self.graph.cleanup().toposort()
37 | try:
38 | for node in self.graph.nodes:
39 | for o in node.outputs:
40 | o.shape = None
41 | model = gs.export_onnx(self.graph)
42 | model = shape_inference.infer_shapes(model)
43 | self.graph = gs.import_onnx(model)
44 | except Exception as e:
45 | LOGGER.info(f"Shape inference could not be performed at this time:\n{e}")
46 | try:
47 | self.graph.fold_constants(fold_shapes=True)
48 | except TypeError as e:
49 | LOGGER.error(
50 | "This version of ONNX GraphSurgeon does not support folding shapes, "
51 | f"please upgrade your onnx_graphsurgeon module. Error:\n{e}"
52 | )
53 | raise
54 |
55 | count_after = len(self.graph.nodes)
56 | if count_before == count_after:
57 | # No new folding occurred in this iteration, so we can stop for now.
58 | break
59 |
60 | def save(self, output_path):
61 | """
62 | Save the ONNX model to the given location.
63 | Args:
64 | output_path: Path pointing to the location where to write
65 | out the updated ONNX model.
66 | """
67 | self.graph.cleanup().toposort()
68 | model = gs.export_onnx(self.graph)
69 | onnx.save(model, output_path)
70 | LOGGER.info(f"Saved ONNX model to {output_path}")
71 |
72 | def register_nms(
73 | self,
74 | *,
75 | score_thresh: float = 0.25,
76 | nms_thresh: float = 0.45,
77 | detections_per_img: int = 100,
78 | ):
79 | """
80 | Register the ``EfficientNMS_TRT`` plugin node.
81 | NMS expects these shapes for its input tensors:
82 | - box_net: [batch_size, number_boxes, 4]
83 | - class_net: [batch_size, number_boxes, number_labels]
84 | Args:
85 | score_thresh (float): The scalar threshold for score (low scoring boxes are removed).
86 | nms_thresh (float): The scalar threshold for IOU (new boxes that have high IOU
87 | overlap with previously selected boxes are removed).
88 | detections_per_img (int): Number of best detections to keep after NMS.
89 | """
90 |
91 | self.infer()
92 | # Find the concat node at the end of the network
93 | op_inputs = self.graph.outputs
94 | op = "EfficientNMS_TRT"
95 | attrs = {
96 | "plugin_version": "1",
97 | "background_class": -1, # no background class
98 | "max_output_boxes": detections_per_img,
99 | "score_threshold": score_thresh,
100 | "iou_threshold": nms_thresh,
101 | "score_activation": False,
102 | "box_coding": 0,
103 | }
104 |
105 | if self.precision == "fp32":
106 | dtype_output = np.float32
107 | elif self.precision == "fp16":
108 | dtype_output = np.float16
109 | else:
110 | raise NotImplementedError(f"Currently not supports precision: {self.precision}")
111 |
112 | # NMS Outputs
113 | output_num_detections = gs.Variable(
114 | name="num_dets",
115 | dtype=np.int32,
116 | shape=[self.batch_size, 1],
117 | ) # A scalar indicating the number of valid detections per batch image.
118 | output_boxes = gs.Variable(
119 | name="det_boxes",
120 | dtype=dtype_output,
121 | shape=[self.batch_size, detections_per_img, 4],
122 | )
123 | output_scores = gs.Variable(
124 | name="det_scores",
125 | dtype=dtype_output,
126 | shape=[self.batch_size, detections_per_img],
127 | )
128 | output_labels = gs.Variable(
129 | name="det_classes",
130 | dtype=np.int32,
131 | shape=[self.batch_size, detections_per_img],
132 | )
133 |
134 | op_outputs = [output_num_detections, output_boxes, output_scores, output_labels]
135 |
136 | # Create the NMS Plugin node with the selected inputs. The outputs of the node will also
137 | # become the final outputs of the graph.
138 | self.graph.layer(op=op, name="batched_nms", inputs=op_inputs, outputs=op_outputs, attrs=attrs)
139 | LOGGER.info(f"Created NMS plugin '{op}' with attributes: {attrs}")
140 |
141 | self.graph.outputs = op_outputs
142 |
143 | self.infer()
144 |
145 | def save(self, output_path):
146 | """
147 | Save the ONNX model to the given location.
148 | Args:
149 | output_path: Path pointing to the location where to write
150 | out the updated ONNX model.
151 | """
152 | self.graph.cleanup().toposort()
153 | model = gs.export_onnx(self.graph)
154 | onnx.save(model, output_path)
155 | LOGGER.info(f"Saved ONNX model to {output_path}")
156 |
--------------------------------------------------------------------------------
/cfg/training/yolov7-e6.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [ 19,27, 44,40, 38,94 ] # P3/8
9 | - [ 96,68, 86,152, 180,137 ] # P4/16
10 | - [ 140,301, 303,264, 238,542 ] # P5/32
11 | - [ 436,615, 739,380, 925,792 ] # P6/64
12 |
13 | # yolov7 backbone
14 | backbone:
15 | # [from, number, module, args],
16 | [[-1, 1, ReOrg, []], # 0
17 | [-1, 1, Conv, [80, 3, 1]], # 1-P1/2
18 |
19 | [-1, 1, DownC, [160]], # 2-P2/4
20 | [-1, 1, Conv, [64, 1, 1]],
21 | [-2, 1, Conv, [64, 1, 1]],
22 | [-1, 1, Conv, [64, 3, 1]],
23 | [-1, 1, Conv, [64, 3, 1]],
24 | [-1, 1, Conv, [64, 3, 1]],
25 | [-1, 1, Conv, [64, 3, 1]],
26 | [-1, 1, Conv, [64, 3, 1]],
27 | [-1, 1, Conv, [64, 3, 1]],
28 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
29 | [-1, 1, Conv, [160, 1, 1]], # 12
30 |
31 | [-1, 1, DownC, [320]], # 13-P3/8
32 | [-1, 1, Conv, [128, 1, 1]],
33 | [-2, 1, Conv, [128, 1, 1]],
34 | [-1, 1, Conv, [128, 3, 1]],
35 | [-1, 1, Conv, [128, 3, 1]],
36 | [-1, 1, Conv, [128, 3, 1]],
37 | [-1, 1, Conv, [128, 3, 1]],
38 | [-1, 1, Conv, [128, 3, 1]],
39 | [-1, 1, Conv, [128, 3, 1]],
40 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
41 | [-1, 1, Conv, [320, 1, 1]], # 23
42 |
43 | [-1, 1, DownC, [640]], # 24-P4/16
44 | [-1, 1, Conv, [256, 1, 1]],
45 | [-2, 1, Conv, [256, 1, 1]],
46 | [-1, 1, Conv, [256, 3, 1]],
47 | [-1, 1, Conv, [256, 3, 1]],
48 | [-1, 1, Conv, [256, 3, 1]],
49 | [-1, 1, Conv, [256, 3, 1]],
50 | [-1, 1, Conv, [256, 3, 1]],
51 | [-1, 1, Conv, [256, 3, 1]],
52 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
53 | [-1, 1, Conv, [640, 1, 1]], # 34
54 |
55 | [-1, 1, DownC, [960]], # 35-P5/32
56 | [-1, 1, Conv, [384, 1, 1]],
57 | [-2, 1, Conv, [384, 1, 1]],
58 | [-1, 1, Conv, [384, 3, 1]],
59 | [-1, 1, Conv, [384, 3, 1]],
60 | [-1, 1, Conv, [384, 3, 1]],
61 | [-1, 1, Conv, [384, 3, 1]],
62 | [-1, 1, Conv, [384, 3, 1]],
63 | [-1, 1, Conv, [384, 3, 1]],
64 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
65 | [-1, 1, Conv, [960, 1, 1]], # 45
66 |
67 | [-1, 1, DownC, [1280]], # 46-P6/64
68 | [-1, 1, Conv, [512, 1, 1]],
69 | [-2, 1, Conv, [512, 1, 1]],
70 | [-1, 1, Conv, [512, 3, 1]],
71 | [-1, 1, Conv, [512, 3, 1]],
72 | [-1, 1, Conv, [512, 3, 1]],
73 | [-1, 1, Conv, [512, 3, 1]],
74 | [-1, 1, Conv, [512, 3, 1]],
75 | [-1, 1, Conv, [512, 3, 1]],
76 | [[-1, -3, -5, -7, -8], 1, Concat, [1]],
77 | [-1, 1, Conv, [1280, 1, 1]], # 56
78 | ]
79 |
80 | # yolov7 head
81 | head:
82 | [[-1, 1, SPPCSPC, [640]], # 57
83 |
84 | [-1, 1, Conv, [480, 1, 1]],
85 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
86 | [45, 1, Conv, [480, 1, 1]], # route backbone P5
87 | [[-1, -2], 1, Concat, [1]],
88 |
89 | [-1, 1, Conv, [384, 1, 1]],
90 | [-2, 1, Conv, [384, 1, 1]],
91 | [-1, 1, Conv, [192, 3, 1]],
92 | [-1, 1, Conv, [192, 3, 1]],
93 | [-1, 1, Conv, [192, 3, 1]],
94 | [-1, 1, Conv, [192, 3, 1]],
95 | [-1, 1, Conv, [192, 3, 1]],
96 | [-1, 1, Conv, [192, 3, 1]],
97 | [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]],
98 | [-1, 1, Conv, [480, 1, 1]], # 71
99 |
100 | [-1, 1, Conv, [320, 1, 1]],
101 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
102 | [34, 1, Conv, [320, 1, 1]], # route backbone P4
103 | [[-1, -2], 1, Concat, [1]],
104 |
105 | [-1, 1, Conv, [256, 1, 1]],
106 | [-2, 1, Conv, [256, 1, 1]],
107 | [-1, 1, Conv, [128, 3, 1]],
108 | [-1, 1, Conv, [128, 3, 1]],
109 | [-1, 1, Conv, [128, 3, 1]],
110 | [-1, 1, Conv, [128, 3, 1]],
111 | [-1, 1, Conv, [128, 3, 1]],
112 | [-1, 1, Conv, [128, 3, 1]],
113 | [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]],
114 | [-1, 1, Conv, [320, 1, 1]], # 85
115 |
116 | [-1, 1, Conv, [160, 1, 1]],
117 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
118 | [23, 1, Conv, [160, 1, 1]], # route backbone P3
119 | [[-1, -2], 1, Concat, [1]],
120 |
121 | [-1, 1, Conv, [128, 1, 1]],
122 | [-2, 1, Conv, [128, 1, 1]],
123 | [-1, 1, Conv, [64, 3, 1]],
124 | [-1, 1, Conv, [64, 3, 1]],
125 | [-1, 1, Conv, [64, 3, 1]],
126 | [-1, 1, Conv, [64, 3, 1]],
127 | [-1, 1, Conv, [64, 3, 1]],
128 | [-1, 1, Conv, [64, 3, 1]],
129 | [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]],
130 | [-1, 1, Conv, [160, 1, 1]], # 99
131 |
132 | [-1, 1, DownC, [320]],
133 | [[-1, 85], 1, Concat, [1]],
134 |
135 | [-1, 1, Conv, [256, 1, 1]],
136 | [-2, 1, Conv, [256, 1, 1]],
137 | [-1, 1, Conv, [128, 3, 1]],
138 | [-1, 1, Conv, [128, 3, 1]],
139 | [-1, 1, Conv, [128, 3, 1]],
140 | [-1, 1, Conv, [128, 3, 1]],
141 | [-1, 1, Conv, [128, 3, 1]],
142 | [-1, 1, Conv, [128, 3, 1]],
143 | [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]],
144 | [-1, 1, Conv, [320, 1, 1]], # 111
145 |
146 | [-1, 1, DownC, [480]],
147 | [[-1, 71], 1, Concat, [1]],
148 |
149 | [-1, 1, Conv, [384, 1, 1]],
150 | [-2, 1, Conv, [384, 1, 1]],
151 | [-1, 1, Conv, [192, 3, 1]],
152 | [-1, 1, Conv, [192, 3, 1]],
153 | [-1, 1, Conv, [192, 3, 1]],
154 | [-1, 1, Conv, [192, 3, 1]],
155 | [-1, 1, Conv, [192, 3, 1]],
156 | [-1, 1, Conv, [192, 3, 1]],
157 | [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]],
158 | [-1, 1, Conv, [480, 1, 1]], # 123
159 |
160 | [-1, 1, DownC, [640]],
161 | [[-1, 57], 1, Concat, [1]],
162 |
163 | [-1, 1, Conv, [512, 1, 1]],
164 | [-2, 1, Conv, [512, 1, 1]],
165 | [-1, 1, Conv, [256, 3, 1]],
166 | [-1, 1, Conv, [256, 3, 1]],
167 | [-1, 1, Conv, [256, 3, 1]],
168 | [-1, 1, Conv, [256, 3, 1]],
169 | [-1, 1, Conv, [256, 3, 1]],
170 | [-1, 1, Conv, [256, 3, 1]],
171 | [[-1, -2, -3, -4, -5, -6, -7, -8], 1, Concat, [1]],
172 | [-1, 1, Conv, [640, 1, 1]], # 135
173 |
174 | [99, 1, Conv, [320, 3, 1]],
175 | [111, 1, Conv, [640, 3, 1]],
176 | [123, 1, Conv, [960, 3, 1]],
177 | [135, 1, Conv, [1280, 3, 1]],
178 |
179 | [99, 1, Conv, [320, 3, 1]],
180 | [85, 1, Conv, [640, 3, 1]],
181 | [71, 1, Conv, [960, 3, 1]],
182 | [57, 1, Conv, [1280, 3, 1]],
183 |
184 | [[136,137,138,139,140,141,142,143], 1, IAuxDetect, [nc, anchors]], # Detect(P3, P4, P5, P6)
185 | ]
186 |
--------------------------------------------------------------------------------
/cfg/deploy/yolov7-d6.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [ 19,27, 44,40, 38,94 ] # P3/8
9 | - [ 96,68, 86,152, 180,137 ] # P4/16
10 | - [ 140,301, 303,264, 238,542 ] # P5/32
11 | - [ 436,615, 739,380, 925,792 ] # P6/64
12 |
13 | # yolov7-d6 backbone
14 | backbone:
15 | # [from, number, module, args],
16 | [[-1, 1, ReOrg, []], # 0
17 | [-1, 1, Conv, [96, 3, 1]], # 1-P1/2
18 |
19 | [-1, 1, DownC, [192]], # 2-P2/4
20 | [-1, 1, Conv, [64, 1, 1]],
21 | [-2, 1, Conv, [64, 1, 1]],
22 | [-1, 1, Conv, [64, 3, 1]],
23 | [-1, 1, Conv, [64, 3, 1]],
24 | [-1, 1, Conv, [64, 3, 1]],
25 | [-1, 1, Conv, [64, 3, 1]],
26 | [-1, 1, Conv, [64, 3, 1]],
27 | [-1, 1, Conv, [64, 3, 1]],
28 | [-1, 1, Conv, [64, 3, 1]],
29 | [-1, 1, Conv, [64, 3, 1]],
30 | [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]],
31 | [-1, 1, Conv, [192, 1, 1]], # 14
32 |
33 | [-1, 1, DownC, [384]], # 15-P3/8
34 | [-1, 1, Conv, [128, 1, 1]],
35 | [-2, 1, Conv, [128, 1, 1]],
36 | [-1, 1, Conv, [128, 3, 1]],
37 | [-1, 1, Conv, [128, 3, 1]],
38 | [-1, 1, Conv, [128, 3, 1]],
39 | [-1, 1, Conv, [128, 3, 1]],
40 | [-1, 1, Conv, [128, 3, 1]],
41 | [-1, 1, Conv, [128, 3, 1]],
42 | [-1, 1, Conv, [128, 3, 1]],
43 | [-1, 1, Conv, [128, 3, 1]],
44 | [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]],
45 | [-1, 1, Conv, [384, 1, 1]], # 27
46 |
47 | [-1, 1, DownC, [768]], # 28-P4/16
48 | [-1, 1, Conv, [256, 1, 1]],
49 | [-2, 1, Conv, [256, 1, 1]],
50 | [-1, 1, Conv, [256, 3, 1]],
51 | [-1, 1, Conv, [256, 3, 1]],
52 | [-1, 1, Conv, [256, 3, 1]],
53 | [-1, 1, Conv, [256, 3, 1]],
54 | [-1, 1, Conv, [256, 3, 1]],
55 | [-1, 1, Conv, [256, 3, 1]],
56 | [-1, 1, Conv, [256, 3, 1]],
57 | [-1, 1, Conv, [256, 3, 1]],
58 | [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]],
59 | [-1, 1, Conv, [768, 1, 1]], # 40
60 |
61 | [-1, 1, DownC, [1152]], # 41-P5/32
62 | [-1, 1, Conv, [384, 1, 1]],
63 | [-2, 1, Conv, [384, 1, 1]],
64 | [-1, 1, Conv, [384, 3, 1]],
65 | [-1, 1, Conv, [384, 3, 1]],
66 | [-1, 1, Conv, [384, 3, 1]],
67 | [-1, 1, Conv, [384, 3, 1]],
68 | [-1, 1, Conv, [384, 3, 1]],
69 | [-1, 1, Conv, [384, 3, 1]],
70 | [-1, 1, Conv, [384, 3, 1]],
71 | [-1, 1, Conv, [384, 3, 1]],
72 | [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]],
73 | [-1, 1, Conv, [1152, 1, 1]], # 53
74 |
75 | [-1, 1, DownC, [1536]], # 54-P6/64
76 | [-1, 1, Conv, [512, 1, 1]],
77 | [-2, 1, Conv, [512, 1, 1]],
78 | [-1, 1, Conv, [512, 3, 1]],
79 | [-1, 1, Conv, [512, 3, 1]],
80 | [-1, 1, Conv, [512, 3, 1]],
81 | [-1, 1, Conv, [512, 3, 1]],
82 | [-1, 1, Conv, [512, 3, 1]],
83 | [-1, 1, Conv, [512, 3, 1]],
84 | [-1, 1, Conv, [512, 3, 1]],
85 | [-1, 1, Conv, [512, 3, 1]],
86 | [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]],
87 | [-1, 1, Conv, [1536, 1, 1]], # 66
88 | ]
89 |
90 | # yolov7-d6 head
91 | head:
92 | [[-1, 1, SPPCSPC, [768]], # 67
93 |
94 | [-1, 1, Conv, [576, 1, 1]],
95 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
96 | [53, 1, Conv, [576, 1, 1]], # route backbone P5
97 | [[-1, -2], 1, Concat, [1]],
98 |
99 | [-1, 1, Conv, [384, 1, 1]],
100 | [-2, 1, Conv, [384, 1, 1]],
101 | [-1, 1, Conv, [192, 3, 1]],
102 | [-1, 1, Conv, [192, 3, 1]],
103 | [-1, 1, Conv, [192, 3, 1]],
104 | [-1, 1, Conv, [192, 3, 1]],
105 | [-1, 1, Conv, [192, 3, 1]],
106 | [-1, 1, Conv, [192, 3, 1]],
107 | [-1, 1, Conv, [192, 3, 1]],
108 | [-1, 1, Conv, [192, 3, 1]],
109 | [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]],
110 | [-1, 1, Conv, [576, 1, 1]], # 83
111 |
112 | [-1, 1, Conv, [384, 1, 1]],
113 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
114 | [40, 1, Conv, [384, 1, 1]], # route backbone P4
115 | [[-1, -2], 1, Concat, [1]],
116 |
117 | [-1, 1, Conv, [256, 1, 1]],
118 | [-2, 1, Conv, [256, 1, 1]],
119 | [-1, 1, Conv, [128, 3, 1]],
120 | [-1, 1, Conv, [128, 3, 1]],
121 | [-1, 1, Conv, [128, 3, 1]],
122 | [-1, 1, Conv, [128, 3, 1]],
123 | [-1, 1, Conv, [128, 3, 1]],
124 | [-1, 1, Conv, [128, 3, 1]],
125 | [-1, 1, Conv, [128, 3, 1]],
126 | [-1, 1, Conv, [128, 3, 1]],
127 | [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]],
128 | [-1, 1, Conv, [384, 1, 1]], # 99
129 |
130 | [-1, 1, Conv, [192, 1, 1]],
131 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
132 | [27, 1, Conv, [192, 1, 1]], # route backbone P3
133 | [[-1, -2], 1, Concat, [1]],
134 |
135 | [-1, 1, Conv, [128, 1, 1]],
136 | [-2, 1, Conv, [128, 1, 1]],
137 | [-1, 1, Conv, [64, 3, 1]],
138 | [-1, 1, Conv, [64, 3, 1]],
139 | [-1, 1, Conv, [64, 3, 1]],
140 | [-1, 1, Conv, [64, 3, 1]],
141 | [-1, 1, Conv, [64, 3, 1]],
142 | [-1, 1, Conv, [64, 3, 1]],
143 | [-1, 1, Conv, [64, 3, 1]],
144 | [-1, 1, Conv, [64, 3, 1]],
145 | [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]],
146 | [-1, 1, Conv, [192, 1, 1]], # 115
147 |
148 | [-1, 1, DownC, [384]],
149 | [[-1, 99], 1, Concat, [1]],
150 |
151 | [-1, 1, Conv, [256, 1, 1]],
152 | [-2, 1, Conv, [256, 1, 1]],
153 | [-1, 1, Conv, [128, 3, 1]],
154 | [-1, 1, Conv, [128, 3, 1]],
155 | [-1, 1, Conv, [128, 3, 1]],
156 | [-1, 1, Conv, [128, 3, 1]],
157 | [-1, 1, Conv, [128, 3, 1]],
158 | [-1, 1, Conv, [128, 3, 1]],
159 | [-1, 1, Conv, [128, 3, 1]],
160 | [-1, 1, Conv, [128, 3, 1]],
161 | [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]],
162 | [-1, 1, Conv, [384, 1, 1]], # 129
163 |
164 | [-1, 1, DownC, [576]],
165 | [[-1, 83], 1, Concat, [1]],
166 |
167 | [-1, 1, Conv, [384, 1, 1]],
168 | [-2, 1, Conv, [384, 1, 1]],
169 | [-1, 1, Conv, [192, 3, 1]],
170 | [-1, 1, Conv, [192, 3, 1]],
171 | [-1, 1, Conv, [192, 3, 1]],
172 | [-1, 1, Conv, [192, 3, 1]],
173 | [-1, 1, Conv, [192, 3, 1]],
174 | [-1, 1, Conv, [192, 3, 1]],
175 | [-1, 1, Conv, [192, 3, 1]],
176 | [-1, 1, Conv, [192, 3, 1]],
177 | [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]],
178 | [-1, 1, Conv, [576, 1, 1]], # 143
179 |
180 | [-1, 1, DownC, [768]],
181 | [[-1, 67], 1, Concat, [1]],
182 |
183 | [-1, 1, Conv, [512, 1, 1]],
184 | [-2, 1, Conv, [512, 1, 1]],
185 | [-1, 1, Conv, [256, 3, 1]],
186 | [-1, 1, Conv, [256, 3, 1]],
187 | [-1, 1, Conv, [256, 3, 1]],
188 | [-1, 1, Conv, [256, 3, 1]],
189 | [-1, 1, Conv, [256, 3, 1]],
190 | [-1, 1, Conv, [256, 3, 1]],
191 | [-1, 1, Conv, [256, 3, 1]],
192 | [-1, 1, Conv, [256, 3, 1]],
193 | [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]],
194 | [-1, 1, Conv, [768, 1, 1]], # 157
195 |
196 | [115, 1, Conv, [384, 3, 1]],
197 | [129, 1, Conv, [768, 3, 1]],
198 | [143, 1, Conv, [1152, 3, 1]],
199 | [157, 1, Conv, [1536, 3, 1]],
200 |
201 | [[158,159,160,161], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5, P6)
202 | ]
203 |
--------------------------------------------------------------------------------
/cfg/training/yolov7-d6.yaml:
--------------------------------------------------------------------------------
1 | # parameters
2 | nc: 80 # number of classes
3 | depth_multiple: 1.0 # model depth multiple
4 | width_multiple: 1.0 # layer channel multiple
5 |
6 | # anchors
7 | anchors:
8 | - [ 19,27, 44,40, 38,94 ] # P3/8
9 | - [ 96,68, 86,152, 180,137 ] # P4/16
10 | - [ 140,301, 303,264, 238,542 ] # P5/32
11 | - [ 436,615, 739,380, 925,792 ] # P6/64
12 |
13 | # yolov7 backbone
14 | backbone:
15 | # [from, number, module, args],
16 | [[-1, 1, ReOrg, []], # 0
17 | [-1, 1, Conv, [96, 3, 1]], # 1-P1/2
18 |
19 | [-1, 1, DownC, [192]], # 2-P2/4
20 | [-1, 1, Conv, [64, 1, 1]],
21 | [-2, 1, Conv, [64, 1, 1]],
22 | [-1, 1, Conv, [64, 3, 1]],
23 | [-1, 1, Conv, [64, 3, 1]],
24 | [-1, 1, Conv, [64, 3, 1]],
25 | [-1, 1, Conv, [64, 3, 1]],
26 | [-1, 1, Conv, [64, 3, 1]],
27 | [-1, 1, Conv, [64, 3, 1]],
28 | [-1, 1, Conv, [64, 3, 1]],
29 | [-1, 1, Conv, [64, 3, 1]],
30 | [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]],
31 | [-1, 1, Conv, [192, 1, 1]], # 14
32 |
33 | [-1, 1, DownC, [384]], # 15-P3/8
34 | [-1, 1, Conv, [128, 1, 1]],
35 | [-2, 1, Conv, [128, 1, 1]],
36 | [-1, 1, Conv, [128, 3, 1]],
37 | [-1, 1, Conv, [128, 3, 1]],
38 | [-1, 1, Conv, [128, 3, 1]],
39 | [-1, 1, Conv, [128, 3, 1]],
40 | [-1, 1, Conv, [128, 3, 1]],
41 | [-1, 1, Conv, [128, 3, 1]],
42 | [-1, 1, Conv, [128, 3, 1]],
43 | [-1, 1, Conv, [128, 3, 1]],
44 | [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]],
45 | [-1, 1, Conv, [384, 1, 1]], # 27
46 |
47 | [-1, 1, DownC, [768]], # 28-P4/16
48 | [-1, 1, Conv, [256, 1, 1]],
49 | [-2, 1, Conv, [256, 1, 1]],
50 | [-1, 1, Conv, [256, 3, 1]],
51 | [-1, 1, Conv, [256, 3, 1]],
52 | [-1, 1, Conv, [256, 3, 1]],
53 | [-1, 1, Conv, [256, 3, 1]],
54 | [-1, 1, Conv, [256, 3, 1]],
55 | [-1, 1, Conv, [256, 3, 1]],
56 | [-1, 1, Conv, [256, 3, 1]],
57 | [-1, 1, Conv, [256, 3, 1]],
58 | [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]],
59 | [-1, 1, Conv, [768, 1, 1]], # 40
60 |
61 | [-1, 1, DownC, [1152]], # 41-P5/32
62 | [-1, 1, Conv, [384, 1, 1]],
63 | [-2, 1, Conv, [384, 1, 1]],
64 | [-1, 1, Conv, [384, 3, 1]],
65 | [-1, 1, Conv, [384, 3, 1]],
66 | [-1, 1, Conv, [384, 3, 1]],
67 | [-1, 1, Conv, [384, 3, 1]],
68 | [-1, 1, Conv, [384, 3, 1]],
69 | [-1, 1, Conv, [384, 3, 1]],
70 | [-1, 1, Conv, [384, 3, 1]],
71 | [-1, 1, Conv, [384, 3, 1]],
72 | [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]],
73 | [-1, 1, Conv, [1152, 1, 1]], # 53
74 |
75 | [-1, 1, DownC, [1536]], # 54-P6/64
76 | [-1, 1, Conv, [512, 1, 1]],
77 | [-2, 1, Conv, [512, 1, 1]],
78 | [-1, 1, Conv, [512, 3, 1]],
79 | [-1, 1, Conv, [512, 3, 1]],
80 | [-1, 1, Conv, [512, 3, 1]],
81 | [-1, 1, Conv, [512, 3, 1]],
82 | [-1, 1, Conv, [512, 3, 1]],
83 | [-1, 1, Conv, [512, 3, 1]],
84 | [-1, 1, Conv, [512, 3, 1]],
85 | [-1, 1, Conv, [512, 3, 1]],
86 | [[-1, -3, -5, -7, -9, -10], 1, Concat, [1]],
87 | [-1, 1, Conv, [1536, 1, 1]], # 66
88 | ]
89 |
90 | # yolov7 head
91 | head:
92 | [[-1, 1, SPPCSPC, [768]], # 67
93 |
94 | [-1, 1, Conv, [576, 1, 1]],
95 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
96 | [53, 1, Conv, [576, 1, 1]], # route backbone P5
97 | [[-1, -2], 1, Concat, [1]],
98 |
99 | [-1, 1, Conv, [384, 1, 1]],
100 | [-2, 1, Conv, [384, 1, 1]],
101 | [-1, 1, Conv, [192, 3, 1]],
102 | [-1, 1, Conv, [192, 3, 1]],
103 | [-1, 1, Conv, [192, 3, 1]],
104 | [-1, 1, Conv, [192, 3, 1]],
105 | [-1, 1, Conv, [192, 3, 1]],
106 | [-1, 1, Conv, [192, 3, 1]],
107 | [-1, 1, Conv, [192, 3, 1]],
108 | [-1, 1, Conv, [192, 3, 1]],
109 | [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]],
110 | [-1, 1, Conv, [576, 1, 1]], # 83
111 |
112 | [-1, 1, Conv, [384, 1, 1]],
113 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
114 | [40, 1, Conv, [384, 1, 1]], # route backbone P4
115 | [[-1, -2], 1, Concat, [1]],
116 |
117 | [-1, 1, Conv, [256, 1, 1]],
118 | [-2, 1, Conv, [256, 1, 1]],
119 | [-1, 1, Conv, [128, 3, 1]],
120 | [-1, 1, Conv, [128, 3, 1]],
121 | [-1, 1, Conv, [128, 3, 1]],
122 | [-1, 1, Conv, [128, 3, 1]],
123 | [-1, 1, Conv, [128, 3, 1]],
124 | [-1, 1, Conv, [128, 3, 1]],
125 | [-1, 1, Conv, [128, 3, 1]],
126 | [-1, 1, Conv, [128, 3, 1]],
127 | [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]],
128 | [-1, 1, Conv, [384, 1, 1]], # 99
129 |
130 | [-1, 1, Conv, [192, 1, 1]],
131 | [-1, 1, nn.Upsample, [None, 2, 'nearest']],
132 | [27, 1, Conv, [192, 1, 1]], # route backbone P3
133 | [[-1, -2], 1, Concat, [1]],
134 |
135 | [-1, 1, Conv, [128, 1, 1]],
136 | [-2, 1, Conv, [128, 1, 1]],
137 | [-1, 1, Conv, [64, 3, 1]],
138 | [-1, 1, Conv, [64, 3, 1]],
139 | [-1, 1, Conv, [64, 3, 1]],
140 | [-1, 1, Conv, [64, 3, 1]],
141 | [-1, 1, Conv, [64, 3, 1]],
142 | [-1, 1, Conv, [64, 3, 1]],
143 | [-1, 1, Conv, [64, 3, 1]],
144 | [-1, 1, Conv, [64, 3, 1]],
145 | [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]],
146 | [-1, 1, Conv, [192, 1, 1]], # 115
147 |
148 | [-1, 1, DownC, [384]],
149 | [[-1, 99], 1, Concat, [1]],
150 |
151 | [-1, 1, Conv, [256, 1, 1]],
152 | [-2, 1, Conv, [256, 1, 1]],
153 | [-1, 1, Conv, [128, 3, 1]],
154 | [-1, 1, Conv, [128, 3, 1]],
155 | [-1, 1, Conv, [128, 3, 1]],
156 | [-1, 1, Conv, [128, 3, 1]],
157 | [-1, 1, Conv, [128, 3, 1]],
158 | [-1, 1, Conv, [128, 3, 1]],
159 | [-1, 1, Conv, [128, 3, 1]],
160 | [-1, 1, Conv, [128, 3, 1]],
161 | [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]],
162 | [-1, 1, Conv, [384, 1, 1]], # 129
163 |
164 | [-1, 1, DownC, [576]],
165 | [[-1, 83], 1, Concat, [1]],
166 |
167 | [-1, 1, Conv, [384, 1, 1]],
168 | [-2, 1, Conv, [384, 1, 1]],
169 | [-1, 1, Conv, [192, 3, 1]],
170 | [-1, 1, Conv, [192, 3, 1]],
171 | [-1, 1, Conv, [192, 3, 1]],
172 | [-1, 1, Conv, [192, 3, 1]],
173 | [-1, 1, Conv, [192, 3, 1]],
174 | [-1, 1, Conv, [192, 3, 1]],
175 | [-1, 1, Conv, [192, 3, 1]],
176 | [-1, 1, Conv, [192, 3, 1]],
177 | [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]],
178 | [-1, 1, Conv, [576, 1, 1]], # 143
179 |
180 | [-1, 1, DownC, [768]],
181 | [[-1, 67], 1, Concat, [1]],
182 |
183 | [-1, 1, Conv, [512, 1, 1]],
184 | [-2, 1, Conv, [512, 1, 1]],
185 | [-1, 1, Conv, [256, 3, 1]],
186 | [-1, 1, Conv, [256, 3, 1]],
187 | [-1, 1, Conv, [256, 3, 1]],
188 | [-1, 1, Conv, [256, 3, 1]],
189 | [-1, 1, Conv, [256, 3, 1]],
190 | [-1, 1, Conv, [256, 3, 1]],
191 | [-1, 1, Conv, [256, 3, 1]],
192 | [-1, 1, Conv, [256, 3, 1]],
193 | [[-1, -2, -3, -4, -5, -6, -7, -8, -9, -10], 1, Concat, [1]],
194 | [-1, 1, Conv, [768, 1, 1]], # 157
195 |
196 | [115, 1, Conv, [384, 3, 1]],
197 | [129, 1, Conv, [768, 3, 1]],
198 | [143, 1, Conv, [1152, 3, 1]],
199 | [157, 1, Conv, [1536, 3, 1]],
200 |
201 | [115, 1, Conv, [384, 3, 1]],
202 | [99, 1, Conv, [768, 3, 1]],
203 | [83, 1, Conv, [1152, 3, 1]],
204 | [67, 1, Conv, [1536, 3, 1]],
205 |
206 | [[158,159,160,161,162,163,164,165], 1, IAuxDetect, [nc, anchors]], # Detect(P3, P4, P5, P6)
207 | ]
208 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Yolov7 Segmentation model with TensorRT
2 | **This repository implement the real-time Instance Segmentation Algorithm named Yolov7 with TensoRT.**
3 |
4 | ## Some remarks
5 | - The initial repository on which I build mine is from __**WongKinYiu/yolov7**__ repository (https://github.com/WongKinYiu/yolov7)), for additional information about the installation of Yolov7, refer to the original repository.
6 | - This project is built upon the excellent framework **detectron2**, and you should install detectron2 first, please check official installation guide for more details. (https://github.com/facebookresearch/detectron2.git)
7 | - For command other than TensoRT and ONNX inference, please refer to the initial repository (e.g detect.py).
8 | - If you face any problem during the parsing time, don't hesitate to drop an issue. If there aren't any, don't hesitate to drop a :star:
9 | - Be aware that in order to parse the model to ONNX and TensorRT, some originals files has been modified/slightly modified, don't forget to check the modifications if you come from the initial repository.
10 |
11 |
12 | ## Installation and dependencies
13 | Click me
15 |
16 | - pip3 install requirements.txt
17 | - Install Pytorch (1.10.0) and TorchVision (0.11.1)
18 | ```js
19 | pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116
20 |
21 | If other versions of torch are needed, select yours by putting torch==1.11.0+cu102 for example.
22 | ```
23 |
24 | - Install CUDA (10.2) and cuDNN (8.0.0) : https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu&target_version=2.0&target_type=deb_local
25 |
26 | - For WSL-Ubuntu :
27 | ```js
28 | sudo wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
29 | sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
30 | sudo wget https://developer.download.nvidia.com/compute/cuda/11.7.1/local_insta
31 | llers/cuda-repo-wsl-ubuntu-11-7-local_11.7.1-1_amd64.deb
32 | sudo dpkg -i cuda-repo-wsl-ubuntu-11-7-local_11.7.1-1_amd64.deb
33 | sudo cp /var/cuda-repo-wsl-ubuntu-11-7-local/cuda-96193861-keyring.gpg /usr/share/keyrings/
34 | sudo apt-get update
35 | sudo apt-get -y install cuda
36 | ```
37 |
38 | - Install TensorRT (8.0.1.6), if you are using an nvidia edge device, TensorRT should already be installed
39 | ```js
40 | python3 -m pip install --upgrade setuptools pip
41 | python3 -m pip install nvidia-pyindex
42 | python3 -m pip install --upgrade nvidia-tensorrt
43 |
44 | Verify installation by writing : assert tensorrt.Builder(tensorrt.Logger())
45 | ```
46 | - Install ONNX and ONNXruntime
47 | ```js
48 | pip install onnxruntime-gpu
49 | pip install onnxruntime
50 | pip install numpy protobuf==4.21.5
51 | pip install onnx
52 | ```
53 | - Install all the other packages needed to run the original SparseInst algorithm (Should be done if you have installed Dectectron2)
54 |
55 |