<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          AI全自動釣魚,原神游戲淪陷?。ㄓ埠碎_源)

          共 5341字,需瀏覽 11分鐘

           ·

          2021-10-03 00:14

          大家好,我是 Jack。

          最近逛 B 站,看到了一個有意思的東西。

          在原神游戲里,AI 全自動釣魚,完全解放雙手。

          其實(shí),這個內(nèi)容,在我出這期視頻的時候,就有人在評論區(qū)提到過了。

          怎奈,本人沒玩過原神,但一直知道它的大名。

          今天,有位 up 主,做了這個AI 全自動釣魚,推薦大家體驗(yàn)一下!

          原神

          在游戲圈,你可以沒有玩過,但一定聽過《原神》。

          特別是在國外,原神可以說是火的一塌糊涂。

          就在今年 9 月,這款從開放公測起便屢次登頂國內(nèi)外討論熱度和手游吸金榜第一的開放世界冒險(xiǎn)游戲更新了版本,添加 / 豐富了地圖,并且上線了一款小游戲——釣魚。游戲中多個水域都有釣魚點(diǎn),不同的位置可以釣不同的魚。

          很多玩家都在尋找釣魚攻略,你還在愁在《原神》里釣不到魚嗎?今天我們?yōu)槟闼蜕线@份遲到的提瓦特釣魚指南。

          這份釣魚指南可以說是完全解放雙手,不需要任何操作,只需要啟動程序就能完成。上線短短幾天,收獲 1700+ 星。

          項(xiàng)目地址:?

          https://github.com/7eu7d7/genshin_auto_fish

          基于強(qiáng)化學(xué)習(xí)+YOLOX實(shí)現(xiàn)原全自動釣魚,半監(jiān)督學(xué)習(xí)+遷移學(xué)習(xí)訓(xùn)練模型。不需要任何操作,只需要啟動程序。完全解放雙手(釣魚太累了)。

          我們先看下效果:

          原理說明轉(zhuǎn)自:?

          https://www.bilibili.com/read/cv13270965

          算法原理

          模型分為魚群定位與識別和拉桿(和魚博弈)兩個部分。

          拉桿部分使用opencv檢測魚是否上鉤,并識別游標(biāo)位置。確定游標(biāo)位置后和魚群博弈使用DQN強(qiáng)化學(xué)習(xí)算法(不想調(diào)PID太累了)。

          訓(xùn)練過程中首先在仿真環(huán)境預(yù)訓(xùn)練一個AI,再遷移到原神環(huán)境中,畢竟仿真環(huán)境不會失敗好訓(xùn)練,不需要太多輪。

          魚群定位與識別部分采用YOLOX定位魚在屏幕中的位置并確定魚的類別,魚竿落點(diǎn)也一起定位。目標(biāo)檢測需要大量標(biāo)注,太費(fèi)時間,所以這里采用半監(jiān)督學(xué)習(xí)+遷移學(xué)習(xí)的方式訓(xùn)練。

          1. 拉桿部分

          先從簡單的開始,如果桿已經(jīng)拋出去了該怎么吧魚釣上來。

          1.1 上鉤檢測與游標(biāo)定位

          要釣魚首先要檢測魚有沒有上鉤,上鉤了才能拉。我們可以看到,上鉤與沒上鉤的圖標(biāo)是不一致的且有較大差異。如下圖:

          那是不是能直接找一個上鉤的圖像模板直接對比呢?上圖可以看出后兩張圖的背景差異很大,而前兩張背景相似,如果我們對比相似度的話,可能前兩張反而更像。

          比如我們使用psnr進(jìn)行對比,左邊兩張圖的PSNR為14.35,而右邊兩張只有9.5. 我們能分辨出來是因?yàn)榍熬昂捅尘暗膶Ρ?,所以我們也要給程序這么一種對比,如果提取這些圖像的邊緣,就可以排除背景的干擾,canny邊緣圖如下:

          這樣處理后的圖片就不會受背景影響了,也沒有歧義,將這一個圖作為模板進(jìn)行對比便可以識別魚有沒有上鉤了。

          我們釣魚過程中主要是看這一個力度調(diào)中的游標(biāo)以及圓形的進(jìn)度條:

          但這一個東西的位置并不是固定的,y坐標(biāo)有可能會變,使用我們需要找一個特征鮮明的東西來定位這個區(qū)域。這里我們選用最佳力度去的特征,這里的特征對比度高,較為鮮明:

          將這一圖像作為模板進(jìn)行模板匹配(詳情參考數(shù)字圖像處理),便可以在圖中找到力度條的位置,確定這一區(qū)域。

          滑塊的位置同樣可以使用模板匹配,不過為了精度,我們將匹配范圍限定在力度條這一局部區(qū)域內(nèi):

          1.2 強(qiáng)化學(xué)習(xí)

          在有了力度條的游標(biāo)位置后就可以對鼠標(biāo)進(jìn)行控制,讓其落在最佳區(qū)域內(nèi)了。這里考慮到控制算法的人工成本和精度,使用強(qiáng)化學(xué)習(xí)實(shí)現(xiàn)(PID調(diào)參我再也不會碰了!)。這里只介紹強(qiáng)化學(xué)習(xí)和DQN的基本概念,具體細(xì)節(jié)可以參考知乎上關(guān)于強(qiáng)化學(xué)習(xí)和DQN的講解。

          強(qiáng)化學(xué)習(xí)與標(biāo)準(zhǔn)的監(jiān)督學(xué)習(xí)最大的區(qū)別就是,強(qiáng)化學(xué)習(xí)是交互式學(xué)習(xí)的。標(biāo)準(zhǔn)的監(jiān)督學(xué)習(xí)中每一組數(shù)據(jù)和標(biāo)簽都是獨(dú)立的,模型的輸出直接和數(shù)據(jù)集中獲得的標(biāo)簽計(jì)算loss更新模型,不會對數(shù)據(jù)集產(chǎn)生影響。而強(qiáng)化學(xué)習(xí)中模型每一次輸出都會作用于環(huán)境,會改變環(huán)境下一次所提供的數(shù)據(jù)。也就是說強(qiáng)化學(xué)習(xí)模型一下次能獲得的數(shù)據(jù)是取決于上一次輸出的動作的。它和環(huán)境間是交互式學(xué)習(xí)的。

          DQN則是強(qiáng)化學(xué)習(xí)的一種神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn),這種方式不直接從環(huán)境中獲得模型的損失,模型獲得的只是一個獎勵(reward)。而模型的目標(biāo)則是最大化長期獎勵,loss則是通過獎勵計(jì)算的,模型要規(guī)避在某一狀態(tài)下低獎勵的動作,而盡量做出高獎勵的動作。由于使用神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn),所以模型有泛化能力。為了防止模型只最大化短期獎勵,DQN還設(shè)計(jì)了經(jīng)驗(yàn)回放機(jī)制,不斷回放先前的經(jīng)驗(yàn),防止遺忘(具體參考連續(xù)學(xué)習(xí)中的災(zāi)難性遺忘)。

          1.3 仿真環(huán)境訓(xùn)練

          在了解了強(qiáng)化學(xué)習(xí)的基本概念后就可以找一段DQN代碼開始訓(xùn)練了(當(dāng)然自己復(fù)現(xiàn)也行)。我們可以對力度條建模,最佳區(qū)域左右的位置和游標(biāo)的位置可以寫成一個三維向量(pl,pr,pn),這可以作為環(huán)境的狀態(tài)(state)。而模型則輸出兩種動作,點(diǎn)或不點(diǎn),則action是一個二維向量。任務(wù)比較簡單所以模型也不用復(fù)雜,2層MLP+個ReLU層足夠。

          由于原神內(nèi)短時間沒有落在最佳區(qū)域就會失敗,訓(xùn)練較為困難,所以先構(gòu)建一個仿真環(huán)境進(jìn)行預(yù)訓(xùn)練,訓(xùn)練好后再進(jìn)行遷移學(xué)習(xí)。預(yù)訓(xùn)練的目的是讓模型掌握一定的先驗(yàn)知識,在面對原神實(shí)際場景時可以有一定表現(xiàn)。就像去考試前會先做模擬題,從模擬題學(xué)會一些東西了才去考試再學(xué)。

          控制力度這個問題可以進(jìn)行簡單建模,每過一段時間力度條會以隨機(jī)的速度向隨機(jī)的方向移動,同時長度也會隨機(jī)變化。游標(biāo)會被施加一個恒定的負(fù)向加速度,并在達(dá)到一定速度時停止。每次點(diǎn)擊都會為游標(biāo)施加一個瞬時較大的加速度,正向速度也有上限。根據(jù)這些條件,很容易就能構(gòu)建一個仿真系統(tǒng),模型在仿真系統(tǒng)內(nèi)可以多學(xué)幾輪。

          1.4 遷移學(xué)習(xí)到原神環(huán)境

          在仿真環(huán)境訓(xùn)練好后就可以將模型遷移到原神的實(shí)際環(huán)境中了,這里采用fine-tuning的方法。在一個數(shù)據(jù)集上預(yù)訓(xùn)練一個較好的模型,再固定部分層或以較低的學(xué)習(xí)率在其他數(shù)據(jù)上學(xué)習(xí)。

          這是遷移學(xué)習(xí)中一種簡單卻非常有效的方法,可以快速實(shí)現(xiàn)不同域數(shù)據(jù)間模型的遷移。利用預(yù)訓(xùn)練的仿真環(huán)境模型,只需要40輪便可以遷移到原神環(huán)境中,并且訓(xùn)練過程中釣魚很少會失敗。

          2 魚群定位與識別

          2.1 目標(biāo)檢測

          關(guān)于目標(biāo)檢測和YOLOX的具體細(xì)節(jié)由于太過復(fù)雜這里不細(xì)講,可以參考知乎的綜述和解讀的文章。這里只介紹目標(biāo)檢測任務(wù)的基本概念。

          目標(biāo)檢測是計(jì)算機(jī)視覺近幾年的一個熱點(diǎn)問題,有很多優(yōu)秀的模型。這是一個多任務(wù)學(xué)習(xí)問題,包括定位和分類。這些模型的主要任務(wù)是給一張圖,在其他信息完全不知道的情況下確定圖中哪些區(qū)域有物體和這些物體的類別。下面這張圖展示了一些常見的視覺任務(wù):

          現(xiàn)在的目標(biāo)檢測主要分為one-stage和two-stage兩大陣營。one-stage模型輸入一張圖像后直接讓模型預(yù)測圖中物體的包圍框和這些框?qū)?yīng)的類別。這里使用的YOLOX便是one-stage模型。而two-stage模型則先用RPN網(wǎng)絡(luò)預(yù)測圖中物體的包圍框,和這些框里的是不是物體。之后把是物體的框的區(qū)域截出來,在去預(yù)測其中物體的類別和修正框的范圍。one-stage相比two-stage要快的多,但精度會差一些,不過對于定位魚這個任務(wù),完全在可接受范圍內(nèi)。

          2.2 半監(jiān)督學(xué)習(xí)

          半監(jiān)督學(xué)習(xí)是指在數(shù)據(jù)集只有一部分標(biāo)簽的情況下,如何學(xué)習(xí)訓(xùn)練模型。這里打標(biāo)簽實(shí)在太累了,所以只有不到一半數(shù)據(jù)集打了標(biāo)簽。那剩下一部分怎么辦呢。我們可以利用這一部分已經(jīng)打了標(biāo)簽的數(shù)據(jù)集來處理剩下的數(shù)據(jù)集。

          這里我們使用有標(biāo)簽的數(shù)據(jù)集先用遷移學(xué)習(xí)的方法,將在coco數(shù)據(jù)集上預(yù)訓(xùn)練的yolox模型遷移到這一部分?jǐn)?shù)據(jù)集上。隨后用這一訓(xùn)練好的模型為剩下的模型打上偽標(biāo)簽,之后再進(jìn)行人工修正。畢竟稍微改改標(biāo)簽比自己從頭打可輕松多了。要是無標(biāo)簽數(shù)據(jù)量足夠的話也不需要人工修正了,直接根據(jù)置信度篩選迭代訓(xùn)練就可以了。

          2.3 拋竿策略

          訓(xùn)練好模型后就可以根據(jù)檢測到的魚的位置和魚竿落點(diǎn)進(jìn)行自動拋竿了。這里由于reward不好獲取,所以沒有采用強(qiáng)化學(xué)習(xí)的方式。由于定位的坐標(biāo)是在二維圖像的,而原神的魚竿落點(diǎn)是三維的。所以這里使用迭代的方式逐步逼近落點(diǎn)。

          越靠近與迭代步長應(yīng)該越小,這里使用如下公式:

          移動到魚附近后進(jìn)行拋竿,隨后檢測魚上鉤,長時間沒有上鉤就重拋。這樣就可以完成全自動釣魚。

          整個項(xiàng)目原理并不復(fù)雜但涉及方面較廣。想要更深入了解可以學(xué)習(xí)更多關(guān)于強(qiáng)化學(xué)習(xí),數(shù)字圖像處理,目標(biāo)檢測以及深度學(xué)習(xí)基礎(chǔ)理論的相關(guān)知識。

          項(xiàng)目說明

          原神自動釣魚 AI 由兩部分模型組成:YOLOX、DQN。此外,該項(xiàng)目還用到了遷移學(xué)習(xí),半監(jiān)督學(xué)習(xí)來進(jìn)行訓(xùn)練。模型也包含了一些使用 opencv 等傳統(tǒng)數(shù)字圖像處理方法實(shí)現(xiàn)的不可學(xué)習(xí)部分。

          • YOLOX 用于魚的定位和類型的識別以及魚竿落點(diǎn)的定位;
          • DQN 用于自適應(yīng)控制釣魚過程的點(diǎn)擊,讓力度落在最佳區(qū)域內(nèi)。

          環(huán)境部署

          該項(xiàng)目是在 python 運(yùn)行環(huán)境中使用的,需要先安裝 python,這里推薦使用 anaconda。

          配置環(huán)境:打開 anaconda prompt(命令行界面),創(chuàng)建新的 python 環(huán)境并激活(推薦 python3.7 或以下版本):

          conda?create?-n?ysfish?python=3.6
          conda?activate?ysfish

          下載工程代碼:使用 git 下載,或直接在 github 網(wǎng)頁端下載后直接解壓:

          git?clone?https://github.com/7eu7d7/genshin_auto_fish.git

          依賴庫安裝:切換命令行到本工程所在目錄:

          cd?genshin_auto_fish

          執(zhí)行以下命令安裝依賴:

          python?-m?pip?install?-U?pip
          python?requirements.py

          如果要使用顯卡進(jìn)行加速需要安裝 CUDA 和 cudnn, 安裝后無視上面的命令用下面這條安裝 gpu 版:


          pip?install?-U?pip
          python?requirements.py?--cuda?[cuda?版本]
          #?例如安裝的?CUDA11.x
          python?requirements.py?--cuda?110

          安裝 yolox:切換命令行到本工程所在目錄,執(zhí)行以下命令安裝 yolox:

          python?setup.py?develop

          預(yù)訓(xùn)練權(quán)重下載:下載預(yù)訓(xùn)練權(quán)重 (.pth 文件),yolox_tiny.pth 下載后將權(quán)重文件放在 工程目錄 / weights 下。

          YOLOX 訓(xùn)練工作流程:YOLOX 部分用半監(jiān)督學(xué)習(xí)打標(biāo)簽。標(biāo)注少量樣本后訓(xùn)練模型生成其余樣本偽標(biāo)簽再人工修正,不斷迭代以提高精度。樣本量較少所以使用遷移學(xué)習(xí),在 COCO 預(yù)訓(xùn)練的模型上進(jìn)行 fine-tuning。

          將 yolox/exp/yolox_tiny_fish.py 中的 self.data_dir 的值改為解壓后 2 個文件夾所在的路徑。

          訓(xùn)練代碼:

          python?yolox_tools/train.py?-f?yolox/exp/yolox_tiny_fish.py?-d?1?-b?8?--fp16?-o?-c?weights/yolox

          DQN 訓(xùn)練工作流程:控制力度使用強(qiáng)化學(xué)習(xí)模型 DQN 進(jìn)行訓(xùn)練。兩次進(jìn)度的差值作為 reward 為模型提供學(xué)習(xí)方向。模型與環(huán)境間交互式學(xué)習(xí)。

          直接在原神內(nèi)訓(xùn)練耗時較長,首先你需要制作一個仿真環(huán)境,大概模擬釣魚力度控制操作。在仿真環(huán)境內(nèi)預(yù)訓(xùn)練一個模型。隨后將這一模型遷移至原神內(nèi),實(shí)現(xiàn)域間遷移。

          仿真環(huán)境預(yù)訓(xùn)練代碼:

          python?train_sim.py

          原神游戲內(nèi)訓(xùn)練:

          python?train.py

          運(yùn)行

          以上準(zhǔn)備就緒后,就可以運(yùn)行釣魚 AI,注意命令行窗口一定要以管理員權(quán)限啟動。

          顯卡加速:

          python?fishing.py?image?-f?yolox/exp/yolox_tiny_fish.py?-c?weights/best_tiny3.pth?--conf?0.25?--nms?0.45?--tsize?640?--device?gpu

          cpu 運(yùn)行:

          python?fishing.py?image?-f?yolox/exp/yolox_tiny_fish.py?-c?weights/best_tiny3.pth?--conf?0.25?--nms?0.45?--tsize?640?--device?cpu

          運(yùn)行后出現(xiàn) init ok 后按 r 鍵開始釣魚,原神需要全屏。出于性能考慮檢測框不會實(shí)時顯示,處理運(yùn)算后臺進(jìn)行。

          總結(jié)

          國慶十一放假有的玩了吧!

          最后,今天是節(jié)前最后一天,預(yù)祝大家節(jié)日快樂!

          我是 Jack,我們下期見!

          ·················END·················

          推薦閱讀

          ?? ?危!我用python克隆了女朋友的聲音!?? ?好家伙,又火幾個。。????我,從高考到程序員的成長之路

          瀏覽 102
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人妻在线大香蕉 | 毛片寻小小 | 人妻五月天 | 熟妇13p | 在线免费观看视频一区 |