Yolov-1-TX2上用YOLOv3訓練自己數據集的流程(VOC2007-TX2-GPU)
Yolov--2--一文全面瞭解深度學習性能優化加速引擎---TensorRT
Yolov--3--TensorRT中yolov3性能優化加速(基於caffe)
yolov--10--目標檢測模型的參數評估指標詳解、概念解析
yolov--11--YOLO v3的原版訓練記錄、mAP、AP、recall、precision、time等評價指標計算
yolov--12--YOLOv3的原理深度剖析和關鍵點講解
yolov--13--voc的xml轉json格式出現問題-Converting PASCAL VOC dataset... Index exceeds matrix dimensions- 解決方法
卷積層和池化層後輸出大小計算公式
卷積後圖片輸出大小几個數
W:圖像寬,H:圖像高,D:圖像深度(通道數)
F:卷積核寬高,N:卷積核(過濾器)個數
S:步長,P:用零填充個數
卷積後輸出圖像大小:
Width=(W-F+2P)/S+1
Height=(H-F+2P)/S+1
卷積後輸出圖像深度:
N=D
輸出圖像大小: (width,height,N)
weight個數:
F*F*D*N
bias個數:
N
總結:卷積輸出大小=[(輸入大小-卷積核(過濾器)大小+2*P)/步長]+1
通用的卷積時padding 的選擇
如卷積核寬高爲3時 padding 選擇1
如卷積核寬高爲5時 padding 選擇2
如卷積核寬高爲7時 padding 選擇3
池化後圖片輸出大小及個數
W:圖像寬,H:圖像高,D:圖像深度(通道數)
F:卷積核寬高,S:步長
池化後輸出圖像大小:
W=(W-F)/S+1
H=(H-F)/S+1
池化後輸出圖像深度:
N=D
總結:池化輸出大小=[(輸入大小-卷積核(過濾器)大小)/步長]+1
參考:
https://blog.csdn.net/ddy_sweety/article/details/79798117
多輸出通道:
(n個輸出通道需要用n個卷積核)
https://blog.csdn.net/hao5335156/article/details/80554951
在深度學習中,卷積核的個數,就是就是經過該卷積核之後的輸出的通道數。
對於輸入的每個通道,輸出的每個通道上的卷積核是不一樣的,類似於圖片中的樣子。
比如:
輸入是28 * 28 * 192,然後經過尺寸爲3 * 3,通道數爲128的卷積核,那麼卷積核的參數是:
3 * 3 * 192 * 128
原文鏈接:https://blog.csdn.net/zh_ch_yu/article/details/88383196
一種卷積核得到一個通道,所以特徵圖個數=輸出通道數=卷積核個數。
MobilenetV2網絡函數調用
# coding: utf-8
import tensorflow as tf
from model.layers import *
def MobilenetV2(input_data, training):
with tf.variable_scope('MobilenetV2'):
conv = convolutional(name='Conv', input_data=input_data, filters_shape=(3, 3, 3, 32),
training=training, downsample=True, activate=True, bn=True) #卷積核的尺寸filters_shape爲:寬*高*輸入通道數*輸出通道數
conv = inverted_residual(name='expanded_conv', input_data=conv, input_c=32, output_c=16,
training=training, t=1)
conv = inverted_residual(name='expanded_conv_1', input_data=conv, input_c=16, output_c=24, downsample=True,
training=training)
conv = inverted_residual(name='expanded_conv_2', input_data=conv, input_c=24, output_c=24, training=training)
conv = inverted_residual(name='expanded_conv_3', input_data=conv, input_c=24, output_c=32, downsample=True,
training=training)
conv = inverted_residual(name='expanded_conv_4', input_data=conv, input_c=32, output_c=32, training=training)
feature_map_s = inverted_residual(name='expanded_conv_5', input_data=conv, input_c=32, output_c=32,
training=training)
conv = inverted_residual(name='expanded_conv_6', input_data=feature_map_s, input_c=32, output_c=64,
downsample=True, training=training)
conv = inverted_residual(name='expanded_conv_7', input_data=conv, input_c=64, output_c=64, training=training)
conv = inverted_residual(name='expanded_conv_8', input_data=conv, input_c=64, output_c=64, training=training)
conv = inverted_residual(name='expanded_conv_9', input_data=conv, input_c=64, output_c=64, training=training)
conv = inverted_residual(name='expanded_conv_10', input_data=conv, input_c=64, output_c=96, training=training)
conv = inverted_residual(name='expanded_conv_11', input_data=conv, input_c=96, output_c=96, training=training)
feature_map_m = inverted_residual(name='expanded_conv_12', input_data=conv, input_c=96, output_c=96,
training=training)
conv = inverted_residual(name='expanded_conv_13', input_data=feature_map_m, input_c=96, output_c=160,
downsample=True, training=training)
conv = inverted_residual(name='expanded_conv_14', input_data=conv, input_c=160, output_c=160, training=training)
conv = inverted_residual(name='expanded_conv_15', input_data=conv, input_c=160, output_c=160, training=training
conv = inverted_residual(name='expanded_conv_16', input_data=conv, input_c=160, output_c=320, training=training)
feature_map_l = convolutional(name='Conv_1', input_data=conv, filters_shape=(1, 1, 320, 1280),
training=training, downsample=False, activate=True, bn=True)
return feature_map_s, feature_map_m, feature_map_l