文檔標尺怎么弄出來?(怎么把標尺弄出來)
844
2022-05-30
一、?問題描述
在目標檢測任務中,不同數據集的目標框的清晰度可能會有差異,目標框清晰度的敏感度就是衡量這個差異的變量,而不同的目標框清晰度的數值對模型訓練以及推理都會有影響。
圖1 目標框清晰度舉例,左圖是原始圖,右圖是其中一個目標框的清晰度發生了變化
二、解決方法
在深度學習任務中,Dropout是一種被廣泛使用的正則化技術,這種技術存在的缺點就是隨機的丟棄掉特征層的某一個單元,使得相鄰特征單元共享的語義信息也會一起丟棄掉,DropBlock改進了上述問題,即可以按照特征塊來進行丟棄,對深度學習網絡進行正則化處理。DropBlock 是類似Dropout 的簡單方法。二者的主要區別在于DropBlock丟棄層特征圖的相鄰區域,而不是丟棄單獨的隨機單元。 具體詳細介紹參見DropBlock論文
DropBlock模塊主要有2個參數,block_size,γ。
block_size:表示dropout的方塊的大小(長,寬),當block_size=1,DropBlock 退化為傳統的dropout,正常可以取3,5,7
γ:表示drop過程中的概率,也就是伯努利函數的概率
Dropout(對應b圖)和DropBlock(對應c圖)的對比
圖2 Dropout和Dropblock原理對比圖,其中,b圖表示Dropout,c圖表示DropBlock
tf版的官方實現方式如下:
class?Dropblock(object): ??"""DropBlock:?a?regularization?method?for?convolutional?neural?networks. ????DropBlock?is?a?form?of?structured?dropout,?where?units?in?a?contiguous ????region?of?a?feature?map?are?dropped?together.?DropBlock?works?better?than ????dropout?on?convolutional?layers?due?to?the?fact?that?activation?units?in ????convolutional?layers?are?spatially?correlated. ????See?https://arxiv.org/pdf/1810.12890.pdf?for?details. ??""" ??def?__init__(self, ???????????????dropblock_keep_prob=None, ???????????????dropblock_size=None, ???????????????data_format='channels_last'): ????self._dropblock_keep_prob?=?dropblock_keep_prob ????self._dropblock_size?=?dropblock_size ????self._data_format?=?data_format ??def?__call__(self,?net,?is_training=False): ????"""Builds?Dropblock?layer. ????Args: ??????net:?`Tensor`?input?tensor. ??????is_training:?`bool`?if?True,?the?model?is?in?training?mode. ????Returns: ??????A?version?of?input?tensor?with?DropBlock?applied. ????""" ????if?(not?is_training?or?self._dropblock_keep_prob?is?None?or ????????self._dropblock_keep_prob?==?1.0): ??????return?net ????logging.info('Applying?DropBlock:?dropblock_size?%d,' ?????????????????'net.shape?%s',?self._dropblock_size,?net.shape) ????if?self._data_format?==?'channels_last': ??????_,?height,?width,?_?=?net.get_shape().as_list() ????else: ??????_,?_,?height,?width?=?net.get_shape().as_list() ????total_size?=?width?*?height ????dropblock_size?=?min(self._dropblock_size,?min(width,?height)) ????#?Seed_drop_rate?is?the?gamma?parameter?of?DropBlcok. ????seed_drop_rate?=?( ????????1.0?-?self._dropblock_keep_prob)?*?total_size?/?dropblock_size**2?/?( ????????????(width?-?self._dropblock_size?+?1)?* ????????????(height?-?self._dropblock_size?+?1)) ????#?Forces?the?block?to?be?inside?the?feature?map. ????w_i,?h_i?=?tf.meshgrid(tf.range(width),?tf.range(height)) ????valid_block?=?tf.logical_and( ????????tf.logical_and(w_i?>=?int(dropblock_size?//?2), ???????????????????????w_i?=?int(dropblock_size?//?2), ???????????????????????h_i?=?1 ????block_pattern?=?tf.cast(block_pattern,?dtype=tf.float32) ????if?self._data_format?==?'channels_last': ??????ksize?=?[1,?self._dropblock_size,?self._dropblock_size,?1] ????else: ??????ksize?=?[1,?1,?self._dropblock_size,?self._dropblock_size] ????block_pattern?=?-tf.nn.max_pool( ????????-block_pattern, ????????ksize=ksize, ????????strides=[1,?1,?1,?1], ????????padding='SAME', ????????data_format='NHWC'?if?self._data_format?==?'channels_last'?else?'NCHW') ????percent_ones?=?tf.cast(tf.reduce_sum(block_pattern),?tf.float32)?/?tf.cast( ????????tf.size(block_pattern),?tf.float32) ????net?=?net?/?tf.cast(percent_ones,?net.dtype)?*?tf.cast( ????????block_pattern,?net.dtype) ????return?net
三、實驗驗證
在開源數據集Canine Coccidiosis Parasite上面進行實驗,該數據集只有一個類別,使用DropBlock之前,對目標框的清晰度敏感度分析如下所示:
圖3 使用DropBlock之前,檢測模型對目標框亮度敏感度分析
使用DropBlock之后,對目標框的清晰度敏感度進行分析,如下所示,可以看到,目標框清晰度敏感度從原來的0.0718降低到0.0204。
圖4?使用DropBlock之后,檢測模型對目標框亮度敏感度分析
可以看到,使用DropBlock之后,目標框的清晰度敏感度得到了比較大的改善
四、用戶建議
在模型推理結果中,如果檢測出來的類別對于目標框清晰度的敏感程度比較大,推薦在訓練的時候,使用DropBlock進行模型優化和加強。
AI開發平臺ModelArts EI企業智能 深度學習 AI平臺 TensorFlow
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。