tensorflow objection detection model(輸入模型加載)

上一篇是網(wǎng)絡(luò)模型的加載昙衅,這一篇是輸入模型的加載,之后還有訓(xùn)練模型的加載团滥。
輸入模型的加載的開(kāi)始是train.py文件中的

create_input_dict_fn = functools.partial(input_reader_builder.build, input_config)

那就進(jìn)入input_reader_builder.build看一看颓影。

parallel_reader = tf.contrib.slim.parallel_reader
def build(input_reader_config):
#判斷類型輸入的類型是否為input_reader_pb2.InputReader)
  if not isinstance(input_reader_config, input_reader_pb2.InputReader):
    raise ValueError('input_reader_config not of type '
                     'input_reader_pb2.InputReader.')
#只接受輸入類型為tf_record_input_reader的輸入
  if input_reader_config.WhichOneof('input_reader') == 'tf_record_input_reader':
#獲取數(shù)據(jù)集存放位置
    config = input_reader_config.tf_record_input_reader

    _, string_tensor = parallel_reader.parallel_read(
        config.input_path,
        reader_class=tf.TFRecordReader,
        num_epochs=(input_reader_config.num_epochs
                    if input_reader_config.num_epochs else None),
        num_readers=input_reader_config.num_readers,
        shuffle=input_reader_config.shuffle,
        dtypes=[tf.string, tf.string],
        capacity=input_reader_config.queue_capacity,
        min_after_dequeue=input_reader_config.min_after_dequeue)

    return tf_example_decoder.TfExampleDecoder().decode(string_tensor)

  raise ValueError('Unsupported input_reader_config.')

可以看出核心是使用了tf.contrib.slim.parallel_reader這個(gè)庫(kù)中的函數(shù)《芰郏看看這個(gè)函數(shù)的說(shuō)明犬性。

ef parallel_read(data_sources,
                  reader_class,
                  num_epochs=None,
                  num_readers=4,
                  reader_kwargs=None,
                  shuffle=True,
                  dtypes=None,
                  capacity=256,
                  min_after_dequeue=128,
                  seed=None,
                  scope=None):
  """
#從原始的數(shù)據(jù)文件使用多個(gè)reader獲取多個(gè)record。
#并行的使用ParallelReader從多個(gè)文件讀取數(shù)據(jù)
#多個(gè)readers是根據(jù) `reader_class` 和 `reader_kwargs'進(jìn)行創(chuàng)建的腾仅。
#如果shuffle為true乒裆,則common_queue將會(huì)是一個(gè)RandomShuffleQueue ,否則就是一個(gè)FIFOQueue.
參數(shù)說(shuō)明
    data_sources: 一系列的文件位置比如: /path/to/train@128, /path/to/train* or /tmp/.../train*
    reader_class: 一個(gè)繼承了io_ops.ReaderBase 的子類比如 TFRecordReader
    num_epochs: 間隔多少次從數(shù)據(jù)源讀取一次文件攒砖,如果沒(méi)有給缸兔,就一直讀取
    num_readers: 一個(gè)整數(shù)日裙,表示創(chuàng)建多少個(gè)數(shù)據(jù)讀取器。
    reader_kwargs: 一個(gè)可選的字典惰蜜,表示of kwargs for the reader.
    shuffle: 是否進(jìn)行數(shù)據(jù)的打亂操作昂拂。
    dtypes:  一個(gè)類型的列表,dtypes的長(zhǎng)度一定等于每一個(gè)記錄中元素的長(zhǎng)度抛猖。如果為None格侯,則為[tf.string, tf.string] for (key, value).
    capacity: 整數(shù),表示common_queue中需要包含多少數(shù)據(jù).
    min_after_dequeue: 一個(gè)整數(shù)财著,在出隊(duì)后common_queue中最少的數(shù)據(jù)記錄的量联四,和打亂有關(guān)。
    seed:RandomShuffleQueue所需的隨機(jī)種子.
    scope: Optional name scope for the ops.
  Returns:
    key, value: a tuple of keys and values from the data_source.
  """

當(dāng)然讀取數(shù)據(jù)的最后一句話就是對(duì)獲取到的信息進(jìn)行解析撑教。

return tf_example_decoder.TfExampleDecoder().decode(string_tensor)

tf_example_decoder是一個(gè)用于解析包含了序列化后的tensorflow.Exampleprotos的解析器朝墩。

 def decode(self, tf_example_string_tensor):
# 解析序列化后的tensroflow example并返回一個(gè)tensor的dict
# 傳入?yún)?shù):一個(gè)序列化后的tensorflow example proto對(duì)象
# 傳出對(duì)象: 返回的tensor的dict包含如下內(nèi)容:
# fields.InputDataFields.image - 一個(gè)三維類型為uint8的tensor,其大小為[None, None, 3]表示的是圖片
#     fields.InputDataFields.source_id - 一個(gè)string類型的tensor包含的是圖片的id
#      fields.InputDataFields.key - 一個(gè)string類型的tensor伟姐,是圖片的hd5碼
#      fields.InputDataFields.filename - 一個(gè)string類型的tensor收苏,包含了數(shù)據(jù)庫(kù)的名稱
#      fields.InputDataFields.groundtruth_boxes - 二維的float32的 tensor格式為
#        [None, 4]包含box的四個(gè)頂點(diǎn)信息.
#      fields.InputDataFields.groundtruth_classes - 1維的 int64型 tensor格式為shape
#        [None]包含box所對(duì)應(yīng)的object類型
#      fields.InputDataFields.groundtruth_area - 1維的 float32 類型的tensor格式為
#        [None] 包含了物品的像素掩膜信息。
#      fields.InputDataFields.groundtruth_is_crowd - 1D bool tensor of shape
#        [None] indicating if the boxes enclose a crowd.
#      fields.InputDataFields.groundtruth_difficult - 1D bool tensor of shape
#        [None] indicating if the boxes represent `difficult` instances.
#      fields.InputDataFields.groundtruth_instance_masks - 3D int64 tensor of
#        shape [None, None, None] containing instance masks.
#      fields.InputDataFields.groundtruth_instance_classes - 1D int64 tensor
#        of shape [None] containing classes for the instance masks.
    serialized_example = tf.reshape(tf_example_string_tensor, shape=[])
#構(gòu)建解析器
    decoder = slim_example_decoder.TFExampleDecoder(self.keys_to_features,
                                                    self.items_to_handlers)
    keys = decoder.list_items()
#解析
    tensors = decoder.decode(serialized_example, items=keys)
    tensor_dict = dict(zip(keys, tensors))
    is_crowd = fields.InputDataFields.groundtruth_is_crowd
    tensor_dict[is_crowd] = tf.cast(tensor_dict[is_crowd], dtype=tf.bool)
    tensor_dict[fields.InputDataFields.image].set_shape([None, None, 3])
    return tensor_dict

數(shù)據(jù)已經(jīng)獲取愤兵,接下來(lái)就是solver了鹿霸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市秆乳,隨后出現(xiàn)的幾起案子懦鼠,更是在濱河造成了極大的恐慌,老刑警劉巖屹堰,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肛冶,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡双藕,警方通過(guò)查閱死者的電腦和手機(jī)淑趾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)忧陪,“玉大人扣泊,你說(shuō)我怎么就攤上這事∷惶” “怎么了延蟹?”我有些...
    開(kāi)封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)叶堆。 經(jīng)常有香客問(wèn)我阱飘,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任沥匈,我火速辦了婚禮蔗喂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘高帖。我一直安慰自己缰儿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布散址。 她就那樣靜靜地躺著乖阵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪预麸。 梳的紋絲不亂的頭發(fā)上瞪浸,一...
    開(kāi)封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音吏祸,去河邊找鬼对蒲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛犁罩,可吹牛的內(nèi)容都是我干的齐蔽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼床估,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了诱渤?” 一聲冷哼從身側(cè)響起丐巫,我...
    開(kāi)封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勺美,沒(méi)想到半個(gè)月后递胧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赡茸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年缎脾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片占卧。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡遗菠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出华蜒,到底是詐尸還是另有隱情辙纬,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布叭喜,位于F島的核電站贺拣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜譬涡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一闪幽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涡匀,春花似錦盯腌、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至拾酝,卻和暖如春燕少,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蒿囤。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工客们, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人材诽。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓底挫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親脸侥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子建邓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容