使用TensorFlow一步步進行目標檢測 1

2021-08-21 18:49:28 字數 2792 閱讀 3315

目標檢測(object detection)是人工智慧最基礎的應用,不論是我們常見的人臉識別,還是高大上的自動駕駛,都離不開目標檢測。要從一幅複雜的畫面中識別出物體或人物,需要複雜的演算法,想想就覺得深奧,不過好在有tensorflow這樣的框架,具有強大的目標檢測api,讓沒有機器學習背景的人也可以快速構建和部署功能強大的影象識別軟體。

本系列文章就是來**如何借助tensorflow深度學習框架來構建目標檢測軟體。

回顧我之前寫的系列文章,tensorflow實現機器學習演算法的一般流程為:

載入資料集

定義演算法公式,也就是前向計算的計算圖

定義損失函式(loss function),選定優化器,並指定優化器優化損失函式

對資料進行迭代訓練

在測試集或交叉驗證資料集上進行準確率評估。

不過在實際專案中,我們可能會走一些捷徑,其原因在於:

訓練模型需要大量資料,通常情況下我們沒有那麼多有效的資料,特別是標註好的資料。

訓練模型需要耗費大量的時間進行調參,為了獲得乙個滿意的引數,可能需要反覆嘗試。

將思維發散一點,將來一定會出現機器學習模型商店,大的公司和研究機構可以將預訓練模型放到商店中,開發者可以根據需要購買模型,將精力集中在業務上,從而形成乙個良性的生態。

回到文章主題,本文將建立乙個交通訊號燈分類器,它將嘗試確定燈是綠色、黃色還是紅色。內容包括選擇模型、適配資料集、建立和標註你自己的資料集、修改模型配置檔案、訓練模型、儲存模型,以及最後在軟體中部署模型。

因為我的主要工作環境是ubuntu,所以文章中都是以ubuntu 16.04為例進行說明,不過tensorflow和python都具有良好的移植性,如果你使用的是windows或macos,理論上只需稍作修改,即可工作。

選擇模型

github上有tensorflow模型集合,可以通過簡單的命令獲得這些預訓練的模型:

git clone
該倉庫中包含多個tensorflow模型,主要分為如下幾大類:

官方模型(official目錄)是使用tensorflow的高階api的示例模型的集合,它們得到良好的維護,支援最新穩定api,經過了充分的測試,並進行過優化,是tensorflow使用者的首選。 我們特別推薦新的tensorflow使用者從這裡開始。

研究模型(research目錄)是研究人員在tensorflow中實施的模型,它們沒有得到官方支援,也不能保證在後續的tensorflow發布版本中工作,帶有一些研究性質。考慮到深度學習的快速發展,一些最新的研究成果不會出現在官方模型中,經常來這裡找找,說不定有驚喜。

samples資料夾包含**片段和較小的模型,用於演示tensorflow的功能,包括各種部落格文章中提供的**。

tutorials資料夾是tensorflow教程中描述的模型集合。

每個模型下面都有readme,其中包含安裝說明。我們先瀏覽一下official下的模型,並沒有我們所需要的,再來看research目錄,裡面有乙個object_detection子目錄,這裡面有我們所需的目標檢測模型。

object_detections目錄下的內容相當多,有資料集、模型檔案、測試**、示例等等,模型檔案位於models子目錄下,裡面的模型也真不少:

詳細的模型評估還可以參考research/object_detection/g3doc/detection_model_zoo.md文件。你如果想要認真評估模型在你的資料集上的效果,還可以使用測試**測試模型。

測試模型

在research/objection_detection/ 資料夾中,開啟 object_detection_tutorial.ipynb並執行之(具體方法請google搜尋jupyter notebook)。

此時,你應該有一些要分類的樣本影象。將它們放在tests_images資料夾中,並將它們命名為image3.jpg、image4.jpg、imagen.jpg等。修改notebook中的如下**行:

test_image_paths = [ os.path.join(path_to_test_images_dir, 'image{}.jpg'.format(i)) for i in range(1, n+1) ]
其中n是資料夾中的影象的最後乙個數字。當我用3個樣本交通燈影象測試時,我得到了以下結果:

正如上圖所示,模型能夠對第一張影象中的訊號燈進行識別,但無法識別第二張影象中的訊號燈。

示例中的預設模型是tensorflow提供的最簡單(也是最快)的預訓練模型。要測試新模型,只需將jupyter notebook中的model_name替換為指定模型。我最終選擇了r-fcn模型,該模型在我的樣本影象上產生了以下結果。

參考step by step tensorflow object detection api tutorial — part 1: selecting a model

一步步學ROS

最近因為看svo的 裡面用到catkin決定要好好看ros,年前學會基本操作。啟動節點 rosrun package name executable name 檢視節點 rosnode list 注 rosout 節點是乙個特殊的節點,通過 roscore 自動啟動 檢視特定節點的資訊 rosnod...

windows Thrift c 一步步搭建

1.thrift 原始碼路徑 2.libevent原始碼路徑 3.boost路徑 安裝 conan install boost 1.68.0 conan stable 4.openssl路徑 安裝 conan install openssl 1.1.1a conan stable conan安裝bo...

一步步啟動linux

可以一步一步啟動linux.在ubantu剛一啟動時,按c健即進入grub 提示符狀態,在此狀態下輸入 我用的是ubuntu 13 grub linux vmlinuz grub ls boot grub initrd boot initrd.img 3.11.0 15 generic grub b...