1. 程式人生 > 實用技巧 >apistudy js逆向(ast)

apistudy js逆向(ast)

Part Ⅰ 程式碼練習

1 HybridSN 高光譜分類網路。


三維卷積部分:

  • conv1:(1, 30, 25, 25), 8個 7x3x3 的卷積核 ==>(8, 24, 23, 23)
  • conv2:(8, 24, 23, 23), 16個 5x3x3 的卷積核 ==>(16, 20, 21, 21)
  • conv3:(16, 20, 21, 21),32個 3x3x3 的卷積核 ==>(32, 18, 19, 19)
    接下來要進行二維卷積,因此把前面的 32*18 reshape 一下,得到 (576, 19, 19)
    二維卷積:(576, 19, 19) 64個 3x3 的卷積核,得到 (64, 17, 17)
    接下來是一個 flatten 操作,變為 18496 維的向量,
    接下來依次為256,128節點的全連線層,都使用比例為0.4的 Dropout,
    最後輸出為 16 個節點,是最終的分類類別數。
    下面是 HybridSN 類的程式碼:
class HybridSN(nn.Module):
  def __init__(self):
    super(HybridSN,self).__init__()
    self.conv3d1=nn.Conv3d(1,8,kernel_size=(7,3,3),stride=1,padding=0)
    self.bn1=nn.BatchNorm3d(8)
    self.conv3d2=nn.Conv3d(8,16,kernel_size=(5,3,3),stride=1,padding=0) 
    self.bn2=nn.BatchNorm3d(16)
    self.conv3d3=nn.Conv3d(16,32,kernel_size=(3,3,3),stride=1,padding=0)
    self.bn3=nn.BatchNorm3d(32)
    self.conv2d1=nn.Conv2d(576,64,kernel_size=(3,3),stride=1,padding=0)
    self.bn4=nn.BatchNorm2d(64)
    self.fc1=nn.Linear(18496,256)
    self.fc2=nn.Linear(256,128)
    self.fc3=nn.Linear(128,16)
    self.dropout=nn.Dropout(0.4)
  def forward(self,x):
    out=F.relu(self.bn1(self.conv3d1(x)))
    out=F.relu(self.bn2(self.conv3d2(out)))
    out=F.relu(self.bn3(self.conv3d3(out)))
    out = F.relu(self.bn4(self.conv2d1(out.reshape(out.shape[0],-1,19,19))))
    out = out.reshape(out.shape[0],-1)
    out = F.relu(self.dropout(self.fc1(out)))
    out = F.relu(self.dropout(self.fc2(out)))
    out = self.fc3(out)
    return out

2 SENet 實現

class HybridSN(nn.Module):
  def __init__(self):
    super(HybridSN,self).__init__()
    self.conv3d1=nn.Conv3d(1,8,kernel_size=(7,3,3),stride=1,padding=0)
    self.bn1=nn.BatchNorm3d(8)
    self.conv3d2=nn.Conv3d(8,16,kernel_size=(5,3,3),stride=1,padding=0) 
    self.bn2=nn.BatchNorm3d(16)
    self.conv3d3=nn.Conv3d(16,32,kernel_size=(3,3,3),stride=1,padding=0)
    self.bn3=nn.BatchNorm3d(32)
    self.conv2d1=nn.Conv2d(576,64,kernel_size=(3,3),stride=1,padding=0)
    self.bn4=nn.BatchNorm2d(64)
    self.se = nn.Sequential(
            nn.AdaptiveAvgPool2d((1,1)),
            nn.Conv2d(64,64//16,kernel_size=1),
            nn.ReLU(),
            nn.Conv2d(64//16,64,kernel_size=1),
            nn.Sigmoid()
        )
    self.fc1=nn.Linear(18496,256)
    self.fc2=nn.Linear(256,128)
    self.fc3=nn.Linear(128,16)
    self.dropout=nn.Dropout(0.4)
  def forward(self,x):
    out=F.relu(self.bn1(self.conv3d1(x)))
    out=F.relu(self.bn2(self.conv3d2(out)))
    out=F.relu(self.bn3(self.conv3d3(out)))
    out=F.relu(self.bn4(self.conv2d1(out.reshape(out.shape[0],-1,19,19))))
    w=self.se(out)
    out=out*w
    out = out.reshape(out.shape[0],-1)
    out = F.relu(self.dropout(self.fc1(out)))
    out = F.relu(self.dropout(self.fc2(out)))
    out = self.fc3(out)
    return out

Part Ⅱ 視訊學習

1 《影象語義分割前沿進展》

1.1 Res2Net

1.1.1 背景

目前現有的特徵提取方法大多都是用分層方式表示多尺度特徵。分層方式即要麼對每一層使用多個尺度的卷積核進行提特徵(如SPPNet),要麼就是對每一層提取特徵進行融合(如FPN)。
本文提出的Res2Net在原有的殘差單元結構中又增加了小的殘差塊,增加了每一層的感受野大小。Res2Net也可以嵌入到不同的特徵提取網路中,如ResNet, ResNeXt, DLA等等。

1.1.2 Res2Net網路模型


上圖左邊是最基本的卷積模組。右圖是針對中間的3x3卷積進行的改進。
首先對經過1x1輸出後的特徵圖按通道數均分為s(圖中s=4)塊,每一部分是xi,i ∈ {1,2,...,s}。
每一個xi都會具有相應的3x3卷積,由Ki()表示。我們用yi表示Ki()的輸出。
特徵子集xi與Ki-1()的輸出相加,然後送入Ki()。為了在增加s的同時減少引數,我們省略了x1的3×3卷積,這樣也可以看做是對特徵的重複利用。


代表卷積操作)
y1 = x1;
y2 = x2
(3x3)= K2;
y3 =(x3 + x2(3x3))(3x3) = (K2 + x3)(3x3)= K3 ;
y4 =(x4 +(x3 + x2
(3x3))(3x3))(3x3) = (K3 + x4)*(3x3)= K4

如此一來,我們將得到不同數量以及不同感受野大小的輸出。 比如y2得到3x3的感受野,那麼y3就得到5x5的感受野,y4同樣會得到更大尺寸如7x7的感受野。
最後將這四個輸出進行融合並經過一個1x1的卷積。這種先拆分後融合的策略能夠使卷積可以更高效的處理特徵。
在本文中,我們將s設定為比例尺寸的控制引數,也就是可以將輸入通道數平均等分為多個特徵通道。s越大表明多尺度能力越強,此外一些額外的計算開銷也可以忽略。

1.2 Strip Pooling

  • 如下圖所示,使用Hx1和1xW尺寸的條狀池化核進行操作,對池化核內的元素值求平均,並以該值作為池化輸出值。
  • Hx1和1xW池化核處理後,使用1D Conv對兩個輸出feature map分別沿著左右和上下進行擴容,如下圖所示,擴容後兩個feature map尺寸相同,進行fusion(element-wise上的add)。
  • 採用element-wise multiplication的方式對原始資料和sigmoid處理後的結果進行處理,至此,strip pooling完成,輸出結果。

1.3 Learning Dynamic Routing for Semantic Segmentation

1.3.1 背景

這篇文章提出的方法主要是想解決在語義分割任務中目標大小不一的問題;在語義分割中,分割的目標可能是小到一隻鳥,也可能大到是充斥整個畫面的大巴車或者背景;而一般的方法都是使用單一的靜態網路模型進行分割,可能缺少對於真實世界中不同大小的目標的調節能力。

本文提出的方法是一種動態路徑的方法,依據資料的不同規劃不同的路徑,也就是具體的網路結構會隨著輸入而變化

1.3.2 工作機制


圖中給出了不同尺度的動態路徑規劃;紅色線標註的是他們的不同:
* 大尺度的圖可能會忽略一些低層的特徵;
* 而小尺度的目標可能會同時依靠低層特徵與高層特徵;
* 對於混合尺度的輸入則會有連線模式。

1.3.3 原理


圖中一共有L個layer,可以看到對於每個layer最多有四種scale的feature map,最小的1/32scale。首先input進行一個固定的三層的STEM把解析度降至1/4。為了實現各層之間的全連線,會有上取樣、下采樣、保持scale的三種操作;右邊是cell-level的展示,被聚合的特徵經過Gate與Cell結構進行特徵轉換。

  • Stem Block:包含三個網路層(SepConv3x3),負責1/4降取樣;
  • Routing Space:
    * 包含L個網路層,每層包含若干個cell,支援skip connection與multi-path routes;
    * 相鄰cell之間,降取樣率或上取樣率=2;
    * 相比於輸入,降取樣率最高可達32,因此每個layer的cell數最多為4;
    * 每個cell的輸出,存在三條尺度變換路徑:up-sampling(conv1x1+bilinear interpolation)、down-sampling(conv1x1 with stride=2)、keeping resolution
    * 在cell內部,會執行特徵變換/聚合(feature aggregation)、與尺度變換路徑選擇操作;

1.4 Spatial Pyramid Based Graph Reasoning for Semantic Segmentation(to be continue)

將每個pixel視為node,利用CNN提取 node的feature vector,然後用spatial pyramid的GCN做資訊交換和分類,提出了新的相似矩陣和拉普拉斯矩陣

1.5 BlendMask Top-Down Meets Bottom-up for Instance Segmentation

BlendMask是一階段的密集例項分割方法,結合了Top-down和Bottom-up的方法的思路。它通過在anchor-free檢測模型FCOS的基礎上增加了Bottom Module提取low-level的細節特徵,並在instance-level上預測一個attention;借鑑FCIS和YOLACT的融合方法,作者提出了Blender模組來更好地融合這兩種特徵。

1.5.1 背景

本文主要討論的是密集例項分割( Dense instance segmentation),密集例項分割也同樣有top-down和bottom-up兩類方法。

  • top-down:自上而下的密集例項分割的開山鼻祖是DeepMask,它通過滑動視窗的方法,在每個空間區域上都預測一個mask proposal。這個方法存在以下三個缺點:mask與特徵的聯絡(區域性一致性)丟失了,如DeepMask中使用全連線網路去提取mask;特徵的提取表示是冗餘的, 如DeepMask對每個前景特徵都會去提取一次mask;下采樣(使用步長大於1的卷積)導致的位置資訊丟失。
  • bottom-up:自下而上的密集例項分割方法的一般套路是,通過生成per-pixel的embedding特徵,再使用聚類和圖論等後處理方法對其進行分組歸類。這種方法雖然保持了更好的低層特徵(細節資訊和位置資訊),但也存在以下缺點:對密集分割的質量要求很高,會導致非最優的分割、泛化能力較差,無法應對類別多的複雜場景、後處理方法繁瑣。
  • 混合方法:本文想要結合 top-down和bottom-up兩種思路,利用top-down方法生成的instance-level的高維資訊(如bbox),對bottom-up方法生成的 per-pixel prediction進行融合。因此,本文基於FCOS提出簡潔的演算法網路BlendMask。融合的方法借鑑FCIS(裁剪)和YOLACT(權重加法)的思想,提出一種Blender模組,能夠更好地融合包含instance-level的全域性性資訊和提供細節和位置資訊的低層特徵。

1.5.2 總體思路

BlendMask的整體架構如下圖所示,包含一個detector module和BlendMask module。文中的detector module直接用的FCOS,BlendMask模組則由三部分組成:bottom module用來對底層特徵進行處理,生成的score map稱為Base;top layer串接在檢測器的box head上,生成Base對應的top level attention;最後是blender來對Base和attention進行融合。

1.5.3 BlendMask(to be continue)

  • Bottom Module
  • Top Layer
  • Blender

1.6 IMRAM Iterative Matching With Recurrent Attention Memory for Cross-Modal Image-Text Retrieval

IMRAM方法總體上分為三步:1)分別提取影象和文字的原始特徵;2)用RAM模組探索二者之間細粒度上的對齊關係;3)相似性度量以及損失函式迭代優化。

1.6.1 得到跨模態特徵表示

  • 對於影象

    • 用一個經過預訓練的CNN網路來提取特徵。給一張影象I,CNN識別出幾個包含語義資訊的區域r,並提取出每一個區域對應的特徵f,最後把特徵變成維度一致的向量v
    • W和b都是要學習的引數。
  • 對於文字
    為了得到影象和文字之間細粒度的對應關係,文章採用雙向GRU作為編碼器對文字進行編碼,得到單詞級別的特徵。

    • 每一個單詞w用一個鄰接嵌入向量e表示:
    • 然後用雙向GRU對語義資訊進行提取:
    • 最後的文字特徵用t表示:

1.6.2 用RAM(recurrent attention memory)進行對齊

一共用到了3個RAM模組,每一個RAM都包含一個CAU和一個MDU。

  • CAU(cross-modal attention unit)
    對於query集X和response集Y,CAU的作用是計算每一個x和y之間的相似度,並得到基於x的alignment feature。
  • MDU(memory distillation unit)
    完整框架中一共用了三次RAM,目的是為了對文字和影象進行多次對齊。為了在下一次對齊過程中得到更好的結果,那麼就需要在每一次對齊之後再反過來對query features X進行優化。

1.6.3 迭代匹配和損失函式優化

設定迭代次數為k,那麼每一步中,一張影象I和一個文字S的匹配分數定義為:

其中sim函式表示相似性度量函式,和前面用過的一樣。
最後,I和S的匹配分數為:

參考自https://blog.csdn.net/weixin_44390691/article/details/105177911

1.7 Cross-modality Person re-identification with Shared-Specific Feature

1.7.1 引言

cm-ReID的挑戰在於模態間的差異。目前大家的方法往往更加關注於學習公共的特徵表示,利用一個相同的特徵空間嵌入不同的模態。然而,只關注公共特徵,勢必造成整體的資訊損失,從而影響效能。於此文之中,作者為解決上述侷限,提出了一個cross modality shared-specific feature transfer algorithm(也喚作cm-SSFT),以來發掘兩模態間共有特徵和獨有特徵間的潛在資訊,用來提升整體效能。

1.7.2 網路框架

輸入影象首先被輸入到two-stream特徵提取器中,以獲得共享的和特定的特徵。然後使用shared-specific transfer network (SSTN)模型來確定模態內和模態間的相似性。然後在不同的模態間傳播共享和特定特徵,以彌補缺乏的特定資訊並增強共享特徵。在特徵提取器上增加了兩個專案對抗重建塊(project adversarial and reconstruction blocks)和一個模式適應模組(modality- adaptation module),以獲得區別性、互補性的共享特徵和特定特徵。

參考自https://blog.csdn.net/rytyy/article/details/105318745

1.8 Universal Weighting Metirc Learning for Cross-Modal Matching

1.9 Cross-Domain Corresponence Learning for Exemplar-Based Image Translation

1.9.1 概要

本文研究的問題是基於語義影象和風格參考影象的影象轉換問題。
本文提出的模型先將輸入語義影象和輸入參考風格影象分別通過編碼器進行領域對齊,並使用特徵計算兩者每個畫素點之間的相似度,並根據該相似度得到變形的參考影象,再將其使用positional normalization和spatially-variant denormalizaiton(類似於AdaIN)的方法,在從固定噪聲生成最終影象的過程中將該風格注入影象。
損失函式由偽參考影象對損失、領域對齊損失、語義約束損失、風格約束損失、相似度矩陣正則化和生成對抗損失組成。

1.9.2 模型結構


先將輸入語義影象和輸入參考風格影象分別通過編碼器進行領域對齊,並使用該計算兩者每個畫素點之間的相似度,並根據該相似度得到變形的參考影象,再將其使用類似於AdaIN的方法,在從固定噪聲生成最終影象的過程中將該風格注入影象。

參考https://blog.csdn.net/huitailangyz/article/details/105884294

2 《語義分割中的自注意力機制和低秩重建》

參考自https://zhuanlan.zhihu.com/p/77834369

2.1 語義分割

在一幅影象中,給每個畫素打個標籤。

2.2 自注意力機制

注意力機制模仿了生物觀察行為的內部過程,即一種將內部經驗和外部感覺對齊從而增加部分割槽域的觀察精細度的機制。
而自注意力機制是注意力機制的改進,其減少了對外部資訊的依賴,更擅長捕捉資料或特徵的內部相關性。