计算机视觉初体验

计算机视觉初体验——图像分类及目标检测任务(一)

  • 多维度内容识别挑战赛
    • 比赛简介
    • 数据集下载
    • Baseline代码。
    • 比赛分析
    • 分类网络Baseline——ResNet18
    • 检测网络Baseline——Cascade50
    • 本章小结

多维度内容识别挑战赛

  自己第一次参加公开范围的计算机视觉竞赛,然后才意识到自己之前的科研工作不过是闭门造车,尤其是看到于其他人的差距之后。像记录一些自己在实践过程中学到的东西,为日后回忆巩固自己阶段性的知识提供参考
  大家上手深度学习的主要困难无外乎两点:

   1. 没有足够数量的训练数据。
   2. 没有充分的算力资源。

  这次比赛也提供了充分的数据集标注,以及短期可用的云端GPU资源。链接: 极链AI云平台.大家可以注册试用一下,参加这个比赛我完全是使用平台提供的GPU时长,而无需使用自己的电脑去浪费时间。下图是我参加比赛得到的云币券,一台Tesla T4 的服务器也就4.5元/h,完全足够我用到比赛结束了。(当然也有RTX2080TI,3元/h。但11g的显存和15g的显存选哪个?我觉得大家吃过亏的都懂)
计算机视觉初体验_第1张图片

比赛简介

  图片中存在着大量的场景、物体等多维度内容信息,这些维度内容之间又存在着广泛的语义联系。近年来,随着深度学习技术的发展,涌现出大量针对物体、场景、人脸、等维度的识别技术,在各自的目标维度上取得了明显的进步。但是目前各识别算法基本都是针对单一维度来设计的,无法利用各维度之间存在的丰富的语义关联建立模型,提高识别准确度。 链接: 多维度内容识别挑战赛.

数据集下载

  比赛提供了两种数据集下载方式:

  1. 站外下载:训练集数据,测试集数据。
   2. 站内使用:极链云平台内路径访问/data-share/Datasets/Leiphone/。需要将使用的内容移动到/data-input/路径下,因为data-share是只读的。计算机视觉初体验_第2张图片

Baseline代码。

  另一个推荐大家使用这个比赛作为自己上手目标检测任务的原因,是比赛方提供了baseline供大家上手使用,而且附带了相关的视频讲解。从0到1很难,但在别人的基础上调参什么的,对于缺乏基础的同学来说就相应简单些。Baseline公开课介绍。个人觉得基本老师把需要的内容都告诉了,如果需要更细致的讲解,可以留言联系我之后补。

比赛分析

  上述内容大多都是比赛官方提供的相关资料,我在这里简单写下我自己的一些拙见。首先多维度内容识别这个名词肯定让大家听起来就很头大,因为我们系统学习过的也就图像分类目标检测实力分割等具体任务。其实比赛说的多维度,就是要在同一数据集上完成图像分类、目标检测两项任务。即比赛中的场景识别场景物体识别。而最后的比赛得分:
          S c o r e f i n a l = 0.5 × S c o r e c l s + 0.5 × S c o r e d e t \ Score_{final}=0.5\times Score_{cls}+0.5\times Score_{det}  Scorefinal=0.5×Scorecls+0.5×Scoredet
  即分类任务和检测任务的权重相同,但显然分类任务相对更为容易,尽可能的在分类任务上拿分也是取得成绩的关键之一。
  比赛的本意是希望在同时有图片场景标注和目标物体bbox标注的情况下,通过训练模型让场景维度信息为检测任务提供context辅导。比如我们只能在机场场景中看到飞机,而不能在厨房场景中看到。(当然例子举得不够好,但道理差不多)
  根据两阶段网络的特性,可以让分类任务和检测任务使用同一个backbone,一条通过全连接层实现场景分类,另一条通过RPN进行Rois提取。但受到时间关系的影响,加上比赛方提供的Baseline也是分成了两个网络进行训练,所以我自己还是使用的两个不同的网络来分别实现分类和检测。

分类网络Baseline——ResNet18

  比赛方以及提供了写好的分类网络baseline,如果是大牛的话可以自己写。我的话就在其基础上做了些小小的改动。需要代码的话也可以通过百度云下载,提取码okeu。
计算机视觉初体验_第3张图片

  如图所示识别部分代码分为四个部分:

   1. configs:提供训练需要的超参数,如数据路径、标签路径、训练轮次、学习率等。
   2. tools:有两个文件,train.py用来训练模型,submission.py用来输出测试结果。
   3. work_dirs :用来保存模型checkpoint。
   4. utils:用来读取数据。
  在实际使用的时候需要根据自己的需求修改代码,比如往往认为神经网络越深,检测效果就相对越好。那么ResNet-18我们可以相应的改为ResNet-101。需要修改这部分代码。在scene_base.py 中我们修改

model = dict(
    arch='resnet101',
    pretrained=True,
    num_classes=206
)

将模型设定为ResNet-101.然后将 train.py中更改为如下:

def main():
    global args, best_prec1, cfg
    args = parser.parse_args()
    cfg = Config.fromfile(args.config)

    # create model
    print("=> creating model '{}'".format(cfg.model.arch))
    if cfg.model.arch == 'resnet18':
        model = models.resnet18(pretrained=True)
        dim_feats = model.fc.in_features
        model.fc = nn.Linear(dim_feats, cfg.model.num_classes)
    elif cfg.model.arch=='resnet101':
        model=models.resnet101(pretrained=True)
        dim_feats=model.fc.in_features
        model.fc =nn.Linear(dim_feats,cfg.model.num_classes)
    elif cfg.model.arch=='resnet152':
        model=models.resnet152(pretrained=True)
        dim_feats=model.fc.in_features
        model.fc =nn.Linear(dim_feats,cfg.model.num_classes)
    else:
        print("Please add more pretrained models, we have not much enough yet")
        return 0

在环境配置正确,scene.py的图片及标签路径无误的前提下,运行train.py即可。运行结果如下
计算机视觉初体验_第4张图片

检测网络Baseline——Cascade50

  同样的也提供了检测任务的baseline代码,百度云链接,提取码g3lr。这里比赛方提供的代码其实就是mmdetection的代码,不过是1.0版本的。使用官方提供的leiphone.py作为config文件即可训练。训练方法参考mmdetection-github地址(注意需要配置好相应的环境,更要进行编译)。
计算机视觉初体验_第5张图片

本章小结

  使用上述baseline,在做了些小幅度改动的前提下,就可以得到42分左右的最后得分。可能是参加人数不多的原因,侥幸进入了复赛。因此之后我会从数据分析、数据增广以及模型调参等方面继续改进我的模型。欢迎大家提供意见或建议,更欢迎大佬为我指点迷津。希望自己有一天也可以达到榜首吧。
计算机视觉初体验_第6张图片

你可能感兴趣的:(计算机视觉初体验)