今晚,為梅西和莫德里奇熬夜!這個(gè)CV模型,讓你猜球必贏
前天,C羅的球迷們傷心慘了。
12月11日的卡塔爾世界杯上,葡萄牙不敵摩洛哥止步八強(qiáng),C羅的世界杯之旅,就這樣畫上了遺憾的句號(hào)。
#C羅說(shuō)夢(mèng)想結(jié)束了#的這個(gè)熱搜下,集結(jié)了不知多少心碎的球迷。
葡萄牙對(duì)摩洛哥的這場(chǎng)比賽,出現(xiàn)了0:1的爆冷結(jié)果。C羅哭了,內(nèi)馬爾哭了,下一個(gè)會(huì)是誰(shuí)呢?
不過(guò),還沒(méi)來(lái)得及從為C羅傷心中走出來(lái),今晚又要迎來(lái)梅西和莫德里奇的對(duì)決了!
怕心臟受不了?
現(xiàn)在,有了這么一個(gè)模型,沒(méi)準(zhǔn)能讓你在比賽開始的5分鐘內(nèi),就提前知道這場(chǎng)球會(huì)不會(huì)爆冷。
當(dāng)計(jì)算機(jī)視覺(jué)用于足球
國(guó)外的這位機(jī)器學(xué)習(xí)工程師,一直希望把計(jì)算機(jī)視覺(jué)(CV)和自己熱愛(ài)的足球相結(jié)合。
在三年前,他就曾嘗試用YOLOv3來(lái)把籃球場(chǎng)上的運(yùn)動(dòng)員進(jìn)行檢測(cè)和分類。
而眼下的FIFA世界杯,讓他重新?lián)炱鹆诉@個(gè)想法。
這次,他使用的是YOLOv5和ByteTRACK的組合,來(lái)跟蹤球場(chǎng)上的足球運(yùn)動(dòng)員。
第1步:構(gòu)建預(yù)訓(xùn)練檢測(cè)器
最初,Skalski希望能跳過(guò)自定義模型訓(xùn)練。
他希望從開始到結(jié)束只花幾個(gè)小時(shí),速戰(zhàn)速?zèng)Q。
因?yàn)橛糜谟?xùn)練YOLOv5和YOLOv7模型的流行COCO數(shù)據(jù)集包含他最感興趣的兩個(gè)類 —?person和sports ball,這就讓他非常樂(lè)觀,認(rèn)為可以從COCO檢查點(diǎn)進(jìn)行訓(xùn)練。
他從Kaggle的德甲數(shù)據(jù)大戰(zhàn)中快速下載了幾十個(gè)簡(jiǎn)短的足球比賽視頻,并將預(yù)訓(xùn)練模型用于測(cè)試。
在嘗試了iou_threshold,confidence_threshold,input_resolution等各種配置后,他得到的結(jié)果令人失望。
在這個(gè)模型上,僅僅在幾個(gè)視頻幀上能檢測(cè)到球,因?yàn)閿?shù)量太少,模型無(wú)法可靠地跟蹤如此小且快速移動(dòng)的物體。
另一方面,這個(gè)模型會(huì)檢測(cè)到場(chǎng)外的許多冗余對(duì)象——教練、球迷、維修人員、攝像人員等。為了這些冗余對(duì)象,需要編寫額外的檢測(cè)過(guò)濾邏輯,太過(guò)麻煩。
可見(jiàn),即使數(shù)據(jù)集包含所需要的類,但用于推理的視頻肯定與用于訓(xùn)練的圖像有很大不同。
在這種情況下,Skalski只能創(chuàng)建自己的數(shù)據(jù)集,并訓(xùn)練自定義模型。
第2步:構(gòu)建自定義檢測(cè)器
而訓(xùn)練自定義模型,就需要付出很多努力。
最主要的原因是,為了注釋圖像,必須完成大量的手動(dòng)工作。
由于時(shí)間匆忙,需要盡可能的簡(jiǎn)化流程。
Skalski從前面提到的Kaggle數(shù)據(jù)集中選擇了幾十個(gè)視頻,并使用FFmpeg從每個(gè)視頻中提取10幀——每3秒一個(gè)。
接下來(lái),就是對(duì)圖像執(zhí)行自動(dòng)初步注釋,并將檢測(cè)到的對(duì)象保存到txt文件,來(lái)利用預(yù)訓(xùn)練的YOLOv5 模型。
接下來(lái),第2階段就是要完善數(shù)據(jù)了。
雖然計(jì)算機(jī)已經(jīng)完成了90%的工作,但人工更正仍然花了Skalski將近5個(gè)小時(shí)的時(shí)間。
同時(shí),他還引入了兩個(gè)額外的對(duì)象類——裁判和守門員。他的工作成果,在Roboflow Universe上可見(jiàn)。該數(shù)據(jù)集是開源的,任何人都可以免費(fèi)使用。
預(yù)訓(xùn)練vs自定義足球運(yùn)動(dòng)員檢測(cè)器
自定義訓(xùn)練的結(jié)果讓Skalski對(duì)于解決上述兩個(gè)問(wèn)題充滿自信。
但不幸的是,可能是由于分類不平衡,該模型在檢測(cè)goalkeeper類時(shí)仍然存在問(wèn)題。
于是,在接下來(lái),Skalski將每個(gè)守門員都視為一名普通的足球運(yùn)動(dòng)員。
Skalski的模型和他的數(shù)據(jù)集一樣,在Roboflow Universe上都是可用的。只需拖放測(cè)試圖像即可。
第3步:跟蹤對(duì)象
Skalski使用的是ByteTRACK(SOTA多對(duì)象跟蹤器之一)來(lái)跟蹤視頻中的對(duì)象。
ByteTRACK在內(nèi)部并不使用任何神經(jīng)網(wǎng)絡(luò)。這個(gè)模型的強(qiáng)大功能完全來(lái)自于簡(jiǎn)單的數(shù)學(xué)計(jì)算:比較各個(gè)幀上的邊界框位置。
最重要的是,ByteTRACK不負(fù)責(zé)檢測(cè),只負(fù)責(zé)跟蹤。因此,它不需要像其他一些跟蹤器那樣進(jìn)行單獨(dú)訓(xùn)練。
因而,ByteTRACK允許我們輕松地更換檢測(cè)器,而無(wú)需重新設(shè)計(jì)整個(gè)代碼的架構(gòu)。
下面是一段簡(jiǎn)化的代碼片段,在自己的項(xiàng)目中,您需要利用ByteTRACK的起始代碼。
在ByteTRACK項(xiàng)目中,框架上的每個(gè)對(duì)象都有一個(gè)唯一的ID。
這是模型的結(jié)果:
ByteTRACK單幀結(jié)果
可以看到,每個(gè)玩家都被分配了一個(gè)唯一的編號(hào),并在幀之間進(jìn)行跟蹤。
當(dāng)然,檢測(cè)和跟蹤僅僅是個(gè)開始。
有了這些,我們就可以更上一層樓了!
比如,現(xiàn)在可以快速分析動(dòng)作的過(guò)程,了解球是如何在球員之間移動(dòng)的,計(jì)算球員移動(dòng)的距離,或者定位他們最常出現(xiàn)的場(chǎng)地區(qū)域。
網(wǎng)友:不去賭球可惜了
有網(wǎng)友表示:既然你掌握了這么多信息,不去賭球真的虧了。
對(duì)此,有激動(dòng)的網(wǎng)友表示:「這也太夢(mèng)幻了!我一直就想做出這樣一個(gè)東西賣給賭球的人?!?/span>
「你可以呈現(xiàn)出每個(gè)進(jìn)攻球員的每一秒的傳球狀態(tài)和準(zhǔn)備狀態(tài)。甚至可以對(duì)從未被傳球的球員進(jìn)行360 度的表現(xiàn)評(píng)估,這比估計(jì)的賠率準(zhǔn)確多了!」
也有網(wǎng)友表示:dream一個(gè)足球比賽的實(shí)時(shí)小地圖。
有嚴(yán)謹(jǐn)?shù)木W(wǎng)友詢問(wèn)道:「這個(gè)腳本是否只適用于一個(gè)固定的攝像機(jī)角度,比如從覆蓋整個(gè)地面的一側(cè)?可不可以用在其他攝像角度上,例如對(duì)3-4位球員進(jìn)行對(duì)焦拍攝。」
對(duì)此帖主回復(fù):「我認(rèn)為我們可以添加來(lái)自其他角度的用例的數(shù)據(jù),重新訓(xùn)練模型,它應(yīng)該表現(xiàn)得一樣好。」
而該網(wǎng)友表示:「我感覺(jué)換個(gè)角度的訓(xùn)練數(shù)據(jù)是行不通的。我的想法是,繼續(xù)在全攝像機(jī)角度拍攝時(shí)運(yùn)行腳本,但要記下球的位置和球周圍的球員,并在任何其他提要上標(biāo)記數(shù)據(jù)?!?/span>