干货满满~阿里天池目标检测保姆级教程
阿里天池目标检测类比赛入门
- 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数据集划分
- 为了拟合比赛中的测试集,可以针对性划分
- 特殊的类训练相应的专家系统。
3.5训练采样方式
- 在线加权采样
按照类别数量比例加权
按照图片类别丰富度加权【百度参加365的策略】 - OHEM等基于loss的采样
3.6正常数据(背景数据)的使用
- 拼接:将含目标数据与正常图像拼接在一起进行训练【拼接造假图然后训练rpn,使得rpn能够一开始也能够在正常数据上有效果】
- 抠图+粘贴 将目标crop出来以后通过各种方式贴在正常数据上
- 如果背景数据与含目标数据具有对应关系:做差、通道拼接【如布匹问题,江小白酒瓶】
4实战
4.1算法选择
- Anchor based
- Anchor free
- One stage
- Tow stage
- 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了】
答疑环节
- 线下的增强怎么做?
增强可以对bbox内的框内的目标单独增强,比如人可能躺着、站着、坐着 - 本地好,线上不好,怎么办?
答:随机划分可能存在线上线下分布不同,应该提前备案。 - 数据脏怎么办?
标准的方式,半监督的清洗,官方数据train出来之后,再infer一下【一些与答案相差较大的,如果不允许人工标注就直接扔掉】。
干货满满~阿里天池目标检测保姆级教程相关推荐
- 满满干货!红书运营保姆级教程
**满满干货!红书运营保姆级教程** 1. 同类三种媒体发布平台的优劣势 今日头条: 今日头条的用户基础雄厚,活跃的用户比较多,所能带来的流量是比较大的,这也就导致了今日头条的推荐量雄厚,是不可多得的 ...
- 目标检测算法——YOLOv7训练自己的数据集(保姆级教程)
>>>深度学习Tricks,第一时间送达<<< 目录 YOLOv7训练自己的数据集(保姆级教程): 一.YOLOv7源代码下载 二.安装深度学习环境 三.准备自己的 ...
- win系统的阿里云服务器部署IDEASpringBoot项目保姆级教程
win系统的阿里云服务器部署SpringBoot项目保姆级教程 前言 配置阿里云服务器 配置环境 环境配置中的坑 还有别的坑的话,私信我我补充......毕竟配置是最基本的,还想咋样... jar包导 ...
- 保姆级教程——将springboot项目部署到阿里云服务器(小白包会)
保姆级教程--将springboot项目部署到阿里云服务器(小白包会) 前言: 昨天本想着看论文,结果发现找的论文和课题不一致.那干点什么好呢?那就把我的毕业设计(一个springboot项目)部署到 ...
- 【保姆级教程】基于WordPress在阿里云服务器上搭建个人博客网站
写之前先回答几个问题: 1,网上类似的教程非常多,为什么写这篇教程? 答:博客网站我搭建过好几次,但是每次搭建都需要再去网上搜教程:然而网上的教程坑很多,甚至有些是错误的,不能完美解决自己的问题,有时 ...
- 天才少年稚晖君 | 【保姆级教程】个人深度学习工作站配置指南
天才少年稚晖君 | [保姆级教程]个人深度学习工作站配置指南 来源:https://zhuanlan.zhihu.com/p/336429888 0. 前言 工作原因一直想配置一台自己的深度学习工作站 ...
- 50000字,数仓建设保姆级教程,离线和实时一网打尽(理论+实战) 下
文档大纲: 本文上半部分之前已经发过了,传送门:50000字,数仓建设保姆级教程,离线和实时一网打尽(理论+实战) 上 此篇文章是整个文档的下半部分,将接着上半部分从第五章开始. 五.实时数仓建设核心 ...
- ❤️周末爆肝两天❤️,万字长文,手把手教你配置CSDN主页的独特域名(保姆级教程,建议收藏)
❤️ 感受下效果图 ❤️ 目录 一.前言 二.先解决有没有的问题 1. 前置条件 2. 购买云服务器 3. 购买DNS域名 4. 配置Apache2服务 5. 配置云服务器的端口映射 6. 配置ngi ...
- ACME网站证书自动化保姆级教程
更好的阅读体验和更多文章请移步Blog: https://blog.zhou.icu/archives/acme网站证书自动化保姆级教程 本文参考(复制)自:使用 GitHub Actions 自动申 ...
最新文章
- Software Testing Homework03:
- 如何下载百度文库的资料?
- java 类加载过程
- 程序员,你是选择25k的996还是18k的八小时工作日
- GraphPad Prism多数据处理实用技巧
- Regulator的下载地址
- appium 如何调用 adb_带你了解可用于Android APP自动化测试的框架:Appium
- 课下作业:评估输入法(搜狗)
- 重定位----操作系统做的事情
- 神经网络用作分类器(附代码matlab)
- Xshell 一款很养眼的配色方案推荐
- linux系统下部署程序,在linux系统下部署和更新程序的步骤.doc
- vista任务管理器_为什么我的Windows Vista资源管理器发送到菜单挂起或打开缓慢?...
- Modelica学习笔记3
- 绝对中位差Median Absolute Deviation
- 南京农业大学计算机学硕分数线,2020南京农业大学考研复试分数线已公布
- BusinessSkinForm VCL
- 基于SDL的魂斗罗小游戏(源码+解析)
- Python3的unichr()消失了?不,升级了!
- 企业微信SCRM的设计理念是什么?和CRM有什么不同?
热门文章
- JavaScript面试题汇总
- 学习篇-Activiti-29-流程定义存储表
- 我们都被GitHub出卖了!逃跑吧兄弟!
- Js基础——变量类型和计算
- Modulo Summation——UPC
- 1000:有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数:
- 学习笔记1:异地容灾和负载均衡
- 【题解】【AcWing】1526. 洗牌机
- 最全最新的的Java核心知识点整理!!! 【推荐】
- muti-thread fork