如何步入深度学习刷榜第一重境界
實(shí)際上筆者也沒(méi)多少刷榜經(jīng)驗(yàn),畢竟不擅長(zhǎng),之前老大也沒(méi)有任務(wù)指派,今年10月份得閑了個(gè)把月,沒(méi)那么多事就參加了一個(gè)場(chǎng)景分類的比賽,鏈接如下,https://challenger.ai/competition/scene/leaderboard/test_a
刷了一個(gè)月之后最好成績(jī)也就殺進(jìn)前15然后就接著干項(xiàng)目去了。
與第一名差一個(gè)點(diǎn),7000張測(cè)試圖,80類,基本上每一類差1張圖。到比賽結(jié)束的時(shí)候排在第20名左右,與第一名還是差一個(gè)點(diǎn)。說(shuō)出去好像是有點(diǎn)不太好意思,但是作為第一次刷比賽,一個(gè)月也不能白費(fèi),畢竟績(jī)效打在那里?,F(xiàn)在的比賽聽(tīng)說(shuō)還有專業(yè)刷榜團(tuán)隊(duì)的,也是666。
下面也簡(jiǎn)單分享一下。
0 刷的是什么比賽?
場(chǎng)景分類,80類日常生活中比較多的場(chǎng)景,這個(gè)在以后的社交應(yīng)用中還是有需求的,相關(guān)最大的比賽是place365,有興趣可以去看。眼下這個(gè),是創(chuàng)新工場(chǎng),今日頭條,搜狗等一起搞的比賽,train數(shù)據(jù)集就不大,只有50000+,測(cè)試數(shù)據(jù)集7000+。
下面舉10類吧
0/航站樓:airport_terminal
1/停機(jī)坪:landing_field
2/機(jī)艙:airplane_cabin
3/游樂(lè)場(chǎng):amusement_park
4/冰場(chǎng):skating_rink
5/舞臺(tái):arena/performance
6/藝術(shù)室:art_room
7/流水線:assembly_line
8/棒球場(chǎng):baseball_field
9/橄欖球場(chǎng):football_field
10/足球場(chǎng):soccer_field
1 為什么叫第一境界?
我覺(jué)得怎么著刷榜這事也得有個(gè)三個(gè)境界,像筆者這樣,一個(gè)人拿現(xiàn)有的模型,4塊K40,兼職刷上一個(gè)月,最后提交也只融合了兩個(gè)模型的,怎么看都是處于剛?cè)腴T的第一境界,大部分人其實(shí)也就是這個(gè)境界。
而到了第二三境界,至少得有個(gè)集群,得有一群人來(lái)嘗試各種方案,而頂尖的團(tuán)隊(duì)對(duì)網(wǎng)絡(luò)結(jié)構(gòu)肯定是需要調(diào)優(yōu)設(shè)計(jì)的,歷年奪冠的那些網(wǎng)絡(luò)alexnet,googlenet,resnet,senet無(wú)一例外。
不過(guò)設(shè)計(jì)強(qiáng)大的網(wǎng)絡(luò)結(jié)構(gòu)從時(shí)間代價(jià),計(jì)算資源代價(jià)和算法能力都有比較高的要求,大部分人可能就是從數(shù)據(jù)層面做文章了,比如清洗數(shù)據(jù),數(shù)據(jù)增強(qiáng),搞搞不均衡樣本等。
2 怎么一步刷到比較優(yōu)的單模型?
這是最關(guān)鍵的第一步。
有幾點(diǎn)一定是要形成共識(shí)的。
(1) 由于我是只有4個(gè)卡,用caffe或者tensorflow都是不可能的,我用了mxnet,并且在訓(xùn)練的過(guò)程中都放開(kāi)了所有參數(shù),實(shí)際上也做過(guò)固定某些參數(shù)的實(shí)驗(yàn),但是效果并不好。224的尺度,放開(kāi)全部訓(xùn)練的話,4塊卡resnet152 batchsize可以到96。在實(shí)驗(yàn)的過(guò)程中,batchsize越大,指標(biāo)就越高,幾個(gè)網(wǎng)絡(luò)都能觀測(cè)到相關(guān)結(jié)論。
(2) 由于訓(xùn)練數(shù)據(jù)少,使用當(dāng)前數(shù)據(jù)從頭訓(xùn)練大模型不太現(xiàn)實(shí),所以,先找到相關(guān)數(shù)據(jù)集比賽finetune過(guò)的大網(wǎng)絡(luò),resnet系列找了一個(gè)resnet152,dpn系列找了一個(gè)dpn92,各自先訓(xùn)練。
(3) 從盡量大的模型開(kāi)始,機(jī)器啃得動(dòng)的就行,畢竟這個(gè)任務(wù)里面有很多類還是很難的,小網(wǎng)絡(luò)搞不定,resnet系至少得50層以上。
在刷這個(gè)比賽的時(shí)候,從imagenet mxnet model的模型fine-tune過(guò)來(lái),鏈接在下面。
http://data.mxnet.io/models/
實(shí)驗(yàn)了18,50,152層的網(wǎng)絡(luò),使用本比賽50000+的數(shù)據(jù)進(jìn)行簡(jiǎn)單的參數(shù)調(diào)優(yōu),
解釋一下,lr是學(xué)習(xí)率,Lr=0.01(10)代表在10個(gè)epochs后下降一個(gè)數(shù)量級(jí),從0.01到0.001,實(shí)際上在10個(gè)epoch以后都收斂了,所以后面沒(méi)有做更多step lr的比較,大家感興趣可以去嘗試。w是weight decay,m是momentum,bs是batch size,單個(gè)k40 gpu。
從上面可以看出,從18層到152層精度毫無(wú)疑問(wèn)是提升的。雖然參數(shù)沒(méi)有調(diào)到各自最優(yōu),但基本能反應(yīng)問(wèn)題。尤其注意的是res18我加了weight decay來(lái)增加模型復(fù)雜度,不然沒(méi)有上90%的可能。從resent152到resent200指標(biāo)就沒(méi)什么提升了,而且res200遠(yuǎn)遠(yuǎn)沒(méi)有res152參數(shù)好調(diào)。單模型單個(gè)crop 94%的精度已經(jīng)差不多了,
(4) 理論上隨著訓(xùn)練尺度增加,在一定范圍內(nèi)性能也會(huì)增加,但是訓(xùn)練尺度的增加會(huì)導(dǎo)致能使用的batchsize減小,所以筆者最后統(tǒng)一采用224這個(gè)尺度。聽(tīng)說(shuō)有人用到了700以上的尺度,只能說(shuō),真土豪也。
(5) 單個(gè)模型,多個(gè)crop會(huì)對(duì)結(jié)果有所提升,有的團(tuán)隊(duì)用到了上百個(gè)crop,筆者最后用了10個(gè)crop,沒(méi)有去嘗試更多,畢竟測(cè)試也是很花時(shí)間,這點(diǎn)資源一個(gè)人搞不過(guò)來(lái)。
有了以上的共識(shí)后,那就開(kāi)始干起來(lái),過(guò)段時(shí)間我會(huì)重新整理把項(xiàng)目git傳上去,前段時(shí)間服務(wù)器意外格式化丟了全部訓(xùn)練文件,一時(shí)還沒(méi)有恢復(fù)。如果對(duì)此感興趣,請(qǐng)持續(xù)關(guān)注。
總結(jié):單模型,以resent152為例。
訓(xùn)練尺度224*224,數(shù)據(jù)增強(qiáng)采用了水平flip和隨機(jī)crop,random resize參數(shù)照搬googlenet那套,放開(kāi)所有參數(shù),使用resnet152-place365,即在place365數(shù)據(jù)集上進(jìn)行訓(xùn)練過(guò)的模型,然后使用當(dāng)前的訓(xùn)練數(shù)據(jù)集進(jìn)行finetune,validation數(shù)據(jù)集進(jìn)行測(cè)試。
數(shù)據(jù)增強(qiáng)參數(shù)偷懶截個(gè)圖,實(shí)際上這些mxnet全部都已經(jīng)集成好了,直接設(shè)置開(kāi)關(guān)即可。
訓(xùn)練參數(shù),lr=0.01,分別在10,20,40個(gè)epoch時(shí)下調(diào)學(xué)習(xí)率,最后采用10個(gè)crop,分別為四個(gè)角,中心以及水平翻轉(zhuǎn)。在試用了多個(gè)batchsize之后,最大的能用的batchsize取得最優(yōu),resnet152單個(gè)模型能到97%。
在測(cè)試的時(shí)候有trick,采納dpn的思想,使用較小的尺度訓(xùn)練,使用較大的尺度測(cè)試,最終在略大于224的尺度上,有微小的提升,對(duì)于刷榜來(lái)說(shuō)還有很重要的,畢竟0.5%可以干掉10個(gè)人。
3 怎么做模型融合?
不同網(wǎng)絡(luò)架構(gòu),但能力相當(dāng)?shù)哪P瓦M(jìn)行融合,結(jié)果會(huì)穩(wěn)定提升。筆者單模型10個(gè)crop,resnet152得到0.971,dpn92得到0.965,兩者融合后即到0.978。要想得到最優(yōu),需采用不同的epoch進(jìn)行融合,這個(gè)需要花時(shí)間去測(cè)試;所以就會(huì)出現(xiàn)兩個(gè)單模型最優(yōu),融合之后缺不是最優(yōu)的情況。這個(gè)時(shí)候,需要把各自錯(cuò)誤樣本拿出來(lái)分析,我當(dāng)時(shí)沒(méi)有太多時(shí)間和耐心去嘗試各種方案。
這就是提交比賽的最后結(jié)果,兩個(gè)現(xiàn)有的模型在224尺度用4張卡訓(xùn)練,融合之后,在比賽結(jié)束前的一個(gè)月,能排在15名左右,比賽結(jié)束后我回去一看,test_a也在20名以內(nèi),test_b也差不多,由于test_b比較難,所有參賽隊(duì)伍的成績(jī)都下降了4個(gè)點(diǎn)左右。
4 哪些trick比較關(guān)鍵
雖然提交的結(jié)果非常簡(jiǎn)單,筆者還是實(shí)驗(yàn)過(guò)很多參數(shù)的,稍微有些經(jīng)驗(yàn)?zāi)贸鰜?lái)分享下,有些參數(shù)是不能亂調(diào)的,有些則不需要調(diào)。
(1) finetune很關(guān)鍵
從相關(guān)大數(shù)據(jù)集上訓(xùn)練好的模型開(kāi)始finetune,基本上可以肯定會(huì)比從不相關(guān)大數(shù)據(jù)集上訓(xùn)練的模型,或者從頭開(kāi)始訓(xùn)練更好,這個(gè)大家應(yīng)該是通識(shí)了。
(2) 學(xué)習(xí)率lr和batchsize
學(xué)習(xí)率和batch size是成對(duì)的參數(shù),batch size增大N倍,相當(dāng)于將梯度的方差減少N倍,也就是梯度方差更小了,更加準(zhǔn)確,更加容易跳出局部最優(yōu),帶來(lái)的后果就是收斂更慢,這時(shí)候?yàn)榱颂岣哂?xùn)練速度,可以將lr增加sqrt(N)倍。
學(xué)習(xí)率是最關(guān)鍵的參數(shù)了,沒(méi)得說(shuō),只能自己從大到小開(kāi)始嘗試。
筆者列舉一個(gè)例子:dpn92, lr_step_epochs='10,20,30,40',w=0,m=0,bs=64,
lr取0.001,0.005,0.01,0.01,分別看train和val的acc。
從小到大,從欠擬合到過(guò)擬合,很明顯。
batch size相對(duì)來(lái)說(shuō)沒(méi)有l(wèi)r那么敏感,但是對(duì)結(jié)果也是至關(guān)重要的。
下面是resnet152的batchsize的實(shí)驗(yàn),mul_val是多個(gè)crop
下面是dpn92的batchsize的實(shí)驗(yàn),mul_val是多個(gè)crop
看的出來(lái),指標(biāo)有所上升。
當(dāng)然了,還是那句話,單個(gè)最優(yōu)的模型融合起來(lái)并不能保證結(jié)果最優(yōu)。
(3) weight decay和momentum
這兩個(gè)參數(shù),對(duì)于小模型的訓(xùn)練是比較關(guān)鍵的,不過(guò)越大越不敏感。
下面是res18的訓(xùn)練結(jié)果,從結(jié)果看來(lái)差異是很大的。
Res50,差距就不明顯了。
Senet50也是。
我的結(jié)論是這個(gè)參數(shù)可以去調(diào)一調(diào),不過(guò)對(duì)于大模型可能不是很必要,我都用的是0
(4) 測(cè)試網(wǎng)絡(luò)
下面是單個(gè)crop和10個(gè)crop的比較
很明顯,不管是什么網(wǎng)絡(luò),多個(gè)crop會(huì)有很明顯的提升,上面穩(wěn)定提升2%以上,更多的crop筆者沒(méi)嘗試,因?yàn)閷?shí)在是太慢了。
另一方面,借鑒dpn的思想,用小尺度訓(xùn)練,大尺度測(cè)試可能也有微小的點(diǎn)提升,下面是一個(gè)比較。
(5) 數(shù)據(jù)增強(qiáng)
本任務(wù)中復(fù)雜的數(shù)據(jù)增強(qiáng)沒(méi)怎么用,使用的是mxnet? level=1的數(shù)據(jù)增強(qiáng),估計(jì)是因?yàn)槟P鸵呀?jīng)在大數(shù)據(jù)庫(kù)上訓(xùn)練過(guò),au=1就是基本的crop,flip,random resize,au=2會(huì)做圖像旋轉(zhuǎn),au=3會(huì)再加上顏色擾動(dòng),實(shí)際的項(xiàng)目中我們還是會(huì)做一點(diǎn)的。
就這么多,不知道你對(duì)是否有用,下回搞點(diǎn)機(jī)器搞點(diǎn)時(shí)間去刷個(gè)大榜試試。
話說(shuō)有個(gè)問(wèn)題,刷比賽的各位覺(jué)得這個(gè)好玩嗎?
總結(jié)
以上是生活随笔為你收集整理的如何步入深度学习刷榜第一重境界的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【GAN的应用】基于对抗学习的图像美学增
- 下一篇: [caffe解读] caffe从数学公式