yolov5: use downloaded imagenet lables
This commit is contained in:
parent
90b2f1e445
commit
712a50bc08
@ -1,12 +1,41 @@
|
|||||||
# yolov5
|
# YOLOv5
|
||||||
|
|
||||||
The Pytorch implementation is [ultralytics/yolov5](https://github.com/ultralytics/yolov5).
|
TensorRTx inference code base for [ultralytics/yolov5](https://github.com/ultralytics/yolov5).
|
||||||
|
|
||||||
|
## Contributors
|
||||||
|
|
||||||
|
<a href="https://github.com/wang-xinyu"><img src="https://avatars.githubusercontent.com/u/15235574?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/BaofengZan"><img src="https://avatars.githubusercontent.com/u/20653176?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/upczww"><img src="https://avatars.githubusercontent.com/u/16224249?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/cesarandreslopez"><img src="https://avatars.githubusercontent.com/u/14029177?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/makaveli10"><img src="https://avatars.githubusercontent.com/u/39617050?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/priteshgohil"><img src="https://avatars.githubusercontent.com/u/43172056?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/rymzt"><img src="https://avatars.githubusercontent.com/u/3270954?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/AsakusaRinne"><img src="https://avatars.githubusercontent.com/u/47343601?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/freedenS"><img src="https://avatars.githubusercontent.com/u/26213470?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/smarttowel"><img src="https://avatars.githubusercontent.com/u/1128528?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/wwqgtxx"><img src="https://avatars.githubusercontent.com/u/582584?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/adujardin"><img src="https://avatars.githubusercontent.com/u/12609780?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/jow905"><img src="https://avatars.githubusercontent.com/u/19189198?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/CristiFati"><img src="https://avatars.githubusercontent.com/u/29705787?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/HaiyangPeng"><img src="https://avatars.githubusercontent.com/u/46739135?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/Armassarion"><img src="https://avatars.githubusercontent.com/u/33727511?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/xupengao"><img src="https://avatars.githubusercontent.com/u/51817015?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/liuqi123123"><img src="https://avatars.githubusercontent.com/u/46275888?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/ASONG0506"><img src="https://avatars.githubusercontent.com/u/26050577?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/bobo0810"><img src="https://avatars.githubusercontent.com/u/26057879?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/Silmeria112"><img src="https://avatars.githubusercontent.com/u/16464837?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/LW-SCU"><img src="https://avatars.githubusercontent.com/u/28128257?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/AdanWang"><img src="https://avatars.githubusercontent.com/u/32757980?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/triple-Mu"><img src="https://avatars.githubusercontent.com/u/92794867?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/xiang-wuu"><img src="https://avatars.githubusercontent.com/u/107029401?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
<a href="https://github.com/uyolo1314"><img src="https://avatars.githubusercontent.com/u/101853326?s=48&v=4" width="40px;" alt=""/></a>
|
||||||
|
|
||||||
## Different versions of yolov5
|
## Different versions of yolov5
|
||||||
|
|
||||||
Currently, we support yolov5 v1.0, v2.0, v3.0, v3.1, v4.0, v5.0, v6.0, v6.2.
|
Currently, we support yolov5 v1.0, v2.0, v3.0, v3.1, v4.0, v5.0, v6.0, v6.2
|
||||||
|
|
||||||
- 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 current page.
|
- 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 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 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 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).
|
||||||
@ -26,13 +55,15 @@ Currently, we support yolov5 v1.0, v2.0, v3.0, v3.1, v4.0, v5.0, v6.0, v6.2.
|
|||||||
- BBox confidence thresh in yolov5.cpp
|
- BBox confidence thresh in yolov5.cpp
|
||||||
- Batch size in yolov5.cpp
|
- Batch size in yolov5.cpp
|
||||||
|
|
||||||
## How to Run, yolov5s as example
|
## Build and Run
|
||||||
|
|
||||||
|
### Detection
|
||||||
|
|
||||||
1. generate .wts from pytorch with .pt, or download .wts from model zoo
|
1. generate .wts from pytorch with .pt, or download .wts from model zoo
|
||||||
|
|
||||||
```
|
```
|
||||||
// clone code according to above #Different versions of yolov5
|
// clone code according to above #Different versions of yolov5
|
||||||
// download https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt
|
// download https://github.com/ultralytics/yolov5/releases/download/v6.2/yolov5s.pt
|
||||||
cp {tensorrtx}/yolov5/gen_wts.py {ultralytics}/yolov5
|
cp {tensorrtx}/yolov5/gen_wts.py {ultralytics}/yolov5
|
||||||
cd {ultralytics}/yolov5
|
cd {ultralytics}/yolov5
|
||||||
python gen_wts.py -w yolov5s.pt -o yolov5s.wts
|
python gen_wts.py -w yolov5s.pt -o yolov5s.wts
|
||||||
@ -72,7 +103,18 @@ python yolov5_trt.py
|
|||||||
python yolov5_trt_cuda_python.py
|
python yolov5_trt_cuda_python.py
|
||||||
```
|
```
|
||||||
|
|
||||||
5. optional, run yolov5 classification models with similar steps
|
### 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 ../samples
|
||||||
|
```
|
||||||
|
|
||||||
# INT8 Quantization
|
# INT8 Quantization
|
||||||
|
|
||||||
@ -85,11 +127,7 @@ python yolov5_trt_cuda_python.py
|
|||||||
4. serialize the model and test
|
4. serialize the model and test
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://user-images.githubusercontent.com/15235574/78247927-4d9fac00-751e-11ea-8b1b-704a0aeb3fcf.jpg">
|
<img src="https://user-images.githubusercontent.com/15235574/78247927-4d9fac00-751e-11ea-8b1b-704a0aeb3fcf.jpg" height="360px;">
|
||||||
</p>
|
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<img src="https://user-images.githubusercontent.com/15235574/78247970-60b27c00-751e-11ea-88df-41473fed4823.jpg">
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## More Information
|
## More Information
|
||||||
|
|||||||
@ -28,17 +28,18 @@ def parse_args():
|
|||||||
|
|
||||||
|
|
||||||
pt_file, wts_file, m_type = parse_args()
|
pt_file, wts_file, m_type = parse_args()
|
||||||
|
print(f'Generating .wts for {m_type} model')
|
||||||
|
|
||||||
# Initialize
|
# Initialize
|
||||||
device = select_device('cpu')
|
device = select_device('cpu')
|
||||||
# Load model
|
# Load model
|
||||||
|
print(f'Loading {pt_file}')
|
||||||
model = torch.load(pt_file, map_location=device) # load to FP32
|
model = torch.load(pt_file, map_location=device) # load to FP32
|
||||||
model = model['ema' if model.get('ema') else 'model'].float()
|
model = model['ema' if model.get('ema') else 'model'].float()
|
||||||
|
|
||||||
if m_type == "detect":
|
if m_type == "detect":
|
||||||
# update anchor_grid info
|
# update anchor_grid info
|
||||||
anchor_grid = model.model[-1].anchors * \
|
anchor_grid = model.model[-1].anchors * model.model[-1].stride[..., None, None]
|
||||||
model.model[-1].stride[..., None, None]
|
|
||||||
# model.model[-1].anchor_grid = anchor_grid
|
# model.model[-1].anchor_grid = anchor_grid
|
||||||
delattr(model.model[-1], 'anchor_grid') # model.model[-1] is detect layer
|
delattr(model.model[-1], 'anchor_grid') # model.model[-1] is detect layer
|
||||||
# The parameters are saved in the OrderDict through the "register_buffer" method, and then saved to the weight.
|
# The parameters are saved in the OrderDict through the "register_buffer" method, and then saved to the weight.
|
||||||
@ -47,6 +48,7 @@ if m_type == "detect":
|
|||||||
|
|
||||||
model.to(device).eval()
|
model.to(device).eval()
|
||||||
|
|
||||||
|
print(f'Writing into {wts_file}')
|
||||||
with open(wts_file, 'w') as f:
|
with open(wts_file, 'w') as f:
|
||||||
f.write('{}\n'.format(len(model.state_dict().keys())))
|
f.write('{}\n'.format(len(model.state_dict().keys())))
|
||||||
for k, v in model.state_dict().items():
|
for k, v in model.state_dict().items():
|
||||||
|
|||||||
@ -69,7 +69,10 @@ std::vector<int> topk(const std::vector<float>& vec, int k) {
|
|||||||
std::vector<std::string> read_classes(std::string file_name) {
|
std::vector<std::string> read_classes(std::string file_name) {
|
||||||
std::vector<std::string> classes;
|
std::vector<std::string> classes;
|
||||||
std::ifstream ifs(file_name, std::ios::in);
|
std::ifstream ifs(file_name, std::ios::in);
|
||||||
assert(ifs.is_open());
|
if (!ifs.is_open()) {
|
||||||
|
std::cerr << file_name << " is not found, pls refer to README and download it." << std::endl;
|
||||||
|
assert(0);
|
||||||
|
}
|
||||||
std::string s;
|
std::string s;
|
||||||
while (std::getline(ifs, s)) {
|
while (std::getline(ifs, s)) {
|
||||||
classes.push_back(s);
|
classes.push_back(s);
|
||||||
@ -250,7 +253,7 @@ int main(int argc, char** argv) {
|
|||||||
std::cerr << "read_files_in_dir failed." << std::endl;
|
std::cerr << "read_files_in_dir failed." << std::endl;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
auto classes = read_classes("../imagenet_classes.txt");
|
auto classes = read_classes("imagenet_classes.txt");
|
||||||
|
|
||||||
static float data[BATCH_SIZE * 3 * INPUT_H * INPUT_W];
|
static float data[BATCH_SIZE * 3 * INPUT_H * INPUT_W];
|
||||||
static float prob[BATCH_SIZE * OUTPUT_SIZE];
|
static float prob[BATCH_SIZE * OUTPUT_SIZE];
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user