石头剪刀布程序流程图_机器学习终章:剪刀石头布猜拳机器人
8.1. 簡介
TensorFlow對于我們普通人來說一直是高冷的存在,都是大神們的狂歡。喵家最近將TensorFlow移植到喵家編程軟件Kittenblock中,希望能讓人工智能,機器學習盡快落地。能讓普通用戶也能用上這個好用的機器學習框架,解決生活中的一些實際問題。TensorFlow的詳細教程可以自行查閱喵家相關Learn。這篇文章為了不嚇倒大家,基本不會展開TensorFlow的晦澀知識點,CC喵只會教你從零開始手把手教你做出一個智能的實時識別的猜拳機器人,先讓大家體會到TensorFlow的簡單易用,大家自然會主動進行學習了。
8.2. 知識點
TensorFlow機器學習框架 Kittenblock基本操作(scratch3.0)
8.3. DIY思路
猜拳機器人TensorFlow工作過程:
8.4. 材料準備
- 可以跑Kittenblock的電腦一臺
- USB攝像頭(筆記本電腦的攝像頭也是可以的)
- 電路板(Rosbot或者Robotbit)與三個舵機(可選)
- 樂高機械結構件(可選)
- CC喵提供的程序包
- 你的耐心與細心
8.5. DIY步驟:
解壓壓縮包
得到以下三個文件
雙擊打開sb3程序
修改拓撲路徑與權重路徑
根據你下載的程序包解壓的路徑,對應修改程序。
如下圖的兩處修改:
小技巧:
直接去到對應的文件的目錄,點擊下,把目錄復制粘貼,這樣就不會輸入錯誤了。 不過要記得,mobilenet_244g.json 與 mobilenet_244g.weights.bin 不能缺少。這里新手很容易犯錯~
CC喵筆記:拓撲與權重這兩個就是機器學習里面的概念,第一次使用不必深究,知道就好。
點擊積木塊開啟攝像頭
點擊積木塊,scratch舞臺會出現攝像頭畫面,如果沒有出現畫面,請檢查你的攝像頭是否成功驅動(如果你電腦連接連著兩個攝像頭,例如筆記本本身自帶攝像頭,你再接了一個USB攝像頭,kittenblock默認會連上第一個攝像頭,一般就是驅動起筆記本攝像頭,如果你要用USB攝像頭,你需要去設備管理器將本機攝像頭禁用掉。)
點擊積木塊建立模型
積木塊群點擊的一瞬間,有個黃色邊框,然后又恢復原狀,說明這段積木塊已經被執行了。
CC喵筆記:模型建立是機器學習的核心,也就是學習TensorFlow的精髓所在,第一次使用不必深究,知道有模型建立這個概念就好。
點擊積木塊進行手勢采樣
首先我們先采集空白圖,就讓鏡頭采集空白的圖片
再依次采樣剪刀圖,采樣過程中(積木塊邊框亮),變換下剪刀手的方向角度,讓樣本具有差異性,這樣訓練出來的模型適應性比較強。
采樣石頭圖
采樣布圖
CC喵筆記:因為我們打算讓機器分辨出這四種情況:空白圖,剪刀圖,石頭圖,布圖。所以我們首先要像教一個嬰兒那樣,要重復告訴它(這里每種情況拍了50張照片),這是什么手勢。這里要注意下,我們只是采集了圖片,并且把圖片打上了標簽,我們并沒有告訴機器,這四種情況是如何區分,機器學習引擎的魅力所在就是你無需告訴它規律,只要告訴它,這個是50張剪刀圖,那個是50張石頭圖,你自己找出它們自己的規律,并建立好模型。XS可以理解為就是一個要學習的圖片集,ys是對應這個圖片集的標簽(這里的標簽就是空白、剪刀、石頭、布)
如果采樣有誤
如果在以上的采樣過程中,采集有誤(采樣手勢有誤),就要需要點擊以下的積木塊,把之前采集過的圖片數據以及對應的標簽全部刪除掉。(包括你后面模型訓練出來后,如果你覺得識別的準確率不高,這很可能是你這個采樣過程中,手勢不典型沒有代表性,導致機器識別出錯)
然后重復手勢采樣步驟(空白、剪刀、石頭、布)
將樣本導入模型并進行訓練
點擊積木塊群
訓練20次數,訓練需要一點時間,所以我們按鍵盤F12(window系統),調出后臺,可以看到訓練數據在跑動。
從0跑到19,這樣20次就訓練完成,也可以看到函數在收斂。
CC喵筆記:這個步驟就是將我們采集回來的樣本(圖片集合與一一對應的標簽),塞到我們開頭建立的模型里面進行訓練,這個訓練過程是全自動的,也是很神奇!機器學習按照你的設置建立了一個模型后,然后通過學你的給的樣本,自己在訓練的過程中摸清楚規律,并且它每次訓練好模型后,它會將10%樣本放到模型中進行驗證(因為樣本我們已經標定了正確的答案),如果驗證不通過,它自己則會再進行調整參數,如此重復循環,直到訓練次數結束。我們可以理解它這個訓練過程就是自己在跟自己博弈的過程,不斷的學習進化,最后它被訓練出來了,就能很好適應類似樣本的圖片了
訓練完成后進行應用
這個就是我們想要的最終答案:
這個積木塊返回的的就是,實時采集攝像頭的數據,塞到我們的預測模型中,然后返回我們的標簽類型(空白、剪刀、石頭、布)的其中一個類型。 這時候我們只需要對這個積木塊進行條件判斷,對應做出不同的反應就完成了實驗。
利用預測結果控制舵機
做一個重復執行函數,對機器學習結果進行條件判斷。對應調用石頭、剪刀、布函數
視頻運動于舞臺>100,這個積木塊可以理解為,當讓攝像頭影像有變化時,才進行判斷,否則攝像頭一直頻繁判斷,比較消耗電腦的內存,電腦消耗內存過大會導致軟件藍屏。
石頭剪刀布函數實際就是控制三個舵機不同的運動角度,把對應的手勢舉起來。(這里主控板用了Rosbot,你也可以用Robotbit)
例如石頭函數:
控制A2舵機舉起來!
硬件如下:
8.6. 如何提高識別度
樣本的數量
樣本數量越多肯定越好,不過考慮到工作量的問題,一般取到恰當的樣本數量能達到預期效果就可以了。數量一般沒有什么規律可以,簡單特征至少50以上比較好,如果非常復雜特征的物體,那幾百上千比較合適。這個具體設計到調參和應用環境,如果覺得識別正確率不夠,可以適當加大樣本量。
樣本的質量
所謂樣本質量,例如我們是攝像頭采集回來的圖片,第一個就是清晰度。拍照的時候和具體使用的環境是否一致,盡量一致的時候識別率是比較好。 如果環境比較雜亂,那就需要更高級的機器學習模型來適應。本文的程序只適合背景比較簡單的情況。還有一個就是一些光照度的原因都會影響到識別。樣本質量其實很好理解,就從一個普通人的角度去想,這樣圖片你怎樣看才是最容易認出來,這樣感興趣認知下。
訓練的次數
普遍認知上,訓練次數越多,識別度越準確。但是訓練次數過多,又會造成過擬合。類似一個人經常專做一些偏題難題,鉆牛角尖,做多后,一看到類似的題目,就馬上反應答案,不假思索,實際這個答案是錯誤的。這就是做得太多的壞處。過擬合和欠擬合在機器學習中也是一個很重要的專題。具體詳情可以自行查閱機械學習相關書籍。
所以自己可以稍微改動下訓練次數,看看結果如何
8.7. 后記
如果你操作得不到本文的結果,建議將程序重新打開。重新操作一遍。因為這個程序要求操作比較嚴格。錯了就要重來。第一次使用建議直接用我們提供的程序,防止你自己拖拽積木拖錯了,得不效果,多么令人沮喪。
攝像頭采樣的背景盡量保持純色干凈,這樣可以提升識別率
到應用階段,攝像頭采集的環境盡量保持與樣本采集一樣的環境。
Mac版本調出后臺按 Fn+F12
攝像頭一般的USB攝像頭即可,當然質量越好的攝像頭采集圖片越清晰,效果當然越好,十來塊,幾十塊錢的都夠用了,不用追求極致
看完本文,有些用戶說只是感性認知了機器學習,實際還沒真正了解到。確實這樣的,要知道TensorFlow這個機器學習框架是傾盡谷歌多少工程師才做出來,如果你僅僅是看這一篇就能把谷歌大牛們的精髓全部理解透徹,這只能說明TensorFlow的技術含量有點低。所以不要氣餒,活到老學到老。還是那句話,我們不要求每個人都成為程序架構師,我們只需要能掌握應用到這項技術到我們實際生活中,這就已經足夠了。
本實驗的TensorFlow運算實際就是跑在電腦中,所謂的在線,必須連著電腦。很多用戶問,喵家有沒有硬件可以離線跑TensorFlow?可以這么說現在市面上的能跑TensorFlow的硬件還沒有多少個,并且不是一般人能玩得轉的。如果你想要可以離線跑TensorFlow的硬件,不妨到喵家群找大群主@C說,“我就是想要可以跑TensorFlow的離線硬件,Take my money!”,群眾呼聲高了,喵家的產品自然就會有了^^
8.8. 技術延伸
CC喵,剪刀石頭布,這個實驗我已經完成了。能不能改動下程序,改成我自己想要的。例如我想識別其它物體,或者是不同人的頭像。這個可以實現嗎?
當然可以!小喵科技的黑科技每一個都是易用性與靈活性之間取平衡。
剪刀石頭布這個案例中。主要是針對攝像頭識別物體,主要是識別了4個樣本類型。
換句話來說,你可以更改程序,可以讓攝像頭識別其他物體(例如人頭像),而且樣本類型不限。TensorFlow這個機械學習框架的魅力在于,只需要稍微修改下參數即可以套用原來的機械學習模型,通用性十分強。
舉栗子識別五個樣本類型
更改參數后,對應操作和剪刀石頭布的步驟一樣。唯一不一樣就是取樣拍照,你需要找5個物體來拍照取樣。
8.9. 你需求你有好想法?
TensorFlow是一個新生的事物,包括技術落地與應用都需要大家共同去討論和使用,如果你對喵家的TensorFlow有任何使用上的疑問或者建議,請聯系CC喵~我們共同鞭策程序猿,哇哈哈哈~
總結
以上是生活随笔為你收集整理的石头剪刀布程序流程图_机器学习终章:剪刀石头布猜拳机器人的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 950. 按递增顺序显
- 下一篇: 快速排序quicksort算法优化