圖片偏移演算法
㈠ 偏移量的 計算方法
曾經的電腦主流是八位的,內存定址只有16位,也就是64K。當年PC機剛出的時候,還不完全是16位電腦,是個20位電腦。
但是他的地址線由兩部分組成,一部分叫做段地址,一部分叫做偏移量,就類似單元樓住址,可以叫做單元的,然後這個某編號住戶。
由這兩個的疊加,形成一個地址。演算法是,段地址占高20-4位,偏移量佔16-0位,然後加起來。
㈡ GIS中坐標系與偏移演算法總結
一 大地坐標系
1.1 概念
大地坐標系是大地測量中以參考橢球面為基準面建立起來的坐標系。
大地坐標系根據其原點的位置不同,分為地心坐標系和參心坐標系。地心坐標系的原點與地球質心重合,參心坐標系的原點與某一地區或國家所採用的參考橢球中心重合,通常與地球質心不重合。
1.2 常用的參心坐標系與地心坐標系
北京54 參心坐標系(參心坐標系)
西安80 參心坐標系(參心坐標系)
cgcs2000 地心坐標系(地心坐標系)
wgs84 地心坐標系(地心坐標系)
我國先後建立的1954年北京坐標系、1980西安坐標系和新1954年北京坐標系,都是參心坐標系。這些坐標系為我國經濟社會發展和國防建設作出了重要貢獻。
但是,隨著現代科技的發展,特別是全球衛星定位技術的發展和應用,世界上許多發達國家和中等發達國家都已在多年前就開始使用地心坐標系。
國務院批准自2008年7月1日啟用我國的地心坐標系——2000國家大地坐標系(CGCS-2000),同時要求用8-10年的時間,完成現行國家大地坐標系向20000國家大地坐標系的過渡和轉換。過渡期結束,將停止提供現行國家大地坐標系下的測繪成果。
參考:
2018年7月1日起全面使用2000國家大地坐標系,西安80和北京54坐標系正式退出歷史舞台
wgs84是為GPS全球定位系統使用而建立的坐標系統;gps設備採集的數據均為wgs84坐標系。
1.3 不同坐標系之間的轉換
arcgis 軟體中計算完成,參考:[arcgis坐標轉換與投影]( https://www.jianshu.com/p/5c437696be06 )
二 坐標投影
2.1 投影後的坐標形式
原始經緯度:120.0397529296875,30.229220825195313
墨卡托投影後:13362764.171082955,3533048.2025558753
參考: arcgis js api:web墨卡托(3857)轉經緯度坐標(4326)
2.2 投影的目的
方便工程測量、二維圖展示便於理解。
2.3 根據不同需求使用不同的投影演算法
例如: 墨卡托投影後的二維圖導致了地球兩極被拉寬,不適用於工程測量,但適合用作普通二維圖的展示。而大比例尺的工程測量圖對局部區域內精度要求高,而採用高斯克里格投影。
三 gcj02偏移演算法(國家測繪局,被戲稱為火星坐標)
注意 這是偏移演算法,而不是單獨的一個坐標系。習慣上人們將加了偏移演算法的坐標稱為gcj02坐標。經偏移演算法處理的地圖數據偏差一般為 300~500 米。
3.1 在我們國家發布的互聯網地圖按法律規定需要經過偏移演算法加偏移。
例如高德地圖、騰訊地圖。
3.2 網路地圖在gcj02基礎上進行了二次加偏移,稱為bd09坐標
3.3 天地圖是否加偏移?
天地圖採用cgcs2000坐標。
發布在互聯網上的天地圖並不一定都是加偏移,未加偏移的地圖做了特殊處理,很多涉密地理信息在地圖上找不到。
3.4 使用了加偏移的地圖如何進行gis開發
對疊加到地圖上的數據同樣加偏移,實現與底圖吻合。
參考: WGS84坐標與不同加密演算法之間轉換
更多參考:
你必須知道的地理坐標系和投影坐標系
arcgis坐標轉換與投影變換
㈢ 什麼是偏移量 怎麼計算
計算機匯編語言中的偏移量定義為:把存儲單元的實際地址與其所在段的段地址之間的距離稱為段內偏移,也稱為「有效地址或偏移量」。
「偏移量是人工加密方式的一種解析手段,沒有更改過默認偏移量的清機加鈔員將無法在ATM上獲取開鎖密碼;每個清機加鈔員獲得的密碼為4組,每組2位數字。
因此偏移量必須對應為4組,可以設置為除全零以外的任意數值,不得將4組偏移量設置為同一數字。偏移量的計算分為「加法」和「減法」兩種方式」。
(3)圖片偏移演算法擴展閱讀
偏移量屬性:
offsetHeight:元素在垂直方向上佔用的空間大小;相當於border-top+padding
top+height+padding-bottom+border-bottom
offsetWidth:元素在水平方向上佔有的空間大小;相當於botder-left+padding-left+width+padding-right+border+right
offsetLeft:元素的左外邊框至包含元素的左內邊框之間的像素距離。
offsetTop:元素的上外邊框至包含元素的上內邊框之間的像素距離。
其中,offsetLeft和offsetTop屬性與包含元素有關,包含元素的引用保存在offsetParent屬性中。
㈣ [圖像演算法]-Faster RCNN詳解
paper: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Tensorflow-faster r-cnn github: Tensorflow Faster RCNN for Object Detection
faster rcnn是何凱明等大神在2015年提出目標檢測演算法,該演算法在2015年的ILSVRV和COCO競賽中獲得多項第一。該演算法在fast rcnn基礎上提出了RPN候選框生成演算法,使得目標檢測速度大大提高。
(1)image input;
(2)利用selective search 演算法在圖像中從上到下提取2000個左右的Region Proposal;
(3)將每個Region Proposal縮放(warp)成227*227的大小並輸入到CNN,將CNN的fc7層的輸出作為特徵;
(4)將每個Region Proposal提取的CNN特徵輸入到SVM進行分類;
(5)對於SVM分好類的Region Proposal做邊框回歸,用Bounding box回歸值校正原來的建議窗口,生成預測窗口坐標.
缺陷:
(1) 訓練分為多個階段,步驟繁瑣:微調網路+訓練SVM+訓練邊框回歸器;
(2) 訓練耗時,佔用磁碟空間大;5000張圖像產生幾百G的特徵文件;
(3) 速度慢:使用GPU,VGG16模型處理一張圖像需要47s;
(4) 測試速度慢:每個候選區域需要運行整個前向CNN計算;
(5) SVM和回歸是事後操作,在SVM和回歸過程中CNN特徵沒有被學習更新.
(1)image input;
(2)利用selective search 演算法在圖像中從上到下提取2000個左右的建議窗口(Region Proposal);
(3)將整張圖片輸入CNN,進行特徵提取;
(4)把建議窗口映射到CNN的最後一層卷積feature map上;
(5)通過RoI pooling層使每個建議窗口生成固定尺寸的feature map;
(6)利用Softmax Loss(探測分類概率) 和Smooth L1 Loss(探測邊框回歸)對分類概率和邊框回歸(Bounding box regression)聯合訓練.
相比R-CNN,主要兩處不同:
(1)最後一層卷積層後加了一個ROI pooling layer;
(2)損失函數使用了多任務損失函數(multi-task loss),將邊框回歸直接加入到CNN網路中訓練
改進:
(1) 測試時速度慢:R-CNN把一張圖像分解成大量的建議框,每個建議框拉伸形成的圖像都會單獨通過CNN提取特徵.實際上這些建議框之間大量重疊,特徵值之間完全可以共享,造成了運算能力的浪費.
FAST-RCNN將整張圖像歸一化後直接送入CNN,在最後的卷積層輸出的feature map上,加入建議框信息,使得在此之前的CNN運算得以共享.
(2) 訓練時速度慢:R-CNN在訓練時,是在採用SVM分類之前,把通過CNN提取的特徵存儲在硬碟上.這種方法造成了訓練性能低下,因為在硬碟上大量的讀寫數據會造成訓練速度緩慢.
FAST-RCNN在訓練時,只需要將一張圖像送入網路,每張圖像一次性地提取CNN特徵和建議區域,訓練數據在GPU內存里直接進Loss層,這樣候選區域的前幾層特徵不需要再重復計算且不再需要把大量數據存儲在硬碟上.
(3) 訓練所需空間大:R-CNN中獨立的SVM分類器和回歸器需要大量特徵作為訓練樣本,需要大量的硬碟空間.FAST-RCNN把類別判斷和位置回歸統一用深度網路實現,不再需要額外存儲.
(4) 由於ROI pooling的提出,不需要再input進行Corp和wrap操作,避免像素的損失,巧妙解決了尺度縮放的問題.
(1)輸入測試圖像;
(2)將整張圖片輸入CNN,進行特徵提取;
(3)用RPN先生成一堆Anchor box,對其進行裁剪過濾後通過softmax判斷anchors屬於前景(foreground)或者後景(background),即是物體or不是物體,所以這是一個二分類;同時,另一分支bounding box regression修正anchor box,形成較精確的proposal(註:這里的較精確是相對於後面全連接層的再一次box regression而言)
(4)把建議窗口映射到CNN的最後一層卷積feature map上;
(5)通過RoI pooling層使每個RoI生成固定尺寸的feature map;
(6)利用Softmax Loss(探測分類概率) 和Smooth L1 Loss(探測邊框回歸)對分類概率和邊框回歸(Bounding box regression)聯合訓練.
相比FASTER-RCNN,主要兩處不同:
(1)使用RPN(Region Proposal Network)代替原來的Selective Search方法產生建議窗口;
(2)產生建議窗口的CNN和目標檢測的CNN共享
改進:
(1) 如何高效快速產生建議框?
FASTER-RCNN創造性地採用卷積網路自行產生建議框,並且和目標檢測網路共享卷積網路,使得建議框數目從原有的約2000個減少為300個,且建議框的質量也有本質的提高.
從上面的三張圖可以看出,Faster R CNN由下面幾部分組成:
1.數據集,image input
2.卷積層CNN等基礎網路,提取特徵得到feature map
3-1.RPN層,再在經過卷積層提取到的feature map上用一個3x3的slide window,去遍歷整個feature map,在遍歷過程中每個window中心按rate,scale(1:2,1:1,2:1)生成9個anchors,然後再利用全連接對每個anchors做二分類(是前景還是背景)和初步bbox regression,最後輸出比較精確的300個ROIs。
3-2.把經過卷積層feature map用ROI pooling固定全連接層的輸入維度。
4.然後把經過RPN輸出的rois映射到ROIpooling的feature map上進行bbox回歸和分類。
SPP-Net是出自論文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》
由於一般的網路結構中都伴隨全連接層,全連接層的參數就和輸入圖像大小有關,因為它要把輸入的所有像素點連接起來,需要指定輸入層神經元個數和輸出層神經元個數,所以需要規定輸入的feature的大小。而SPP-NET正好解決了這個問題。
如果原圖輸入是224x224,對於conv5出來後的輸出,是13x13x256的,可以理解成有256個這樣的filter,每個filter對應一張13x13的activation map.如果像上圖那樣將activation map pooling成4x4 2x2 1x1三張子圖,做max pooling後,出來的特徵就是固定長度的(16+4+1)x256那麼多的維度了.如果原圖的輸入不是224x224,出來的特徵依然是(16+4+1)x256;直覺地說,可以理解成將原來固定大小為(3x3)窗口的pool5改成了自適應窗口大小,窗口的大小和activation map成比例,保證了經過pooling後出來的feature的長度是一致的.
總結而言,當網路輸入的是一張任意大小的圖片,這個時候我們可以一直進行卷積、池化,直到網路的倒數幾層的時候,也就是我們即將與全連接層連接的時候,就要使用金字塔池化,使得任意大小的特徵圖都能夠轉換成固定大小的特徵向量,這就是空間金字塔池化的意義(多尺度特徵提取出固定大小的特徵向量)。
ROI pooling layer實際上是SPP-NET的一個精簡版,SPP-NET對每個proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采樣到一個7x7的特徵圖.對於VGG16網路conv5_3有512個特徵圖,這樣所有region proposal對應了一個7*7*512維度的特徵向量作為全連接層的輸入.
為什麼要pooling成7×7的尺度?是為了能夠共享權重。Faster RCNN除了用到VGG前幾層的卷積之外,最後的全連接層也可以繼續利用。當所有的RoIs都被pooling成(512\×7\×7)的feature map後,將它reshape 成一個一維的向量,就可以利用VGG16預訓練的權重,初始化前兩層全連接.
那麼經過何種變換才能從圖11中的窗口P變為窗口呢?比較簡單的思路就是:
注意:只有當Proposal和Ground Truth比較接近時(線性問題),我們才能將其作為訓練樣本訓練我們的線性回歸模型,否則會導致訓練的回歸模型不work(當Proposal跟GT離得較遠,就是復雜的非線性問題了,此時用線性回歸建模顯然不合理).這個也是G-CNN: an Iterative Grid Based Object Detector多次迭代實現目標准確定位的關鍵. 線性回歸就是給定輸入的特徵向量X,學習一組參數W,使得經過線性回歸後的值跟真實值Y(Ground Truth)非常接近.即.那麼Bounding-box中我們的輸入以及輸出分別是什麼呢?
如上圖中標識:
① rpn_cls:60*40*512-d ⊕ 1*1*512*18 > 60*40*92 逐像素對其9個Anchor box進行二分類
② rpn_bbox:60*40*512-d ⊕ 1*1*512*36>60*40*9*4 逐像素得到其9個Anchor box四個坐標信息
逐像素對Anchors分類標記
① 去除掉超過1000*600這原圖的邊界的anchor box
② 如果anchor box與ground truth的IoU值最大,標記為正樣本,label=1
③ 如果anchor box與ground truth的IoU>0.7,標記為正樣本,label=1
④ 如果anchor box與ground truth的IoU<0.3,標記為負樣本,label=0
剩下的既不是正樣本也不是負樣本,不用於最終訓練,label=-1
逐像素Bbox回歸糾正
除了對anchor box進行標記外,另一件事情就是計算anchor box與ground truth之間的偏移量
令:ground truth:標定的框也對應一個中心點位置坐標x ,y 和寬高w ,h
anchor box: 中心點位置坐標x_a,y_a和寬高w_a,h_a
所以,偏移量:
△x=(x -x_a)/w_a △y=(y -y_a)/h_a
△w=log(w /w_a) △h=log(h /h_a)
通過ground truth box與預測的anchor box之間的差異來進行學習,從而是RPN網路中的權重能夠學習到預測box的能力
接著進一步對Anchors進行越界剔除和使用nms非最大值抑制,剔除掉重疊的框;比如,設定IoU為0.7的閾值,即僅保留覆蓋率不超過0.7的局部最大分數的box(粗篩)。最後留下大約2000個anchor,然後再取前N個box(比如300個);這樣,進入到下一層ROI Pooling時region proposal大約只有300個。
參考文獻: