【深度学习】球衣号码识别 re-id追踪

1. CLIP-ReIdent: Contrastive Training for Player Re-Identification 论文解析–2023的论文,貌似顶会

论文方法是类不可知的,微调CLIP vitl/14模型,在MMSports 2022球员重新识别挑战中实现98.44%的mAP。此外,CLIP Vision Transformers 拥有强大的OCR能力,可以在对没有数据集进行任何微调的情况下,以zero-shot manner without any fine-tuning on the dataset。通过应用score-scam算法,可以可视化最重要的图像区域。计算两张球员图片相似性得分时识别这些区域。
原来的RID存在的问题:侧重于多视图依赖特征,衣服变化和野外识别和球员的rid识别有很大不同。
基于player tracking 和 reidentification的运动分析来分项一个运动员的性能。
球员识别和行人识别的区别:1.同质化背景,篮球场、冰球场标准化场地。2.穿戴相同。
因此,号码、鞋、脸很重要。
困难点:图像低分辨率可能动态模糊。面部识别有用,但比较困难。背部号码好使。OCR已经很准了。
两个创新点:
1.定制了单模态类无关的重识别和检索CLIP目标
2.zero-shot能力和论文方法的区域重要特征

其它方法的问题:

  • 仅限于预定义的类,需要团队标志服来追踪球员的身份。
  • Siamese net work with triplet loss 无监督学习 来分开彼此
  • 半交互,少了标注, transformer-based architecure

启发:
在这里插入图片描述
image encoder ~ vision transformer or resnet
text encoder ~ Transformer
consine similarity 计算相似度。

改造:
在这里插入图片描述
采样器不考虑同一批次中的一个运动员在另外一个运动员的实例图中可见,用label smooth的方式解决。Because we have pairs
of images and each pair is encoded by the same image encoder, we can encode both query and gallery images of the same batch at once. This doubles the effective batch size.
我们使用re排序[36]作为最终距离的后处理步骤矩阵,但也提供不重新排名。re-rank is prefer!!
Zero-shot Capacity: Zero shot 旨在仅根据描述学习类[37],从而允许在推理过程中检索新概念。

对选择的四个特征做消融实验:jersey number, jersey color, sex, skin color

关于soft label 本质是在one-hot上引入噪音,使得整体的loss下降。

Score-CAM算法来展示CLIP Vision Transformers在zero-shot下追踪球衣号码的能力。并通过ft model来可视化query和gallery images的相似性。
Score-CAM:是一种基于置信分数的视觉可解释性方法,它摆脱了对梯度的解释依赖。
在这里插入图片描述
关于它的讲解:https://zhuanlan.zhihu.com/p/329842645
算法关注到的区域
在这里插入图片描述

ref:
1.https://zhuanlan.zhihu.com/p/35040994 Siamese network 孪生神经网络
2.https://zhuanlan.zhihu.com/p/477760524 clip 介绍
3.论文:CLIP-ReIdent: Contrastive Training for Player Re-Identification https://arxiv.org/pdf/2303.11855.pdf 2023的顶会paper
4.code:https://github.com/DeepSportradar/2022-winners-player-reidentification-challenge
5.权重下载:https://drive.google.com/file/d/1Gm5J19okhLdnZTQLUsjfYoI0rwrLQ09i/view

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的球衣购买系统的Java代码,它使用了五种设计模式:工厂模式、单例模式、策略模式、观察者模式和装饰器模式。 1. 工厂模式 工厂模式用于创建球衣对象。我们定义一个球衣接口和两个具体的球衣类:Nike球衣和Adidas球衣。然后创建一个工厂类,根据用户输入的品牌选择创建对应的球衣对象。 ```java // 球衣接口 public interface Jersey { void showJersey(); } // Nike球衣类 public class NikeJersey implements Jersey { @Override public void showJersey() { System.out.println("This is a Nike jersey."); } } // Adidas球衣类 public class AdidasJersey implements Jersey { @Override public void showJersey() { System.out.println("This is an Adidas jersey."); } } // 工厂类 public class JerseyFactory { public Jersey createJersey(String brand) { if (brand.equals("Nike")) { return new NikeJersey(); } else if (brand.equals("Adidas")) { return new AdidasJersey(); } else { return null; } } } ``` 2. 单例模式 单例模式用于创建购物车对象。我们定义一个购物车类,使用私有构造函数和静态方法getInstance()来确保只有一个购物车实例被创建。 ```java // 购物车类 public class ShoppingCart { private static ShoppingCart instance; private ShoppingCart() {} public static ShoppingCart getInstance() { if (instance == null) { instance = new ShoppingCart(); } return instance; } public void addJersey(Jersey jersey) { System.out.println("Adding " + jersey.getClass().getSimpleName() + " to the cart."); } public void removeJersey(Jersey jersey) { System.out.println("Removing " + jersey.getClass().getSimpleName() + " from the cart."); } } ``` 3. 策略模式 策略模式用于计算球衣的价格。我们定义一个计算价格的接口和两个具体的计算价格类:按品牌计算价格和按季节计算价格。然后创建一个球衣类,包含品牌和季节两个属性,并在构造函数中根据用户选择的品牌和季节选择对应的计算价格策略。 ```java // 计算价格接口 public interface PriceCalculator { double calculatePrice(Jersey jersey); } // 按品牌计算价格类 public class BrandPriceCalculator implements PriceCalculator { @Override public double calculatePrice(Jersey jersey) { if (jersey instanceof NikeJersey) { return 100.0; } else if (jersey instanceof AdidasJersey) { return 90.0; } else { return 0.0; } } } // 按季节计算价格类 public class SeasonPriceCalculator implements PriceCalculator { @Override public double calculatePrice(Jersey jersey) { // 假设夏季和冬季球衣价格不同 if (LocalDate.now().getMonthValue() >= 6 && LocalDate.now().getMonthValue() <= 8) { return 80.0; } else { return 100.0; } } } // 球衣类 public class Jersey { private String brand; private String season; private PriceCalculator priceCalculator; public Jersey(String brand, String season) { this.brand = brand; this.season = season; if (season.equals("Summer") || season.equals("Winter")) { this.priceCalculator = new SeasonPriceCalculator(); } else { this.priceCalculator = new BrandPriceCalculator(); } } public double getPrice() { return priceCalculator.calculatePrice(this); } public String getBrand() { return brand; } public String getSeason() { return season; } } ``` 4. 观察者模式 观察者模式用于在购物车中添加或删除球衣时通知用户。我们定义一个观察者接口和两个具体的观察者类:添加球衣观察者和删除球衣观察者。然后在购物车类中添加一个观察者列表,在添加或删除球衣时通知观察者。 ```java // 观察者接口 public interface Observer { void update(Jersey jersey); } // 添加球衣观察者类 public class AddObserver implements Observer { @Override public void update(Jersey jersey) { System.out.println(jersey.getClass().getSimpleName() + " added to the cart."); } } // 删除球衣观察者类 public class RemoveObserver implements Observer { @Override public void update(Jersey jersey) { System.out.println(jersey.getClass().getSimpleName() + " removed from the cart."); } } // 购物车类 public class ShoppingCart { private static ShoppingCart instance; private List<Observer> observers = new ArrayList<>(); private ShoppingCart() {} public static ShoppingCart getInstance() { if (instance == null) { instance = new ShoppingCart(); } return instance; } public void addObserver(Observer observer) { observers.add(observer); } public void removeObserver(Observer observer) { observers.remove(observer); } public void addJersey(Jersey jersey) { System.out.println("Adding " + jersey.getClass().getSimpleName() + " to the cart."); notifyObservers(jersey); } public void removeJersey(Jersey jersey) { System.out.println("Removing " + jersey.getClass().getSimpleName() + " from the cart."); notifyObservers(jersey); } private void notifyObservers(Jersey jersey) { for (Observer observer : observers) { observer.update(jersey); } } } ``` 5. 装饰器模式 装饰器模式用于为球衣添加额外的功能,比如定制名字或号码。我们定义一个装饰器接口和一个具体的装饰器类:定制装饰器。然后在购物车中添加球衣时,根据用户选择的装饰器为球衣添加额外的功能。 ```java // 装饰器接口 public interface JerseyDecorator extends Jersey { } // 定制装饰器类 public class CustomizedJerseyDecorator implements JerseyDecorator { private Jersey jersey; private String name; private int number; public CustomizedJerseyDecorator(Jersey jersey, String name, int number) { this.jersey = jersey; this.name = name; this.number = number; } @Override public void showJersey() { jersey.showJersey(); System.out.println("Customized with name " + name + " and number " + number + "."); } } // 添加球衣到购物车 JerseyFactory factory = new JerseyFactory(); Jersey jersey = factory.createJersey("Nike"); CustomizedJerseyDecorator customizedJersey = new CustomizedJerseyDecorator(jersey, "Tom", 10); ShoppingCart cart = ShoppingCart.getInstance(); cart.addObserver(new AddObserver()); cart.addJersey(customizedJersey); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值