Transformer在CV中的應用

2021-10-22 23:19:30 字數 1696 閱讀 5456

本文主要參考

1 transformer靠attention機制,不適用cnn,rnn,抓長距離依賴關係比rnn強;在影象中的應用,就是transformer可以突破影象的感受野限制,可以計算該畫素與全部影象的關係

2 結構形式

3 其中的位置編碼,也是後期研究的乙個重點,因為不採用rnn,無法捕獲時序的關係,所以加了個位置編碼(非常重要,具體可參考這篇文章對後續位置編碼的優化這裡一般採用網路自動學習和自定義規則,如圖是自定義的sin-cos規則,這種可以利用三角函式特性,後面的結果可以復用前面已經計算得到的結果,還有就是在**的時候如果序列長度大於訓練輸入的長度,這種方式依然可以計算位置編碼而用自動學習的最大長度是固定的;

4 最重要的是transformer裡面的encoder和decoder結構,主要是裡面包含的自注意力機制

5 通過self-attention,每個詞和所有詞做attention,使得每個詞都有全域性的語義資訊,可以捕獲長距離依賴關係;提出multi-head attention,可以看出attention的ensemble版本,不同head學習不同的子空間語義

6 其中的query,key,value的意義,具體可參考就是查字典假想你有乙個map/dict或者其他名字,乙個key對應乙個value,在檢索的時候,給定query,如果query in map,就是query等於其中乙個key,就返回對應的value。這個方法太hard了,有就是有,沒有就是沒有。對於qkv都是向量的情況,這種方法不可行,只能讓它變soft,那就是算一算query和key的關係,按照比例對value加和,這和max變成softmax有異曲同工之妙

7 對於multihead的理解,可以參考第乙個是,直觀理解多頭,可能每個頭會關注不同的token,但是實際是可能大部分頭關注一些token,總有單獨的頭關注不一樣的token,multi-head其實不是必須的,去掉一些頭效果依然有不錯的效果(而且效果下降可能是因為參數量下降),這是因為在頭足夠的情況下,這些頭已經能夠有關注位置資訊、關注語法資訊、關注罕見詞的能力了,再多一些頭,無非是一種enhance或noise而已;第二個是,multihead就是類似不同的attention的乙個ensemble組合,可以綜合利用不同的特徵;第三個是多頭是指multi-head 768∗64

∗12768*64*12

768∗64

∗12與直接計算768

∗768

768*768

768∗76

8的區別,其中有12個頭,作者發現就是計算的attention其中大部分都是接近於0的,如果直接計算768

∗768

768*768

768∗76

8第一計算資源浪費,可能最終效果和768*64效果差不多,所以最終還不如計算12個768∗64

768*64

768∗64

還有了多個頭ensemble的效果,實際這種效果也更好;

目前有很多用transformer去替換cnn結構,有vit,detr等結構模型,但是目前並沒有很出色的工作,後續會繼續更新

XGboost中的cv函式引數詳解

def cv params,dtrain,num boost round 10,nfold 3,stratified false,folds none,metrics obj none,feval none,maximize false,early stopping rounds none,fpre...

Python中的cv2使用

因為最近想入門一下機器學習的知識,目前以李航博士的 統計學學習 為教材自學ing,然後再具體演算法復現上遇到了第乙個坑,就是影象的hog特徵提取 hog掃盲 然後觸控到的python 的cv2庫。作為入門,當然從庫的安裝開始,pip肯定是要裝的 sudo apt install python3 pi...

CV2在python2與python3的切換出錯

我輸入python,顯示的結果是 python python 3.5.2 default,nov 12 2018,13 43 14 gcc 5.4.0 20160609 on linux可是一執行程式,就報錯 import cv2 importerror opt ros kinetic lib py...