yolov7-face icon indicating copy to clipboard operation
yolov7-face copied to clipboard

2个关键点训练

Open clearlove7-piggy opened this issue 3 years ago • 12 comments

大佬您好,我想用这个来识别鱼和鱼的头部点、形心点两个关键点。需要改代码哪些地方呢?模型的head和loss和datasets都需要改吗? 我只改了datasets训练了一下,发现头部点预测有问题,是不是关键点编解码和loss的地方需要调整?

clearlove7-piggy avatar Nov 15 '22 07:11 clearlove7-piggy

修改cfg文件以及train和test里面的kpt-label,关闭左右flip

derronqi avatar Nov 15 '22 08:11 derronqi

修改cfg文件以及train和test里面的kpt-label,关闭左右flip

我flip index 改成【1,0】了,在读取完数据然后画出经过增强后的图片发现点的位置是对的,是不是可以不关闭左右flip?

clearlove7-piggy avatar Nov 15 '22 08:11 clearlove7-piggy

可以

derronqi avatar Nov 15 '22 09:11 derronqi

大佬,按你说的改了,训练出来有一个点的预测,问题还是很大。训练损失比较正常,验证损失都很高而且不降

clearlove7-piggy avatar Nov 15 '22 09:11 clearlove7-piggy

大佬,按你说的改了,训练出来有一个点的预测,问题还是很大。训练损失比较正常,验证损失都很高而且不降

Uploading 训练.png…

clearlove7-piggy avatar Nov 15 '22 09:11 clearlove7-piggy

python train.py --data data/widerface.yaml --cfg cfg/yolov7s-face.yaml --epoch 50 --kpt-label 2 --device 1 --weights ./yolov7s-face.pt 用的是这个命令训练的

clearlove7-piggy avatar Nov 15 '22 09:11 clearlove7-piggy

大佬,为啥关键点经过数据增强后点的位置都是对的,经过训练后关键点的误差却特别大?

clearlove7-piggy avatar Nov 16 '22 07:11 clearlove7-piggy

大佬,我发现你做检测的时候,self.no是不是写错了?每个点都只有xy两个坐标,self.no = nc+5 +2self.kpt_label 才对吧?你写的是self.no = nc+5 + 3self.kpt_label

clearlove7-piggy avatar Nov 16 '22 09:11 clearlove7-piggy

大佬,我发现在mosaic状态下的测试结果是很好的,但是转换到原图点位置就不对了。 ~13HBT`L)~0($7)GZ54SQY1

006804

clearlove7-piggy avatar Nov 17 '22 02:11 clearlove7-piggy

大佬,我发现在mosaic状态下的测试结果是很好的,但是转换到原图点位置就不对了。 ~13HBT`L)~0($7)GZ54SQY1

006804

应该怎么修改,让点位置在原图的时候能还原呢?

clearlove7-piggy avatar Nov 17 '22 02:11 clearlove7-piggy

大佬,我发现你做检测的时候,self.no是不是写错了?每个点都只有xy两个坐标,self.no = nc+5 +2_self.kpt_label 才对吧?你写的是self.no = nc+5 + 3_self.kpt_label

这里乘以3的原因是yolov7的数据集标签里除了xy两个坐标以外,还有一个值表示是否可见,所以每个点有三个属性

nowhereman1999 avatar Jan 05 '23 07:01 nowhereman1999

hi ,I try to train this model with 21 landmarks,but hava a error: ##################################################################### Traceback (most recent call last): File "train.py", line 562, in train(hyp, opt, device, tb_writer) File "train.py", line 318, in train loss, loss_items = compute_loss(pred, targets.to(device)) # loss scaled by batch_size File "/ruxiang/workshop/code/detAlg/yolov7-face/utils/loss.py", line 172, in call lkptv += self.BCEcls(pkpt_score, kpt_mask.float()) File "/home/meizu/.local/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1194, in _call_impl return forward_call(*input, **kwargs) File "/home/meizu/.local/lib/python3.8/site-packages/torch/nn/modules/loss.py", line 720, in forward return F.binary_cross_entropy_with_logits(input, target, File "/home/meizu/.local/lib/python3.8/site-packages/torch/nn/functional.py", line 3160, in binary_cross_entropy_with_logits raise ValueError("Target size ({}) must be the same as input size ({})".format(target.size(), input.size())) ValueError: Target size (torch.Size([24, 21])) must be the same as input size (torch.Size([24, 27]))

how to solve the issue?

CNruxiangduan avatar Jan 19 '23 10:01 CNruxiangduan