色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

地平線旭日X3派試用體驗 | 運行輕量級人臉檢測模型

地瓜機器人 ? 2022-12-13 09:56 ? 次閱讀

一、下載代碼

Linzaer的代碼倉中,提供了PyTorch和ONNX格式的預訓練模型,同時還提供了常用框架的PythonC++推理代碼實現,以及測試圖片、腳本和說明文檔,直接使用即可:

# 當然,首先需要聯網 # 如果沒有git先安裝一下: # sudo apt install git # 下載大佬的代碼倉: git clone https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB.git

下載完成后,可以通過 ls -al 命令查頂層看有哪些文件和目錄(當然,GitHub網頁上也能看):

1.png

預訓練的模型位于 models 子目錄,使用 find models/ -type f 命令,可以查看有哪些文件:

2.png

二、安裝依賴

地平線發布的旭日X3派系統鏡像已經自帶了python3pip3命令,不用再安裝了。樹莓派上,如果沒有python3和pip3命令,需要先安裝:

sudo apt install python3 python3-pip

2.1 更新pip源

由于pip install 默認會從pypi.org(國外主機)下載軟件包,國內網絡環境一般下載速度較慢。因此,建議修改pip源配置:

pip3 config set global.index-url http://mirrors.aliyun.com/pypi/simple/ pip3 config set global.trusted-host mirrors.aliyun.com pip3 config set global.timeout 120

2.2 按裝pip包

大佬的代碼倉中提供了requirements.txt,里面記錄執行倉中python代碼所需的Python軟件包。使用pip命令安裝即可:

pip3 install -r requirements.txt

稍等一段時間,下載完成,如下圖:

3.png

可以看到下載鏈接已經變成 aliyun 的了。

三、運行模型

代碼倉頂層的 detect_imgs.py 和 detect_imgs_onnx.py 兩個腳本文件,可以直接使用 models 下的預訓練模型進行推理。

其中,detect_imgs.py 腳本的內容如下:

""" This code is used to batch detect images in a folder. """ import argparse import os import sys import cv2 from vision.ssd.config.fd_config import define_img_size parser = argparse.ArgumentParser( description='detect_imgs') parser.add_argument('--net_type', default="RFB", type=str, help='The network architecture ,optional: RFB (higher precision) or slim (faster)') parser.add_argument('--input_size', default=640, type=int, help='define network input size,default optional value 128/160/320/480/640/1280') parser.add_argument('--threshold', default=0.6, type=float, help='score threshold') parser.add_argument('--candidate_size', default=1500, type=int, help='nms candidate size') parser.add_argument('--path', default="imgs", type=str, help='imgs dir') parser.add_argument('--test_device', default="cuda:0", type=str, help='cuda:0 or cpu') args = parser.parse_args() define_img_size(args.input_size) # must put define_img_size() before 'import create_mb_tiny_fd, create_mb_tiny_fd_predictor' from vision.ssd.mb_tiny_fd import create_mb_tiny_fd, create_mb_tiny_fd_predictor from vision.ssd.mb_tiny_RFB_fd import create_Mb_Tiny_RFB_fd, create_Mb_Tiny_RFB_fd_predictor result_path = "./detect_imgs_results" label_path = "./models/voc-model-labels.txt" test_device = args.test_device class_names = [name.strip() for name in open(label_path).readlines()] if args.net_type == 'slim': model_path = "models/pretrained/version-slim-320.pth" # model_path = "models/pretrained/version-slim-640.pth" net = create_mb_tiny_fd(len(class_names), is_test=True, device=test_device) predictor = create_mb_tiny_fd_predictor(net, candidate_size=args.candidate_size, device=test_device) elif args.net_type == 'RFB': model_path = "models/pretrained/version-RFB-320.pth" # model_path = "models/pretrained/version-RFB-640.pth" net = create_Mb_Tiny_RFB_fd(len(class_names), is_test=True, device=test_device) predictor = create_Mb_Tiny_RFB_fd_predictor(net, candidate_size=args.candidate_size, device=test_device) else: print("The net type is wrong!") sys.exit(1) net.load(model_path) if not os.path.exists(result_path): os.makedirs(result_path) listdir = os.listdir(args.path) sum = 0 for file_path in listdir: img_path = os.path.join(args.path, file_path) orig_image = cv2.imread(img_path) image = cv2.cvtColor(orig_image, cv2.COLOR_BGR2RGB) boxes, labels, probs = predictor.predict(image, args.candidate_size / 2, args.threshold) sum += boxes.size(0) for i in range(boxes.size(0)): box = boxes[i, :] cv2.rectangle(orig_image, (box[0], box[1]), (box[2], box[3]), (0, 0, 255), 2) # label = f"""{voc_dataset.class_names[labels[i]]}: {probs[i]:.2f}""" label = f"{probs[i]:.2f}" # cv2.putText(orig_image, label, (box[0], box[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText(orig_image, str(boxes.size(0)), (30, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.imwrite(os.path.join(result_path, file_path), orig_image) print(f"Found {len(probs)} faces. The output image is {result_path}") print(sum)

可以看到,該腳本中:

  • 使用 --path 選項執行輸入圖片所在目錄,默認為 imgs;
  • 將后處理后的輸出圖片保存到detect_imgs_results目錄;
  • 默認使用models/pretrained/version-RFB-320.pth 模型。

3.1 跑torch模型

好了,準備直接跑 detect_imgs.py :

4.png

失敗了,說PyTorch不是使能CUDA編譯的。

從代碼中,我們看到可以通過 test_device 選項指定設備,默認是 cuda:0 。

我們手動指定 test_device 為 CPU,繼續嘗試運行:

5.png

又失敗了,這次是OpenCV報錯,說是 cv2.rectangle 的參數類型不對。

將box坐標轉為int,具體修改:

diff --git a/detect_imgs.py b/detect_imgs.py index 570f6a4..73b7d38 100644 --- a/detect_imgs.py +++ b/detect_imgs.py @@ -62,7 +62,9 @@ for file_path in listdir: sum += boxes.size(0) for i in range(boxes.size(0)): box = boxes[i, :] - cv2.rectangle(orig_image, (box[0], box[1]), (box[2], box[3]), (0, 0, 255), 2) + x1, y1 = int(box[0]), int(box[1]) + x2, y2 = int(box[2]), int(box[3]) + cv2.rectangle(orig_image, (x1, y1), (x2, y2), (0, 0, 255), 2) # label = f"""{voc_dataset.class_names[labels[i]]}: {probs[i]:.2f}""" label = f"{probs[i]:.2f}" # cv2.putText(orig_image, label, (box[0], box[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)

再次執行:

6.png

已經可以正常識別到人臉了。

3.2 跑onnx模型

類似的,嘗試運行 detect_imgs_onnx.py 腳本,使用onnx模型進行推理:

7.png

這里也報錯了。

這個報錯,我們不需要去解決它,只需要將腳本中多余的代碼刪除即可,修改內容為:

diff --git a/detect_imgs_onnx.py b/detect_imgs_onnx.py index 2594085..9644449 100644 --- a/detect_imgs_onnx.py +++ b/detect_imgs_onnx.py @@ -8,7 +8,6 @@ import cv2 import numpy as np import onnx import vision.utils.box_utils_numpy as box_utils -from caffe2.python.onnx import backend # onnx runtime import onnxruntime as ort @@ -48,11 +47,6 @@ label_path = "models/voc-model-labels.txt" onnx_path = "models/onnx/version-RFB-320.onnx" class_names = [name.strip() for name in open(label_path).readlines()] -predictor = onnx.load(onnx_path) -onnx.checker.check_model(predictor) -onnx.helper.printable_graph(predictor.graph) -predictor = backend.prepare(predictor, device="CPU") # default CPU - ort_session = ort.InferenceSession(onnx_path) input_name = ort_session.get_inputs()[0].name result_path = "./detect_imgs_results_onnx"

四、查看結果

由于WiFi天線的問題,連接ssh,速度反應很慢,scp拷貝文件也非常慢,一度卡住。

所以這里使用nginx Web服務器,通過HTTP協議和PC的瀏覽器查看推理輸出的結果圖片。首先安裝 nginx ,使用如下命令:

sudo apt install nginx

安裝成功后,可以通過ps命令查看nginx進程是否正常啟動:

8.png

可以看到 nginx 進程正常啟動了。

查看IP地址:

9.png

將推理輸出的結果圖片拷貝到/var/www/html目錄:

10.png

我的PC此時和開發板連在同一個熱點上,因此,可以通過瀏覽器輸入http://192.168.0.107/9.jpg

onnx模型推理的輸出結果圖片,也可以通過同樣方法查看。

五、結果對比

本節對旭日X3派和樹莓派3B+上運行“輕量級人臉檢測模型”的結果進行對比。

為了方便對比,上述兩個腳本需要重新修改,最終修改為:

diff --git a/detect_imgs.py b/detect_imgs.py index 570f6a4..0886677 100644 --- a/detect_imgs.py +++ b/detect_imgs.py @@ -54,7 +54,7 @@ if not os.path.exists(result_path): os.makedirs(result_path) listdir = os.listdir(args.path) sum = 0 -for file_path in listdir: +for file_path in sorted(listdir): img_path = os.path.join(args.path, file_path) orig_image = cv2.imread(img_path) image = cv2.cvtColor(orig_image, cv2.COLOR_BGR2RGB) @@ -62,11 +62,13 @@ for file_path in listdir: sum += boxes.size(0) for i in range(boxes.size(0)): box = boxes[i, :] - cv2.rectangle(orig_image, (box[0], box[1]), (box[2], box[3]), (0, 0, 255), 2) + x1, y1 = int(box[0]), int(box[1]) + x2, y2 = int(box[2]), int(box[3]) + cv2.rectangle(orig_image, (x1, y1), (x2, y2), (0, 0, 255), 2) # label = f"""{voc_dataset.class_names[labels[i]]}: {probs[i]:.2f}""" label = f"{probs[i]:.2f}" # cv2.putText(orig_image, label, (box[0], box[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.putText(orig_image, str(boxes.size(0)), (30, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) cv2.imwrite(os.path.join(result_path, file_path), orig_image) - print(f"Found {len(probs)} faces. The output image is {result_path}") + print(f"Found {len(probs)} faces. The output image is {result_path}/{file_path}") print(sum) diff --git a/detect_imgs_onnx.py b/detect_imgs_onnx.py index 2594085..19ae9fb 100644 --- a/detect_imgs_onnx.py +++ b/detect_imgs_onnx.py @@ -8,7 +8,6 @@ import cv2 import numpy as np import onnx import vision.utils.box_utils_numpy as box_utils -from caffe2.python.onnx import backend # onnx runtime import onnxruntime as ort @@ -48,11 +47,6 @@ label_path = "models/voc-model-labels.txt" onnx_path = "models/onnx/version-RFB-320.onnx" class_names = [name.strip() for name in open(label_path).readlines()] -predictor = onnx.load(onnx_path) -onnx.checker.check_model(predictor) -onnx.helper.printable_graph(predictor.graph) -predictor = backend.prepare(predictor, device="CPU") # default CPU - ort_session = ort.InferenceSession(onnx_path) input_name = ort_session.get_inputs()[0].name result_path = "./detect_imgs_results_onnx" @@ -64,7 +58,7 @@ if not os.path.exists(result_path): os.makedirs(result_path) listdir = os.listdir(path) sum = 0 -for file_path in listdir: +for file_path in sorted(listdir): img_path = os.path.join(path, file_path) orig_image = cv2.imread(img_path) image = cv2.cvtColor(orig_image, cv2.COLOR_BGR2RGB) @@ -76,10 +70,11 @@ for file_path in listdir: image = np.expand_dims(image, axis=0) image = image.astype(np.float32) # confidences, boxes = predictor.run(image) - time_time = time.time() + start_time = time.time() confidences, boxes = ort_session.run(None, {input_name: image}) - print("cost time:{}".format(time.time() - time_time)) + stop_time = time.time() boxes, labels, probs = predict(orig_image.shape[1], orig_image.shape[0], confidences, boxes, threshold) + print(f"{file_path}, faces: {boxes.shape[0]}, time: {stop_time - start_time:.9f}") for i in range(boxes.shape[0]): box = boxes[i, :] label = f"{class_names[labels[i]]}: {probs[i]:.2f}"

添加了文件名排序、文件名輸出、推理時間輸出,方便在兩個平臺上運行是進行對比。

使用如下命令,進行 torch模型數據統計:

# 記錄運行輸出 python3 detect_imgs.py --test_device cpu | tee torch.txt # 提取人臉數 grep faces torch.txt | cut -d' ' -f2 # 提取消耗時間 grep time: torch.txt | awk '{print $3}'

經上述命令統計,torch模型在旭日X3派和樹莓派3B+的運行結果如下:

12.png

可以看到,旭日X3派上torch模型平均耗時要比樹莓派短58%,而這僅僅只是CPU計算性能差異。

類似的,兩個開發板運行onnx模型的結果如下:

13.png

可以看到,旭日X3派上onnx模型平均耗時要比樹莓派短53%,而這僅僅只是CPU計算性能差異。

原作者:xusiwei1236
原鏈接:詳見地平線開發者社區

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5085

    文章

    19138

    瀏覽量

    305705
  • 人工智能
    +關注

    關注

    1791

    文章

    47350

    瀏覽量

    238754
收藏 人收藏

    評論

    相關推薦

    光庭信息獲地平線堅實后盾獎

    后盾獎”,高度肯定了雙方過往在智駕領域的合作成效。 過去兩年內,光庭信息基于地平線 J3、J5 及 J6 等多個平臺,打造了“泊車與駕駛一體化解決方案”,提供高性能的自動駕駛和泊車功能,可以輕松實現跨平臺遷移和新應用開發,有效幫助
    的頭像 發表于 12-28 15:07 ?197次閱讀

    地平線榮獲嵐圖汽車“優秀合作伙伴獎”

    近日,以“領航鏈動,共創共贏”為主題的2024年度嵐圖合作伙伴大會在武漢召開。在此次大會上,地平線憑借在智駕領域的突出貢獻,榮獲嵐圖汽車頒發的“優秀合作伙伴”獎。該獎項不僅是嵐圖汽車對地平線智駕技術實力和工程能力的充分認可,更是對地平線
    的頭像 發表于 12-06 15:56 ?187次閱讀

    地平線榮獲比亞迪“最佳合作伙伴獎”

    近日,比亞迪舉辦2024年比亞迪新能源汽車核心供應商大會。在此次大會上,地平線榮獲“最佳合作伙伴獎”,成為唯一獲得該殊榮的智駕方案供應商。該獎項高度肯定了地平線在智駕技術和量產能力方面的突出貢獻。地平線創始人兼CEO余凱受邀出席
    的頭像 發表于 11-06 14:15 ?397次閱讀

    智駕科技企業地平線登陸港交所

    近日,智駕科技企業地平線地平線機器人-W,股票代碼:9660.HK)在香港交易所主板成功掛牌上市,募資總額高達54.07億港元,成為港股今年最大的科技IPO。
    的頭像 發表于 10-28 16:37 ?280次閱讀

    ETAS支持地平線征程6 AUTOSAR版本發布

    地平線于2024年北京車展期間推出了覆蓋自動駕駛全場景的征程6產品。征程6是地平線新一代家族系列產品,能夠覆蓋從主動安全ADAS到城區全場景NOA的智能駕駛需求。
    的頭像 發表于 10-15 17:34 ?740次閱讀

    智駕科技企業地平線通過港交所聆訊 IPO進入倒計時

    10月8日,中國智能駕駛軟硬一體化方案地平線迎來IPO的最新進展:港交所網站掛出地平線PHIP版招股書,這意味著智駕科技企業地平線(Horizon Robotics)正式通過港交所聆訊,即將踏入港股市場。根據網站掛出的信息顯示,
    的頭像 發表于 10-09 10:05 ?4176次閱讀
    智駕科技企業<b class='flag-5'>地平線</b>通過港交所聆訊 IPO進入倒計時

    地平線Journey 3的電源設計

    電子發燒友網站提供《地平線Journey 3的電源設計.pdf》資料免費下載
    發表于 09-04 10:48 ?0次下載
    <b class='flag-5'>地平線</b>Journey <b class='flag-5'>3</b>的電源設計

    地平線技術開放日:余凱勾勒智能駕駛新藍圖

    在8月28日的地平線技術開放日上,公司創始人兼CEO余凱以高調的姿態,詳細闡述了地平線在智能駕駛領域的雄心壯志與商業邏輯。他不僅重申了地平線的定位,還明確了SuperDrive智能駕駛解決方案的標桿地位,并強調了軟件在芯片公司生
    的頭像 發表于 08-30 14:33 ?1158次閱讀

    地平線港股IPO獲證監會備案

    自動駕駛領域的明星企業——地平線機器人(Horizon Robotics),近期獲得了中國證監會的批準,將在香港聯合交易所進行首次公開募股(IPO)。此次IPO的順利推進,標志著地平線向資本市場邁出了重要一步。
    的頭像 發表于 08-13 15:37 ?705次閱讀

    智能駕駛企業地平線赴港IPO

    智能駕駛科技領軍企業地平線正式向香港交易所遞交上市申請,此舉立刻引起了市場對智能駕駛板塊的熱烈關注。地平線作為國內自動駕駛芯片及解決方案的佼佼者,其在智能駕駛技術研發和市場地位上的卓越表現一直備受矚目。此次上市計劃的啟動,不僅將推動智能駕駛行業的資本化進程,更將為整個產業
    的頭像 發表于 03-29 16:32 ?785次閱讀

    智能駕駛頭部企業地平線赴港IPO

    地平線向港交所遞交了上市申請,正式啟動港股IPO進程,這一行動引起了市場的廣泛關注。在此次上市過程中,高盛、摩根士丹利以及中信建投共同擔任聯席保薦人,為地平線的上市之路提供了強大的支持。
    的頭像 發表于 03-28 16:45 ?864次閱讀

    地平線提交香港IPO申請

    智能駕駛計算方案提供商“地平線”正式遞交港股上市申請。據其公開文件,地平線在2023年實現了15.5億元的營收,同比顯著增長71.3%,毛利達到10.94億元,毛利率高達70.5%。
    的頭像 發表于 03-27 16:11 ?733次閱讀

    地平線向港交所遞交招股書

    智能駕駛計算方案領軍者地平線,近日正式向港交所遞交了招股書,高盛、摩根士丹利及中信建投為其聯席保薦人。這并非地平線首次試水資本市場,早在2021年,地平線就計劃科創板上市,并一度傳出赴美IPO的消息,但受資本市場環境影響,其上市
    的頭像 發表于 03-27 16:02 ?567次閱讀

    百度智能云推出全新輕量級模型

    在近日舉辦的百度智能云千帆產品發布會上,三款全新的輕量級模型——ERNIE Speed、ERNIE Lite以及ERNIE Tiny,引起了業界的廣泛關注。相較于傳統的千億級別參數大模型,這些
    的頭像 發表于 03-22 10:28 ?678次閱讀

    地平線正式開源Sparse4D算法

    地平線將業內領先的純視覺自動駕駛算法——Sparse4D系列算法開源,推動行業更多開發者共同參與到端到端自動駕駛、稀疏感知等前沿技術方向的探索中。目前,Sparse4D算法已在GitHub平臺上線,開發者可關注地平線GitHub官方賬號“Horizon Robotics”
    的頭像 發表于 01-23 10:18 ?782次閱讀
    主站蜘蛛池模板: 中国二级毛片| 成年人免费观看的视频| 青娱乐极品视觉盛宴国产视频| 人曽交Z00Z0OA片| 污文啊好棒棒啊好了| 中国字字幕在线播放2019| 好想被狂躁A片免费久99| 欧美18精品久久久无码午夜福利| 色综合a在线| 诱人的女邻居9中文观看| 高h 纯肉文| 久久观看视频| 色婷婷五月综合久久中文字幕| jizzjizz3d动漫| 久久高清内射无套| 亚洲中文字幕欧美自拍一区 | 无码中文字幕av免费放| 国产 亚洲 中文字幕 久久网| 免费看成人毛片| 亚洲中文字幕无码一久久区| 娇小XXXXX第一次出血| 神马午夜不卡片| 97蜜桃123| 久久精品国产亚洲精品2020| 伊人久久国产| 国产精品人妻无码久久久蜜桃 | 中文字幕一区二区三区在线不卡| 国产精品人成视频免费999| 羞羞在线观看| 国产精品日本无码久久一老A| 亚洲福利天堂网福利在线观看| 大学生第一次破苞疼哭了| 麻豆乱码一卡二卡三卡视频| 亚洲色 图| 国产欧美无码亚洲毛片| 日韩美女爱爱| 补课H湿 1V1 PLAY| 无修肉动漫在线观看影片| 超碰最新网站| 小学生偷拍妈妈视频遭性教育 | 做暧暧免费30秒体验|