摘要
简单的分享一下我自己的学习路线。可以参考未必适合所有人。我个人更倾向于用知识去参加竞赛博取奖金。那么该如何入门在到成长为竞赛达人。
掌握基础语言python
我从python到全部学习能够轻松参加各类竞赛差不多需要一年的时间磨练。在此之前有较好的掌握c。c++。能用代码轻松表达自己想要的目的。用自己的逻辑方式去写代码还是一件比较有意思的事情。学习python也是比较简单,一周的时间差不多就能掌握基础语法。学习python语言是很容易,最重要的是逻辑思维能力。是初学代码需要长时间的代码磨砺去锻炼的。基础学习可以去bilibili参考莫烦python。
掌握python基础语言就可以去学习《利用python进行数据分析》这本书、最重要的是三大库的学习。numpy,pandas,matplotlib库的使用。记住numpy中的各种数据转化,这个很有用。可以做到将numpy中任何的数据提取出来转化成任何的输出格式(比赛提交格式)。将我推荐的这本书仔细从头到尾敲一遍就差不多了。等需要的时候在专门记忆各种函数功能。
机器学习基础
入门cv的话其实不需要全部学完。本科阶段想以最快的方式去参加竞赛可以跳过很多学习内容。重点是掌握线性回归,逻辑回归。神经网络这三章。学会公式推导。python写出来也是需要几周的时间,参考书籍周志华的西瓜书和《机器学习实战》。同时要参考bilibili上机器学习-白板推导系列。用python代码敲打练习的时候一定要每一行输出看看,感受数据经过每一行代码中的变化。尤其是神经网络。这个虽是入门深度学习的基础。但很重要。我自己对深度学习的认知和感触就是通过不断的python练习去感受。通过这部分所得知识就能后在后期的比赛中能够隐约的去感受猜测大概什么样的网络时候这场比赛,什么样的数据增强应该能涨分或者降分。可以减少去尝试的次数。
深度学习
到这一步你就可以学习对图像的处理了,基础知识当然是opencv的学习。使用python对图像各种操作。这一步一定要理解python读取图像的各种形式。学习这个目的就是为了在使用深度学习进行数据训练前的准备和自己写数据增强部分。bilibili上同样有很丰富的资源去学习。学习完成之后就可以去学习一门框架来进行深度学习了。pytorch是国内外竞赛主流框架。国内目标检测类比赛基本全是。目前我所参加看到的比赛都是pytorch框架。其次才是tensorflow。二者我都学习过。还是pytorch去书写代码十分方便。学习pytorch框架(百度网盘学习资料)
https://pan.baidu.com/s/1G-szdYfBCKYd0SbmCJwN0w
(密码1234),这是我个人学习的视频资料。用来入门还是十分可以的。或者如果你精力比较足的话直接看pytorch官网公布的各种函数功能。花一个月的时间去学习。pytorch网课这个也是pytorch入门学习教程,如果只是学习计算机视觉只需要学习到61节课就ok。net设置,进入colab必备
基础实践
学会用pytorch去训练官方配置好的数据集比如minst数据集。这是第一步。很多的csdn上也有很多代码可供参考。视频课中也有讲解。这一步是体会使用深度学习进行训练的过程。大部分电脑还始都可以带动的。不过最好建议有一台属于自己的linux电脑。gpu差不多1080ti(低一点也没关系,主要是用来跑通调试代码,不作为主要训练的机器。但是太低的话电脑压根无法运行 程序)主要是学习linux环境下配置各种环境。自己一定要独立完成(比赛都会以各种方式进行提交成绩linux必会。不然提交成绩你都不行)。大部分的训练可以在google的colab完成,附上使用教程colab使用
cv方向
国内竞赛基本还是目标检测比较多。其次语义分割也慢慢的开始逐渐多了起来。学习顺序应该是目标分类,目标检测,语义分割(语义分割我是直接跳过的,这里其实应该先学习语义分割的,难度小于目标检测)。根据个人情况吧。想最快的接触比赛就是学习分类,检测。语义先不学。那么分类应该学到什么程度那。第一,你要能够训练任何数据集。使用官方下载的minst训练十分方便,但现实比赛给你的数据都是各种方式,需要你自己去处理的。可以参考我博客中
数据处理分类
分类
学会加载任何数据集。方便训练。第二点就是学习各种分类网络。分类网络算是十分好敲的代码部分。代码难度书写也比较容易。可以学习各种主流网络去学习。推荐模式看论文,读源码,去github上去找。论文的话最好开着vpn去google直接搜名字就行。敲上10个分类网络模型就差不多。能够体会到各种网络的差异性。这一步是为自己创新做准备,大部分分类比赛也都是直接用开源的模型直接训练。只有极少数比赛使用自己创造的模型在kaggle上夺冠。掌握基础的训练就可以去研习社去下载和参加分类的比赛。代码别人也都会有分享。
检测
目标检测学习就相对困难很多。分为单阶段检测器和双阶段检测器。其中双阶段检测器自己去学习源码的话还是十分困难的。中间有一部分代码大都会用的c++写roipool操作,需要掌握c++和cuda的一些书写代码。所以直接入手单阶段检测器最方面。可以完全有能力复现出来。只有读懂一个才能会更好的运用。目标检测的代码量也比较庞大。新手刚学习可能需要几周的时间去读懂源码。学习如何庞大的源码就从数据加载,模型构建,训练,测试,评测map,分开学习。代码也是可以单独构建出来,学习的具体过程我个人更倾向于输出代码执行的每一行,去了解数据在代码中的运转和变化。掌握代码之后便要开始训练比赛数据集了。这里推荐使用vpn去google colab去训练,gpu会员是v100,一个月76元,很划算。训练模型的话可以参考我博客中yolo系列训练和最重要的mmdet使用(国内竞赛必备)github搜索mmdetection,专门为竞赛而生的目标检测框架,在colab使用也是十分方便。上传数据集速度取决于你的vpn。去kaggle,天池,以往的各类目标检测竞赛去学习冠军的代码和思路。这里就需要自己摸索,比赛新人的话最好在比赛中找人去组队。大佬一般招新人的要求只有二种,第一,你有很好的设备,用你的设备去训练,第二,同样精通linux各种环境配置掌握,这里主要是mmdet使用。可能需要你(docker中配置mmdet,或者其他),知道推理安装mmdet和自己训练安装mmdet是二种过程。有这些知识和设备基础你才配当劳动力。
检测学习技巧
我个人的博客有详细的讲解retinanet这个单阶段目标检测器,也是最容易复现的,可以直接去github多找几个版本去学习练习,一定要从头到尾的搞懂。这是理解目标检测的关键,对网络只会盲目的使用没有任何意义。一个学习cv的本科生博主可以去了解别人对代码的掌握程度,基本所有代码自己都敲过一遍,为以后创新模型发顶会打下基础。总之,学习目标检测就是硬着头皮阅读源码,一步一步的学习。熟练之后就可以很容易的去训练github开源的任何目标检测框架用于比赛之中。整体学习流程也可以参考我博客的学习顺序。
看这个博主pytorch和其他深度学习常用的知识全部看完bilibili博主
学习资料pytorch学习
学习资料tensorflow学习
总结
目标检测竞赛说难也不是很难,多学kaggle关注你所要参加比赛的类型。在kaggle你能学到更多的操作和世界会议举办的各种竞赛。学习冠军的源码能受益匪浅,运用到国内的竞赛也是很容易拿到top的名额。多去关注比赛发布的信息,比如微信群cver交流群,会经常推送一些比赛和最新的论文和好的文章供大家学习。最主要刚入手比赛一定要把第一的队伍加好友,可以问一些问题能够学到很多东西。大部分也愿意教。国内源码共享的话可能比较难。大部分不愿意共享自己的代码,只能自己去厚着脸去要和收集。以上也只是我个人的学习过程和感悟,本科生尽可能的参加竞赛,这样研究生就可以有三年的时间同时参加竞赛。我认识的比较厉害选手参加竞赛和实习能够在研究生期间拿到几十个w。所以往后竞赛应该会越来越多,不断的去积累知识。总会有比赛能够获奖的。