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