YOLO-v2-tiny 20種物體檢測模型

一、簡介

YOLO-v2-tiny是基于YOLO(You Only Look Once)實時目標檢測算法的輕量級版本,專門為嵌入式設備和資源受限環境優化。本模型能夠檢測20種常見物體類別,在保持較高檢測精度的同時大幅減少了計算量和模型大小。
20種物體檢測模型, 使用 YOLO v2 tiny 網絡, 具體的20種類別看詳情介紹
在這里插入圖片描述

20 個物體類別:

aeroplane, bicycle, bird, boat, bottle, bus, car, cat, chair, cow,
diningtable, dog, horse, motorbike, person, pottedplant, sheep, sofa, train, tvmonitor

二、使用方法

下載模型后得到三個文件: .py 示例腳本, .smodel模型文件,labels.txt文件

在這里插入圖片描述
只需要py 示例腳本, .smodel模型文件,將模型下載到 0x800000(因為示例代碼中讀取模型位置為 0x800000)
在這里插入圖片描述
或者放到SD卡里
在這里插入圖片描述
開機運行效果

MaixPy運行基于tiny-yolov2的20分類

三、技術參數

  • 輸入分辨率:224×224或320×240(QVGA)

  • 錨點(anchors)參數:(1.08,1.19,3.42,4.41,6.63,11.38,9.42,5.11,16.62,10.52)

  • 置信度閾值:0.5

  • 非極大值抑制(NMS)閾值:0.3

  1. 錨框(Anchor Boxes)在YOLO算法中的作用:
  • 錨框是預定義的一組邊界框模板,用于預測目標物體的位置和尺寸

  • 網絡不是直接預測絕對坐標,而是預測相對于錨框的偏移量

  • 合適的錨框尺寸可以加速訓練并提高檢測精度

  1. 為什么是10個參數?
  • 每個錨框需要2個參數(寬度w和高度h)

  • 示例代碼中使用了5個錨框,因此需要 5錨框 × 2參數 = 10個數值
    對應的錨點參數為:

anchor = (w1, h1, w2, h2, w3, h3, w4, h4, w5, h5)
  1. 錨框數量的選擇
  • 5個錨框是YOLOv2/v3常用的配置(尤其是對于人臉檢測這類相對單一的目標)

  • 錨框的尺寸是通過K-means聚類在訓練數據集上統計得到的:

    • 對訓練集中所有真實框(Ground Truth)的寬高進行聚類

    • 選擇5個最具代表性的寬高組合作為錨框

  1. 代碼中的具體錨點參數
anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)

解析:

  • 實際表示5個錨框的寬高:
[(1.889,2.5245), (2.9465,3.94056), (3.99987,5.3658), (5.155437,6.92275), (6.718375,9.01025)]
  • 這些值是通過在人臉數據集上聚類得到的,適合檢測不同比例的人臉。
  1. 為什么需要多個錨框?
  • 覆蓋不同比例的人臉:

    • 近距離人臉(大錨框)

    • 遠距離人臉(小錨框)

  • 適應不同長寬比:

    • 正臉(接近正方形)

    • 側臉(可能更寬或更窄)

  1. 理解YOLO中的NMS閾值調整

非極大值抑制(Non-Maximum Suppression, NMS)是目標檢測中用于消除冗余檢測框的關鍵后處理步驟。NMS閾值的調整直接影響模型的檢測結果,下面我將詳細解釋NMS閾值(0.3-0.5)的含義和調整策略。

  • 6.1. NMS基本原理
    NMS的工作流程:

    • 對所有檢測框按置信度(confidence score)排序

    • 選擇置信度最高的框作為保留框

    • 計算其他框與這個保留框的交并比(IoU)

    • 刪除所有IoU大于閾值的框

    • 對剩余的框重復上述過程

  • 6.2. NMS閾值的含義
    NMS閾值(0.3-0.5)指的是IoU的閾值:

    • IoU(Intersection over Union): 兩個框重疊面積與并集面積的比值

    • NMS閾值就是判斷兩個框是否"過于相似"的標準

  • 6.3. 不同閾值的效果

    • 6.3.1 NMS閾值=0.3(代碼默認值)

      • 效果:更嚴格,只保留不太重疊的框

      • 優點:減少重復檢測,輸出更簡潔

      • 缺點:可能漏掉實際存在的相鄰物體

      • 適用場景:物體間距較大,重疊少的情況

    • 6.3.2 NMS閾值=0.5

      • 效果:更寬松,允許更多重疊框通過

      • 優點:能檢測到靠得很近的物體

      • 缺點:可能產生多個框檢測同一物體

      • 適用場景:密集物體檢測,小物體檢測

四 、模型架構

YOLO-v2-tiny相比完整版YOLOv2做了以下簡化:

  • 更少的卷積層:減少了網絡深度,降低了計算復雜度

  • 更小的特征圖:減少了特征圖尺寸,提升推理速度

  • 優化的錨點設計:使用5個預定義的錨點框(anchor boxes)來預測物體位置

  • 提高檢測精度:降低置信度閾值(如0.3),但會增加誤檢

  • 減少誤檢:提高置信度閾值(如0.7),但可能漏檢

  • 處理重疊框:調整NMS閾值(0.3-0.5之間)

五、完整代碼

import sensor, image, lcd, time
import KPU as kpu
import gc, sysCOLOR_RED =  (255,0,0)
COLOR_GREEN = (0,255,0)
COLOR_BLUE = (0,0,255)
COLOR_WHITE = (255,255,255)def lcd_show_except(e):import uioerr_str = uio.StringIO()sys.print_exception(e, err_str)err_str = err_str.getvalue()img = image.Image(size=(224,224))img.draw_string(0, 10, err_str, scale=1, color=COLOR_RED)lcd.display(img)def main(anchors, labels = None, model_addr="/sd/m.smodel", sensor_window=(224, 224), lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False):sensor.reset()sensor.set_pixformat(sensor.RGB565)sensor.set_framesize(sensor.QVGA)sensor.set_hmirror(sensor_hmirror)# `enable`: 1 表示開啟水平鏡像 0 表示關閉水平鏡像sensor.set_vflip(sensor_vflip)sensor.run(1)lcd.init(type=1)lcd.rotation(lcd_rotation)lcd.clear(lcd.WHITE)if not labels:with open('labels.txt','r') as f:exec(f.read())if not labels:print("no labels.txt")img = image.Image(size=(320, 240))img.draw_string(90, 110, "no labels.txt", color=COLOR_RED, scale=2)lcd.display(img)return 1try:img = image.Image("startup.jpg")lcd.display(img)except Exception:img = image.Image(size=(320, 240))img.draw_string(90, 110, "loading model...", color=COLOR_WHITE, scale=2)lcd.display(img)task = kpu.load(model_addr)kpu.init_yolo2(task, 0.5, 0.3, 5, anchors) ##1、task: 指定任務類型,例如是檢測還是分類。在YOLO中,通常設置為"detection"。#2、threshold: 置信度閾值,用于過濾掉低置信度的檢測結果。閾值范圍是[0,1],值越高,則模型只會輸出置信度更高的預測結果。#3、nms_value: 非最大抑制(Non-Maximum Suppression, NMS)的閾值,用于減少重疊框的數量。NMS閾值同樣在[0,1]范圍內,值越高,則保留的框越少,重疊越小。#4、classes: 類別數量,表示模型需要識別的對象類別數。#5、anchors: 錨點(Anchors)是YOLO中用來預測邊界框的先驗框尺寸。這些尺寸是在訓練數據集上通過k-means聚類得到的。try:while 1:img = sensor.snapshot()t = time.ticks_ms()objects = kpu.run_yolo2(task, img)t = time.ticks_ms() - tif objects:for obj in objects:pos = obj.rect()img.draw_rectangle(pos)img.draw_string(pos[0], pos[1], "%s : %.2f" %(labels[obj.classid()], obj.value()), scale=2, color=COLOR_GREEN)img.draw_string(0, 200, "t:%d ms" %(t), scale=2, color=COLOR_BLUE)lcd.display(img)except Exception as e:raise efinally:kpu.deinit(task)if __name__ == "__main__":try:labels = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']anchors = (1.08, 1.19, 3.42, 4.41, 6.63, 11.38, 9.42, 5.11, 16.62, 10.52)main(anchors = anchors, labels=labels, model_addr="/sd/m.smodel", lcd_rotation=1, sensor_window=(224, 224))except Exception as e:sys.print_exception(e)lcd_show_except(e)finally:gc.collect()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92913.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92913.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92913.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

heterophilic graph和hetergeneous graph區別(附帶homophilic graph 和homoegeneous graph)

Heterophilic Graph(異配圖)連接的節點在屬性上不相似,但是所有節點和邊的類別都是同一種類型,數據集如squirrel / chameleon,它們是 heterogeneous graph(異質圖)而不是Heterophilic Graph(異配…

Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞檢測,命令執行,Getshell

工具介紹 Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞檢測,命令執行,Getshell。JAVAFX可視化編寫,博主第一次用javafx來寫界面,第一次學習嘗試,僅僅只用于學習嘗試如果缺少什么payload,歡迎提交…

GitHub分支保護介紹(Branch Protection)(git分支保護)(通過設置規則和權限來限制對特定分支的操作的功能)

文章目錄**1. 核心功能****a. 防止誤操作****b. 強制代碼審查****c. 狀態檢查(Status Checks)****d. 權限控制****2. 如何設置分支保護?**1. **進入倉庫設置**2. **添加分支保護規則**3. **配置保護規則**4. **保存設置****3. 常見應用場景**…

怎么理解On-Premises

On-Premises 指的是—— 軟件、系統、數據中心等部署并運行在企業自己管理的本地硬件或機房里,而不是放在云端或第三方托管環境中。 你可以把它理解成:“服務器在你自己家里(公司機房),而不是寄放在別人家(…

UserController類講解

用戶管理控制器,實現了用戶CRUD操作的RESTful API: 1. 類結構與核心注解 1.1 控制器聲明 RestController RequestMapping("/api/users") public class UserControllerRestController 深度解析: 組合注解:Controller Re…

【劍指offer】搜索算法

目錄 📁 JZ53 數字在升序數組中出現的次數?編輯 📁 JZ4 二維數組中的查找?編輯 📁 JZ11 旋轉數組的最小數字 📁 JZ38 字符串的排列?編輯 📁 JZ53 數字在升序數組中出現的次數 這就是一道簡單的模板題&#xff0…

ETLCloud批流一體化體現在哪

ETLCloud批流一體化體現在哪 企業對數據處理的實時性、高效性和準確性的要求越來越高。批流一體化作為一種先進的數據處理理念,逐漸被企業所采用。 目前許多國產化ETL工具也裝配了十分強大的批流一體化能力,ETLCoud就是一個很好的代表,它能夠…

Mybatis學習之緩存(九)

這里寫目錄標題一、MyBatis的一級緩存1.1、工作原理1.2、一級緩存失效的四種情況1.3、不同的SqlSession對應不同的一級緩存1.4、同一個SqlSession但是查詢條件不同1.5、同一個SqlSession兩次查詢期間執行了任何一次增刪改操作1.6、同一個SqlSession兩次查詢期間手動清空了&…

windows10裝Ubuntu22.04系統(雙系統)

參考鏈接:Windows和Linux雙系統的保姆級安裝教程,新手小白跟著也能裝_windows安裝linux雙系統-CSDN博客 1 前期準備 1.下載Ubuntu22.04.5 的iso鏡像文件:Download Ubuntu Desktop | Ubuntu 2.準備一個U盤(空,已有文…

Pandas數據處理與分析實戰:Pandas數據清洗與處理入門

數據清洗:Pandas數據處理入門 學習目標 本課程將引導學員了解數據清洗的基本概念,掌握使用Pandas庫處理數據集中的缺失值、重復數據和異常值的方法,確保數據的質量,為后續的數據分析和機器學習任務打下堅實的基礎。 相關知識點 Pa…

Python爬蟲實戰:研究ScrapyRT框架,構建圖書商城數據采集系統

1. 引言 1.1 研究背景 在當今數字化時代,互聯網已成為全球最大的信息庫,蘊含著海量的有價值數據,涵蓋商業、教育、科研、醫療等各個領域。根據 IDC(國際數據公司)預測,到 2025 年全球數據圈將增長至 175ZB,其中網絡數據占比超過 60%。這些數據不僅是企業制定商業策略、…

springboot接口請求參數校驗

參數校驗 參數校驗可以防止無效或錯誤的數據進入系統。通過校驗前端輸入的參數,可以確保數據的完整性,避免因為缺少必要的信息而導致程序錯誤或異常。例如,對于密碼字段,可以通過校驗規則要求用戶輸入至少8個字符、包含字母和數字…

Docker部署 Neo4j 及集成 APOC 插件:安裝與配置完整指南(docker-compose)

Docker部署 Neo4j 及集成 APOC 插件:分步驟指南 摘要 :本文將分兩部分詳細介紹相關內容。第一部分講解如何使用 Docker Compose 部署 Neo4j 圖數據庫,提供完整配置文件及常見問題解決方案;第二部分在前者基礎上,介紹 A…

TLSv1.2協議與TCP/UDP協議傳輸數據內容差異

一、Wireshark中常見的TLSv1.2在用Wireshark抓包時,除了看到課堂上教過的經典的TCP/UDP協議,還有一個協議經常出現——TLSv1.2。并且這個協議的Info解釋是Application data,其實看到這個解釋,我大概猜出來了TLSv1.2是用來給用戶數…

51c自動駕駛~合集14

自己的原文哦~ https://blog.51cto.com/whaosoft/11707335 #Text2LiDAR 文本引導的無條件點云生成新SOTA 論文題目:《Text2LiDAR: Text-guided LiDAR Point Cloud Generation via Equirectangular Transformer》 論文地址:https://arxiv.o…

k8s基本概念

k8s 的基本概念 Kubernetes是一個可以移植、可擴展的開源平臺,使用 聲明式的配置 并依據配置信息自動地執行容器化應用程序的管理。在所有的容器編排工具中(類似的還有 docker swarm / mesos等),Kubernetes的生態系統更大、增長更…

Easysearch 數據遷移之數據比對

上一篇我們通過 INFINI Gateway 進行了索引數據遷移,對索引遷移結果進行了初步且直觀的校驗--對比索引的文檔數是否一致。今天介紹個實實在在的數據比對方法,通過網關對比索引文檔的內容在兩個集群是否一致。話不多說,就拿上次遷移的兩個索引…

Codeforces Round 1042 (Div. 3)

ABCD 略E注意到每個操作最多執行一次,ifa[i]!b[i],要么a[i]^a[i1]要么a[i]^b[i1]G設消除1~i的數的操作次數為f[i],可以推出f[i]2*f[i-1]1,那么消除1~i的數的分數乘的數為g[i],g[i]g[i-1]*g[i-1]*i s雖然很大&#xff0…

AJAX:讓你的網頁“靜悄悄”變聰明,體驗絲滑升級

大家好,今天想聊聊一個讓網頁“活”起來的小秘密——AJAX。你可能遇到過這種情況:點個按鈕,頁面就刷新,等得心急火燎。但用了AJAX的網站,比如購物車更新或搜索建議,數據嗖嗖就來了,整個頁面卻紋…

【iOS】Block基礎知識和底層探索

文章目錄前言Block的聲明和創建問題引入Block的底層結構Block的執行流程Block的創建與存儲Block的傳遞與調用Block的捕獲機制捕獲局部變量捕獲全局變量小結Block的類型__block修飾符__block變量的包裝結構體block的實例結構體block的執行邏輯Block循環引用造成的原因解決方法小…