河道水位自動監測預警系統基于yolov5網絡模型AI視頻智能水尺讀數技術,河道水位自動監測預警系統通過在河道周邊布設監控攝像頭,實時監測水位的變化,一旦水位超過預設閾值,將自動發出預警信號,并提示相關人員采取相應的措施。一般為了縮短網絡的訓練時間,并達到更好的精度,我們一般加載預訓練權重進行網絡的訓練。而yolov5的5.0版本給我們提供了幾個預訓練權重,我們可以對應我們不同的需求選擇不同的版本的預訓練權重。可以預料的到,預訓練權重越大,訓練出來的精度就會相對來說越高,但是其檢測的速度就會越慢。
當我們談起計算機視覺時,首先想到的就是圖像分類,沒錯,圖像分類是計算機視覺最基本的任務之一,但是在圖像分類的基礎上,還有更復雜和有意思的任務,如目標檢測,物體定位,圖像分割等,見圖1所示。其中目標檢測是一件比較實際的且具有挑戰性的計算機視覺任務,其可以看成圖像分類與定位的結合,給定一張圖片,目標檢測系統要能夠識別出圖片的目標并給出其位置,由于圖片中目標數是不定的,且要給出目標的精確位置,目標檢測相比分類任務更復雜。目標檢測的一個實際應用場景就是無人駕駛,如果能夠在無人車上裝載一個有效的目標檢測系統,那么無人車將和人一樣有了眼睛,可以快速地檢測出前面的行人與車輛,從而作出實時決策。
Yolo算法將目標檢測看成回歸問題,所以采用的是均方差損失函數。但是對不同的部分采用了不同的權重值。首先區分定位誤差和分類誤差。對于定位誤差,即邊界框坐標預測誤差,采用較大的權重λcoord=5λcoord=5。然后其區分不包含目標的邊界框與含有目標的邊界框的置信度,對于前者,采用較小的權重值λnoobj=0.5λnoobj=0.5。其它權重值均設為1。然后采用均方誤差,其同等對待大小不同的邊界框,但是實際上較小的邊界框的坐標誤差應該要比較大的邊界框要更敏感。為了保證這一點,將網絡的邊界框的寬與高預測改為對其平方根的預測,即預測值變為(x,y,w??√,h??√)(x,y,w,h)。
Adapter接口定義了如下方法:
public abstract void registerDataSetObserver (DataSetObserver observer)
Adapter表示一個數據源,這個數據源是有可能發生變化的,比如增加了數據、刪除了數據、修改了數據,當數據發生變化的時候,它要通知相應的AdapterView做出相應的改變。為了實現這個功能,Adapter使用了觀察者模式,Adapter本身相當于被觀察的對象,AdapterView相當于觀察者,通過調用registerDataSetObserver方法,給Adapter注冊觀察者。
public abstract void unregisterDataSetObserver (DataSetObserver observer)
通過調用unregisterDataSetObserver方法,反注冊觀察者。
public abstract int getCount () 返回Adapter中數據的數量。
public abstract Object getItem (int position)
Adapter中的數據類似于數組,里面每一項就是對應一條數據,每條數據都有一個索引位置,即position,根據position可以獲取Adapter中對應的數據項。
public abstract long getItemId (int position)
獲取指定position數據項的id,通常情況下會將position作為id。在Adapter中,相對來說,position使用比id使用頻率更高。
public abstract boolean hasStableIds ()
hasStableIds表示當數據源發生了變化的時候,原有數據項的id會不會發生變化,如果返回true表示Id不變,返回false表示可能會變化。Android所提供的Adapter的子類(包括直接子類和間接子類)的hasStableIds方法都返回false。
public abstract View getView (int position, View convertView, ViewGroup parent)
getView是Adapter中一個很重要的方法,該方法會根據數據項的索引為AdapterView創建對應的UI項。