"vscode:/vscode.git/clone" did not exist on "17299f088a01a4ae1428a5d7e7073def61c584e7"
Commit 874aa019 authored by Sugon_ldc's avatar Sugon_ldc
Browse files

Changes to readme content

parent ebe2c0ff
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
# Start FROM Nvidia PyTorch image https://ngc.nvidia.com/catalog/containers/nvidia:pytorch
FROM nvcr.io/nvidia/pytorch:21.05-py3
# Install linux packages
RUN apt update && apt install -y zip htop screen libgl1-mesa-glx
# Install python dependencies
COPY requirements.txt .
RUN python -m pip install --upgrade pip
RUN pip uninstall -y nvidia-tensorboard nvidia-tensorboard-plugin-dlprof
RUN pip install --no-cache -r requirements.txt coremltools onnx gsutil notebook wandb>=0.12.2
RUN pip install --no-cache -U torch torchvision numpy
# RUN pip install --no-cache torch==1.9.1+cu111 torchvision==0.10.1+cu111 -f https://download.pytorch.org/whl/torch_stable.html
# Create working directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Copy contents
COPY . /usr/src/app
# Downloads to user config dir
ADD https://ultralytics.com/assets/Arial.ttf /root/.config/Ultralytics/
# Set environment variables
# ENV HOME=/usr/src/app
# Usage Examples -------------------------------------------------------------------------------------------------------
# Build and Push
# t=ultralytics/yolov5:latest && sudo docker build -t $t . && sudo docker push $t
# Pull and Run
# t=ultralytics/yolov5:latest && sudo docker pull $t && sudo docker run -it --ipc=host --gpus all $t
# Pull and Run with local directory access
# t=ultralytics/yolov5:latest && sudo docker pull $t && sudo docker run -it --ipc=host --gpus all -v "$(pwd)"/datasets:/usr/src/datasets $t
# Kill all
# sudo docker kill $(sudo docker ps -q)
# Kill all image-based
# sudo docker kill $(sudo docker ps -qa --filter ancestor=ultralytics/yolov5:latest)
# Bash into running container
# sudo docker exec -it 5a9b5863d93d bash
# Bash into stopped container
# id=$(sudo docker ps -qa) && sudo docker start $id && sudo docker exec -it $id bash
# Clean up
# docker system prune -a --volumes
# Update Ubuntu drivers
# https://www.maketecheasier.com/install-nvidia-drivers-ubuntu/
# DDP test
# python -m torch.distributed.run --nproc_per_node 2 --master_port 1 train.py --epochs 3
...@@ -2,59 +2,105 @@ ...@@ -2,59 +2,105 @@
# YOLOV5算力测试 # YOLOV5算力测试
## 1.模型介绍 ## 相关文档
[YOLO](https://arxiv.org/abs/1506.02640)(You Only Look Once)是一种流行的对象检测和图像分割模型,由华盛顿大学的Joseph Redmon和Ali Farhadi开发。YOLO 于 2015 年推出,因其高速和准确性而迅速普及。 [Comprehensive Guide to Ultralytics YOLOv5 - Ultralytics YOLOv8 Docs](https://docs.ultralytics.com/yolov5/)
- [YOLOv2](https://arxiv.org/abs/1612.08242)于2016年发布,通过合并批处理规范化、锚框和维度集群改进了原始模型。 ## 模型结构
- [YOLOv3](https://pjreddie.com/media/files/papers/YOLOv3.pdf) 于 2018 年推出,使用更高效的主干网络、多个锚点和空间金字塔池化进一步增强了模型的性能。
- [YOLOv4](https://arxiv.org/abs/2004.10934) 于 2020 年发布,引入了 Mosaic 数据增强、新的无锚检测头和新的损失函数等创新。
- [YOLOv5](https://github.com/ultralytics/yolov5) 进一步提升了模型的性能,并增加了超参数优化、集成实验跟踪和自动导出为流行导出格式等新功能。
## 2.模型结构 YOLOv5 是一种目标检测算法,采用单阶段(one-stage)的方法,基于轻量级的卷积神经网络结构,通过引入不同尺度的特征融合和特征金字塔结构来实现高效准确的目标检测。
YOLOv5是一种基于深度学习的目标检测算法,它的模型结构主要包括backbone、neck、head和loss四个部分。其中,backbone是用于提取特征的主干网络,neck是用于融合不同层次的特征,head是用于预测目标的检测头,loss是用于计算损失的函数。YOLOv5的模型结构相比YOLOv4有所改进,主要体现在backbone和head上。 ![Backbone](Backbone.png)
更具体地说,YOLOv5的backbone采用CSPDarknet53网络结构,其中CSP表示Cross Stage Partial Network,它可以有效地减少参数量和计算量。neck采用FPN+PAN的结构,其中FPN表示Feature Pyramid Network,PAN表示Path Aggregation Network,它们可以将不同层次的特征进行融合。head采用YOLOv3中的anchor-based检测头,并在此基础上加入了SPP结构和SAM结构,以提高检测精度。loss采用GIOU Loss作为bounding box的损失,并使用二进制交叉熵和Logits损失函数计算类概率和目标得分的损失。 ## 算法原理
## 3.数据集 YOLOv5 是一种基于单阶段目标检测算法,通过将图像划分为不同大小的网格,预测每个网格中的目标类别和边界框,利用特征金字塔结构和自适应的模型缩放来实现高效准确的实时目标检测。
使用COCO2017数据集,COCO2017数据集是一个用于目标检测、分割、关键点检测和图像描述的数据集,由微软公司制作收集。该数据集包含超过33万张图像,其中大约20万张图像用于训练,6万张图像用于验证,7万张图像用于测试。COCO2017数据集中的物体类别共有80个,包括人、动物、交通工具、家具等。 ![Algorithm_principle](Algorithm_principle.png)
COCO2017数据集中的每个物体都有一个矩形边界框和一个类别标签,同时还有一些物体的关键点标注和图像描述信息。COCO2017数据集的标注格式采用JSON文件存储,其中包含了每个物体的位置、类别、关键点等信息。 ## 环境配置
## 4.训练 ### Docker (方法一)
### 环境配置 ```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.10.0-centos7.6-dtk-22.10.1-py38-latest
提供光源拉取的训练镜像 docker run -it -v /path/your_code_data/:/path/your_code_data/ --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
cd /path/workspace/
pip3 install -r requirements.txt
``` ```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.10.0-centos7.6-dtk-22.10.1-py38-latest
### Dockerfile (方法二)
```
cd ./docker
docker build --no-cache -t yolov5:6.0 .
docker run -it -v /path/your_code_data/:/path/your_code_data/ --shm-size=32G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
``` ```
python依赖安装: ### Anaconda (方法三)
1、关于本项目DCU显卡所需的特殊深度学习库可从光合开发者社区下载安装: https://developer.hpccube.com/tool/
``` ```
pip3 install -r requirement.txt DTK软件栈:dtk22.10.1
python:python3.8
torch:1.10
torchvision:0.10.0
``` ```
进行训练之前需要对bn进行设置,下面给出示例(function.py的路径根据所用环境进行调整): Tips:以上dtk软件栈、python、torch等DCU相关工具版本需要严格一一对应
2、其他非特殊库直接按照requirements.txt安装
``` ```
#具体路径根据当前所使用的python环境进行修正 pip3 install -r requirements.txt
vim /usr/local/lib/python3.8/site-packages/torch/nn/functional.py
``` ```
如图将torch.backends.cudnn.enabled改为False
![native bn](native bn.png)
### 预训练模型 ## 数据集
COCO2017(在网络良好的情况下,如果没有下载数据集,程序会默认在线下载数据集)
[训练数据](http://images.cocodataset.org/zips/train2017.zip)
[验证数据](http://images.cocodataset.org/zips/val2017.zip)
[测试数据](http://images.cocodataset.org/zips/test2017.zip)
预训练模型均在Checkpoints文件夹内 [标签数据](https://github.com/ultralytics/yolov5/releases/download/v1.0/coco2017labels.zip)
### 单卡训练 数据集的目录结构如下:
```
├── images
│ ├── train2017
│ ├── val2017
│ ├── test2017
├── labels
│ ├── train2017
│ ├── val2017
├── annotations
│ ├── instances_val2017.json
├── LICENSE
├── README.txt
├── test-dev2017.txt
├── train2017.txt
├── val2017.txt
```
## 训练
若使用dtk版本为22.10.1及其之前的版本,训练之前请修改bn的配置:
如图将torch.backends.cudnn.enabled改为False
![native bn](native bn.png)
### 单机单卡
``` ```
export HIP_VISIBLE_DEVICES=0 export HIP_VISIBLE_DEVICES=0
...@@ -62,18 +108,17 @@ export HIP_VISIBLE_DEVICES=0 ...@@ -62,18 +108,17 @@ export HIP_VISIBLE_DEVICES=0
python3 train.py --batch 32 --data coco.yaml --cfg 'yolov5m.yaml' --weights '' --project 'run/train' --hyp 'data/hyps/hyp.scratch-high.yaml' --epochs 1000 2>&1 | tee yolov5m.log python3 train.py --batch 32 --data coco.yaml --cfg 'yolov5m.yaml' --weights '' --project 'run/train' --hyp 'data/hyps/hyp.scratch-high.yaml' --epochs 1000 2>&1 | tee yolov5m.log
``` ```
### 单节点多卡训练 ### 单机多卡
``` ```
#以单机四卡为例子 #以单机四卡为例子
export HIP_VISIBLE_DEVICES=0,1,2,3 export HIP_VISIBLE_DEVICES=0,1,2,3
export HSA_FORCE_FINE_GRAIN_PCIE=1
python3 -m torch.distributed.run --nproc_per_node 4 train.py --batch 128 --data coco.yaml --cfg 'yolov5m.yaml' --weights '' --project 'run/train' --hyp 'data/hyps/hyp.scratch-high.yaml' --device 0,1,2,3 --epochs 1000 2>&1 | tee yolov5m_4.log python3 -m torch.distributed.run --nproc_per_node 4 train.py --batch 128 --data coco.yaml --cfg 'yolov5m.yaml' --weights '' --project 'run/train' --hyp 'data/hyps/hyp.scratch-high.yaml' --device 0,1,2,3 --epochs 1000 2>&1 | tee yolov5m_4.log
``` ```
其中--nproc_per_node参数代表卡的个数,--batch参数代表global batchsize的大小 ### 多机多卡
### 多节点多卡
``` ```
#下面的例子中使用两个节点,每个节点包含4加速张卡 #下面的例子中使用两个节点,每个节点包含4加速张卡
...@@ -84,21 +129,36 @@ python3 -m torch.distributed.launch --nproc_per_node 4 --nnodes 2 --node_rank 0 ...@@ -84,21 +129,36 @@ python3 -m torch.distributed.launch --nproc_per_node 4 --nnodes 2 --node_rank 0
python3 -m torch.distributed.launch --nproc_per_node 4 --nnodes 2 --node_rank 1 --master_addr "node1" --master_port 34567 train.py --batch 256 --data coco.yaml --weight '' --project 'multi/train' --hyp 'data/hyps/hyp.scratch-high.yaml' --cfg 'yolov5m.yaml' --epochs 1000 2>&1 | tee yolov5m_8.log python3 -m torch.distributed.launch --nproc_per_node 4 --nnodes 2 --node_rank 1 --master_addr "node1" --master_port 34567 train.py --batch 256 --data coco.yaml --weight '' --project 'multi/train' --hyp 'data/hyps/hyp.scratch-high.yaml' --cfg 'yolov5m.yaml' --epochs 1000 2>&1 | tee yolov5m_8.log
``` ```
**tips:需要注意的是,在超参数的选取上,小模型使用hyp.scratch-low,例如yolov5s,而大模型需要使用hyp.scratch-high,例如yolov5m,它们的区别为,low有更快的收敛速度,而high参数收敛速度慢,但是不容易陷入局部最优。** ### 推理
#### 单卡推理
## 推理测试 ```
python3 val.py --data coco.yaml --img 640 --conf 0.001 --iou 0.65 --batch-size 32 --weights yolov5s.pt
```
将训练好的pt文件导入weight参数中即可,推理代码如下: #### 多卡推理
``` ```
python3 val.py --data data/coco-v5.yaml --weights runs/train/exp12/weights/best.pt --device 0 #以四卡推理为例
python3 val.py --data coco.yaml --img 640 --conf 0.001 --iou 0.65 --batch-size 128 --weights yolov5s.pt --device 0,1,2,3
``` ```
## 准确率数据
| 模型 | 数据类型 | map0.5:0.95 | map0.5 |
| :-----: | :------: | :---------: | :----: |
| yolov5n | 混精 | 27.9 | 46.8 |
| yolov5s | 混精 | 37.2 | 57.1 |
| yolov5m | 混精 | 44.3 | 64.1 |
| yolov5l | 混精 | 48 | 67.3 |
| yolov5x | 混精 | 49.6 | 68.6 |
## 画出loss和精度曲线 ## 画出loss和精度曲线
如果在训练一段时间后想要得到类似上述的loss及map曲线,我们提供了view_code.py文件,只需要将您训练过程中--project 指定的路径写入,之后执行python3 view_code.py即可在该路径下得到曲线的图像。 如果在训练一段时间后想要得到类似上述的loss及map曲线,我们提供了view_code.py文件,只需要将您训练过程中--project 指定的路径写入,之后执行python3 view_code.py即可在该路径下得到曲线的图像。
## pycocotools输出结果特别低问题 ## FAQ:pycocotools输出结果特别低问题
在训练结束或者推理结束后有时候会发现pycocotools输出的结果异常,数值会非常低,而训练过程中结果正常,如下图所示: 在训练结束或者推理结束后有时候会发现pycocotools输出的结果异常,数值会非常低,而训练过程中结果正常,如下图所示:
...@@ -108,25 +168,18 @@ python3 val.py --data data/coco-v5.yaml --weights runs/train/exp12/weights/best. ...@@ -108,25 +168,18 @@ python3 val.py --data data/coco-v5.yaml --weights runs/train/exp12/weights/best.
![pycocotools](pycocotools.png) ![pycocotools](pycocotools.png)
## 源码仓库及问题反馈
https://developer.hpccube.com/codes/modelzoo/yolov5_pytorch
## 准确率数据 ## 参考
[GitHub - ultralytics/yolov5 at v6.0](https://github.com/ultralytics/yolov5/tree/v6.0)
| 模型 | 数据类型 | map0.5:0.95 | map0.5 |
| :-----: | :------: | :---------: | :----: |
| yolov5n | 混精 | 27.9 | 46.8 |
| yolov5s | 混精 | 37.2 | 57.1 |
| yolov5m | 混精 | 44.3 | 64.1 |
| yolov5l | 混精 | 48 | 67.3 |
| yolov5x | 混精 | 49.6 | 68.6 |
## 源码仓库及问题反馈
https://developer.hpccube.com/codes/modelzoo/yolov5_pytorch
## 参考
[GitHub - ultralytics/yolov5 at v6.0](https://github.com/ultralytics/yolov5/tree/v6.0)
FROM image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.10.0-centos7.6-dtk-22.10.1-py38-latest
RUN source /opt/dtk/env.sh
COPY requirments.txt requirments.txt
RUN pip3 install -r requirements.txt
ADD https://ultralytics.com/assets/Arial.ttf /root/.config/Ultralytics/
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment