YOLOPOSE-2.loss修复及半自动标注自定义数据集(COCO-Annotator)

一、loss修复

具体原因我还没搞清楚,反正这个问题在自定义关键点时容易显现出来:左眼和左耳的预测点要么预测不到,要么偏到天上去。查阅资料发现很多人都遇到过这样的问题。如图所示:

综合了一些解决方案,修改了loss.py 的computeloss类的__call__函数中的内容:

kpt_loss_factor = (torch.sum(kpt_mask != 0) + torch.sum(kpt_mask == 0)) / (torch.sum(kpt_mask != 0) + 0.01)  # v0.1
# kpt_loss_factor = (torch.sum(kpt_mask != 0) + torch.sum(kpt_mask == 0)) / torch.sum(kpt_mask != 0) 尝试修复关键点飘的问题 v0.0
lkpt += kpt_loss_factor * (((1 - torch.exp(-d / (2 * (s * sigmas) ** 2 + 1e-9))) + 0.05 * d) * kpt_mask).mean()  # v0.1
# lkpt += kpt_loss_factor * ((1 - torch.exp(-d / (s * (4 * sigmas ** 2) + 1e-9))) * kpt_mask).mean() 尝试修复关键点飘的问题 v0.0

修改前后的loss对比:

总体loss也得到了明显下降:

二、半自动标注自定义数据集

关键点标注相对目标检测标注工作量大得多。我先尝试了labelme,发现并不好用:每个人的边界框与关键点信息并没有直接的关联;每标一个关键点就要选择一次标签名,效率极低。

查阅资料后发现coco-annotator可以直接标注coco格式的标签。可以为类person分别标注边界框和关键点,这就把每个人及其关键点捆绑到了一起。虽然官方说支持半监督标注,但并没有给出demo,也没有明确给出前端需要接收的json格式。最难受的是官方代码是用docker运行的,没办法调试。

于是我又查询了大量资料,也研究了下前端源码,终于实现了用yolopose实现半监督标注功能。详细文档在我的github上,欢迎各位使用,也希望各位能给个star,毕竟这个我搞了一天。

master686/Semi-supervised-keypoint-annotation-server-for-COCO-Annotator-with-YOLOPose- (github.com)

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值