前言 本文給大家分享一份我用的特徵圖視覺化程式碼。
歡迎關注公眾號
寫在前面的話
特徵圖視覺化是很多論文所需要做的一份工作,其作用可以是用於證明方法的有效性,也可以是用來增加工作量,給論文湊字數。
具體來說就是視覺化兩個圖,使用了新方法的和使用之前的,對比有什麼區別,然後看圖寫論文說明新方法體現的作用。
吐槽一句,有時候這個圖 論文作者自己都不一定能看不懂,雖然確實視覺化的圖有些改變,但並不懂這個改變說明了什麼,反正就吹牛,強行往自己新方法編的故事上扯,就像小學一年級的作文題--看圖寫作文。
之前知乎上有一個很熱門的話題,如果我在baseline上做了一點小小的改進,卻有很大的效果,這能寫論文嗎?
這種情況最大的問題就在於要如何寫七頁以上,那一點點的改進可能寫完思路,公式推理,畫圖等內容才花了不到一頁,剩下的內容如何搞?視覺化特徵圖!!!
這一點可以在我看過的甚多論文上有所體現,反正我是沒看明白論文給的視覺化圖,作者卻能扯那麼多道道。這應該就是用來增加論文字數和增加工作量的。
總之一句話,視覺化特徵圖是很重要的工作,最好要會。
初始化配置
這部分先完成載入資料,修改網路,定義網路,載入預訓練模型。
載入資料並預處理
這裡只載入一張圖片,就不用通過classdataset了,因為classdataset是針對大量資料的,生成一個迭代器一批一批地將圖片送給網路。但我們仍然要完成classdataset中資料預處理的部分。
資料預處理所必須要有的操作是調整大小,轉化為Tensor格式,歸一化。至於其它資料增強或預處理的操作,自己按需新增。
這裡由於只載入一張圖片,因此後面要使用torch.unsqueeze將三維張量變成四維。
修改網路
假如你要視覺化某一層的特徵圖,則需要將該層的特徵圖返回出來,因此需要先修改網路中的forward函式。具體修改方式如下所示。
定義網路並載入預訓練模型
這部分需要說明的是最後一行,要將網路設定為推理模式。
視覺化特徵圖
這部分主要是將特徵圖的某一通道轉化為一張圖來視覺化。
這裡一行一行來解釋。
1. 引數img_batch是從網路中的某一層傳回來的特徵圖,BI是雙線性插值的函式,自定義的,下面會講。
2. 由於只視覺化了一張圖片,因此img_batch是四維的,且batchsize維為1。第三行將它從GPU上弄到CPU上,並變成numpy格式。
3. 剩下部分主要完成將每個通道變成一張圖,以及將所有通道每個元素對應位置相加,並儲存。
雙線性插值
由於經過多次網路降取樣,後面層的特徵圖往往變得只有7x7,16x16大小。視覺化後特別小,因此需要將它上取樣,這裡取樣的方式是雙線性插值。因此,這裡給一份雙線性插值的程式碼。
main函式流程
上面介紹了各個部分的程式碼,下面就是整體流程。比較簡單。
視覺化效果圖
歡迎關注公眾號
在公眾號中回覆關鍵字“入門指南”可獲取計算機視覺入門資料。
CV技術指南建立了一個交流氛圍很不錯的群,除了太偏僻的問題,幾乎有問必答。關注公眾號新增編輯的微訊號可邀請加交流群。
其它文章