-
Notifications
You must be signed in to change notification settings - Fork 123
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Issues encountered when using Efficient Teacher on personal datasets #6
Comments
@David-19940718 好的,能贴给我具体的报错信息吗?还有您的txt的样子 |
看了下是在合并dict的时候校验出错了:ValueError: Type mismatch (<class 'str'> vs. <class 'list'>) with values 这是yolov5官方支持的另外三种形式:Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..],我用的第三种 |
@David-19940718 可以报告一下报错是在哪行吗?我来修一下。如果您已经解决了这个问题可以提一下PR。 |
您好,这一行报错了,"efficientteacher/configs/yacs.py", line 510 val.py 文件第220行会调用到 cfg.merge_from_file(config) |
@David-19940718 您好,已经定位到这个问题了,当前还请您使用txt这种读取方式,我们将添加对list读取方式的支持 |
好的谢谢。我刚已经用txt这种读取方式完成了。但精度好像“下降的特别夸张”。我先简单总结下我的步骤:
|
我刚看了开启 SSOD 训练显存会多一倍,但问题是样本数好像没变,这是因为teacher和student两个模型吗? |
好的,我明白您的状态了,首先请您将ssod.yaml里面的batch设置为16,这样运行起来显存应该就不会爆炸了,然后请将你有监督训练得到的efficient-yolov5s.pt填入ssod.yaml的weights那里,然后将lr0: 0.01设置为0.001, burn_epochs和warmup_epochs都设置为0,再启动您的训练任务 |
如果顺利的话,ss_bbox/ss_obj/ss_cls/gt_num都会出现数值,代表网络开始在没有标签的数据上开始生成伪标签并学习了 |
@David-19940718 有进展或者遇到任何新的问题都可以继续联系我,这里应该还需要一些超参精调您的网络 |
好的,非常感谢您耐心的解答,我待会跑跑看,有任何进展我会及时反馈,再次感谢! |
@David-19940718 好的,log里面表示的gt_num就是每幅图上生成的伪标签个数,现在看起来这些图上并没有足够多的伪标签出来,然后每一轮训练验的两个指标,第一行是student的准确率,第二行是teacher的准确率,按照我最后说的那种小学习率然后加载训练好模型的方案,您的student应该会维持比较高的准确率,而teacher的准确率也会逼近student的准确率,最后您可以用detect函数来渲染一下一开始的s模型和半监督之后的s模型在一些可能会出现误检漏检的图片上的效果。 |
您好,这边加载完预训练和修改完参数后,训练算正常了,目前来看精度还可以,请问下这个具体的调参有什么要注意的或者有哪些经验可以分享下吗? |
我观察到的现象: 有这么几个可以尝试的方案: Feel free to report of ask any question~ |
非常感谢您的这些建议,我这边后面会找一些真实的线上数据去做严格的消融实验比对,后续有结果再report上来一起讨论。 |
不客气,半监督训练落地应用这块还有很多有价值的问题需要解决,我们很关注工程师的反馈,希望多多使用提出意见。 |
这是一项很棒的开源工作! |
作者你好,长尾场景下unlabel中每张图片中的目标可能只有一到两个,此时的pse_num为0.09左右gt_num为0.01左右是合理的吗,还是需要调整nms_iou_thres,ignore_thres_high,谢谢 |
@nanfei666 老师您好,是确认每张图都有目标吗,还是有大量无目标的图片,这个pse_num看起来不太理想,说明10张左右才产生了一个伪标签,可以把thres_high调低试一试。 |
有大量的无目标图片,目前我使用原YOLOV5训练完成的weight进行无监督训练,lr0:0.001,nms_iou_thres:0.4,ignore_thres_high:0.5,在第一个epoch就会出现loss为Nan |
@nanfei666 您好,可以提供一下log截图吗,我们分析一下 |
1 similar comment
@nanfei666 您好,可以提供一下log截图吗,我们分析一下 |
|
@nanfei666 您好,看起来您这是一个单类检测的任务,建议再将lr0调小运行,应该loss就不会报错了。如果时间允许的话,您试试先把有监督任务跑起来测试一下,再测半监督任务。 |
@BowieHsu 好的我去试试,感谢。关于pse_num看起来不太理想的问题,我能否理解为,Efficient Teacher更适用于对于大量无标注的数据中每张图片都存在目标的场景,对于长尾场景下大部分采集到的图片中都没有目标Efficient Teacher的效果可能不好吗 |
每张都存在目标的场景是最理想的场景,但是长尾场景的数据灌进来也可以有效减少误检,我们正在研究更稳健的方案来做您所说的长尾场景,欢迎您随时反馈您的实验状态。 |
感谢您的建议,将teacher_loss_weight 改为1.0,其他所有参数不变后,我进行了两个实验:
|
@BowieHsu 您好,请问loss为Nan的问题可能有什么原因导致的吗,我目前任无法解决 |
@nanfei666 您好,我这边尝试复现了一些corner case,我大致的感觉还是burn_epochs太少导致的,我们现在有一个针对custom dataset比较友好的方案,那就是训练时加载coco预训练模型进行半监督,您能尝试一下吗,我这边同步转一些预训练模型上来 |
|
@BowieHsu
project: 'yolov5_ssod' hyp: mixup: 0.1warmup_epochs: 0 Model: Dataset: SSOD: dynamic_thres: Truessod_hyp: 这是训练的一些显示参数
Optimizer stripped from yolov5_ssod/exp8/weights/last.pt, 15.2MB Validating yolov5_ssod/exp8/weights/best.pt... |
|
@delicate00 拉取最新的代码看看,或者用标准yolov5s的pt看看转换的结果 |
好的,我已经解决了,在验证半监督精度的时候出现了“AttributeError: 'tuple' object has no attribute 'shape'”,请问您有遇到过类似的问题吗 |
@delicate00 您好,报这个错的原因是运行val.py的时候没有加超参数 --val-ssod,加这个参数的原因是ssod版本的检测器还多个一个feature_map的输出,所以把原来的输出给转换成了tuple,所以我们用了那个参数来约束 |
@BowieHsu 再贴一个没有加预训练的模型训练的结果,有没有什么建议呢? 参数配置`# EfficientTeacher by Alibaba Cloud project: 'yolov5_ssod' hyp: mixup: 0.1warmup_epochs: 3 Model: Dataset: SSOD: dynamic_thres: Truessod_hyp: |
好的已经解决了,感谢! |
您好,我开启debug后,得到的伪标签图片上只是原图,没有叠加上预测框,这个情况正常吗? |
非常感谢作者的工作,经过尝试发现以下个人经验: |
@BowieHsu why my ss_box loss are all Null. please help ![]() |
hi why in my case it is null @BowieHsu |
您好,检测行人数据集,请问2个阈值设置有什么讲究吗? |
EfficientTeacher by Alibaba Cloudproject: 'yolov5_ssod' hyp: mixup: 0.1warmup_epochs: 3 Model: Dataset: SSOD: dynamic_thres: Truessod_hyp: |
你好。我也是遇到了精准度非常低的问题。在用了yolov5官方给予的代码情况下,已经确保了不是数据集的问题。请问当时是如何解决精准度非常低的情况? |
请问您解决精度不良的问题吧 |
你好,我有一个问题,我用自己做的表记数据集跑完后,发现用测试集和验证集里面的图片去预测效果很好,但是另外从不同角度取图片预测的话效果就很差,精度很低。(我们的外部预测图片跟数据集有些许不一样)我想问一下这大概率是数据集不是很好从而导致模型过拟合了吗? |
您好,您这个对比实验做的有问题吧,如果要对比有监督和半监督,那么使用的有标签数据量应该是一致的才可以吧,要不然这相当于在用,大部分有标签数据训练出的权重,去实现半监督 |
|
您好,我在执行
python val.py --config configs/sup/custom/yolov5s_custom.yaml --weights weights/efficient-yolov5s.pt
此条命令时报错了,以下是我的 yaml 文件定义:Dataset:
data_name: 'custom'
train: ['./images/train' ]
val: [ './images/valid' ]
test: [ './images/valid' ]
nc: 1 # number of classe
np: 0 #number of keypoints
names: [ 'apple' ]
我的数据集是 txt 格式,组织目录如下:
|-- dataset
| |-- images
| | |-- train
| | |-- valid
| |-- labels
| | |-- train
| | |-- valid
txt文件时标准的yolov5格式,如下所示:
0 0.927518 0.820644 0.123193 0.112306 0 0.525768 0.426199 0.050776 0.020583
The text was updated successfully, but these errors were encountered: