材料準備
ArduCam 擴展板 V2
OV2640 攝像頭模塊
MicroSD存儲卡(4G以上)
Arduino / Genuino 101 開發(fā)板
手機支架
開發(fā)板程序燒寫
下載和安裝庫文件
首先我們下載和安裝好相應的庫文件:
CurieNeurons Pro
可以在 CurieNeurons Kit 中找到。
ArduCAM 和 UTFT4ArduCAM_SPI
可以在 ArduCam 官網(wǎng)下載。
下載完成后解壓即可看到相應的 ArduCAM 和 UTFT4ArduCAM_SPI 庫文件夾,在庫管理器中分兩次,選擇和安裝這2兩個庫文件夾即可。
庫文件配置
在庫文件所在目錄 ArduCam/memorysaver.h 中,根據(jù)提示將下面兩段代碼取消注釋:
#define ARDUCAM_SHIELD_V2
#define OV2640_CAM
完整文件可以直接在這里下載:memorysaver_h.zip
你可以直接下載這個壓縮文件,將解壓后的 .h 文件替換進去即可。
這里配置的意思是注明我們所使用的擴展板和攝像頭模塊型號。
程序上傳
CurieNeurons Pro 所提供的案例可以幫助你快速了解使用方法:
文件 -> 示例 -> CurieNeuronsPro -> CurieNeurons_ArduCam_Demo_3Feat
這個示例需要使用 ArduCam擴展板 上的 Shutter 按鈕,但不便于固定機位操作,所以我們對其進行了簡單的改寫,直接在串口監(jiān)視器界面對其發(fā)送操作指令和監(jiān)視結果。
程序源文件下載地址在這里:CurieNeurons_ArduCam_Demo_3Feat_num2.zip
你可以直接打開,然后上傳到 Arduino/Genuino 101 中。
點擊上傳按鈕開始上傳。
正在上傳中……
如果下方的信息框中顯示如下信息,就表示你需要按一下板子上的 MASTER_RESET 按鈕:
Flashing is taking longer than expected
Try pressing MASTER_RESET button
上傳成功后,信息框中會顯示:
Starting download script...
SUCCESS: Sketch will execute in about 5 seconds.
接下來我們就可以,斷開 Genuino101 的電源,進行下一步操作了。
硬件組裝
首先我們組裝 Genuino 101 和 ArduCam 擴展板:
再將 MicroSD 卡裝入 ArduCam 擴展板上的 MicroSD 卡插槽中:
再將 OV2640 攝像頭模塊連接到擴展板上:
最后再將手機支架固定上去:
組裝好的硬件一覽:
然后,我們把組裝好的這一套放在三家腳架上
黃瓜樣本準備
首先,我們要準備一些黃瓜作為學習樣本
大致把他們分為4類:
好的-黃瓜
壞的-黃瓜(彎的)
好的-荷蘭黃瓜
壞的-荷蘭黃瓜(蔫的)
首先,用數(shù)據(jù)線連接 Genuino 101 ,然后打開電腦上的 Arduino IDE。
然后打開“串口監(jiān)視器”:
此時連接上串口監(jiān)視器后,設備會進行初始化,出現(xiàn)下面的界面后表示已經(jīng)準備就緒:
現(xiàn)在,我們把準備好的四組黃瓜黃瓜樣本給 Genuino 101 學習:
比如這個“好的-黃瓜”,我們讓 Genuino 101 學習為 分類1(cat=1),需要進行如下操作:
首先將黃瓜放到鏡頭中的畫面中央?yún)^(qū)域,盡可能保證學習樣本被包裹在屏幕中閃爍的紅框中。
然后,在串口監(jiān)視器中輸入“ 1 ”:
點擊發(fā)送后,Genuino 101 會自動進行數(shù)據(jù)的采樣和學習,并返回目前所占用的神經(jīng)元數(shù)量:
完成后,會自動進行識別:
可以看到已經(jīng)開始正確識別了。
以此類推,我們將四種黃瓜依次給 Genuino 101 進行學習:
“好的-黃瓜” 學習為 分類1(cat=1),發(fā)送“ 1 ”;
“好的-荷蘭黃瓜” 學習為 分類2(cat=2),發(fā)送“ 2 ”;
“壞的-黃瓜” 學習為 分類3(cat=3),發(fā)送“ 3 ”;
“壞的-荷蘭黃瓜” 學習為 分類4(cat=4)發(fā)送“ 4 ”。
為了降低畫面背景對識別結果產(chǎn)生的干擾,我們還可以發(fā)送“ 0 ”,讓 Genuino 101 將背景圖像數(shù)據(jù)學習為 分類0 (cat=0 / Forget),即消除影響,這個操作將不會占用神經(jīng)元:
建議的學習流程:
學習一遍所有黃瓜樣本 -> 學習一遍背景 -> 學習一遍所有黃瓜樣本 -> 學習一遍背景
這樣,基本的學習就完成了。
讓我們測試一下識別的效果:
我們把好的黃瓜放進去:
我們可以在串口監(jiān)視器中看到,已經(jīng)正確識別了。
我們再把好的荷蘭黃瓜放進去:
再把壞的黃瓜放進去:
把壞的荷蘭黃瓜也放進去:
全部識別正確!
如果識別出錯的也很簡單,直接在串口監(jiān)視器中再教它一次就好啦。
圖像數(shù)據(jù)是如何給 Curie 進行學習的?
我們讓 Curie 進行學習的區(qū)域是整個畫面中間 121*121 像素大小的區(qū)域,基于 CurieNeurons Pro (居里神經(jīng)元開發(fā)工具專業(yè)版)的高級功能,在這個案例中每次的學習和識別操作,都有3組分類器,將這個 121*121 像素原始數(shù)據(jù)提取為下面的 3 個特征,讓 Curie 學習:
將 121 * 121 的數(shù)據(jù)分割成 11*11 像素大小區(qū)塊,再對這些區(qū)塊進行平均化處理的數(shù)據(jù)組;
RGB 直方圖;
“Composite Profile“
翻譯成人話就是:
我們下達的每一個學習指令,都會同時進行以下三種信息的學習,識別時也會同時通過以下三種信息進行判斷。
形狀、輪廓信息;
物體顏色信息;
綜合信息。
識別時,當3個條件中的2個條件滿足時,即確認識別結果。也就是我們在識別結果中所看到的 “ matches=* ” 信息:
CurieNeurons 與 TensorFlow 原案例的對比
TensorFlow 原案例的相關信息
圖像識別部分所使用的硬件:
樹莓派3
上方攝像頭
下方攝像頭
側面攝像頭
Windows 臺式個人電腦
訓練的樣本數(shù)量和時間:
7000張圖片
總共2~3天時間完成訓練
約合每張圖片訓練時間需要 24.7秒~37秒。
訓練的樣本質量:
80 * 80 像素
學習的特征僅為形狀相關的信息
CurieNeurons 案例相關信息
圖像識別部分所使用硬件:
Genuino 101
ArduCAM 擴展板 模塊
訓練所需時間:
神經(jīng)網(wǎng)絡的學習和識別只需要幾納秒(ns,1納秒=0.000000001秒);
每組數(shù)據(jù)的處理、傳輸和學習時間總和為毫秒級;
7000張圖片以最慢每張耗時500毫秒來計算,只需要58分鐘即可完成全部樣本的學習。
訓練的樣本質量:
121 * 121 像素
所學習的樣本信息
形狀、輪廓信息;
物體顏色信息;
綜合信息。
CurieNeurons 案例為什么可以這么快速、高效?
Curie 中的神經(jīng)網(wǎng)絡之所以可以在幾納秒(ns,1納秒=0.000000001秒)的時間內完成學習和識別,得益于 General Vision 的 NeuroMem? 技術,完全將神經(jīng)網(wǎng)絡固化到了芯片中,其獨特的 Daisy Chain ,使每個入神經(jīng)網(wǎng)絡的數(shù)據(jù)能夠同時到達每個神經(jīng)元中進行處理。
所有這些 Curie 隱藏超能力,只有依靠 General Vision 發(fā)布的 CurieNeurons Pro (居里神經(jīng)網(wǎng)絡工具專業(yè)版)才可以完全釋放。
聯(lián)系客服