深度學習“吃雞外掛”——目標檢測 SSD 實驗

七月線上實驗室發表於2018-05-18

來自:魏鴻鑫

原文連結:https://zhuanlan.zhihu.com/p/32714614


“臥槽,又被 LYB 幹了!” 背後傳來一聲哀嚎。

哈哈,看來,沉迷吃雞的室友又被戒網癮了。作為一個充滿著正義的 LYB 的遊戲,這人不長點眼力還真的不行啊。不過這時候一張圖片吸引了我的興趣:

網易《荒野行動》的車輛檢測

能識別出視訊中的汽車和人,這,不是外掛麼?想到專業制裁 LYB 們的透視掛,這波我很強好吧。為探祕這 “外掛” 效果有多強,那我就來複現這個深度學習界的 “吃雞掛”——SSD 目標檢測。

  SSD 目標檢測介紹

SSD 是一種 Object Detection 方法。本文的原始碼是基於論文 SSD: Single Shot MultiBox Detector(https://arxiv.org/abs/1512.02325 ),實現的 keras 版本。

該文章在既保證速度,又要保證精度的情況下,提出了 SSD 物體檢測模型,與現在流行的檢測模型一樣,將檢測過程整個成一個 single deep neural network。便於訓練與優化,同時提高檢測速度。 SSD 將輸出一系列離散化(discretization)的 bounding boxes,這些 bounding boxes 是在不同層次(layers)上的 feature maps 上生成的,並且有著不同的 aspect ratio。

  使用 RussellCloud 復現

做深度學習的,大家都知道最糾結的莫過於配置環境了。那麼多框架那麼多庫那麼多版本,稍有不注意,成倍的時間都花在踩坑上了。這在做復現的時候尤為明顯,我不過是想跑一下別人的程式碼看看效果,結果完全搞不定。

使用 RussellCloud,輕鬆搞定環境問題,要啥,寫個 requirement 就行了!

復現前準備:

  • 註冊 RussellCloud 賬號

(註冊邀請碼可至論壇跟帖求助獲取,每位已經註冊的使用者也有五枚好友邀請碼)

  • 安裝 russell-cli 終端工具

sudo pip install -U russell-cli

  • Clone 專案程式碼,Git 地址 RussellCloud/SSD_keras

# clone程式碼 $ git clone https://github.com/RussellCloud/SSD_keras.git

使用命令列登入:

# 使用russell login命令 $ russell login

輸入 y,網頁登入後在網頁端拷貝賬戶的 Token,貼上進終端,回車。如果你使用 Windows 的命令列,可能會出現貼上不進的情況,請右鍵視窗貼上(或者點選左上角圖示)。

成功登入輸出:

Login Successful as XXX

新建專案:

來到 RussellCloud 主頁,進入控制檯,新建一個專案。專案名隨便起一個,很多都可以不填,比較重要的是預設容器環境一定要選擇:keras 。

  RussellCloud 建立專案頁

初始化專案:

專案建立完成後記得在專案主頁複製概覽 ID,用於專案初始化。

# 繫結遠端專案,此處<project_id>是在網頁上覆制的專案概覽 ID $ russell init --id <project_id>

初始化成功輸出:

Project "XXX" initialized in current directory

執行專案:

初始化完成後我們就可以用 russell run 命令執行專案了,這裡我們專案下實現的是一個 IPython Notebook 工程,所以我們要使用 Jupyter 模式來啟動我們的專案。

# russell run 以Jupyter模式啟動專案 $ russell run --mode jupyter --data df2750d1f1624857a27c7802494c6e39:model

成功執行 task 輸出:

RUN ID                            NAME                  VERSION --------------------------------  ------------------  --------- 780a8e053f2244cb9ea03faabc9f2694  RussellCloud/ssd:1          1 Setting up your instance and waiting for Jupyter notebook to become available ... Path to jupyter notebook: http://cpu.russellcloud.com/notebook/780a8e053f2244cb9ea03faabc9f2694/    To view logs enter:        russell logs 780a8e053f2244cb9ea03faabc9f2694

然後我們就會瀏覽器自動開啟一個頁面,這就進入到了我們的 Jupyter 環境下。

線上的 jupyter

然後我們可以看到我們所有的專案檔案都展現在這個網頁中了,當然我們還有掛載的 SSD_Weight 資料集在 / input/model 目錄下沒有顯示出來。接下來我們就是開啟這個 SSD.ipynb 開始執行啦!不過這裡的程式碼有一些目錄還還沒有對應改好哦,所以我們這裡按 cell 執行時候要及時查錯,把相應的目錄修改好。

成功執行完一遍,OK!

檢測效果演示

  小記

“小編你這不是耍我麼,吃雞掛呢?”

當然我是有做測試的啦!只是效果不太理想(哭臉)。先上兩張圖感受一下。

這兩張圖都是來源於《絕地求生:大逃殺》的官方宣傳片。第一張圖算是識別出了人,可是,你識別自己有啥用喂喂喂。雖然玩家面前還有另一個人開著一輛跑車疾馳而來,但是它並沒有識別出來。第二張圖,穿著吉利服的 LYB,結果確實識別出來是一個鳥…… 好吧這還看著是有點像個鳥頭。

我這裡做的都只是一個圖片的目標檢測。如果做視訊的目標檢測,我想它應該能識別出來那輛疾馳而來的車。至於這個吉利服選手,怕是識別不出來了哈哈哈。看來,這個 “吃雞掛” 的功力還遠遠不夠。

但在其他圖片上,這個 SSD 目標檢測還是有不錯的效果的:

檢測出來的小貓咪

  參考資料

  • SSD: Single Shot MultiBox Detector(https://arxiv.org/abs/1512.02325 

  • 論文閱讀:SSD: Single Shot MultiBox Detector(http://t.cn/RcpBQvu 

  • kuhung/SSD_keras(http://t.cn/RQzkgR5 

  • rykov8/ssd_keras(http://t.cn/Rf9wNaO 

《深度學習 集訓營》5月22日(週二)晚8點開營,BAT專家級講師上課,還原真實工業生產環境,全程實戰!提供GPU環境、考試1v1批改、就業指導及內推,2個月挑戰年薪50萬!掃下方二維碼立即試聽

相關文章