## Official YOLOv8 训练自己的数据集并基于NVIDIA TensorRT和华为昇腾端到端模型加速以及安卓手机端部署
说明: 本项目支持YOLOv8的对应的package的版本是:[ultralytics-8.0.0](https://pypi.org/project/ultralytics/8.0.0/)
### 1.YOLO的一些发展历史
+ **YOLOv1:2015年Joseph Redmon和** **Ali Farhadi等** **人(华盛顿大学)**
+ **YOLOv2:2016年Joseph Redmon\**和\**\**Ali Farhadi\**等人\**(华盛顿大学)\****
+ [**YOLOv3**](http://mp.weixin.qq.com/s?__biz=MzUxNjcxMjQxNg==&mid=2247484179&idx=1&sn=c127ae5aac72f52ca7bb39d78512a190&chksm=f9a2719cced5f88a7d92ef5dbb1c010f957d539a3a6acafe85f1e4fa888a39f252ddb8154175&scene=21#wechat_redirect)**:2018年Joseph Redmon\**和\**\**Ali Farhadi\**等人\**(华盛顿大学)\****
+ [**YOLOv4**](http://mp.weixin.qq.com/s?__biz=MzUxNjcxMjQxNg==&mid=2247498390&idx=1&sn=62ec5122def0ceb967761d628799a43b&chksm=f9a18819ced6010f325c7d9af1e96a110ab64fbb96c2a085d2073e799c16704ab86a0d10547a&scene=21#wechat_redirect)**:2020年Alexey Bochkovskiy和Chien-Yao Wang等人**
+ [**YOLOv5**](http://mp.weixin.qq.com/s?__biz=MzUxNjcxMjQxNg==&mid=2247500275&idx=2&sn=a862a79afa87b5ce85fff8a6da6ab34a&chksm=f9a1b37cced63a6abf54e8a778189278bb9c14d2b3fe8f9d3d7ac403906bbf46ba21c179cc91&scene=21#wechat_redirect)**:2020年Ultralytics公司**
+ **YOLOv6:2022年美团公司**
+ [**YOLOv7**](http://mp.weixin.qq.com/s?__biz=MzUxNjcxMjQxNg==&mid=2247550919&idx=2&sn=884a1f6f2c969d67a4c532511b8240a9&chksm=f9a17548ced6fc5e44e8d7db791181f90e2d8f024c14c7765726d0face59e6c8797caf029f1a&scene=21#wechat_redirect)**:2022年Alexey Bochkovskiy\**和Chien-Yao Wang\**等人**
+ **YOLOv8:2023年Ultralytics公司**
上述简单罗列了 **YOLOv数字系列** 的发布时间和作者/单位机构,因为YOLO系列生态太猛了,比如还有知名的PP-YOLO系列、YOLOX等等工作。
### 2. YOLOv8的相关资源
+ YOLOv8 Github: https://github.com/ultralytics/ultralytics
+ ~~YOLOv8的权重:https://github.com/ultralytics/assets/releases~~
+ YOLOv8文档: https://v8docs.ultralytics.com/
+ ~~YOLOv8 Python package源码库:https://test.pypi.org/simple/ultralytics/~~
### 3.YOLOv5 Vs YOLOv8
+ **YOLOv5**
![](docs/yolov5.png)
1. **Backbone**:CSPDarkNet结构,主要结构思想的体现在C3模块,这里也是梯度分流的主要思想所在的地方;
2. **PAN-FPN**:双流的FPN,必须香,也必须快,但是量化还是有些需要图优化才可以达到最优的性能,比如cat前后的scale优化等等,这里除了上采样、CBS卷积模块,最为主要的还有C3模块(记住这个C3模块哦);
3. **Head**:Coupled Head+Anchor-base,毫无疑问,YOLOv3、YOLOv4、YOLOv5、YOLOv7都是Anchor-Base的,后面会变吗?
4. **Loss**:分类用BEC Loss,回归用CIoU Loss。
+ **YOLOv8**
![](docs/yolov8.png)
具体改进如下:
1. **Backbone**:使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻量化,同时YOLOv8依旧使用了YOLOv5等架构中使用的SPPF模块;
2. **PAN-FPN**:毫无疑问YOLOv8依旧使用了PAN的思想,不过通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8将YOLOv5中PAN-FPN上采样阶段中的卷积结构删除了,同时也将C3模块替换为了C2f模块;
3. **Decoupled-Head**:是不是嗅到了不一样的味道?是的,YOLOv8走向了Decoupled-Head;
4. **Anchor-Free**:YOLOv8抛弃了以往的Anchor-Base,使用了**Anchor-Free**的思想;
5. **损失函数**:YOLOv8使用VFL Loss作为分类损失,使用DFL Loss+CIOU Loss作为分类损失;
6. **样本匹配**:YOLOv8抛弃了以往的IOU匹配或者单边比例的分配方式,而是使用了Task-Aligned Assigner匹配方式。
+ **SPP Vs SPPF:**
![](docs/sppvs.png)
![](docs/SPP.png)
![](docs/SPPF.png)
+ **C3 Vs C2f:**
![](docs/c3.png)
针对C3模块,其主要是借助CSPNet提取分流的思想,同时结合残差结构的思想,设计了所谓的C3 Block,这里的CSP主分支梯度模块为BottleNeck模块,也就是所谓的残差模块。同时堆叠的个数由参数n来进行控制,也就是说不同规模的模型,n的值是有变化的。
其实这里的梯度流主分支,可以是任何之前你学习过的模块,比如,美团提出的YOLOv6中就是用来重参模块RepVGGBlock来替换BottleNeck Block来作为主要的梯度流分支,而百度提出的PP-YOLOE则是使用了RepResNet-Block来替换BottleNeck Block来作为主要的梯度流分支。而YOLOv7则是使用了ELAN Block来替换BottleNeck Block来作为主要的梯度流分支。
C3模块的Pytorch的实现如下:
```python
class C3(nn.Module):
# CSP Bottleneck with 3 convolutions
def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion
super().__init__()
c_ = int(c2 * e) # hidden channels
self.cv1 = Conv(c1, c_, 1, 1)
self.cv2 = Conv(c1, c_, 1, 1)
self.cv3 = Conv(2 * c_, c2, 1) # optional act=FReLU(c2)
self.m = nn.Sequential(*(Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)))
def forward(self, x):
return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1))
```
![](docs/c2f.png)
C2f模块就是参考了C3模块以及ELAN的思想进行的设计,让YOLOv8可以在保证轻量化的同时获得更加丰富的梯度流信息。
![](docs/yolov7.png)
C2f模块对应的Pytorch实现如下:
```python
class C2f(nn.Module):
# CSP Bottleneck with 2 convolutions
def __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion
super().__init__()
self.c = int(c2 * e) # hidden channels
self.cv1 = Conv(c1, 2 * self.c, 1, 1)
self.cv2 = Conv((2 + n) * self.c, c2, 1) # optional act=FReLU(c2)
self.m = nn.ModuleList(Bottleneck(self.c, self.c, shortcut, g, k=((3, 3), (3, 3)), e=1.0) for _ in range(n))
def forward(self, x):
y = list(self.cv1(x).split((self.c, self.c), 1))
y.extend(m(y[-1]) for m in self.m)
return self.cv2(torch.cat(y, 1))
```
+ **PAN-FPN改进了什么?**
YOLOv5的Neck部分的结构图如下:
![](docs/v5FPN.png)
YOLOv6的Neck部分的结构图如下:
![](docs/v6FPN.png)
YOLOv8的结构图:
![](docs/v8FPN.png)
可以看到,相对于YOLOv5或者YOLOv6,YOLOv8将C3模块以及RepBlock替换为了C2f,同时细心可以发现,相对于YOLOv5和YOLOv6,YOLOv8选择将上采样之前的`1×1`卷积去除了,将Backbone不同阶段输出的特征直接送入了上采样操作。
+ **Head部分都变了什么呢?**
先看一下YOLOv5本身的Head(Coupled-Head):
![](docs/v5head.png)
而YOLOv8则是使用了Decoupled-Head,回归头的通道数也变成了`4*reg_max`的形式:
![](docs/v8head.png)
+ **损失函数**
对于YOLOv8,其分类损失为VFL Loss,其回归损失为CIOU Loss+DFL的形式,这里Reg_max默认为16。
VFL主要改进是提出了非对称的加权操作,FL和QFL都是对称的。而非对称加权的思想来源于论文PISA,该论文指出首先正负样本有不平衡问题,即使在正样本中也存在不等权问题,因为mAP的计算是主正样本。
![](docs/loss.png)
q是label,正样本时候q为bbox和gt的IoU,负样本时候q=0,当为正样本时候其实没有采用FL,而是普通的BCE,只不过多了一个自适应IoU加权,用于突出主样本。而为负样本时候就是标准的FL了。可以明显发现VFL比QFL更加简单,主要特点是正负样本非对称加权、突出正样本为主样本。
针对这里的DFL(Distribution Focal Loss),其主要是将框的位置建模成一个 general distribution,让网络快速的聚焦于和目标位置距离近的位置的分布。
+ **正负样本的匹配**
标签分配是目标检测非常重�
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
官方YOLOv8模型训练和部署.rar (191个子文件)
yolov8.cpp 8KB
yolov8.vcxproj.filters 1KB
logging.h 17KB
horse.jpg 1.26MB
horse.jpg 1.26MB
bus.jpg 479KB
bus.jpg 475KB
zidane.jpg 240KB
zidane.jpg 239KB
cat1.jpg 159KB
cat1.jpg 159KB
dog1.jpg 108KB
dog1.jpg 106KB
README.md 16KB
yolov8.png 214KB
F1_curve.png 207KB
P_curve.png 167KB
PR_curve.png 164KB
yolov7.png 153KB
yolov5.png 119KB
dfl.png 71KB
sppvs.png 70KB
c2f.png 67KB
v8head.png 65KB
nms.png 61KB
train_log1.png 57KB
v5FPN.png 45KB
v8FPN.png 42KB
v6FPN.png 38KB
trt.png 34KB
SPP.png 26KB
SPPF.png 24KB
v5head.png 20KB
c3.png 15KB
loss.png 11KB
v5loader.py 54KB
exporter.py 40KB
augment.py 30KB
modules.py 29KB
trainer.py 24KB
ops.py 24KB
metrics.py 22KB
autobackend.py 20KB
tasks.py 18KB
v5augmentations.py 17KB
torch_utils.py 15KB
plotting.py 14KB
__init__.py 13KB
utils.py 13KB
val.py 12KB
val.py 11KB
instance.py 11KB
stream_loaders.py 11KB
predictor.py 11KB
checks.py 10KB
train.py 9KB
tal.py 9KB
dataset.py 9KB
validator.py 9KB
base.py 8KB
model.py 8KB
train.py 7KB
yolov8_add_postprocess.py 7KB
utils.py 7KB
downloads.py 6KB
train.py 6KB
inference.py 5KB
__init__.py 5KB
build.py 5KB
session.py 4KB
predict.py 4KB
predict.py 4KB
files.py 4KB
hydra_patch.py 4KB
base.py 3KB
autobatch.py 3KB
yolov8_add_nms.py 3KB
hub.py 3KB
auth.py 2KB
predict.py 2KB
dist.py 2KB
loss.py 2KB
val.py 2KB
clearml.py 2KB
cli.py 2KB
wb.py 2KB
comet.py 2KB
dataset_wrappers.py 1KB
__init__.py 1KB
tensorboard.py 723B
__init__.py 296B
__init__.py 274B
__init__.py 262B
__init__.py 262B
export.py 187B
__init__.py 184B
__init__.py 175B
__init__.py 63B
__init__.py 59B
__init__.py 0B
共 191 条
- 1
- 2
资源评论
徐浪老师
- 粉丝: 7585
- 资源: 7020
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Python和HTML的Chinese-estate-helper房地产爬虫及可视化设计源码
- 基于SpringBoot2.7.7的当当书城Java后端设计源码
- 基于Python和Go语言的开发工具集成与验证设计源码
- 基于Python与JavaScript的国内供应商管理系统设计源码
- aspose.words-20.12-jdk17
- 基于czsc库的Python时间序列分析设计源码
- 基于Java、CSS、JavaScript、HTML的跨语言智联平台设计源码
- 基于Java语言的day2设计源码学习与优化实践
- 基于浙江大学2024年秋冬学期软件安全原理与实践的C与Python混合语言设计源码
- 基于FastAPI和Vue3的表单填写与提交前后端一体化设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功