亚洲mv大片欧洲mv大片入口,国产粉嫩无码一区二区三区,国内精品自产拍在线观看91,久久久亚洲欧洲日产国码二区,中文字幕人妻久久一区二区三区

常州機器視覺培訓

常州上位機軟件開發(fā)

常州工業(yè)機器人編程設計培訓

常州PLC培訓

常州PLC

常州PLC編程培訓

常州電工培訓

常州和訊plc培訓中心歡迎您!
當前位置:網站首頁 > 新聞中心 新聞中心
基于 PyTorch 和 YOLO 的實時目標檢測-常州機器視覺培訓,常州工業(yè)機器人培訓
日期:2023-12-27 14:47:54人氣:  標簽:常州機器視覺培訓 常州工業(yè)機器人培訓

 

計算機能理解它們所看到的嗎?他們能區(qū)分狗和貓,男人和女人,汽車和自行車嗎?


目標檢測和識別是當今計算機視覺研究的主要領域之一。研究人員正在尋找新的方法使計算機理解它們所看到的東西。新的最先進的模型正在逐步完善,這些模型大幅超過了以前的模型。但是,計算機實際上還遠遠沒有看到它們所看到的東西。


在這篇文章中,我將詳細闡述 YOLO [ You Only Look Once ] —— 一項2016年的研究工作,創(chuàng)造了目標檢測實時新高。本文簡要描述并實現了 YOLO 模型,幫助您進入計算機視覺和計算機視覺目標檢測領域。


YOLO 簡介


YOLO 將目標檢測重構為一個單一的回歸問題,直接從圖像像素到 bounding box 坐標和類別概率。YOLO 使用單一卷積層同時預測多個 bounding box 及其類別概率。因此,YOLO 的一個主要優(yōu)點就是我們可以用它來實現以幀為單位的速度檢測。即使在這樣的速度下,YOLO 仍然能夠達到其他實時系統(tǒng)的平均精度(mAP)的兩倍以上!


平均平均精度是每個類的平均精度的平均值。換句話說,平均精度是所有類的平均精度。

1.png

平均精度方程


檢測

YOLO 是一個統(tǒng)一的目標檢測過程 —— 統(tǒng)一?YOLO 將幾個涉及目標檢測的任務統(tǒng)一到一個神經網絡中。網絡在進行 bounding box 預測時會考慮到整個圖像。因此,它能夠在同一時間預測所有 bounding box 及其類別。


首先,圖像被分割成一個 S x S 的網格。如果網格的中心位于網格單元格中,則網格單元格應該能夠檢測到對象。那么,我們所說的檢測是什么意思呢?更準確地說,網格單元預測 B 個 bounding box,并為每個 box 預測其對應的分數,這個分數告訴我們模型對該 box 中包含物體有多高的置信度,以及這個 box 在覆蓋物體方面有多精確。因此,這個方框給出了5個預測ー x,y,w,h 和置信度評分。因此,每個網格給了我們 B 個預測。


除了 bounding box 上的預測外,網格單元還給出了 C 個條件類的概率。這些基本上給出了類的概率,假設網格單元包含一個對象。換句話說,假設一個對象存在,條件類概率給出了這個對象可能屬于哪個類的概率。每個網格單元只能預測一組類別概率 —— 與 bounding box 的數目無關。

2.png

概述該模型的作用


網絡

該模型的靈感來自于圖像分類的 GoogleNet 模型。它有24個卷積層和2個全連接的層。與 GoogLeNet 使用的初始模塊不同,它使用1 × 1縮減層和3 × 3卷積層。

3.png

模型架構概述


損失和激活函數


最后一層使用線性激活函數,而其他所有層使用 Leaky-ReLU 激活函數。Leaky-ReLU 激活可以表示為:

4.png

損失函數是簡單和平方誤差,表示為:

5.png

平方和誤差


然而,如果我們這樣定義損失函數,就會把分類誤差和局部化誤差混為一談,從模型的角度來看,兩者都非常重要。


為了防止這種情況發(fā)生,bounding box 坐標預測的損失會增加,不包含對象的 box 的預測的損失會減少。利用兩個參數 λcoord 和 λnoobj 來實現這一結果:


λcoord 設為5,λnoobj 設為0.5(關于這兩個超參數在損失函數方程中的詳細說明)


SSE 還引入了大小 bounding box 加權誤差相等的問題。為了使這個問題形象化,請看下面的圖片:

6.png

狗和碗的圖片(僅供說明)ーー谷歌圖片


在這里我們可以看到,狗和碗已經被標注為兩個對象。狗的框的尺寸比較大,碗的框的尺寸比較小,F在,如果狗和碗的邊界框減少了同樣的方形像素,那么碗的標注會更糟糕。為什么?因為 bounding box 的精度在移位和大小方面應該與該 bounding box 的大小相比,而不是圖像的大小。


現在,來到我們的損失函數,我們可以看到,損失函數沒有給任何具體的 bounding box 的大小。它沒有考慮到這一點。為了克服這一障礙,網絡不預測 bounding box 的高度和寬度,而是預測 bounding box 的平方根。這有助于將差異保持在最低限度。


綜合考慮這些因素,可以將多部分損失函數寫成:

7.png

網絡的總損失函數


現在我們已經完成了 YOLO/目標檢測模型的基礎,讓我們深入到代碼中去吧!


構建模型


YOLO 網絡簡單易于構建。問題在于 bounding box。繪制邊界框和保存圖像、標注置信度得分和類別以及配置整個訓練代碼將使本文不必要地冗余。因此,我將實現該模型。


import torch

from torch import  nn


#o = [i + 2*p - k - (k-1)*(d-1)]/s + 1--formula to calculate padding



class Net(nn.Module):


    #YOLO model

    '''

    Input size of the model is 

    448x448x3

    In tensor notation, expressed as [batchsize,3,448,448]

    output--

    [batchsize,30,7,7]

    '''


    def __init__(self):

        super(Net,self).__init__()

        


        self.t1=nn.Sequential(

            nn.Conv2d(in_channels=3,out_channels=64,kernel_size=(7,7),stride=2,padding=(2,2)),

            nn.MaxPool2d(kernel_size=(2,2),stride=2),

        )

        

        self.t2=nn.Sequential(

            nn.Conv2d(in_channels=64,out_channels=192,kernel_size=(3,3),padding=(1,1)),

            nn.MaxPool2d(kernel_size=(2,2),stride=2),

        )

        self.t3=nn.Sequential(

            nn.Conv2d(in_channels=192,out_channels=128,kernel_size=(1,1)),

            nn.Conv2d(in_channels=128,out_channels=256,kernel_size=(3,3),padding=(1,1)),

            nn.Conv2d(in_channels=256,out_channels=256,kernel_size=(1,1)),

            nn.Conv2d(in_channels=256,out_channels=512,kernel_size=(3,3),padding=(1,1)),

            nn.MaxPool2d(kernel_size=(2,2),stride=2),

        )


        self.t4=nn.Sequential(

            nn.Conv2d(in_channels=512,out_channels=256,kernel_size=(1,1)),

            nn.Conv2d(in_channels=256,out_channels=512,kernel_size=(3,3),padding=(1,1)),

            nn.Conv2d(in_channels=512,out_channels=256,kernel_size=(1,1)),

            nn.Conv2d(in_channels=256,out_channels=512,kernel_size=(3,3),padding=(1,1)),

            nn.Conv2d(in_channels=512,out_channels=256,kernel_size=(1,1)),

            nn.Conv2d(in_channels=256,out_channels=512,kernel_size=(3,3),padding=(1,1)),

            nn.Conv2d(in_channels=512,out_channels=256,kernel_size=(1,1)),

            nn.Conv2d(in_channels=256,out_channels=512,kernel_size=(3,3),padding=(1,1)),

            nn.Conv2d(in_channels=512,out_channels=512,kernel_size=(1,1)),

            nn.Conv2d(in_channels=512,out_channels=1024,kernel_size=(3,3),padding=(1,1)),


            nn.Conv2d(in_channels=1024,out_channels=1024,kernel_size=(3,3),stride=2)

        )


        self.t5=nn.Sequential(

            nn.Conv2d(in_channels=1024,out_channels=512,kernel_size=(1,1)),

            nn.Conv2d(in_channels=512,out_channels=1024,kernel_size=(3,3),padding=(1,1)),

            nn.Conv2d(in_channels=1024,out_channels=512,kernel_size=(1,1)),

            nn.Conv2d(in_channels=512,out_channels=1024,kernel_size=(3,3),padding=(1,1)),


            nn.Conv2d(in_channels=1024,out_channels=1024,kernel_size=(3,3),padding=(1,1)),


            nn.Conv2d(in_channels=1024,out_channels=1024,kernel_size=(3,3),stride=2,padding=(1,1))


        )


        self.t6=nn.Sequential(

            nn.Conv2d(in_channels=1024,out_channels=1024,kernel_size=(3,3),padding=(1,1)),

            nn.Conv2d(in_channels=1024,out_channels=1024,kernel_size=(3,3),padding=(1,1))

        )



        

    def forward(self,x):

        x=self.t1(x)

        x=self.t2(x)

        x=self.t3(x)

        x=self.t4(x)

        x=self.t5(x)

        x=self.t6(x)

        

        x=torch.flatten(x,1)

        x=nn.Linear(x.size()2.png,4096)(x)

        x=nn.Linear(4096,7*7*30)(x)

        x=x.view(-1,30,7,7)


        return x #output of model

YOLO 網絡模塊


本文網址:
下一篇:沒有資料

相關信息:
版權所有 CopyRight 2006-2017 江蘇和訊自動化設備有限公司 常州自動化培訓中心 電話:0519-85602926 地址:常州市新北區(qū)府琛商務廣場2號樓1409室
蘇ICP備14016686號-2 技術支持:常州山水網絡
本站關鍵詞:常州PLC培訓 常州PLC編程培訓 常州PLC編程 常州PLC培訓班 網站地圖 網站標簽
在線與我們取得聯系
亚洲mv大片欧洲mv大片入口,国产粉嫩无码一区二区三区,国内精品自产拍在线观看91,久久久亚洲欧洲日产国码二区,中文字幕人妻久久一区二区三区