AlibabaResearch / efficientteacher

A Supervised and Semi-Supervised Object Detection Library for YOLO Series
GNU General Public License v3.0
823 stars 149 forks source link

修改yolov8发现缺少loss文件 #125

Open zdundjkl opened 10 months ago

zdundjkl commented 10 months ago

下面是tal_loss.py文件的显示, YOLOATSSAssigner,from models.loss.gfocal_loss import VarifocalLoss, BboxLoss这三个文件请问在哪里呢?我找了一圈没找到在哪?

`#!/usr/bin/env python3

-- coding:utf-8 --

import torch import torch.nn as nn import numpy as np import torch.nn.functional as F from models.module.nanodet_utils import generate_anchors from models.module.nanodet_utils import dist2bbox, xywh2xyxy

from loss.yolox_loss import IOUloss

from models.assigner.yolo_atss_assigner import YOLOATSSAssigner from models.assigner.tal_assigner import TaskAlignedAssigner from utils.torch_utils import is_parallel from models.loss.gfocal_loss import VarifocalLoss, BboxLoss

class ComputeTalLoss: '''Loss computation func.''' def init(self, model, cfg):

fpn_strides=[8, 16, 32]

    # grid_cell_size=5.0
    # grid_cell_offset=0.5
    # num_classes=80,
    # ori_img_size=640
    # use_dfl=True
    # reg_max=16
    # iou_type='siou'
    # num_classes = cfg.Dataset.nc
    # loss_weight={ 'class': 1.0, 'iou': 2.5, 'dfl': 0.5}
    # device = next(model.parameters()).device  # get model device
    self.epoch = 0
    self.det = model.module.head if is_parallel(model) else model.head# Detect() module
    self.fpn_strides = cfg.Model.Head.strides
    self.grid_cell_size = cfg.Loss.grid_cell_size
    self.grid_cell_offset = cfg.Loss.grid_cell_offset
    self.num_classes = cfg.Dataset.nc
    self.ori_img_size = cfg.Dataset.img_size

    # warmup_epoch=4
    self.warmup_epoch = cfg.hyp.warmup_epochs
    self.warmup_assigner = YOLOATSSAssigner(9, num_classes=self.num_classes)
    self.formal_assigner = TaskAlignedAssigner(top_k=13, num_classes=self.num_classes, alpha=1.0, beta=6.0)

    self.use_dfl = cfg.Loss.use_dfl
    self.use_gfl = cfg.Loss.use_gfl
    self.reg_max = cfg.Loss.reg_max
    self.iou_type = cfg.Loss.iou_type
    self.proj = nn.Parameter(torch.linspace(0, self.reg_max, self.reg_max + 1), requires_grad=False)
    self.varifocal_loss = VarifocalLoss().cuda()
    self.bce = nn.BCELoss(reduction='none')
    self.bbox_loss = BboxLoss(self.num_classes, self.reg_max, self.use_dfl, self.iou_type).cuda()
    self.loss_weight = {'class': cfg.Loss.qfl_loss_weight, 'iou': cfg.Loss.box_loss_weight, 'dfl':cfg.Loss.dfl_loss_weight} `
zdundjkl commented 10 months ago

我把这三个文件根据我自己的理解添加上了,但是随后又发现一个问题,基于yolov8的半监督loss计算中,作者没有写关于yolov8的label match计算部分吗,我看见只有基于YOLOAnchorAssigner的label match,并没有找到基于TaskAlignedAssigner的label match。

zdundjkl commented 10 months ago

好了,作者给我回复邮件了,那部分yolov8代码没公开。。。

lwj1234 commented 10 months ago

请问你成功了吗

zdundjkl commented 10 months ago

已经修改了90%,最后剩了v8的head输出和prediction对不上,正在想办法解决。

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: lwj1234 @.> 发送时间: 2023年11月23日 16:35 收件人: AlibabaResearch/efficientteacher @.> 抄送: zdundjkl @.>, Author @.> 主题: Re: [AlibabaResearch/efficientteacher] 修改yolov8发现缺少loss文件 (Issue #125)

请问你成功了吗

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

lwj1234 commented 10 months ago

你太厉害了! 我在自己的数据集上跑ET。

我先在yolov5上使用yolov5预训练模型在自己的数据集上(只有几个类)进行训练得到一个best.pt,我把best.pt通过ET提供的convert脚本转成了et格式,把它放在配置文件中的weight参数那里,然后使用无标签数据开始半监督训练,但是精度反而下降了。 我知道按照ET的教程,可以直接开始半监督训练,在burn-in阶段也会利用无标签数据。我得到best.pt的过程相当于burn-in了,只不过没有利用无标签数据,不知道是不是这个原因导致转成et进行半监督训练后精度反而下降。假如按照et的教程直接开始半监督训练,我使用官方的yolov5预训练模型转成et格式后放在weight那里,又跑不通,因为官方的预训练模型是80个类,我只有几个类。不知道你是否理解我的问题并能给出建议(这个也不是最重要的)

重要的是我后续也打算把yolov5改成yolov8,我看了很长时间的issues,只有你做到了这一步,不知道是否能加个联系方式,日后可以讨论一下问题,我不发论文,仅仅是为了毕业。

lwj1234 commented 10 months ago

或许你可以看一下UT2,unbiasedTeacherv2的代码和论文,它是基于fcos做的,也是基于anchor free的

---原始邮件--- 发件人: @.> 发送时间: 2023年11月23日(周四) 下午4:37 收件人: @.>; 抄送: @.**@.>; 主题: Re: [AlibabaResearch/efficientteacher] 修改yolov8发现缺少loss文件 (Issue #125)

已经修改了90%,最后剩了v8的head输出和prediction对不上,正在想办法解决。

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: lwj1234 @.> 发送时间: 2023年11月23日 16:35 收件人: AlibabaResearch/efficientteacher @.> 抄送: zdundjkl @.>, Author @.> 主题: Re: [AlibabaResearch/efficientteacher] 修改yolov8发现缺少loss文件 (Issue #125)

请问你成功了吗

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.> — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.>

zdundjkl commented 10 months ago

unbias teacher我已经研究过了,如果要改yolov8的话其实和在efficient teacher上面难度是一样的

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: lwj1234 @.> 发送时间: 2023年11月23日 22:09 收件人: AlibabaResearch/efficientteacher @.> 抄送: zdundjkl @.>, Author @.> 主题: Re: [AlibabaResearch/efficientteacher] 修改yolov8发现缺少loss文件 (Issue #125)

或许你可以看一下UT2,unbiasedTeacherv2的代码和论文,它是基于fcos做的,也是基于anchor free的

---原始邮件--- 发件人: @.> 发送时间: 2023年11月23日(周四) 下午4:37 收件人: @.>; 抄送: @.**@.>; 主题: Re: [AlibabaResearch/efficientteacher] 修改yolov8发现缺少loss文件 (Issue #125)

已经修改了90%,最后剩了v8的head输出和prediction对不上,正在想办法解决。

发自我的iPhone

------------------ 原始邮件 ------------------
发件人: lwj1234 @.>
发送时间: 2023年11月23日 16:35
收件人: AlibabaResearch/efficientteacher
@.>
抄送: zdundjkl @.>, Author @.>
主题: Re: [AlibabaResearch/efficientteacher] 修改yolov8发现缺少loss文件 (Issue #125)

请问你成功了吗


Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you authored the thread.Message ID: @.>
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID:
@.> — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

B1ngoCN commented 10 months ago

请问你完成90%是修改YOLOv8还是v8的LabelMatch呢

zdundjkl commented 10 months ago

label match部分已经写完了,目前只剩head部分

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: B1ngoCN @.> 发送时间: 2023年11月25日 11:35 收件人: AlibabaResearch/efficientteacher @.> 抄送: zdundjkl @.>, Author @.> 主题: Re: [AlibabaResearch/efficientteacher] 修改yolov8发现缺少loss文件 (Issue #125)

请问你完成90%是修改YOLOv8还是v8的LabelMatch呢

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

B1ngoCN commented 10 months ago

好的,谢谢,我本来以为v8可以直接调用,那看来对我来说还有些困难,那我暂时还是继续用v5了

2363776628 commented 9 months ago

请问大家有成功改写之后在Yolov8上跑起来的吗

zdundjkl commented 9 months ago

改完了,终于知道为什么One stage + anchor free 的Semi-supervised OD都选用Fcos做model了

2363776628 commented 9 months ago

可以分享一下修改后的Head文件吗?这块一直没有修改好

zdundjkl commented 9 months ago

可以分享一下修改后的Head文件吗?这块一直没有修改好

yoloV8框太少了,半监督的效果很差

2363776628 commented 9 months ago

我试了v7效果也不太好,v8已经改了一段时间了,但一直没改好,还是想学习一下 、

zdundjkl commented 9 months ago

我试了v7效果也不太好,v8已经改了一段时间了,但一直没改好,还是想学习一下 、

v8不仅要改head,还有后面的nms,val部分,xywh2xyxy等函数里面的张量适配问题,有大量的工作要做的。 v8本来就是anchor free,而且锚框很少,半监督效果差也很合理,这也解释了为什么有大量的two stage半监督效果都还不错,这一点在unbias teacher里面也有提到。

2363776628 commented 9 months ago

好吧,谢谢

wqy19980318 commented 8 months ago

大佬可以分享一下改完之后的代码吗?

ghost commented 7 months ago

I am attempting to use yolov8 in a teacher-student capacity and stumbled upon this discussion. @zdundjkl, could you explain why you think the poor semi-supervised performance of yolov8 is reasonable? Also to my knowledge, the only implementation of yolov8 is available through the ultralytics package. Are the neck, head, and backbone classes provided in this codebase, a reimplementation of the paper?

iu110 commented 7 months ago

您好,可以求一下v8的代码吗

songjunnan123 commented 6 months ago

您好,@zdundjkl,可以求一下v8的ssod损失函数那块的代码吗?

yylovestudying commented 3 months ago

我试了v7效果也不太好,v8已经改了一段时间了,但一直没改好,还是想学习一下、

v8不仅要改head,还有后面的nms,val部分,xywh2xyxy等函数里面的张量适配问题,有大量的工作要做。 v8本来就是anchor free,而且锚框很少,半监督效果也不太合理,这其中为什么有大量的两阶段半监督效果都还不错,这一点在unbias老师里面也有提到。

你好 请问可以分享一下如何替换yolov8吗

yylovestudying commented 2 months ago

我试了v7效果也不太好,v8已经改了一段时间了,但一直没改好,还是想学习一下 、

v8不仅要改head,还有后面的nms,val部分,xywh2xyxy等函数里面的张量适配问题,有大量的工作要做的。 v8本来就是anchor free,而且锚框很少,半监督效果差也很合理,这也解释了为什么有大量的two stage半监督效果都还不错,这一点在unbias teacher里面也有提到。

你好 我想请问一下如果替换了yolov8的话损失函数怎么样改呢

xcn700418 commented 2 months ago

我yolov8跑通了,设置的burn epoch=200, total_epoch = 300, 在burn epoch之前模型都是正常进行监督学习,但是当开启ema半监督训练,模型map直接降成0,loss剧增?半监督学习100个epoch之后,模型接近收敛,但是最后的map还不如199epoch时模型监督学习的效果?