bubbliiiing / yolov4-pytorch

这是一个YoloV4-pytorch的源码,可以用于训练自己的模型。
MIT License
2.1k stars 615 forks source link

替换YOLOv4主干网络为ghost或者mobilenetv2/3,检测精度直接为0或者零点几? #365

Open lyl-9 opened 1 year ago

lyl-9 commented 1 year ago

b导你好,最近遇到了一个问题,想请教一下您, 就是我把YOLOv4主干网络替换成mobilentv2,使用yolov4_mobilenet_v2_voc.pth权重训练,训练出来的精度只有一点几,F1直接为0。 Calculate Map. 1.37% = person AP || score_threhold=0.5 : F1=0.00 ; Recall=0.07% ; Precision=100.00% mAP = 1.37% Get map done. 这是什么问题啊?我看了您的问题汇总,该改的地方我都改了,我试了一下predict.py 图片直接是黑的 什么都没有

s5377689 commented 1 year ago

我發現改了某些種類的權重(*1.2)訓練時,AP、F1、Recall這些值都會變超小,想知道b导是怎麼調整參數的

bubbliiiing commented 1 year ago

b导你好,最近遇到了一个问题,想请教一下您, 就是我把YOLOv4主干网络替换成mobilentv2,使用yolov4_mobilenet_v2_voc.pth权重训练,训练出来的精度只有一点几,F1直接为0。 Calculate Map. 1.37% = person AP || score_threhold=0.5 : F1=0.00 ; Recall=0.07% ; Precision=100.00% mAP = 1.37% Get map done. 这是什么问题啊?我看了您的问题汇总,该改的地方我都改了,我试了一下predict.py 图片直接是黑的 什么都没有

你有看过权值是否正常载入了吗

bubbliiiing commented 1 year ago

我發現改了某些種類的權重(*1.2)訓練時,AP、F1、Recall這些值都會變超小,想知道b导是怎麼調整參數的

hi 这个是怎么改呢……我这里没有实现0 0你不一定是改错了

lyl-9 commented 1 year ago

我重新传了一下,正常了,应该是Python和cuda版本的对应问题,感谢b导

---原始邮件--- 发件人: @.> 发送时间: 2023年5月8日(周一) 晚上11:58 收件人: @.>; 抄送: @.**@.>; 主题: Re: [bubbliiiing/yolov4-pytorch] 替换YOLOv4主干网络为ghost或者mobilenetv2/3,检测精度直接为0或者零点几? (Issue #365)

b导你好,最近遇到了一个问题,想请教一下您, 就是我把YOLOv4主干网络替换成mobilentv2,使用yolov4_mobilenet_v2_voc.pth权重训练,训练出来的精度只有一点几,F1直接为0。 Calculate Map. 1.37% = person AP || score_threhold=0.5 : F1=0.00 ; Recall=0.07% ; Precision=100.00% mAP = 1.37% Get map done. 这是什么问题啊?我看了您的问题汇总,该改的地方我都改了,我试了一下predict.py 图片直接是黑的 什么都没有

你有看过权值是否正常载入了吗

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

s5377689 commented 1 year ago

hi 这个是怎么改呢……我这里没有实现0 0你不一定是改错了 不知道這樣改有沒有理解錯誤,我想增加某些類的權重,所以我在yolo_training.py加了以下程式碼(我是用COCO 2017訓練)


+ wweeii = torch.full([1, 80], 0.8)
+ index = torch.LongTensor([0, 9, 10, 11, 12])
+ wei_little = wweeii.index_fill(1, index, 1.2)
+ wei_little=wei_little.to(device=torch.device('cuda' if torch.cuda.is_available() else 'cpu'))

loss_cls = torch.mean(self.BCELoss(pred_cls[obj_mask]*wei_little , y_true[..., 5:][obj_mask]))

bubbliiiing commented 1 year ago

你为什么在求loss前乘上了

s5377689 commented 1 year ago

你為什麼在求損失前乘上了 因為我要對特別類別的權重做加權

bubbliiiing commented 1 year ago

额……不是这样做加权的啊0 0

bubbliiiing commented 1 year ago

你要交叉熵后吧

s5377689 commented 1 year ago

你要交叉熵后吧 交叉熵后的話要怎麼只加強某些類別權重 交叉熵后不是就所有類別取平均了嗎(?

bubbliiiing commented 1 year ago

交叉熵后把某个类的损失提高就可以了

s5377689 commented 1 year ago

交叉熵后把某个类的损失提高就可以了

b大可以指點一下是改哪個變數嗎

bubbliiiing commented 1 year ago

就是放外面呀

s5377689 commented 1 year ago

就是放外面呀

我試試看謝謝