1. 程式人生 > >GluonCV:用Pascal VOC資料訓練YOLO v3(上)準備資料+簡單訓練命令

GluonCV:用Pascal VOC資料訓練YOLO v3(上)準備資料+簡單訓練命令

1.GluonCV簡介

GluonCV提供計算機視覺中state-of-the-artSOTA)深度學習模型的實現。

它專為工程師,研究人員和學生設計,可基於這些模型快速產生原型產品和研究思路。 該工具包提供四個主要功能: 

(1)訓練指令碼用來複現研究論文中報告的SOTA結果

(2)大量預訓練模型

(3)精心設計的API可大大降低實施複雜性

(4)社群支援 

2.安裝環境

訓練了一下GluonCV提供的 YOLOv3,記錄一下使用過程

首先是安裝環境

pip install --upgrade pip

apt-get update

pip install gluoncv --pre --upgrade

pip install mxnet-cu90 --pre --upgrade

apt-get install python-tk

3.準備pascal voc資料集

Pascal VOC是用於目標檢測的資料集,benchmark最常用的組合是使用2007 trainval和2012 trainval進行訓練,使用2007test進行驗證。 本節將介紹為GluonCV準備此資料集的步驟。

3.1 下載pascal voc資料集

我們需要來自Pascal VOC的以下四個檔案:

下載和解壓縮這些檔案的最簡單方法是使用資料集自動下載指令碼pascal_voc_down.py

wget https://github.com/JackwithWilshere/GluonCV_YOLOv3/blob/master/pascal_voc_down.py

執行

python pascal_voc_down.py

它將自動下載並將資料提取到〜/ .mxnet / datasets / voc中。

3.2 用GluonCV讀取分析資料集

此處是官方教程裡分析的pascal_voc.py

wget https://github.com/JackwithWilshere/GluonCV_YOLOv3/blob/master/pascal_voc.py

如果直接在linux命令列執行

python pascal_voc.py

因為沒有GUI終端,會報錯如下,(如果有GUI介面,比如VNC server,不會報錯,並且後面可顯示邊界框圖片)

_tkinter.TclError: no display name and no $DISPLAY environment variable

解決方法是

python檔案中:

在 from matplotlib import pylot 之前,新增程式碼:

如下:

import matplotlib as mpl
mpl.use('Agg')

from matplotlib import pylot 

下面是對其語句的分析(可以用jupyter notebook)

使用gluoncv.data.VOCDetection可以直接載入影象和標籤。 

from gluoncv import data, utils
from matplotlib import pyplot as plt

train_dataset = data.VOCDetection(splits=[(2007, 'trainval'), (2012, 'trainval')])
val_dataset = data.VOCDetection(splits=[(2007, 'test')])
print('Num of training images:', len(train_dataset))
print('Num of validation images:', len(val_dataset))



Out:

Num of training images: 16551
Num of validation images: 4952

現在讓我們看一個例子。 

train_image, train_label = train_dataset[200]
print('Image size (height, width, RGB):', train_image.shape)


Out:
Image size (height, width, RGB): (360, 480, 3)

通過從0到4的切片列獲取邊界框 

bounding_boxes = train_label[:, :4]
print('Num of objects:', bounding_boxes.shape[0])
print('Bounding boxes (num_boxes, x_min, y_min, x_max, y_max):\n',
      bounding_boxes)


Out:

Num of objects: 2
Bounding boxes (num_boxes, x_min, y_min, x_max, y_max):
 [[209.  32. 327. 190.]
 [ 64.  72. 402. 309.]]

通過切片第5列取類ids 

class_ids = train_label[:, 4:5]
print('Class IDs (num_boxes, ):\n', class_ids)


Out:

Class IDs (num_boxes, ):
 [[14.]
 [12.]]

視覺化影象,邊界框 (需要有GUI,即視覺化介面,比如在vnc server執行)

utils.viz.plot_bbox(train_image.asnumpy(), bounding_boxes, scores=None,
                    labels=class_ids, class_names=train_dataset.classes)
plt.show()

官方準備資料集的詳細解釋

4.訓練YOLO v3

wget https://github.com/JackwithWilshere/GluonCV_YOLOv3/blob/master/train_yolo3.py

(1)在GPU:0上用Pascal VOC資料訓練預設的darknet53模型

python train_yolo3.py --gpus 0

(2)在GPU:0,1,2,3上用Pascal VOC資料訓練darknet53模型,並使用了synchronize BatchNorm。

python train_yolo3.py --gpus 0,1,2,3 --network darknet53 --syncbn

詳細訓練分析接下篇

參考資料