目標識別程式碼解讀整理
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
- Java基礎知識整理之程式碼塊Java
- 用寫程式碼的方式來整理知識
- 前端面試知識點目錄整理前端面試
- 鴻蒙原始碼目錄整理鴻蒙原始碼
- 2018之江杯全球人工智慧大賽 :零樣本影像目標識別 baseline 全部程式碼+註釋+招隊友人工智慧
- 目標檢測精讀 | SNIP:解決“尺度不變性”
- 美軍開發遠端人臉識別系統,實現1公里內目標識別
- Linklist程式碼實現以及程式碼解讀
- 完善“使用者畫像”,識別目標受眾-CRM系統
- 論文解讀丨表格識別模型TableMaster模型AST
- 讀讀objc原始碼(二):weak型別指標的實現OBJ原始碼型別指標
- 論文解讀丨【CVPR 2022】不使用人工標註提升文字識別器效能
- 黑客和程式設計師有什麼區別?程式設計師目標是成神,黑客目標是弒神!黑客程式設計師
- 認識 JavaAgent --獲取目標程式已載入的所有類Java
- 6種常見的地標識別演算法整理和總結演算法
- 詳解影片中動作識別模型與程式碼實踐模型
- zanphp原始碼解讀 – 知識掃盲PHP原始碼
- 面向機器智慧的TensorFlow實戰5:目標識別與分類
- 利用目標跟蹤來提高實時人臉識別處理速度
- 基於深度學習的機器人目標識別和跟蹤深度學習機器人
- 端到端文字識別CRNN論文解讀RNN
- RFID射頻識別的解讀及應用
- css程式碼整理CSS
- C# 手寫識別方案整理C#
- 語音識別的最終目標是真正實現人機互動
- 《spring原始碼解讀》 - IoC 之解析 import 標籤Spring原始碼Import
- 使用OGG新增唯一標識欄位到目標表
- PTAV:實時高精度目標追蹤框架 | ICCV 2017論文解讀框架
- 基於YOLOv5的目標檢測系統詳解(附MATLAB GUI版程式碼)YOLOMatlabGUI
- js資料型別重要知識整理JS資料型別
- python常用程式碼整理Python
- 程式碼規範整理
- 9路棋盤識別-程式碼備份
- SimpleDet:一套簡單通用的目標檢測與物體識別框架框架