當前位置:
首頁 > 知識 > 一個應用於物體識別的遷移學習工具鏈

一個應用於物體識別的遷移學習工具鏈

本文為雷鋒字幕組編譯的技術博客,原標題A complete Transfer Learning Toolchain for Object Detection,作者為 Ralph Fehrer

翻譯 | 龍珂宇 於志鵬 整理 | 凡江

遷移學習指的是,通過對預訓練模型的參數進行微調,將訓練好的模型應用到相似或者只有細微差異的不同任務中。通過這個方法,我們可以基於一些性能頂尖的深度學習模型得到別的高性能模型。儘管聽上去較為簡單,遷移學習仍然在預處理、搭建和測試上有很多的研究空間。

這份教程旨在提供一個工具鏈(流程中工具和相關庫的集合),含有遷移學習中涉及語義分割的一些最基本的內容。以下的教程幫助你搭建一個典型的、具有生產可用性的遷移學習模型。本質上,它是一些特定的工具、框架和模型的結合。我們使用:

google-image-downloader通過圖片URL鏈接向Google發送搜索請求,獲取csv圖片

Labelbox給數據集做標註,輸出及轉換

一個tf模型:TensorFlow』s model zoo,基於COCO dataset訓練

TensorFlow Object Detection API:應用於遷移學習和推斷

一台win10電腦,配備Intel的GPU

每一個單獨的步驟沿一下敘述展開:

我們想要通過微調在COCO數據集上預訓練的模型,來檢測桃子。因為COCO數據集的模型訓練目標是檢測蘋果和橘子,因此只調整預訓練模型頂層的一些參數就足夠了。

請注意,我們並不會在這個教程中製造出一個很成功的模型,因為那需要在步驟1中用到大得多的模型,也需要花費數倍的時間。我們主要致力於給大家展現一個可以應用於其他類似場景的遷移學習工具鏈,從如何構建一個自定義的數據集開始,最終得到一個微調完成的模型。

這個工具鏈中的每一步都有很多的替代選項,並且對於不同的任務,實現遷移學習的方法也有很多種。但如果你想儘快上手,不妨嘗試這個工具鏈,再儘可能地根據你的需求調整每一個步驟。

我們也提供了一個對應的GitHub項目(https://github.com/fera0013/TransferLearningToolchain),上面的文件夾存有大部分我們需要的文件及操作過程中生成的文件。你可以克隆它來複現整個項目,也可以創建分支來擴展和修改該項目。


1. 創建一個數據集

如果你在已有的數據集中找不到一個你想檢測的物體的數據集,你需要自己找到圖片並給他們做標註。有幾種工具可以幫助你減化這個痛苦的操作:接下來幾步簡單地描述了如何使用labelbox, 它是一個基於雲端的標註工具,且操作界面十分簡潔。如果想了解更詳細的操作指南,可以看labelbox documentation(https://github.com/Labelbox/Labelbox)。

1.1 收集圖片URLs

因為找不到桃子圖片的數據集,我們使用Google的圖片搜索來構建我們的基礎數據集。手動從Google上下載成千張圖片非常乏味和耗時,幸運的是,有工具幫助我們通過腳本文件向Google發送搜索請求:

複製google-images-download.py script到腳本文件夾

在當前文件夾下打開command prompt

運行以下指令

我們的數據(桃子)文件夾現在就會出現一個image_urls.csv文件,裡面是桃子圖片的URL鏈接。

1.2 給圖片做標註

在這一步里,我們創建一個labelbox的項目,導入我們的image_urls.csv文件,然後給圖片們做標註。

創建a labelbox project然後導入image_urls.csv

(可選)Adapt the labeling interface調整做標註的界面

使用semantic segmentation interface of labelbox來做標註

將the labeled datasets輸出到json格式

使用這個腳本Use this script將json格式的數據集轉化為COCO的格式

請注意:為了生成TFRecords文件,我們需要將coco-files分成訓練集,驗證集和測試集。你可以創建幾個獨立的labelbox project,然後重複幾遍上述操作;也可以手動或者用腳本把上面生成的東西分成幾部分。

下面這張圖片展示了web-based labelbox的UI:

使用labelbox給桃子做標註,用於之後的語義分割

這一步的輸出是三個json文件,以COCO格式存儲其標籤及其他信息,分別對應我們的訓練集,驗證集和測試集。你們可以在accompanying GitHub-repository中對應的data subfolder里找到示例文件。


2. 遷移學習

2.1 將COCO標籤數據轉換為TFRecords的數據格式

創建TFRecords數據

用命令行cd到與GitHub倉庫中對應的腳本文件夾

運行下面的代碼

腳本會為三個數據集中的每一個輸出一個record文件,並且下載圖片到data子目錄中,你可以在here看到三個.record後綴的文件

2.2 配置模型參數

下面的步驟與與你準備使用的模型有關,也與新類和原始訓練類的關係有關。在本例中,我們訓練了可用於TensorFlow模型zoo中的faster_rcnn_resnet50_coco模型,用來監測桃子。桃子與原始數據集中的蘋果和句子有著很強的相關性。

從here下載faster_rcnn_resnet50_coco

解壓縮下載的tar包

將三個.ckpt後綴文件複製到模型的文件夾中

複製faster_rcnn_resnet50_coco配置文件到模型的子文件夾中

用標籤映射創建label_map.pbtxt文件

打開配置文件並做如下更改

-將 fine-tune checkpoint 改為: fine_tune_checkpoint:「../model/model.ckpt」

- 將 train_input_reader 的input_path值改為: input_path: 「../data/coco_train.record」

- 將 train_input_reader 的label_map_path 值改為: label_map_path: 「../data/label_map.pbtxt」

- 將val_input_reader的 input_path值改為:

input_path: 」../data/coco_val.record」

- 將 val_input_reader 的label_map_path值改為: label_map_path: 「../data/label_map.pbtxt」

7.(可選)根據需要,可以修改其他條目

經過以上步驟,我們創建了label_map.pbtxt,並且修改了faster_rcnn_resnet50_coco.config

2.3 訓練模型

在這個環節,我們根據之前的配置重新訓練模型

複製train.py到腳本的子文件夾

用命令行cd到這個子文件夾

運行下面的代碼

檢查model/train 子文件夾中是否存在此步驟產生的文件。


3. 生成推理圖

首先執行下面的1~3操作,生成的.ckpt文件和frozen_inference_graph.pb文件將用於步驟4、檢驗推理圖和5、推理和評估模型的操作:

將export_inference_graph.py複製到scripts 文件夾。

打開命令行並cd到scripts文件夾

執行下面的腳本:

腳本運行後會在model/fine_tuned_model 文件夾中產生幾個.ckpt.*文件和一個frozen_inference_graph.pb文件


4. 檢驗推理圖

TensorBoard是檢驗Tensorflow程序的一個強大的組件,我們可以用它來更好的理解、調試和優化Tensorflow圖

用pip 命令安裝TensorBoard

將import_pb_to_tensorboard.py拷貝到 scripts 目錄下

在 model/fine_tuned_model 子目錄中創建logdir 目錄

打開命令行並cd到scripts文件夾

執行下面的腳本:

新創建的logdir文件夾中應當包含tensorboard所需的事件文件

完成以下步驟以開始tensorboard:

打開命令行cd到到scripts目錄

運行下面的命令

TensorBoard開始運行後你可以訪問http://localhost:6006,可以在GUI界面中再次看到訓練的模型。

關於TensorBoard的更多信息,詳見TensorBoard documentation或閱讀this tutorial。


5. 推理和評估模型

為了評估模型效果, 我們藉助在步驟3中創建的 frozen_inference_graph.pb 文件,來運行在步驟2.1中創建的coco_testdev.record

將detection_inference.py腳本拷貝到scripts目錄

將infer_detections.py腳本拷貝到scripts目錄

打開命令行cd到scripts目錄

運行下面的腳本

在 /data/inference文件夾中查看運行腳本結果 . 關於TensorFlow API的更多說明請參考this TensorFlow tutorial。

如果對模型最終的訓練效果滿意的話,那麼此模型就算訓練完成。我們將在Practical Deep Learning系列課程中介紹模型的工作流程。


結束語

博客原址 https://medium.com/practical-deep-learning/a-complete-transfer-learning-toolchain-for-semantic-segmentation-3892d722b604

更多文章,關注雷鋒網(公眾號:雷鋒網),添加雷鋒字幕組微信號(leiphonefansub)為好友

備註「我要加入」,To be an AI Volunteer !

從Python入門-如何成為AI工程師

BAT資深演算法工程師獨家研發課程

最貼近生活與工作的好玩實操項目

班級管理助學搭配專業的助教答疑

學以致用拿offer,學完即推薦就業

新人福利

關注 AI 研習社(okweiwu),回復1領取

【超過 1000G 神經網路 / AI / 大數據資料】

如何讓訓練神經網路不無聊?試試遷移學習和多任務學習


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

用 TensorFlow 實現物體檢測的像素級分類
微軟舉辦雲 AI 挑戰賽,對所有學科和領域開放

TAG:AI研習社 |