一次不成功的深度學習實踐 - 微信跳一跳
最近微信的跳一跳小程式火了一把,所以前天也更新了微信玩了幾盤,最多手動到200左右就不行了。
後來準備用程式碼寫個輔助工具,上Github一查,已經有人做出來了,17年12月29號的專案,不到5天差不多5K的stars,以後還會更多,簡直可怕。
https://github.com/wangshub/wechat_jump_game
具體思路都差不多:
用adb除錯手機,獲取截圖;
從截圖中識別棋子和目標塊的中心點位置;
根據距離計算長按時間,係數和螢幕解析度相關;
用adb模擬長按,完成跳躍。
唉,多麼可惜,錯過了一個好專案。
既然別人已經實現了,那就嘗試點不一樣的,用 深度學習 解決一下。
基本思路
基本流程類似,唯一的區別在於如何獲取棋子和目標塊的中心位置。
假如長按時間只取決於棋子和目標塊的水平位置,那麼只需要知道它們水平方向上的座標即可。
可以看作一個 物體檢測 問題,檢測出截圖中的棋子等物體,這裡假設共包含七類物體:
棋子:chess
彩蛋塊:包括汙水 waste、魔方 magic、商店 shop、音樂盒 music
普通塊:包括矩形塊 rect、圓形塊 circle
模型實現
我手動標註了500張截圖,基於ssd_mobilenet_v1_coco模型和TensorFlow物體檢測API,訓練好的模型跑起來是這麼個結果。
可以看到截圖中的棋子、魔方、矩形塊、圓形塊都被檢測了出來,每個檢測結果包括三部分內容:
物體位置,用矩形標註,對應四元組 ymin、xmin、ymax、xmax;
物體類別,為以上七類中的一種;
檢測置信度,越高說明模型對檢測結果越有把握。
這不僅僅是簡單的規則檢測,而是 真正看到了截圖中共有哪幾個物體,以及每個物體分別是什麼。
所以接下來,就只需從檢測結果中取出棋子的位置,以及最上面一個非棋子物體,即目標塊的位置。
有了物體的邊界輪廓,取中點即可得到棋子和目標塊的水平座標,這裡進行了歸一化,即螢幕寬度為1,距離在0至1之間。然後將距離乘以一個係數,作為長按時間並模擬執行即可。
執行結果
看起來很不錯,實際跑分結果如何呢?
大概只能達到幾百分,問題出在哪?
主要是標註資料太少,模型訓練得不夠充分,所以檢測結果不夠準確,有時候檢測不出棋子和目標塊,而一旦出現這類問題,分數必然就斷了。
嘗試了以下方法,將一張截圖朝不同的方向平移,從而得到九張截圖,希望提高檢測結果的召回率,但仍然有檢測不出來的情況,也許只有靠更多的標註資料才能解決這一問題。
規則檢測
模型訓練了20W輪,依舊存在檢測不出來的情況,鬱悶得很,乾脆也寫一個基於規則的 簡單版程式碼 好了。
花了不到20分鐘寫完程式碼,用OpenCV提取邊緣,然後檢測棋子和目標塊的水平中心位置,結果看起來像這樣。
事實證明,最後跑出來的分數,比之前的模型要高多了……
說好的深度學習呢?
總結
面對以下情況時,基於人工經驗定義規則,比用深度學習訓練模型要省力、有效很多:
問題本身比較簡單,不需要複雜的抽象;
標註資料比較有限,難以充分訓練模型;
錯誤懲罰很高,對錯誤不能容忍。即便模型在99%的情況下能完美執行,1%的錯誤立馬讓遊戲直接結束了,此時反而不如hard code的規則靠譜。
當然,如果大家能一起努力,多弄些標註資料出來,說不定還有些希望。
程式碼在Github上:https://github.com/Honlan/wechat_jump_tensorflow
不說了,我繼續刷分去了,用後面寫的不到一百行的程式碼…
點選下方“閱讀原文”瞭解【大資料實驗平臺】↓↓↓相關文章
- 一次不成功的深度學習實踐 – 微信跳一跳深度學習
- 用 PHP 來實現微信跳一跳PHP
- python_微信 跳一跳Python
- 微信 “跳一跳” 分析筆記筆記
- Mac + iPhone 實現微信跳一跳自動化教程MaciPhone
- 微信《跳一跳》 Python 環境搭建Python
- AI 玩微信跳一跳的正確姿勢——跳一跳 Auto-Jump 演算法詳解AI演算法
- 從“跳一跳”來看微信小程式的未來微信小程式
- 使用SceneKit編寫微信跳一跳小遊戲(一)遊戲
- 微信小遊戲跳一跳外掛輔助程式遊戲
- 用 ARKit 做一個仿微信”跳一跳”遊戲遊戲
- 如何獲得微信小遊戲跳一跳原始碼遊戲原始碼
- 用 ARKit 做一個仿微信"跳一跳"遊戲遊戲
- 微信小遊戲之跳一跳-電腦自動跳躍遊戲
- 微信跳一跳作弊軟體連線手機流程
- 微信小遊戲跳一跳為什麼這麼火?遊戲
- 深度學習的應用與實踐深度學習
- 用Kotlin破解Android版微信小遊戲-跳一跳KotlinAndroid遊戲
- egret實戰教程之跳一跳(一)
- 美團深度學習系統的工程實踐深度學習
- 微信小程式—跳一跳,Android遊戲助手(外掛)使用教程微信小程式Android遊戲
- 八大深度學習最佳實踐深度學習
- AI 玩跳一跳的正確姿勢,跳一跳 Auto-Jump 演算法詳解AI演算法
- 雲上深度學習實踐分享——雲上MXNet實踐深度學習
- [跳一跳] Nodejs + Opencv 版NodeJSOpenCV
- CCF跳一跳Python程式Python
- 深度學習在小米電商業務的應用實踐深度學習
- [深度學習]生成對抗網路的實踐例子深度學習
- 基於深度學習的影像分割在高德的實踐深度學習
- 微信跳一跳指令碼重出江湖,python實現安卓&iOS自動版與手動版!指令碼Python安卓iOS
- 在 Google Colab 中快速實踐深度學習Go深度學習
- 利用docker部署深度學習模型的一個最佳實踐Docker深度學習模型
- 深度學習在搜尋業務中的探索與實踐深度學習
- 愛奇藝深度學習雲平臺的實踐及優化深度學習優化
- 基於CPU的深度學習推理部署優化實踐深度學習優化
- Java 破解騰訊微信跳一跳(幾乎每次命中中心點,目前最高 19844 分)Java
- 學術派 | 愛奇藝深度語義表示學習的探索與實踐
- 關於 iOS HTTP2.0 的一次學習實踐iOSHTTP