目標識別程式碼解讀整理
end_points用來記錄每一層的特徵圖,各層的特徵圖大小是不一樣的
end_points[end_point] = net
特徵層數記錄
for i, layer in enumerate(feat_layers):
i表示第幾個特徵層,layer表示特徵層的名字
把各層的特徵圖資料取出來end_points[layer]
把所有目標類別取出來num_classes
anchor的尺寸列表,有6個尺寸(莫非一個特徵圖上只用一個尺寸的anchor?)
anchor_sizes=[(21.,45.),(45., 99.), (99., 153.), (153., 207.), (207., 261.), (261., 315.)],
一個anchor尺寸上的不同比例列表anchor_ratios,不同層的比例個數不一樣。
anchor_ratios=[[2,.5], [2, .5, 3, 1./3], [2, .5, 3, 1./3], [2, .5, 3, 1./3], [2, .5], [2, .5]],
各層上畫素的放縮到的值,總共6層,
anchor_steps=[8,16, 32, 64, 100, 300]
取anchor 迴歸時需要用的調整數anchor_offset
normalizations是什麼鬼還不清楚
normalizations=[20, -1, -1, -1, -1, -1],
一層特徵圖上的多框預測:(也就是在一層圖上想要返回一個預測結果和位置的時候需要準備什麼,準備好怎麼處理)
需要準備的東西:這一層的特徵圖,這層圖上框的尺寸,這個尺寸對應的幾個比例,和一個不知道是什麼鬼的normalization.
p, l = ssd_multibox_layer(end_points[layer],
num_classes,
anchor_sizes[i],
anchor_ratios[i],
normalizations[i])
準備好後怎麼處理:
第一步:先看normalization是不是大於0,大於0的就把這一層的特徵資料給正則化一下,不大於0的就不正則化了。(看normalizations的所有值,發現應該是隻有在第一個特徵圖的那一層做了正則化,後面幾個都沒有做。)
if normalization > 0:
net =custom_layers.l2_normalization(net, scaling=True)
第二步:算一下這一特徵圖上的anchor個數,因為在傳的時候anchor_size只傳進來一個尺寸,所以這裡的len(sizes)應該等於1,而傳進來的anchor對應的不同比例len(rations)就是自定義的其他的幾個比例個數,所以anchor個數就是等於1+其他定義好的比例個數。程式碼裡這樣寫的:
num_anchors= len(sizes) + len(ratios)
第三步:框有了後進行確定框所在的位置,如何確定呢?利用和真實標記的anchor做迴歸來確定。
因為有多個anchor,而每個anchor要回歸出4個值來確定位置。所以總共需要回歸出值的個數有num_anchors*4個。
迴歸的過程:需要準備的東西有,這層特徵圖的值,要回歸出的值的個數,再來一個3*3的卷積核,準備完迴歸用的東西后,通過卷積操作來完成迴歸。卷積操作後輸入出的東西應該是一個通道個數為迴歸值個數的特徵圖。程式碼如下:
loc_pred= slim.conv2d(net, num_loc_pred, [3, 3], activation_fn=None,
scope='conv_loc')
(程式碼中還給了一個這樣的操作,把通道數放到最後,但由於tensorflow預設的就是通道數在最後放的,所以這個程式碼感覺有點多餘loc_pred = custom_layers.channel_to_last(loc_pred))
迴歸結束後,把得到的特徵圖進行了重新塑形reshape,(塑形後的資料是一個列表,列表的長度為anchor的個數,列表裡的具體每一項又是一個列表,這個列表是一個4個長度的list,即這4個值是一個anchor的四個位置資訊)
、、、-------------------------------------------------精華程式碼啊-------------------------------
deftensor_shape(x, rank=3):
"""Returns the dimensions ofa tensor.
Args:
image: A N-D Tensor of shape.
Returns:
A list of dimensions. Dimensions that arestatically known are python
integers,otherwise they are integerscalar tensors.
"""
if x.get_shape().is_fully_defined():
return x.get_shape().as_list()
else:
static_shape =x.get_shape().with_rank(rank).as_list()
dynamic_shape = tf.unstack(tf.shape(x),rank)
return [s if s is not None else d
for s, d in zip(static_shape,dynamic_shape)]
‘’‘’‘’---------------------------------------------------------------------------------
相關文章
- YOLOV5 模型和程式碼修改——針對小目標識別YOLO模型
- 深度學習之目標檢測與目標識別深度學習
- 知識目錄整理
- OpenCV----實現目標識別與分割OpenCV
- 鴻蒙原始碼目錄整理鴻蒙原始碼
- 前端面試知識點目錄整理前端面試
- 目標主機作業系統識別技術分析(轉)作業系統
- kafka程式碼解讀Kafka
- 美軍開發遠端人臉識別系統,實現1公里內目標識別
- Java基礎知識整理之程式碼塊Java
- 用寫程式碼的方式來整理知識
- 亞馬遜詳解如何使用MXNet在樹莓派上搭建實時目標識別系統亞馬遜樹莓派
- 目標檢測精讀 | SNIP:解決“尺度不變性”
- kaldi中文語音識別thchs30模型訓練程式碼功能和配置引數解讀S3模型
- 完善“使用者畫像”,識別目標受眾-CRM系統
- AOGNet:基於深度 AND-OR 語法網路的目標識別方法
- 論文解讀丨表格識別模型TableMaster模型AST
- 6種常見的地標識別演算法整理和總結演算法
- CRF as RNN 程式碼解讀CRFRNN
- zanphp原始碼解讀 – 知識掃盲PHP原始碼
- 認識 JavaAgent --獲取目標程式已載入的所有類Java
- 利用目標跟蹤來提高實時人臉識別處理速度
- 基於深度學習的機器人目標識別和跟蹤深度學習機器人
- 黑客和程式設計師有什麼區別?程式設計師目標是成神,黑客目標是弒神!黑客程式設計師
- 詳解影片中動作識別模型與程式碼實踐模型
- 端到端文字識別CRNN論文解讀RNN
- 目標跟蹤:KCF--調通C++程式碼C++
- 多目標跟蹤論文及程式碼總結
- C# 手寫識別方案整理C#
- Linklist程式碼實現以及程式碼解讀
- 語音識別的最終目標是真正實現人機互動
- 面向機器智慧的TensorFlow實戰5:目標識別與分類
- css程式碼整理CSS
- 詳解C++中指標(*)、取地址(&)、解引用(*)與引用(&)的區別 (完整程式碼)C++指標
- Emacs自動識別檔案程式碼Mac
- RFID射頻識別的解讀及應用
- js資料型別重要知識整理JS資料型別
- 目標網站反爬基礎知識網站