pytorch圖片分割原理分析
pytorch圖片分割原理
自從transformer應用到cv領域以后,對圖片的分割需求便越加重了,但是圖像分割說起來容易,實際操作起來還是有很多地方不懂(主要還是code能力太弱)。
我們知道,對張量的處理一般又兩種,一種是view/reshape這樣的,先將數(shù)據(jù)按行展開,再按照指定形狀排列數(shù)據(jù);另一種是permute/transpose這種,是把數(shù)據(jù)按照維度進行變化,也就是把數(shù)據(jù)排列的先后順序轉換一下(后面具體介紹)。所以分割圖片就用到了兩者的結合
實驗
原圖:
1:我們先看直接reshape的結果:將原圖片切割為8份
完全沒法看好吧!
原因就是上面說的,reshape是把整張圖片按行(這里是按照通道數(shù)3,實際上也確實應該把通道數(shù)調到最后,按照通道展開,原因后面介紹)展開。
2:我們看一下正確的做法
可以看到分割的很完美!
接下來解釋一下原因
1:通道數(shù)必須放到最后一個維度:首先,我們知道再張量數(shù)據(jù)是連續(xù)的情況下,其數(shù)據(jù)是按行展開排序的,也就是按照張量最后一個維度展開排序,所以,對于一個三通道的RGB圖像(3,H, W)它本來是按照寬度展開的,但這樣在分割的時候就存在問題了,因為,分割一張圖片,應該是三個通道一起分割,故,我們第一步應該把通道數(shù)調到最后一個維度(這里因為是用cv2打開的圖片,通道數(shù)已經在最后一維 ,所以不用再單獨轉換,但如果需要轉換的話,注意,不可以用reshape或者view,只能用permute/或者transpose)
2:寬和高的分割必須先在自己的維度分割,即對于一組(B,C,H, W)的圖片,在把C轉換到最后一維后為(B,H,W,C),分割(此時用reshape)應該先按照(B,H/H分割size,H分割size,W/W分割size,W分割size,C)展開,然后再用permute,或者tanspose轉化為(B,H/H分割size,W/W分割size,H分割size,W分割size,C),最后,再用contiguous().view轉化為(B,(H/H分割size)*(W/W分割size),H分割size,W分割size,C),解釋如下:
張量的維度,實際上表述數(shù)據(jù)的方向和排列順序,越靠后的維度越先排列,所以,對于(B, H W, C),如果只是進行reshape或者view的話,他始終是會先把寬W排完之后再排高,所以,為了要把圖片分成一份一份的,那么就必須讓寬和高交替出現(xiàn),也就是要改變數(shù)據(jù)的排列順序,這正是permute和transpose的作用,它們相當于在保持現(xiàn)有數(shù)據(jù)在內存中順序的基礎上,改變數(shù)據(jù)的排列順序,這里(B,H/H分割size,H分割size,W/W分割size,W分割size,C)H/H分割size,H分割size都代表高;W/W分割size,W分割size都代表寬,也就是(B,高,高,寬,寬,C),將H分割size和W/W分割size轉換以后則為(B,高,寬,高,寬,C )
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Opencv+Python實現(xiàn)圖像運動模糊和高斯模糊的示例
今天小編就為大家分享一篇關于Opencv+Python實現(xiàn)圖像運動模糊和高斯模糊的示例,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04Python:Scrapy框架中Item Pipeline組件使用詳解
這篇文章主要介紹了Python:Scrapy框架中Item Pipeline組件使用詳解,具有一定借鑒價值,需要的朋友可以參考下2017-12-12Python判斷一個數(shù)是否為質數(shù)的3種方法(超詳細)
一個大于1的自然數(shù),除了1和它本身外,不能被其他自然數(shù)(質數(shù))整除(2, 3, 5, 7等),換句話說就是該數(shù)除了1和它本身以外不再有其他的因數(shù),下面這篇文章主要給大家介紹了關于利用Python判斷一個數(shù)是否為質數(shù)的3種方法,需要的朋友可以參考下2024-09-09ubuntu系統(tǒng)如何從python3.7升級到python3.8
這篇文章主要給大家介紹了關于ubuntu系統(tǒng)如何從python3.7升級到python3.8的相關資料,Python是一種廣泛使用的編程語言,而Ubuntu是一個流行的開源操作系統(tǒng),通過升級Python您可以獲得新功能、性能改進和安全修復,需要的朋友可以參考下2023-11-11python flask幾分鐘實現(xiàn)web服務的例子
今天小編就為大家分享一篇python flask幾分鐘實現(xiàn)web服務的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07