一、前言
公司最近有個項目是安防領域的,主要用在邊緣結點,雖然已做成形,但是還是存在一些缺陷,例如:算力問題,開發板的成熟問題,已經各種技術的解決方案落地問題。目前我們集成了很多功能,主要是拉取rtsp等流媒體協議的實時視頻流,例如:可以拉取海康相機的rtsp,然后針對這個相機做AI識別以及分析。
Orange Pi AI Pro 開發板是香橙派聯合華為精心打造的高性能 AI 開發板,其搭載了昇騰 AI 處理器,可提供 8TOPS INT8 的計算能力,內存提供了 8GB 和 16GB 兩種版本。可以實現圖像、視頻等多種數據分析與推理計算,可廣泛用于教育、機器人、無人機等場景。
今天香橙派AIpro這塊板子終于到了,先來探索下在安防領域的應用。
二、搭建開發環境
梳理這篇文章之前整理了很多篇,這里直接寫總結吧,太冗余的廢話就不多說了。總結下來,香橙派AIpro的開發環境并沒有太復雜的地方,主要是下載好交叉編譯工具,配置好環境變量就OK了。
官網提供了多個下載的資源,在官方工具這個地址中可以下載到交叉編譯工具
還提供了一些額外的輔助工具,遠程工具,圖片查看工具等:
下載好,配置環境變量:
export PATH=$PATH:/你的位置/toolchain/bin/
如果你是windows就加到自己的PATH環境變量中即可,這個就不需要多說了吧。
如何驗證安裝成功了呢:
1.使用which命令
which aarch64-target-linux-gnu-g++2.如果能查到說明成功了
/位置/toolchain/bin//aarch64-target-linux-gnu-g++
通過putty的串口連接:
登錄成功:
三、識別案例
咱們可以參考samples:
(base) HwHiAiUser@orangepiaipro:~$
(base) HwHiAiUser@orangepiaipro:~$ cd samples/
(base) HwHiAiUser@orangepiaipro:~/samples$ ls
01-SSD 02-CNNCTC 03-ResNet50 04-HDR 05-CycleGAN 06-Shufflenet 07-FCN 08-Pix2Pix start_notebook.sh
(base) HwHiAiUser@orangepiaipro:~/samples$
可以看到有個啟動腳本:
(base) HwHiAiUser@orangepiaipro:~/samples$ cat start_notebook.sh
. /usr/local/Ascend/ascend-toolkit/set_env.sh
export PYTHONPATH=/usr/local/Ascend/thirdpart/aarch64/acllite:$PYTHONPATHif [ $# -eq 1 ];thenjupyter lab --ip $1 --allow-root --no-browser
elsejupyter lab --ip 127.0.0.1 --allow-root --no-browser
fi(base) HwHiAiUser@orangepiaipro:~/samples$
通過if [ $# -eq 1 ]可以知道,這個腳本可以接收一個IP參數:
然后把這一串URL復制到瀏覽器地址欄把127.0.0.1改成自己的IP即可訪問:
訪問效果:
ShuffleNet v1 是由國產曠視科技團隊在 2018 年提出的一種計算高效的CNN模型,其和 MobileNet、SqueezeNet 等一樣主要是想應用在移動端。
ShuffleNet 的設計目標也是如何利用有限的計算資源來達到最好的模型精度,這需要很好地在速度和精度之間做平衡。目前移動端CNN模型主要設計思路主要是兩個方面:模型結構設計和模型壓縮。ShuffleNet 和MobileNet 一樣屬于前者,都是通過設計更高效和輕量化的網絡結構來實現模型變小和變快,而不是對一個訓練好的大模型做壓縮或者遷移。
ShuffleNet 的核心是采用了兩種操作:pointwise group convolution 和 channel shuffle,這在保持精度的同時大大降低了模型的計算量。ShuffleNet 的核心設計理念是對不同的 channels 進行 shuffle 來解決 group convolution 帶來的弊端。
對這個比較感興趣,看到有這個案例就研究下跑個試試:
進入到相應的目06-Shufflenet目錄:
打開main_shufflenet.ipynb文件,可以打開在線編輯。
跑自己的模型的話,可以使用香橙派提供的模型轉換工具把模型轉換一下:
atc --output_type=FP32 --input_format=NCHW--output="./shufflenet" --soc_version=Ascend310B4 --framework=1 --save_original_model=false --model="./shufflenet.air" --precision_mode=allow_fp32_to_fp16
參數含義:
* --output_type:指定網絡輸出數據類型。* --input_format:輸入Tensor的內存排列方式。* --output:輸出的模型文件路徑。* --soc_version:昇騰AI處理器型號,此處為"Ascend310B4"。* --framework:原始框架類型, 0: Caffe, 1: MindSpore, 3: TensorFlow, 5: ONNX。* --save_original_model:轉換后是否保留原始模型文件。* --model:原始模型文件路徑。* --precision_mode:選擇算子精度模式。
官方的案例中使用python寫了4部分的代碼:
運行后就可以得到該模型跑后的結果:
從提供的日志中可以看到,整個流程涉及初始化、資源釋放和模型加載階段的日志記錄。以下是各個階段的分析:
初始化資源階段 (init resource stage)
- Init resource success: 表示初始化資源階段成功完成。
- Init model resource start…: 開始初始化模型資源。
初始化模型資源階段 (Init model resource start…)
- [AclLiteModel] create model output dataset:
- malloc output 0, size 40: 為模型輸出分配了大小為40的內存。
- Create model output dataset success: 成功創建了模型輸出數據集。
- Init model resource success: 模型資源初始化成功。
釋放資源階段 (acl resource release all resource)
- AclLiteModel release source success: 釋放模型資源成功。
- acl resource release stream: 釋放ACL流資源。
- acl resource release context: 釋放ACL上下文資源。
- Reset acl device 0: 重置ACL設備0。
- Release acl resource success: 成功釋放ACL資源。
該算法邏輯梳理:
1. 初始化資源:
- 成功完成基礎資源的初始化。
2. 初始化模型資源:
- 成功開始并完成模型資源的初始化。
- 為模型輸出分配內存并成功創建輸出數據集。
3. 釋放資源:
- 成功釋放了所有模型相關資源、ACL流資源和ACL上下文資源。
- 重置了設備并確認所有ACL資源釋放成功。
這些日志信息表明整個流程從初始化到釋放資源均順利完成,沒有出現錯誤或警告。
四、總結
整個過程分為三個主要階段:初始化資源、初始化模型資源和釋放資源。每個階段的日志顯示了操作的開始和結束,所有操作均成功完成。
香橙派Aipro提供的案例完美的執行成功了,學習起來很適合企業開發者用戶。往外繼續延伸,如果單純的使用香橙派Aipro做模型的測試也是很可以的,可惜了我這邊內存不太夠,沒辦法做太多太消耗內存的東西。總之就是學習起來毫不費勁,官方文檔一應俱全。
跑這個模型時挺快的,只是不知道跑上多路流然后實時檢測的情況如何,還有待驗證!在邊緣計算設備中性能還是足夠的。