智慧硬體語音控制的時頻圖分類挑戰賽2.0(思路以及結果,目前top5)
智慧硬體語音控制的時頻圖分類挑戰賽2.0
這裡記錄一下,有關我學習的一些思路和過程,在2022年訊飛的開發者大賽中做的一些比賽,以及去得的一些成功
比賽地址:http://challenge.xfyun.cn/topic/info?type=time-frequency-2022&option=ssgy
一、賽事背景
2014年11月,亞馬遜推出了一款全新概念的智慧音箱Echo,通過語音指令互動控制硬體裝置。截止2016年4月,Echo的累計銷量已經突破300萬臺。2017年12月累計數千萬臺。亞馬遜Echo音箱的推出標誌著以語音互動為實用化的落地方案。
以智慧音箱為代表的聲控智慧硬體在我國已經得到了商業化的大規模推廣。2020年我國佔有全球智慧音箱銷售量的51%,位居全球第一,而同期美國的份額從44%下降到了24%。
二、賽事任務
賽題提供具有24句語音互動指令的語音時頻譜資料集(spectrogram dataset),選手需要完成搭建網路模型,基於密集多層網路、卷積網路和迴圈網路等基本結構的組合,進行有效預測。
三、評審規則
1.資料說明
本次比賽為參賽選手提供了語音訊號及其對應的語句標籤。出於資料安全保證的考慮,所有資料均為脫敏處理後的資料。
2.評估指標
本模型依據提交的結果檔案,採用Macro-F1進行評價。
3.評測及排行
1、初賽和複賽均提供下載資料,選手在本地進行演算法除錯,在比賽頁面提交結果。
2、每支團隊每天最多提交3次。
3、排行按照得分從高到低排序,排行榜將選擇團隊的歷史最優成績進行排名。
四、作品提交要求
1、檔案格式:按照csv格式提交測試結果
2、檔案大小:無要求
3、檔案詳細說明:
-
編碼為UTF-8
-
提交格式見提交示例
五、賽程規則
本賽題實行一輪賽制
賽程週期 7月1日-8月1日
1、7月1日10:00釋出相關資料集(即開啟比賽榜單)
2、比賽作品提交截止日期為8月1日17:00
現場答辯
1、最終前三名團隊將受邀參加科大訊飛全球1024開發者節並於現場進行答辯
2、答辯以(10mins陳述+5mins問答)的形式進行
3、根據作品成績和答辯成績綜合評分(作品成績佔比70%,現場答辯份數佔比30%)
六、獎項設定
- 入圍決賽
- 科大訊飛1024開發者節全場通票
- 決賽入圍證書
- 科大訊飛創孵基地綠色入駐通道
- A.I.服務市場入駐特權
- 決賽勝出
- 決賽獎金,各賽道TOP3選手將階梯獲得賽道獎金,第一名5000元、第二名3000元、第三名2000元。
- 參與1024全球開發者節頒獎盛典,現場授予獎金、證書與定製獎盃
- A.I.全鏈創業扶持
- 綠色就業通道&訊飛Offer
七、嘗試Tricks和思路
-
嘗試多用資料增強
-
嘗試用現有的權重進行遷移學習
-
嘗試利用LabelSmooth的損失
-
嘗試用多模型整合,模型融合等方法
-
嘗試改變影象的解析度,原先是450x750
450x750其實是一個很奇妙的資料,在圖片中,大概來說是500x800,450x750講邊緣資料給剔除之後,也就是邊緣的噪聲得到最後的結果,這樣的方法是比較有可信度的
-
嘗試增大batchsize進行執行得到結果,從5->8
-
嘗試利用大模型進行訓練
八、詳細引數以及執行
資料增強處理
transform_train = A.Compose([
A.RandomCrop(450, 750),
])
後續增加資料增強,我發現從結果上來看,由於我們的圖片中亮度變化比較明顯,如果對亮度進行變化的話,我們的資料增強幾乎是沒什麼效果的,個人感覺對比度也是,所以增加的資料增強主要是對影象的平移,或者掩蓋等等。如果結果不錯的話,再考慮用亮度和對比度的增強進行測試
增加了A.CoarseDropout(p=0.5)以後,結果提高了1%左右
transform_train = A.Compose([
A.RandomCrop(450, 750),
A.CoarseDropout(p=0.5),
# A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.05, rotate_limit=0, p=0.5),
# A.RandomBrightnessContrast(p=0.5),
])
ResNet18
首先借鑑baseline中的ResNet18進行訓練,然後加上自己的框架和一點點修改進行訓練,第一次訓練達到了91.5%的評分
CUDA_VISIBLE_DEVICES=3 python train.py -f --cuda --net ResNet18 --epochs 50 -bs 5 -lr 0.001
訓練方式
CUDA_VISIBLE_DEVICES=0 python train.py -f --cuda --net Model --epochs 50 -bs 5 -lr 0.001 -fe 5
結果會發現,我們用小模型的訓練往往能得到不錯的結果,特別是EfficientNetv2系列的模型,在驗證集中能得到比較高的準確率
這之中都是利用預訓練模型程序測試的,因為含有一定量知識的模型才能得到更好的結果,並且在下列模型中,都先凍結訓練了5個迭代
除此之外,添加了早停策略,防止過擬合
這裡展示的是模型的最優結果
| 使用模型 | 迭代次數 | 訓練引數 | 訓練集ACC | 驗證集ACC |
|---|---|---|---|---|
| ResNet18 | epochs = 50 | AdamW,lr = 0.0005,batch-size = 8 | 99.90 | 97.12 |
| ConvNeXt-T | epochs = 50 | AdamW,lr = 0.0005,batch-size = 8 | ||
| EfficientNetv2-T | epochs = 50 | AdamW,lr = 0.0005,batch-size = 8 | 99.90 | 91.12 |
| EfficientNetv2-b0 | epochs = 50 | AdamW,lr = 0.0005,batch-size = 8 | 99.90 | 96.63 |
| EfficientNetv2-b1 | epochs = 50 | AdamW,lr = 0.0005,batch-size = 8 | 99.90 | 95.67 |
實際上現有模型都是小模型進行訓練,之後也可以嘗試利用大模型檢視能否得到比較好的結果
九、提交結果
2022.7.15,目前排名第7,得分0.93121

2022.7.15,目前排名第5,得分0.94377,這一次只加了一個數據增強就得到了不錯的結果

| ID | 狀態 | 評分 | 提交檔名 | 提交備註 | 提交者 | 提交時間 |
|---|---|---|---|---|---|---|
| 1 | 返回分數 | 0.94377 | submit_ensemble_07-15-16-56-00.csv | 整合多個Efficientv2系列的模型,加上ResNet18小模型,加上隨機掩蓋資料增強的結果 | 擅長射手的pikachu | 2022-07-15 17:14:56 |
| 2 | 返回分數 | 0.93121 | submit_ensemble_07-15-01-03-09.csv | 整合多個Efficientv2系列的模型,加上ResNet18小模型,無資料增強的結果 | 擅長射手的pikachu | 2022-07-15 09:53:24 |
| 3 | 返回分數 | 0.93121 | submit_EfficientNetv2-S_07-15-01-03-09.csv | 利用三個模型ConvNeXt-T,ResNet18,EfficientNetv2-S,無資料增強的結 | 擅長射手的pikachu | 2022-07-15 01:04:40 |
| 4 | 返回分數 | 0.90679 | sub_convnext-T.csv | 利用ConvNeXt-T模型,在改進的基礎上進行訓練,無資料增強的結果 | 擅長射手的pikachu | 2022-07-14 22:20:30 |
| 5 | 返回分數 | 0.9145 | sub.csv | 利用baseline中的ResNet18模型,在改進的基礎上進行訓練,最後測試結果 | 擅長射手的pikachu | 2022-07-14 16:54:44 |
