yolov8!!!!
yolov8!!!!
yolov8!!!!
yolov8!!!!
yolov8真的来了!!!U神出品的yolov8,虽然还没正式公布,但是已经放出代码了。。代码有着很强烈的yolov5风格。
github代码:
https://github.com/ultralytics/assets/commits/v0.0.0
先看看yolov8seg、det的炼丹。。。。。。。。。
yolov8s已经达到了0.6ms了。。。
再看看map::都快卷秃噜皮了。。。。。。。。
具体效果图大家自己看吧,下面是链接:
https://wandb.ai/glenn-jocher/YOLOv8" />
网络结构图:
这边可能得要着重说一下这个C2F结构了,大家先看下代码:
class C2f(nn.Module):# CSP Bottleneck with 2 convolutionsdef __init__(self, c1, c2, n=1, shortcut=False, g=1, e=0.5):# ch_in, ch_out, number, shortcut, groups, expansionsuper().__init__()self.c = int(c2 * e)# hidden channelsself.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) print(len(y))return self.cv2(torch.cat(y, 1))
1、先进行self.cv1卷积
2、对cv1卷积之后进行split(此时被分为上下两部分)
3、extend用于一次性追加另一个序列的多个值(这时候y里面 已经有两个值了,假设n=1,那么m里面只有一个bottleneck,进行extend之后y里面有三个值)
4、进行cat
5、进行self.cv2
所以第一步的splite之后的两个值都是参与后面的concat的。所以有些画的结构图可能就不太对了。。。。。。。。大家还可以去看下ONNX:
先看下splite有两个outputs:137,138
再看下concat:有三个输入(137,138,145)
对比一下yolov5:
1、yolov8是无锚框了
2、增加了C2F结构
3、使用了Task-Aligned Assigner匹配方式。
4、Decoupled-Head解耦头
不清楚yolov8的anchor free对小目标怎么样,但是我之前训练yolox的对我自己的小目标效果很差。如果v8也是一样的话,个人感觉也就是刷sota,没意义了,工业上大多都是小目标,大的目标别说v8,特么的v3也能检测出来。。。个人觉的还是v5 yyds!!!
。。。。。。。。。。。。。。。。
说实话真卷呀!!!!!!!!!!真的快卷不动了!!!学的速度还跟不上别人更新的速度,咋玩呀!!!!!!!!!!!!