阿里天池目标检测类比赛入门

  • 1赛前准备
    • 1.1设备
    • 1.2必备技术
    • 1.3相关论文
    • 1.4开源工具
  • 2比赛规则分析
    • 2.1评分指标
    • 2.2模型限制的解决方法
  • 3数据分析
    • 3.1感受野&anchor&训练尺度
    • 3.2Domain分布
    • 3.3实战分析数据特殊性质
    • 3.4数据集划分
    • 3.5训练采样方式
    • 3.6正常数据(背景数据)的使用
  • 4实战
    • 4.1算法选择
    • 4.2预训练
    • 4.3模型集成
    • 4.4调参
  • 比赛心态
  • 答疑环节

本文总结来自阿里天池AI学习的直播课《天池CV赛事老司机,手把手带你入门目标检测赛题》~非常全面的为大家介绍了如何参与阿里天池目标检测的相关比赛,以及比赛中的一些宝贵的经验分享!干货满满!
录播链接 :https://tianchi.aliyun.com/course/video?liveId=41141

主讲人郑烨
中科院计算所博士生在读,研究方向为FSOD。CV比赛奖项收割者,有较为丰富的目标检测比赛经验。

1赛前准备

1.1设备

显卡:英伟达公司,支持cuda和cudnn的加速,很多开源的框架可以支持
显存:限制训练时候的输入图像,限制batchsize的大小,模型的复杂度;显卡的数量对于比赛来说并没有那么关键,对于数据量庞大的比赛表重要。
是否支持半精度fp16的训练:可以加速训练
硬盘:固态硬盘,减少IO时间,提高训练时间
内存:非常多的bbox时,可能会OOM
cpu:够用就好

1.2必备技术

python、计算机视觉基础、机器学习基础、深度学习基础、深度学习框架

1.3相关论文

https://github.com/hoya012/deep_learning_object_detection

1.4开源工具

mmdetection【pytorch】
https://github.com/open-mmlab/mmdetection

detectron2 【pytorch和caffe都可以】
https://github.com/facebookresearch/detectron2

simpleDet
https://github.com/TuSimple/simpledet

PaddleDetection
https://github.com/PaddlePaddle/PaddleDetection

tensorflow detection api object_detection
https://github.com/tensorflow/models/tree/master/research/object_detection

2比赛规则分析

比赛基本流程
规则理解掌握
数据分析
baseline
方案迭代改进
代码和模型提交
答辩准备
答辩
时间节点及不同阶段关联性
初赛如果和复赛关联性不大,可以基本ok就行,不需要花费太大精力

2.1评分指标

指路 https://github.com/rafaelpadilla/Object-Detection-Metrics【对目标检测很多的评测指标都做了很好的介绍】

a.mAP(配合不同IOU要求)

新手容易认为左图mAP高,实际上往往更低一些!
新手常见错误:score阈值的给定由可视化结果决定,例如0.5
经验:score阈值适当的降低可以提高mAP
b.acc【纯背景图像和有目标图像的二分类的准确率】+mAP
c.F1-score

2.2模型限制的解决方法

a.体积限制
1.直接将float32格式模型保存为float16格式
2.采用fp16训练保存float16格式模型
3.移除不必要的参数,例如optimizer优化过程的参数等【有的开源框架会默认保存一些参数,方便恢复训练,占得比例还挺高】

b.数量限制
由于数量难以界定,现在一般不采用

c.运行时间限制
模型轻量化【backbone,head等】
减少模型数量
减小infer尺度【多尺度预测的时候少选一些尺度】
多进程异步数据加载【提前预加载数据】
模型压缩量化、蒸馏剪枝等

3数据分析

3.1感受野&anchor&训练尺度

感受野&anchor&训练尺度可以通过以下几个方面分析拿到的数据:
a. 图像大小分布
医疗、遥感数据常见很大,需要合理的crop
数据集内图像大小差异较大:padding+crop
结合自身设备初步判断训练的尺度上限
b.Gt boxes大小及长宽比例分布
bbox的大小分部影响anchor scale设计
bbox长宽比例影响anchor ratio设计
类内和类间bbox大小的分布,影响整体算法的设计,例如多尺度及专家模型以及后处理

举例:宫颈癌比赛

如上图:
ASC-H类:大的比较少;
Candida:小中大都有;
Trichomonas:比较小
c.Gt boxes与图像大小相对比例分布
由比例可以计算目标经过resize进入网络时候的实际大小,从而:

 结合实际大小决定训练尺度的选取决定anchor scale决定 anchor ratio决定backbone的选取(模型感受野)

d.Gt boxes类别分布
数据分布非常不均衡,呈现长尾分布,

 上采样增强下采样增强训练动态加权采样稀少数据专家模型

小结

 感受野&anchor&训练尺度三者互相协调1.确定训练尺度【可原图resize】2.anchor scale和anchor ratio接近目标的分布可以加快收敛3.模型感受野要尽量大于目标长边【resize原图,增加深度,最后的卷积采用空洞卷积,引入DCN模块】当一个训练尺度或者一个模型难以协调的时候1.多尺度训练预测2.专家模型【这里是基于尺度的专家】3.模型改进【三叉戟网络TridentNet】

注意当有些时候,你对手中的数据集进行了模型赶紧,但是官方换榜之后,测得的结果并没有更好,这可能是因为你官方的测试集与手头数据集部分不均匀,要多手准备。
知乎相关链接:
https://zhuanlan.zhihu.com/p/44106492
https://zhuanlan.zhihu.com/p/55824651

3.2Domain分布

eg.训练集:白天+雨天

3.3实战分析数据特殊性质

1.物品检测—x光图像危险品语义分割

因为正常的图片较多,而含有危险品目标的数据量较少,因此可以通过“贴图”+"抠图"进行数据集mixup扩增(上交有发过相关的文章)

2.基于虚拟仿真环境下的自动驾驶交通标志识别
因为图很大,目标很小。第一步粗检测,第二步,细检测(以hrnet为backbone应对iou要求极高的检测)

3. 天池广东智能制造赛场-布匹瑕疵点检测
因为瑕疵大小相差较大,长宽比例较大(可以anchor调整的更加极端)由于给定了无目标的模板【没有瑕疵的图片】,所以可以进行通道拼接输入,做差输入。

3.4数据集划分

  1. 为了拟合比赛中的测试集,可以针对性划分
  2. 特殊的类训练相应的专家系统。

3.5训练采样方式

  1. 在线加权采样
    按照类别数量比例加权
    按照图片类别丰富度加权【百度参加365的策略】
  2. OHEM等基于loss的采样

3.6正常数据(背景数据)的使用

  1. 拼接:将含目标数据与正常图像拼接在一起进行训练【拼接造假图然后训练rpn,使得rpn能够一开始也能够在正常数据上有效果】
  2. 抠图+粘贴 将目标crop出来以后通过各种方式贴在正常数据上
  3. 如果背景数据与含目标数据具有对应关系:做差、通道拼接【如布匹问题,江小白酒瓶】

4实战

4.1算法选择

  1. Anchor based
  2. Anchor free
  3. One stage
  4. Tow stage
  5. Anchor based+Tow stage【目前推荐】

    说明:
    基于类间关系的后处理:有些类不共存
    基于目标大小及位置的先验:目标必须在瓶子上等【都可以从数据中分析发现】

4.2预训练


说明:推荐使用在检测数据集上预训练的权重
1.更有利于rpn等网络的权重初始化,前景和背景的区分使得rpn收敛的更快,而在ImageNet上预训练的结果则没有这样的优势。
2.如果使用的网络带DCN,预训练的时候用带DCN的预训练效果会更好,总而言之,预训练尽量为后续少走弯路。

4.3模型集成

直接nms
score加权集成
bboxes voting集成
专家单类替代【类分布少的专家,尺寸专家直接替代掉,不要和原来集成,可能集成了还不如只用专家模型

4.4调参

1.理解数据和算法!调的时候心里有底!
2.与模型复杂度无关的参数先在小的backbone上调试
3.控制变量法!不然就是瞎调!

比赛心态

1.学习第一,兴趣驱动
2.从入门到top,只需要一次认真的参赛
【认认真真把该学习的东西学习一遍,第二次基本上很快就能摸到top了】

答疑环节

  1. 线下的增强怎么做?
    增强可以对bbox内的框内的目标单独增强,比如人可能躺着、站着、坐着
  2. 本地好,线上不好,怎么办?
    答:随机划分可能存在线上线下分布不同,应该提前备案。
  3. 数据脏怎么办?
    标准的方式,半监督的清洗,官方数据train出来之后,再infer一下【一些与答案相差较大的,如果不允许人工标注就直接扔掉】。

干货满满~阿里天池目标检测保姆级教程相关推荐

  1. 满满干货!红书运营保姆级教程

    **满满干货!红书运营保姆级教程** 1. 同类三种媒体发布平台的优劣势 今日头条: 今日头条的用户基础雄厚,活跃的用户比较多,所能带来的流量是比较大的,这也就导致了今日头条的推荐量雄厚,是不可多得的 ...

  2. 目标检测算法——YOLOv7训练自己的数据集(保姆级教程)

    >>>深度学习Tricks,第一时间送达<<< 目录 YOLOv7训练自己的数据集(保姆级教程): 一.YOLOv7源代码下载 二.安装深度学习环境 三.准备自己的 ...

  3. win系统的阿里云服务器部署IDEASpringBoot项目保姆级教程

    win系统的阿里云服务器部署SpringBoot项目保姆级教程 前言 配置阿里云服务器 配置环境 环境配置中的坑 还有别的坑的话,私信我我补充......毕竟配置是最基本的,还想咋样... jar包导 ...

  4. 保姆级教程——将springboot项目部署到阿里云服务器(小白包会)

    保姆级教程--将springboot项目部署到阿里云服务器(小白包会) 前言: 昨天本想着看论文,结果发现找的论文和课题不一致.那干点什么好呢?那就把我的毕业设计(一个springboot项目)部署到 ...

  5. 【保姆级教程】基于WordPress在阿里云服务器上搭建个人博客网站

    写之前先回答几个问题: 1,网上类似的教程非常多,为什么写这篇教程? 答:博客网站我搭建过好几次,但是每次搭建都需要再去网上搜教程:然而网上的教程坑很多,甚至有些是错误的,不能完美解决自己的问题,有时 ...

  6. 天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南

    天才少年稚晖君 | [保姆级教程]个人深度学习工作站配置指南 来源:https://zhuanlan.zhihu.com/p/336429888 0. 前言 工作原因一直想配置一台自己的深度学习工作站 ...

  7. 50000字,数仓建设保姆级教程,离线和实时一网打尽(理论+实战) 下

    文档大纲: 本文上半部分之前已经发过了,传送门:50000字,数仓建设保姆级教程,离线和实时一网打尽(理论+实战) 上 此篇文章是整个文档的下半部分,将接着上半部分从第五章开始. 五.实时数仓建设核心 ...

  8. ❤️周末爆肝两天❤️,万字长文,手把手教你配置CSDN主页的独特域名(保姆级教程,建议收藏)

    ❤️ 感受下效果图 ❤️ 目录 一.前言 二.先解决有没有的问题 1. 前置条件 2. 购买云服务器 3. 购买DNS域名 4. 配置Apache2服务 5. 配置云服务器的端口映射 6. 配置ngi ...

  9. ACME网站证书自动化保姆级教程

    更好的阅读体验和更多文章请移步Blog: https://blog.zhou.icu/archives/acme网站证书自动化保姆级教程 本文参考(复制)自:使用 GitHub Actions 自动申 ...

最新文章

  1. Software Testing Homework03:
  2. 如何下载百度文库的资料?
  3. java 类加载过程
  4. 程序员,你是选择25k的996还是18k的八小时工作日
  5. GraphPad Prism多数据处理实用技巧
  6. Regulator的下载地址
  7. appium 如何调用 adb_带你了解可用于Android APP自动化测试的框架:Appium
  8. 课下作业:评估输入法(搜狗)
  9. 重定位----操作系统做的事情
  10. 神经网络用作分类器(附代码matlab)
  11. Xshell 一款很养眼的配色方案推荐
  12. linux系统下部署程序,在linux系统下部署和更新程序的步骤.doc
  13. vista任务管理器_为什么我的Windows Vista资源管理器发送到菜单挂起或打开缓慢?...
  14. Modelica学习笔记3
  15. 绝对中位差Median Absolute Deviation
  16. 南京农业大学计算机学硕分数线,2020南京农业大学考研复试分数线已公布
  17. BusinessSkinForm VCL
  18. 基于SDL的魂斗罗小游戏(源码+解析)
  19. Python3的unichr()消失了?不,升级了!
  20. 企业微信SCRM的设计理念是什么?和CRM有什么不同?

热门文章

  1. JavaScript面试题汇总
  2. 学习篇-Activiti-29-流程定义存储表
  3. 我们都被GitHub出卖了!逃跑吧兄弟!
  4. Js基础——变量类型和计算
  5. Modulo Summation——UPC
  6. 1000:有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数:
  7. 学习笔记1:异地容灾和负载均衡
  8. 【题解】【AcWing】1526. 洗牌机
  9. 最全最新的的Java核心知识点整理!!! 【推荐】
  10. muti-thread fork