From 9ceae167c103ddb70424c31bdfd8e93c32ae8ea7 Mon Sep 17 00:00:00 2001
From: NYH <175484793@qq.com>
Date: Wed, 27 Dec 2023 15:00:04 +0800
Subject: [PATCH] V1.0
---
CMakeLists.txt | 52 +
README.md | 158 ++-
__pycache__/val.cpython-37.pyc | Bin 0 -> 12122 bytes
__pycache__/val.cpython-38.pyc | Bin 0 -> 12077 bytes
data/Argoverse.yaml | 67 ++
data/GlobalWheat2020.yaml | 53 +
data/Objects365.yaml | 104 ++
data/SKU-110K.yaml | 52 +
data/VOC.yaml | 80 ++
data/VisDrone.yaml | 61 ++
data/coco.yaml | 44 +
data/coco128.yaml | 30 +
data/data_class_4.yaml | 37 +
data/hyps/hyp.finetune.yaml | 39 +
data/hyps/hyp.finetune_objects365.yaml | 29 +
data/hyps/hyp.scratch-p6.yaml | 34 +
data/hyps/hyp.scratch.yaml | 34 +
data/img.cache | Bin 0 -> 94802 bytes
data/img.cache.npy | Bin 0 -> 113581 bytes
data/img1.cache | Bin 0 -> 8820 bytes
data/scripts/download_weights.sh | 17 +
data/scripts/get_coco.sh | 27 +
data/scripts/get_coco128.sh | 17 +
data/xView.yaml | 102 ++
detect.py | 239 +++++
detect1.py | 239 +++++
export.py | 189 ++++
gen_wts.py | 59 ++
images | 1 +
models/__init__.py | 0
models/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 143 bytes
models/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 142 bytes
models/__pycache__/common.cpython-37.pyc | Bin 0 -> 20039 bytes
models/__pycache__/common.cpython-38.pyc | Bin 0 -> 21210 bytes
.../__pycache__/experimental.cpython-37.pyc | Bin 0 -> 6042 bytes
.../__pycache__/experimental.cpython-38.pyc | Bin 0 -> 5942 bytes
models/__pycache__/yolo.cpython-37.pyc | Bin 0 -> 10833 bytes
models/__pycache__/yolo.cpython-38.pyc | Bin 0 -> 10863 bytes
models/common.py | 457 ++++++++
models/common_1.py | 433 ++++++++
models/experimental.py | 136 +++
models/hub/anchors.yaml | 58 +
models/hub/yolov3-spp.yaml | 49 +
models/hub/yolov3-tiny.yaml | 39 +
models/hub/yolov3.yaml | 49 +
models/hub/yolov5-bifpn.yaml | 46 +
models/hub/yolov5-fpn.yaml | 40 +
models/hub/yolov5-p2.yaml | 52 +
models/hub/yolov5-p6.yaml | 54 +
models/hub/yolov5-p7.yaml | 65 ++
models/hub/yolov5-panet.yaml | 46 +
models/hub/yolov5l6.yaml | 58 +
models/hub/yolov5m6.yaml | 58 +
models/hub/yolov5s6.yaml | 58 +
models/hub/yolov5x6.yaml | 58 +
models/yolo.py | 300 ++++++
models/yolov5l.yaml | 46 +
models/yolov5m-2transformer.yaml | 46 +
models/yolov5m.yaml | 47 +
models/yolov5m_add_detect.yaml | 65 ++
models/yolov5m_s.yaml | 57 +
models/yolov5s-2transformer.yaml | 46 +
models/yolov5s-transformer.yaml | 46 +
models/yolov5s.yaml | 46 +
models/yolov5x.yaml | 46 +
plugin/yololayer.cu | 280 +++++
plugin/yololayer.h | 106 ++
requirements.txt | 31 +
src/calibrator.cpp | 97 ++
src/calibrator.h | 39 +
src/config.h | 55 +
src/cuda_utils.h | 18 +
src/logging.h | 504 +++++++++
src/macros.h | 29 +
src/model.cpp | 629 +++++++++++
src/model.h | 16 +
src/postprocess.cpp | 189 ++++
src/postprocess.h | 16 +
src/preprocess.cu | 153 +++
src/preprocess.h | 15 +
src/types.h | 17 +
src/utils.h | 70 ++
train.py | 620 +++++++++++
utils/__init__.py | 0
utils/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 142 bytes
utils/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 141 bytes
.../__pycache__/augmentations.cpython-37.pyc | Bin 0 -> 8848 bytes
.../__pycache__/augmentations.cpython-38.pyc | Bin 0 -> 8843 bytes
utils/__pycache__/autoanchor.cpython-37.pyc | Bin 0 -> 6252 bytes
utils/__pycache__/autoanchor.cpython-38.pyc | Bin 0 -> 6208 bytes
utils/__pycache__/callbacks.cpython-37.pyc | Bin 0 -> 6428 bytes
utils/__pycache__/callbacks.cpython-38.pyc | Bin 0 -> 6277 bytes
utils/__pycache__/datasets.cpython-37.pyc | Bin 0 -> 34193 bytes
utils/__pycache__/datasets.cpython-38.pyc | Bin 0 -> 34153 bytes
utils/__pycache__/downloads.cpython-37.pyc | Bin 0 -> 3801 bytes
utils/__pycache__/downloads.cpython-38.pyc | Bin 0 -> 3846 bytes
utils/__pycache__/general.cpython-37.pyc | Bin 0 -> 26277 bytes
utils/__pycache__/general.cpython-38.pyc | Bin 0 -> 26373 bytes
utils/__pycache__/loss.cpython-37.pyc | Bin 0 -> 6640 bytes
utils/__pycache__/loss.cpython-38.pyc | Bin 0 -> 6532 bytes
utils/__pycache__/metrics.cpython-37.pyc | Bin 0 -> 10639 bytes
utils/__pycache__/metrics.cpython-38.pyc | Bin 0 -> 10573 bytes
utils/__pycache__/plots.cpython-37.pyc | Bin 0 -> 15994 bytes
utils/__pycache__/plots.cpython-38.pyc | Bin 0 -> 15859 bytes
utils/__pycache__/torch_utils.cpython-37.pyc | Bin 0 -> 12057 bytes
utils/__pycache__/torch_utils.cpython-38.pyc | Bin 0 -> 12115 bytes
utils/activations.py | 98 ++
utils/augmentations.py | 271 +++++
utils/autoanchor.py | 161 +++
utils/aws/__init__.py | 0
utils/aws/mime.sh | 26 +
utils/aws/resume.py | 37 +
utils/aws/userdata.sh | 27 +
utils/callbacks.py | 175 ++++
utils/datasets.py | 989 ++++++++++++++++++
utils/downloads.py | 146 +++
utils/flask_rest_api/README.md | 68 ++
utils/flask_rest_api/example_request.py | 13 +
utils/flask_rest_api/restapi.py | 37 +
utils/general.py | 721 +++++++++++++
utils/google_app_engine/Dockerfile | 25 +
.../additional_requirements.txt | 4 +
utils/google_app_engine/app.yaml | 14 +
utils/loggers/__init__.py | 141 +++
.../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 6269 bytes
.../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 6278 bytes
utils/loggers/wandb/README.md | 140 +++
utils/loggers/wandb/__init__.py | 0
.../wandb/__pycache__/__init__.cpython-37.pyc | Bin 0 -> 156 bytes
.../wandb/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 155 bytes
.../__pycache__/wandb_utils.cpython-37.pyc | Bin 0 -> 18644 bytes
.../__pycache__/wandb_utils.cpython-38.pyc | Bin 0 -> 18704 bytes
utils/loggers/wandb/log_dataset.py | 23 +
utils/loggers/wandb/sweep.py | 33 +
utils/loggers/wandb/sweep.yaml | 143 +++
utils/loggers/wandb/wandb_utils.py | 510 +++++++++
utils/loss.py | 245 +++++
utils/metrics.py | 332 ++++++
utils/plots.py | 432 ++++++++
utils/torch_utils.py | 327 ++++++
val.py | 352 +++++++
yolov5_cls.cpp | 288 +++++
yolov5_cls_trt.py | 248 +++++
yolov5_det.cpp | 233 +++++
yolov5_det_cuda_python.py | 453 ++++++++
yolov5_det_trt.py | 452 ++++++++
yolov5_seg.cpp | 245 +++++
yolov5_seg_trt.py | 561 ++++++++++
148 files changed, 15117 insertions(+), 2 deletions(-)
create mode 100644 CMakeLists.txt
create mode 100644 __pycache__/val.cpython-37.pyc
create mode 100644 __pycache__/val.cpython-38.pyc
create mode 100644 data/Argoverse.yaml
create mode 100644 data/GlobalWheat2020.yaml
create mode 100644 data/Objects365.yaml
create mode 100644 data/SKU-110K.yaml
create mode 100644 data/VOC.yaml
create mode 100644 data/VisDrone.yaml
create mode 100644 data/coco.yaml
create mode 100644 data/coco128.yaml
create mode 100644 data/data_class_4.yaml
create mode 100644 data/hyps/hyp.finetune.yaml
create mode 100644 data/hyps/hyp.finetune_objects365.yaml
create mode 100644 data/hyps/hyp.scratch-p6.yaml
create mode 100644 data/hyps/hyp.scratch.yaml
create mode 100644 data/img.cache
create mode 100644 data/img.cache.npy
create mode 100644 data/img1.cache
create mode 100644 data/scripts/download_weights.sh
create mode 100644 data/scripts/get_coco.sh
create mode 100644 data/scripts/get_coco128.sh
create mode 100644 data/xView.yaml
create mode 100644 detect.py
create mode 100644 detect1.py
create mode 100644 export.py
create mode 100644 gen_wts.py
create mode 100644 images
create mode 100644 models/__init__.py
create mode 100644 models/__pycache__/__init__.cpython-37.pyc
create mode 100644 models/__pycache__/__init__.cpython-38.pyc
create mode 100644 models/__pycache__/common.cpython-37.pyc
create mode 100644 models/__pycache__/common.cpython-38.pyc
create mode 100644 models/__pycache__/experimental.cpython-37.pyc
create mode 100644 models/__pycache__/experimental.cpython-38.pyc
create mode 100644 models/__pycache__/yolo.cpython-37.pyc
create mode 100644 models/__pycache__/yolo.cpython-38.pyc
create mode 100644 models/common.py
create mode 100644 models/common_1.py
create mode 100644 models/experimental.py
create mode 100644 models/hub/anchors.yaml
create mode 100644 models/hub/yolov3-spp.yaml
create mode 100644 models/hub/yolov3-tiny.yaml
create mode 100644 models/hub/yolov3.yaml
create mode 100644 models/hub/yolov5-bifpn.yaml
create mode 100644 models/hub/yolov5-fpn.yaml
create mode 100644 models/hub/yolov5-p2.yaml
create mode 100644 models/hub/yolov5-p6.yaml
create mode 100644 models/hub/yolov5-p7.yaml
create mode 100644 models/hub/yolov5-panet.yaml
create mode 100644 models/hub/yolov5l6.yaml
create mode 100644 models/hub/yolov5m6.yaml
create mode 100644 models/hub/yolov5s6.yaml
create mode 100644 models/hub/yolov5x6.yaml
create mode 100644 models/yolo.py
create mode 100644 models/yolov5l.yaml
create mode 100644 models/yolov5m-2transformer.yaml
create mode 100644 models/yolov5m.yaml
create mode 100644 models/yolov5m_add_detect.yaml
create mode 100644 models/yolov5m_s.yaml
create mode 100644 models/yolov5s-2transformer.yaml
create mode 100644 models/yolov5s-transformer.yaml
create mode 100644 models/yolov5s.yaml
create mode 100644 models/yolov5x.yaml
create mode 100644 plugin/yololayer.cu
create mode 100644 plugin/yololayer.h
create mode 100644 requirements.txt
create mode 100644 src/calibrator.cpp
create mode 100644 src/calibrator.h
create mode 100644 src/config.h
create mode 100644 src/cuda_utils.h
create mode 100644 src/logging.h
create mode 100644 src/macros.h
create mode 100644 src/model.cpp
create mode 100644 src/model.h
create mode 100644 src/postprocess.cpp
create mode 100644 src/postprocess.h
create mode 100644 src/preprocess.cu
create mode 100644 src/preprocess.h
create mode 100644 src/types.h
create mode 100644 src/utils.h
create mode 100644 train.py
create mode 100644 utils/__init__.py
create mode 100644 utils/__pycache__/__init__.cpython-37.pyc
create mode 100644 utils/__pycache__/__init__.cpython-38.pyc
create mode 100644 utils/__pycache__/augmentations.cpython-37.pyc
create mode 100644 utils/__pycache__/augmentations.cpython-38.pyc
create mode 100644 utils/__pycache__/autoanchor.cpython-37.pyc
create mode 100644 utils/__pycache__/autoanchor.cpython-38.pyc
create mode 100644 utils/__pycache__/callbacks.cpython-37.pyc
create mode 100644 utils/__pycache__/callbacks.cpython-38.pyc
create mode 100644 utils/__pycache__/datasets.cpython-37.pyc
create mode 100644 utils/__pycache__/datasets.cpython-38.pyc
create mode 100644 utils/__pycache__/downloads.cpython-37.pyc
create mode 100644 utils/__pycache__/downloads.cpython-38.pyc
create mode 100644 utils/__pycache__/general.cpython-37.pyc
create mode 100644 utils/__pycache__/general.cpython-38.pyc
create mode 100644 utils/__pycache__/loss.cpython-37.pyc
create mode 100644 utils/__pycache__/loss.cpython-38.pyc
create mode 100644 utils/__pycache__/metrics.cpython-37.pyc
create mode 100644 utils/__pycache__/metrics.cpython-38.pyc
create mode 100644 utils/__pycache__/plots.cpython-37.pyc
create mode 100644 utils/__pycache__/plots.cpython-38.pyc
create mode 100644 utils/__pycache__/torch_utils.cpython-37.pyc
create mode 100644 utils/__pycache__/torch_utils.cpython-38.pyc
create mode 100644 utils/activations.py
create mode 100644 utils/augmentations.py
create mode 100644 utils/autoanchor.py
create mode 100644 utils/aws/__init__.py
create mode 100644 utils/aws/mime.sh
create mode 100644 utils/aws/resume.py
create mode 100644 utils/aws/userdata.sh
create mode 100644 utils/callbacks.py
create mode 100644 utils/datasets.py
create mode 100644 utils/downloads.py
create mode 100644 utils/flask_rest_api/README.md
create mode 100644 utils/flask_rest_api/example_request.py
create mode 100644 utils/flask_rest_api/restapi.py
create mode 100644 utils/general.py
create mode 100644 utils/google_app_engine/Dockerfile
create mode 100644 utils/google_app_engine/additional_requirements.txt
create mode 100644 utils/google_app_engine/app.yaml
create mode 100644 utils/loggers/__init__.py
create mode 100644 utils/loggers/__pycache__/__init__.cpython-37.pyc
create mode 100644 utils/loggers/__pycache__/__init__.cpython-38.pyc
create mode 100644 utils/loggers/wandb/README.md
create mode 100644 utils/loggers/wandb/__init__.py
create mode 100644 utils/loggers/wandb/__pycache__/__init__.cpython-37.pyc
create mode 100644 utils/loggers/wandb/__pycache__/__init__.cpython-38.pyc
create mode 100644 utils/loggers/wandb/__pycache__/wandb_utils.cpython-37.pyc
create mode 100644 utils/loggers/wandb/__pycache__/wandb_utils.cpython-38.pyc
create mode 100644 utils/loggers/wandb/log_dataset.py
create mode 100644 utils/loggers/wandb/sweep.py
create mode 100644 utils/loggers/wandb/sweep.yaml
create mode 100644 utils/loggers/wandb/wandb_utils.py
create mode 100644 utils/loss.py
create mode 100644 utils/metrics.py
create mode 100644 utils/plots.py
create mode 100644 utils/torch_utils.py
create mode 100644 val.py
create mode 100644 yolov5_cls.cpp
create mode 100644 yolov5_cls_trt.py
create mode 100644 yolov5_det.cpp
create mode 100644 yolov5_det_cuda_python.py
create mode 100644 yolov5_det_trt.py
create mode 100644 yolov5_seg.cpp
create mode 100644 yolov5_seg_trt.py
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..a1522ce
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,52 @@
+cmake_minimum_required(VERSION 3.10)
+
+project(yolov5)
+
+add_definitions(-std=c++11)
+add_definitions(-DAPI_EXPORTS)
+option(CUDA_USE_STATIC_CUDA_RUNTIME OFF)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_BUILD_TYPE Debug)
+
+# TODO(Call for PR): make cmake compatible with Windows
+set(CMAKE_CUDA_COMPILER /usr/local/cuda/bin/nvcc)
+enable_language(CUDA)
+
+# include and link dirs of cuda and tensorrt, you need adapt them if yours are different
+# cuda
+include_directories(/usr/local/cuda/include)
+link_directories(/usr/local/cuda/lib64)
+# tensorrt
+# TODO(Call for PR): make TRT path configurable from command line
+include_directories(/home/nvidia/TensorRT-8.2.5.1/include/)
+link_directories(/home/nvidia/TensorRT-8.2.5.1/lib/)
+
+include_directories(${PROJECT_SOURCE_DIR}/src/)
+include_directories(${PROJECT_SOURCE_DIR}/plugin/)
+file(GLOB_RECURSE SRCS ${PROJECT_SOURCE_DIR}/src/*.cpp ${PROJECT_SOURCE_DIR}/src/*.cu)
+file(GLOB_RECURSE PLUGIN_SRCS ${PROJECT_SOURCE_DIR}/plugin/*.cu)
+
+add_library(myplugins SHARED ${PLUGIN_SRCS})
+target_link_libraries(myplugins nvinfer cudart)
+
+find_package(OpenCV)
+include_directories(${OpenCV_INCLUDE_DIRS})
+
+add_executable(yolov5_det yolov5_det.cpp ${SRCS})
+target_link_libraries(yolov5_det nvinfer)
+target_link_libraries(yolov5_det cudart)
+target_link_libraries(yolov5_det myplugins)
+target_link_libraries(yolov5_det ${OpenCV_LIBS})
+
+add_executable(yolov5_cls yolov5_cls.cpp ${SRCS})
+target_link_libraries(yolov5_cls nvinfer)
+target_link_libraries(yolov5_cls cudart)
+target_link_libraries(yolov5_cls myplugins)
+target_link_libraries(yolov5_cls ${OpenCV_LIBS})
+
+add_executable(yolov5_seg yolov5_seg.cpp ${SRCS})
+target_link_libraries(yolov5_seg nvinfer)
+target_link_libraries(yolov5_seg cudart)
+target_link_libraries(yolov5_seg myplugins)
+target_link_libraries(yolov5_seg ${OpenCV_LIBS})
+
diff --git a/README.md b/README.md
index edc6200..6d53628 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,157 @@
-# TensorRT_Transform
+# YOLOv5
+
+TensorRTx inference code base for [ultralytics/yolov5](https://github.com/ultralytics/yolov5).
+
+## Contributors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Different versions of yolov5
+
+Currently, we support yolov5 v1.0, v2.0, v3.0, v3.1, v4.0, v5.0, v6.0, v6.2, v7.0
+
+- For yolov5 v7.0, download .pt from [yolov5 release v7.0](https://github.com/ultralytics/yolov5/releases/tag/v7.0), `git clone -b v7.0 https://github.com/ultralytics/yolov5.git` and `git clone -b yolov5-v7.0 https://github.com/wang-xinyu/tensorrtx.git`, then follow how-to-run in [tensorrtx/yolov5-v7.0](https://github.com/wang-xinyu/tensorrtx/tree/yolov5-v7.0/yolov5)
+- For yolov5 v6.2, download .pt from [yolov5 release v6.2](https://github.com/ultralytics/yolov5/releases/tag/v6.2), `git clone -b v6.2 https://github.com/ultralytics/yolov5.git` and `git clone -b yolov5-v6.2 https://github.com/wang-xinyu/tensorrtx.git`, then follow how-to-run in [tensorrtx/yolov5-v6.2](https://github.com/wang-xinyu/tensorrtx/tree/yolov5-v6.2/yolov5)
+- For yolov5 v6.0, download .pt from [yolov5 release v6.0](https://github.com/ultralytics/yolov5/releases/tag/v6.0), `git clone -b v6.0 https://github.com/ultralytics/yolov5.git` and `git clone -b yolov5-v6.0 https://github.com/wang-xinyu/tensorrtx.git`, then follow how-to-run in [tensorrtx/yolov5-v6.0](https://github.com/wang-xinyu/tensorrtx/tree/yolov5-v6.0/yolov5).
+- For yolov5 v5.0, download .pt from [yolov5 release v5.0](https://github.com/ultralytics/yolov5/releases/tag/v5.0), `git clone -b v5.0 https://github.com/ultralytics/yolov5.git` and `git clone -b yolov5-v5.0 https://github.com/wang-xinyu/tensorrtx.git`, then follow how-to-run in [tensorrtx/yolov5-v5.0](https://github.com/wang-xinyu/tensorrtx/tree/yolov5-v5.0/yolov5).
+- For yolov5 v4.0, download .pt from [yolov5 release v4.0](https://github.com/ultralytics/yolov5/releases/tag/v4.0), `git clone -b v4.0 https://github.com/ultralytics/yolov5.git` and `git clone -b yolov5-v4.0 https://github.com/wang-xinyu/tensorrtx.git`, then follow how-to-run in [tensorrtx/yolov5-v4.0](https://github.com/wang-xinyu/tensorrtx/tree/yolov5-v4.0/yolov5).
+- For yolov5 v3.1, download .pt from [yolov5 release v3.1](https://github.com/ultralytics/yolov5/releases/tag/v3.1), `git clone -b v3.1 https://github.com/ultralytics/yolov5.git` and `git clone -b yolov5-v3.1 https://github.com/wang-xinyu/tensorrtx.git`, then follow how-to-run in [tensorrtx/yolov5-v3.1](https://github.com/wang-xinyu/tensorrtx/tree/yolov5-v3.1/yolov5).
+- For yolov5 v3.0, download .pt from [yolov5 release v3.0](https://github.com/ultralytics/yolov5/releases/tag/v3.0), `git clone -b v3.0 https://github.com/ultralytics/yolov5.git` and `git clone -b yolov5-v3.0 https://github.com/wang-xinyu/tensorrtx.git`, then follow how-to-run in [tensorrtx/yolov5-v3.0](https://github.com/wang-xinyu/tensorrtx/tree/yolov5-v3.0/yolov5).
+- For yolov5 v2.0, download .pt from [yolov5 release v2.0](https://github.com/ultralytics/yolov5/releases/tag/v2.0), `git clone -b v2.0 https://github.com/ultralytics/yolov5.git` and `git clone -b yolov5-v2.0 https://github.com/wang-xinyu/tensorrtx.git`, then follow how-to-run in [tensorrtx/yolov5-v2.0](https://github.com/wang-xinyu/tensorrtx/tree/yolov5-v2.0/yolov5).
+- For yolov5 v1.0, download .pt from [yolov5 release v1.0](https://github.com/ultralytics/yolov5/releases/tag/v1.0), `git clone -b v1.0 https://github.com/ultralytics/yolov5.git` and `git clone -b yolov5-v1.0 https://github.com/wang-xinyu/tensorrtx.git`, then follow how-to-run in [tensorrtx/yolov5-v1.0](https://github.com/wang-xinyu/tensorrtx/tree/yolov5-v1.0/yolov5).
+
+## Config
+
+- Choose the YOLOv5 sub-model n/s/m/l/x/n6/s6/m6/l6/x6 from command line arguments.
+- Other configs please check [src/config.h](src/config.h)
+
+## Build and Run
+
+### Detection
+
+1. generate .wts from pytorch with .pt, or download .wts from model zoo
+
+```
+git clone -b v7.0 https://github.com/ultralytics/yolov5.git
+git clone -b yolov5-v7.0 https://github.com/wang-xinyu/tensorrtx.git
+cd yolov5/
+wget https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt
+cp [PATH-TO-TENSORRTX]/yolov5/gen_wts.py .
+python gen_wts.py -w yolov5s.pt -o yolov5s.wts
+# A file 'yolov5s.wts' will be generated.
+```
+
+2. build tensorrtx/yolov5 and run
+
+```
+cd [PATH-TO-TENSORRTX]/yolov5/
+# Update kNumClass in src/config.h if your model is trained on custom dataset
+mkdir build
+cd build
+cp [PATH-TO-ultralytics-yolov5]/yolov5s.wts .
+cmake ..
+make
+
+./yolov5_det -s [.wts] [.engine] [n/s/m/l/x/n6/s6/m6/l6/x6 or c/c6 gd gw] // serialize model to plan file
+./yolov5_det -d [.engine] [image folder] // deserialize and run inference, the images in [image folder] will be processed.
+
+# For example yolov5s
+./yolov5_det -s yolov5s.wts yolov5s.engine s
+./yolov5_det -d yolov5s.engine ../images
+
+# For example Custom model with depth_multiple=0.17, width_multiple=0.25 in yolov5.yaml
+./yolov5_det -s yolov5_custom.wts yolov5.engine c 0.17 0.25
+./yolov5_det -d yolov5.engine ../images
+```
+
+3. Check the images generated, _zidane.jpg and _bus.jpg
+
+4. Optional, load and run the tensorrt model in Python
+
+```
+// Install python-tensorrt, pycuda, etc.
+// Ensure the yolov5s.engine and libmyplugins.so have been built
+python yolov5_det_trt.py
+
+// Another version of python script, which is using CUDA Python instead of pycuda.
+python yolov5_det_trt_cuda_python.py
+```
+
+
+
+
+
+### Classification
+
+```
+# Download ImageNet labels
+wget https://github.com/joannzhang00/ImageNet-dataset-classes-labels/blob/main/imagenet_classes.txt
+
+# Build and serialize TensorRT engine
+./yolov5_cls -s yolov5s-cls.wts yolov5s-cls.engine s
+
+# Run inference
+./yolov5_cls -d yolov5s-cls.engine ../images
+```
+
+### Instance Segmentation
+
+```
+# Build and serialize TensorRT engine
+./yolov5_seg -s yolov5s-seg.wts yolov5s-seg.engine s
+
+# Download the labels file
+wget -O coco.txt https://raw.githubusercontent.com/amikelive/coco-labels/master/coco-labels-2014_2017.txt
+
+# Run inference with labels file
+./yolov5_seg -d yolov5s-seg.engine ../images coco.txt
+```
+
+
+
+
+
+# INT8 Quantization
+
+1. Prepare calibration images, you can randomly select 1000s images from your train set. For coco, you can also download my calibration images `coco_calib` from [GoogleDrive](https://drive.google.com/drive/folders/1s7jE9DtOngZMzJC1uL307J2MiaGwdRSI?usp=sharing) or [BaiduPan](https://pan.baidu.com/s/1GOm_-JobpyLMAqZWCDUhKg) pwd: a9wh
+
+2. unzip it in yolov5/build
+
+3. set the macro `USE_INT8` in src/config.h and make
+
+4. serialize the model and test
+
+
+## More Information
+
+See the readme in [home page.](https://github.com/wang-xinyu/tensorrtx)
-TensorRT转化代码
\ No newline at end of file
diff --git a/__pycache__/val.cpython-37.pyc b/__pycache__/val.cpython-37.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..be7358d41750a6cc753c155e07f52ac40a4d20a8
GIT binary patch
literal 12122
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
TDBujW>r={nd^El{2`u|xr@EUb
literal 0
HcmV?d00001
diff --git a/__pycache__/val.cpython-38.pyc b/__pycache__/val.cpython-38.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..52e55146fe3065a7a478d38c248b7da3abe06944
GIT binary patch
literal 12077
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
Mm7QM7KlG~of2=p|W&i*H
literal 0
HcmV?d00001
diff --git a/data/img.cache.npy b/data/img.cache.npy
new file mode 100644
index 0000000000000000000000000000000000000000..c500837b81f4e4e080a33d071c400d6303993388
GIT binary patch
literal 113581
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