網頁

2018年6月8日 星期五

Training your Object Detection Classifier

Download TensorFlow Models
Download object detection models from model zoo

set PATH=%PATH%;..\..\protoc-3.5.1-win32\bin
cd models-master\research
protoc.exe object_detection\protos\anchor_generator.proto --python_out=.
protoc.exe object_detection\protos\argmax_matcher.proto --python_out=.
.
.
.
protoc.exe object_detection\protos\train.proto --python_out=.
cd ..\..\

cd models-master\research
python setup.py build
python setup.py install

修改 models-master/research/object_detection/trainer.py
    # Soft placement allows placing on CPU ops without GPU implementation.
    session_config = tf.ConfigProto(allow_soft_placement=True,
                                    log_device_placement=False)
    session_config.gpu_options.allow_growth=True
    session_config.gpu_options.allocator_type = "BFC"
    session_config.gpu_options.per_process_gpu_memory_fraction = 0.4


LabelImg 標註相片,產生 .xml
修改 xml_to_csv.py 由 .xml 產生 .csv
修改 generate_tfrecord.py 內的 class_text_to_int(row_label), 標註從 1 開始,不是 0
由 .csv 產生 .record(TFRecord 檔)
準備 labelmap.pbtxt, 標註從 1 開始,不是 0

準備修改 models-master\research\object_detection\samples\configs


2018年6月6日 星期三

Optimizer 選擇

tf.train.GradientDescentOptimizer
梯度下降法
常見梯度下降法 BGD, SGD, MBGD
BGD: Batch gradient descent
採用整個訓練集的數據來計算,所以速度慢,若遇到大量的數據集會更慢
SGD: Stochastic gradient descent
隨機採用部分的訓練集來計算,所以速度較快,但是因為更新快,會造成震盪
MBGD: Mini-batch gradient descent

tf.train.AdagradOptimizer
Adagrad 會累加之前所有的梯度平方,
對低頻的參數做較大的更新,對高頻做較小的更新,
用於處理大的希疏矩陣,可以自動變更學習速率

tf.train.AdadeltaOptimizer
Adadelta 是對 Adagrad 的擴展,甚至不需要提前設定學習率

tf.train.MomentumOptimizer
如果梯度長時間保持一個方向,則增大參數更新幅度。
可以想像成從山頂放下一個球,會越滾越快

tf.train.RMSPropOptimizer
RMSProp 和 Adadelta 都是為了解決 Adagrad 學習率急劇下降的問題

tf.train.AdamOptimizer
它綜合了 Momentum 和 RMSProp 方法,是目前最常用的優化器



2018年6月5日 星期二

losses function

losses function

分類問題使用 softmax_cross_entropy_with_logits
回歸問題(如預測速度,價格,溫度等)使用均方誤差

loss = tf.reduce_mean(tf.reduce_sum(tf.square(result - prediction), reduction_indices=[1]))

Activation Function

Sigmoid
輸出介於0-1, 特別適用於概率輸出的模型
本身為單調函數(monotonic function)(漸增或漸減), 但導數不是
邏輯上,在訓練期間可能會卡住
一般會使用 softmax function 替代, 使得每一個元素都在0-1, 並且所有元素合為1
適用於多樣分類
圖片來源
Tanh
類似 sigmoid, 輸出介於 -1 到 1
本身為單調函數(monotonic function)(漸增或漸減), 但導數不是
適用於二分類
圖片來源
ReLU
為卷積神經網路或深度學習最常用的函數
輸出範圍從 0 到無限大
計算輛小,只需判斷輸入是否大於 0
圖片來源

激勵函數一般建議使用ReLU, 或者變形的 Leaky ReLU, Tanh 和 Sigmoid 盡量別用,
因為他們有梯度消失的問題,是類神經網路加深時主要的訓練障礙。
圖片來源