神經網路可以通過輸出上特徵點的(x,y)座標來實現對目標特徵的識別。
假設你正在構建乙個人臉識別應用,出於某種原因,你希望演算法可以給出眼角的具體位置。眼角座標為(x,y),你可以讓神經網路的最後一層多輸出兩個數字lx和ly,作為眼角的座標值。如果你想知道兩隻眼睛的四個眼角的具體位置,那麼從左到右,依次用四個特徵點來表示這四個眼角。對神經網路稍作一些修改,輸出第乙個特徵點(l1x,l1y),第二個特徵點(l2x,l2y)依此類推,這四個臉部特徵的位置就可以通過神經網路輸出。還可以通過嘴的座標來確定嘴的形狀從而判斷人物是在微笑還是皺眉。我們以此來引申出如何通過卷積網路進行物件目標檢測(基於滑動視窗的目標檢測演算法)。
假如你想構建乙個汽車檢測演算法。首先建立乙個標籤訓練集,也就是x和y表示適當剪下的汽車樣本。這張x是乙個正樣本,因為它是一輛汽車。由於我們對這個訓練集的期望,你一開始可以使用適當剪下的,就是整張x幾乎都被汽車佔據,有了這個訓練集,你就可以開始訓練卷積網路了。輸入這些剪下的然後卷積網路輸出y,0或1表示中有無汽車。
訓練完這個網路,就可以用它來實現滑動視窗目標檢測。具體步驟如下,假設這是一張測試圖。
首先選定乙個特定大小的視窗,比如左邊的紅色視窗,將這個紅色小方塊輸入卷積網路,卷積網路開始進行**即判斷紅色方框內有沒有汽車。接下來繼續處理第二個影象即紅色方框稍向右滑動之後的區域。
依次重複操作,直到這個視窗滑過影象的每乙個角落。主要思路就是將這些滑過的視窗輸入卷積網路,對每個位置按0或1進行分類,這就是所謂的影象滑動視窗操作。
再將這些滑動視窗放大,這樣總有乙個視窗可以檢測到它,這個方法有明顯的缺點,計算成本。為了降低成本,我們需要在卷積層上應用這個演算法。首先要知道如何把神經網路的全連線層轉化成卷積層。
假設物件檢測演算法輸入乙個14✖14✖3的影象,過濾器大小為5✖5,數量是16,影象對映為10✖10✖16,然後池化為5✖5✖16,新增兩個連線400個單元的全連線層,最終通過softmax輸出y。
下面演示如何將全連線層轉化為卷積層,畫乙個這樣的卷積網路,我們將全連線層用5✖5的過濾器實現,數量是400,過濾器實際上是5✖5✖16,輸出維度就是1✖1✖400,我們不再把它看作乙個含有400個節點的集合,而是乙個1✖1✖400的輸出層,從數學角度看,它和全連線層是一樣的。
我們再新增另外乙個1✖1卷積層,假設有400個1✖1的過濾器,下一層的維度就是1✖1✖400,其實就是上個網路中的全連線層,最後經過1✖1過濾器的處理,得到乙個softmax啟用值,通過卷積網路,我們最終得到1✖1✖4的輸出層。
假設向滑動視窗卷積網路輸入14✖14✖3的,形成這樣乙個網路。
測試集是16✖16✖3,在最初的滑動視窗演算法中,你會將藍色部分輸入卷積網路,接著滑動視窗步幅為2個畫素,依次重複得到輸出。這個過程中我們會有很多重複運算。
使用相同的5✖5✖16過濾器進行卷積,然後池化,照舊用400個5✖5的過濾器得到2✖2✖400的輸出層,現在輸出層為2✖2✖400,而不是1✖1✖400,應用1✖1過濾器得到另乙個2✖2✖400的輸出,再接乙個全連線最終得到2✖2✖4的輸出。最終再輸出層這4個方塊中,藍色的是影象左上方14✖14的輸出。
我們不需要把輸入分割成4個子集分別執行前向傳播,而是把它們作為一張輸入給卷積網路進行計算,這提高了運算效率,不過仍存在乙個缺點就是邊界框的位置不夠準確。
C 3 高階演算法 2 滑動視窗 單調棧
序號滑動視窗類題目 1滑動視窗的最大值 2實現最大值佇列 3和為s的連續正數序列 4最長不含重複字元的子字串 滑動視窗 題目1 滑動視窗的最大值 標準的滑動視窗解法 class solution for int i 0 i nums.size i 對每個位置進行入視窗的操作 window.push ...
扒一扒滑動視窗演算法的褲子
目錄 1 演算法框架 2 leetcode76.最小覆蓋子串 3 leetcode567.字串的排列 4 leetcode438.找到字串中所有字母異位詞 5 leetcode3.無重複字元的最長子串 int left 0,right 0 while right s.size 這個演算法技巧的時間複...
目標檢測演算法的一些優化方法 20210219
1.pixels iou piou loss 2.focal loss 3.先做檢測,再做識別 4.增加負樣本 測試影象中被識別錯誤的母豹所在區域。通常對原影象進行裁減,使得裁減下來的影象只包含誤識別的物體,而不包含目標 5.負樣本的標籤檔案 直接對誤檢的影象生成乙個空的xml檔案 檔案中沒有任何物...