青島旅游網(wǎng)站建設(shè)怎么制作一個(gè)網(wǎng)站5個(gè)網(wǎng)頁
人員著裝識(shí)別系統(tǒng)通過yolo網(wǎng)絡(luò)模型識(shí)別算法,人員著裝識(shí)別系統(tǒng)算法通過現(xiàn)場安裝的攝像頭識(shí)別工廠人員及工地人員是否按要求穿戴著裝,實(shí)時(shí)監(jiān)測人員的著裝情況,并進(jìn)行相關(guān)預(yù)警。目標(biāo)檢測架構(gòu)分為兩種,一種是two-stage,一種是one-stage,區(qū)別就在于 two-stage 有region proposal過程,類似于一種海選過程,網(wǎng)絡(luò)會(huì)根據(jù)候選區(qū)域生成位置和類別,而one-stage直接從圖片生成位置和類別。今天提到的 YOLO就是一種 one-stage方法。YOLO是You Only Look Once的縮寫,意思是神經(jīng)網(wǎng)絡(luò)只需要看一次圖片,就能輸出結(jié)果。
首先先介紹一下滑動(dòng)窗口技術(shù),這對我們理解Yolo算法是有幫助的。采用滑動(dòng)窗口的目標(biāo)檢測算法思路非常簡單,它將檢測問題轉(zhuǎn)化為了圖像分類問題。其基本原理就是采用不同大小和比例(寬高比)的窗口在整張圖片上以一定的步長進(jìn)行滑動(dòng),然后對這些窗口對應(yīng)的區(qū)域做圖像分類,這樣就可以實(shí)現(xiàn)對整張圖片的檢測了,如下圖3所示,如DPM就是采用這種思路。但是這個(gè)方法有致命的缺點(diǎn),就是你并不知道要檢測的目標(biāo)大小是什么規(guī)模,所以你要設(shè)置不同大小和比例的窗口去滑動(dòng),而且還要選取合適的步長。但是這樣會(huì)產(chǎn)生很多的子區(qū)域,并且都要經(jīng)過分類器去做預(yù)測,這需要很大的計(jì)算量,所以你的分類器不能太復(fù)雜,因?yàn)橐WC速度。解決思路之一就是減少要分類的子區(qū)域,這就是R-CNN的一個(gè)改進(jìn)策略,其采用了selective search方法來找到最有可能包含目標(biāo)的子區(qū)域(Region Proposal),其實(shí)可以看成采用啟發(fā)式方法過濾掉很多子區(qū)域,這會(huì)提升效率。
在進(jìn)行模型訓(xùn)練時(shí),我們需要構(gòu)造訓(xùn)練樣本和設(shè)計(jì)損失函數(shù),才能利用梯度下降對網(wǎng)絡(luò)進(jìn)行訓(xùn)練。將一幅圖片輸入到y(tǒng)olo模型中,對應(yīng)的輸出是一個(gè)7x7x30張量,構(gòu)建標(biāo)簽label時(shí)對于原圖像中的每一個(gè)網(wǎng)格grid都需要構(gòu)建一個(gè)30維的向量。Yolo先使用ImageNet數(shù)據(jù)集對前20層卷積網(wǎng)絡(luò)進(jìn)行預(yù)訓(xùn)練,然后使用完整的網(wǎng)絡(luò),在PASCAL VOC數(shù)據(jù)集上進(jìn)行對象識(shí)別和定位的訓(xùn)練。Yolo的最后一層采用線性激活函數(shù),其它層都是Leaky ReLU。訓(xùn)練中采用了drop out和數(shù)據(jù)增強(qiáng)(data augmentation)來防止過擬合。
?
?
Adapter接口定義了如下方法:
public abstract void registerDataSetObserver (DataSetObserver observer)
Adapter表示一個(gè)數(shù)據(jù)源,這個(gè)數(shù)據(jù)源是有可能發(fā)生變化的,比如增加了數(shù)據(jù)、刪除了數(shù)據(jù)、修改了數(shù)據(jù),當(dāng)數(shù)據(jù)發(fā)生變化的時(shí)候,它要通知相應(yīng)的AdapterView做出相應(yīng)的改變。為了實(shí)現(xiàn)這個(gè)功能,Adapter使用了觀察者模式,Adapter本身相當(dāng)于被觀察的對象,AdapterView相當(dāng)于觀察者,通過調(diào)用registerDataSetObserver方法,給Adapter注冊觀察者。
public abstract void unregisterDataSetObserver (DataSetObserver observer)
通過調(diào)用unregisterDataSetObserver方法,反注冊觀察者。
public abstract int getCount () 返回Adapter中數(shù)據(jù)的數(shù)量。
public abstract Object getItem (int position)
Adapter中的數(shù)據(jù)類似于數(shù)組,里面每一項(xiàng)就是對應(yīng)一條數(shù)據(jù),每條數(shù)據(jù)都有一個(gè)索引位置,即position,根據(jù)position可以獲取Adapter中對應(yīng)的數(shù)據(jù)項(xiàng)。
public abstract long getItemId (int position)
獲取指定position數(shù)據(jù)項(xiàng)的id,通常情況下會(huì)將position作為id。在Adapter中,相對來說,position使用比id使用頻率更高。
public abstract boolean hasStableIds ()
hasStableIds表示當(dāng)數(shù)據(jù)源發(fā)生了變化的時(shí)候,原有數(shù)據(jù)項(xiàng)的id會(huì)不會(huì)發(fā)生變化,如果返回true表示Id不變,返回false表示可能會(huì)變化。Android所提供的Adapter的子類(包括直接子類和間接子類)的hasStableIds方法都返回false。
public abstract View getView (int position, View convertView, ViewGroup parent)
getView是Adapter中一個(gè)很重要的方法,該方法會(huì)根據(jù)數(shù)據(jù)項(xiàng)的索引為AdapterView創(chuàng)建對應(yīng)的UI項(xiàng)。