TensorFlow 物件檢測 API 教程2

2021-08-15 13:53:54 字數 3573 閱讀 2297

在本教程中,建立了乙個可識別交通燈狀態的交通燈分類器。預先訓練的模型能夠識別影象中的交通燈,但不是狀態(綠色,黃色,紅色等)。可以使用資料集 bosch small traffic light dataset ,這資料集似乎是乙個理想的選擇。

tensorflow object detection api要求所有標記的訓練資料採用 tfrecord 檔案格式。如果資料集帶有儲存在單個.xml 檔案(如 pascal voc dataset )中的標籤,則存在名為create_pascal_tf_record.py的檔案(可能需要稍作修改)可以將資料集轉換為tfrecord檔案。

但是,如果不那麼幸運,這個指令碼工具無法轉換你的資料集,那麼將不得不編寫自己的指令碼,將相應的資料集轉為tfrecord檔案。the bosch dataset labels儲存在單個.yaml檔案中,其中的一段**如下所示

-boxes:

- -

path: ./rgb/train/2015-10-05-16-02-30_bag/720654.png

-boxes:

path: ./rgb/train/2015-10-05-16-02-30_bag/720932.png

注:影象720654.png包含兩個綠燈,720932.png不包含任何內容。

tfrecord將整個資料集的所有標籤(邊界框)和影象合併到乙個檔案中。雖然建立tfrecord檔案有點痛苦,但建立後使用它會非常方便。

tensorflow中的using_your_own_dataset.md檔案提供了乙個示例指令碼,下面將介紹這個指令碼。

def

create_tf_example

(label_and_data_info):

# todo start: populate the following variables from your example.

height = none

# image height

width = none

# image width

filename = none

# filename of the image. empty if image is not from file

encoded_image_data = none

# encoded image bytes

image_format = none

# b'jpeg' or b'png'

xmins = # list of normalized left x coordinates in bounding box (1 per box)

xmaxs = # list of normalized right x coordinates in bounding box

# (1 per box)

ymins = # list of normalized top y coordinates in bounding box (1 per box)

ymaxs = # list of normalized bottom y coordinates in bounding box

# (1 per box)

classes_text = # list of string class name of bounding box (1 per box)

classes = # list of integer class id of bounding box (1 per box)

# todo end

tf_label_and_data = tf.train.example(features=tf.train.features(feature=))

return tf_label_and_data

上面的函式給出了從.yaml檔案中提取的單個影象的標籤和資料資訊。使用這些資訊,需要編寫**來填充所有給定的變數(注意:除了邊界框和類別資訊之外,還必須提供編碼的影象資料)。可以使用 tensorflow.gifle.gfile() 函式完成這個操作。隨著所有這些變數被填充,已經準備好操作指令碼的第二部分。

使用完成的create_tf_record函式,只需建立乙個迴圈來使資料集中的每個標籤呼叫該函式。tensorflow的`示例指令碼為此提供了以下**。

import tensorflow as tf

from object_detection.utils import dataset_util

flags.define_string('output_path', '', 'path to output tfrecord')

flags = flags.flags

defcreate_tf_example

(data_and_label_info):

......

return tf_data_and_label

defmain

(_):

writer = tf.python_io.tfrecordwriter(flags.output_path)

# todo start: write code to read in your dataset to examples variable

file_loc = none

all_data_and_label_info = load(file_loc)

# todo end

for data_and_label_info in all_data_and_label_info:

tf_example = create_tf_example(data_and_label_info)

writer.write(tf_example.serializetostring())

writer.close()

if __name__ == '__main__':

待完成之後,可以執行指令碼。 這裡有 bosch 資料集的 tfrecord 轉換指令碼 ,如果想檢視完整的示例,anthony sarkis 給出了更清晰的實現方式。

如果之前並未修改.bashrc檔案,請確保在執行此指令碼之前,在終端視窗中執行export python(教程第1部分中有說明)。開啟終端,進入放有包含tfrecord指令碼的資料夾和 與.yaml`(或包含映像路徑的其他檔案)檔案位於同一位置的資料(映像)檔案目錄中,執行以下命令

python tf_record.py --output_path training.record
為了確保所做的一切正確,可以比較所建立的訓練記錄檔案的大小與包含所有訓練影象的資料夾的大小。如果他們幾乎完全一樣,那就算是以上正確完成了!

tensorflow 目標檢測訓練及評估

基於tensorflow訓練車輛檢測器原始碼已上傳github,裡面整合了一鍵式訓練的指令碼。0.硬體,一塊1080ti及以上顯示卡的機器,不建議用cpu訓練。1.安裝gpu版tensorflow,並搭建訓練環境 sudo pip install tensorflow gpu sudo pip in...

JS物件檢測

簡單複習 typeof檢測基本型別 null返回object instanceof檢測物件例項 基於原型鏈 typeof variable 操作符 字串 string 數字 numbel 布林值 boolean 或undefined undefined null或其他引用型別 object 函式返回...

opencv 物件檢測

參考 1 官方文件api 2 d6 d00 tutorial py root.html 官方英文教程 3 4 高階教程 5 官方英文教程 6 7 8 opencv論壇 9 官方github 10 注 安裝的版本 opencv python 3.3.0 cp36 cp36m win amd64.whl...