1. 程式人生 > >【Mask R-CNN】(八):程式碼理解demo.ipynb

【Mask R-CNN】(八):程式碼理解demo.ipynb

首先,匯入包。

import os
import sys
import random
import math
import numpy as np
import skimage.io
import matplotlib
import matplotlib.pyplot as plt

#設定根目錄
ROOT_DIR = os.path.abspath("../")

#匯入Mask R-CNN
sys.path.append(ROOT_DIR)
from mrcnn import utils
import mrcnn.model as modellib
from mrcnn import visualize
#匯入coco的配置
sys.path.append(os.path.join(ROOT_DIR, "samples/coco/"))
import coco
%matplotlib inline 

#設定寫log的目錄以及儲存訓練model的目錄
MODEL_DIR = os.path.join(ROOT_DIR, "logs")

#預訓練模型的目錄
COCO_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_coco.h5")
#如果檔案不存在,則下載COCO預訓練權重
if not os.path.exists(COCO_MODEL_PATH):
    utils.download_trained_weights(COCO_MODEL_PATH)

#測試圖片目錄
IMAGE_DIR = os.path.join(ROOT_DIR, "images")

這裡將會使用一個在MS_COCO資料集上訓練好的模型。這個模型的配置資訊位於coco.py檔案的CocoConfig類中。

在進行預測時,需要對這個配置做一些小的改動以匹配當前的任務。具體做法是,繼承CocoConfig類並更改你需要的屬性。

class InferenceConfig(coco.CocoConfig):
    #將batch size設定為1,因為在預測時一次只需要處理一副影象
    #Batch size = GPU_COUNT * IMAGES_PER_GPU
    GPU_COUNT = 1
    IMAGES_PER_GPU = 1

config = InferenceConfig()
#將配置資訊打印出來
config.display()

接下來就建立模型物件並載入訓練好的權重。

#建立預測模型物件.
model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR, config=config)

#載入MS-COCO訓練權重
model.load_weights(COCO_MODEL_PATH, by_name=True)

該模型分類物體並返回類別ID,類別ID以整型值來區分每一類物體。

有些資料集為類別賦予整型值以便於區分,但是有些資料集沒有這樣做。ID通常是順序連續的,但不絕對。為了增強一致性並且在同一時間可以訓練多個源資料,這裡的Dataset class為每個類分配了自己的整型ID。

所以要注意將class IDs對映到正確的class names。

這裡我們並不想下載所有的COCO資料集來測試這個demo,所以將所有的class names預先存在一個list中。class name的索引即代表了它們的ID。

# COCO Class names
#索引即代表ID.例如,要獲取teddy bear的ID
# use: class_names.index('teddy bear')
class_names = ['BG', 'person', 'bicycle', 'car', 'motorcycle', 'airplane',
               'bus', 'train', 'truck', 'boat', 'traffic light',
               'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird',
               'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear',
               'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie',
               'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball',
               'kite', 'baseball bat', 'baseball glove', 'skateboard',
               'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup',
               'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
               'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza',
               'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed',
               'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote',
               'keyboard', 'cell phone', 'microwave', 'oven', 'toaster',
               'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors',
               'teddy bear', 'hair drier', 'toothbrush']

一切準備好後,就可以開始預測。從測試資料夾內隨機選取一副影象。

#隨機選擇影象
file_names = next(os.walk(IMAGE_DIR))[2]
#讀取影象
image = skimage.io.imread(os.path.join(IMAGE_DIR, random.choice(file_names)))

#執行檢測
results = model.detect([image], verbose=1)

#視覺化檢測結果
r = results[0]
visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'], 
                            class_names, r['scores'])

首先會打印出相關資訊。

Processing 1 images
image                    shape: (476, 640, 3)         min:    0.00000  max:  255.00000
molded_images            shape: (1, 1024, 1024, 3)    min: -123.70000  max:  120.30000
image_metas              shape: (1, 89)               min:    0.00000  max: 1024.00000

接著會顯示檢測結果,包含bounding box, probability和mask。

相關推薦

Mask R-CNN程式碼理解demo.ipynb

首先,匯入包。 import os import sys import random import math import numpy as np import skimage.io import matplotlib import matplotlib.pyplot as

Mask R-CNNModuleNotFoundErrorNo module named 'pycocotools'的解決辦法

在執行 python samples/coco/coco.py train --dataset=. --model=coco --download=True 時報錯: ModuleNotFound

Mask R-CNN十一程式碼理解inspect_model.ipynb

一、導包 import os import sys import random import math import re import time import numpy as np import tensorflow as tf import matplotlib im

TeeChart Pro ActiveX教程ADO資料庫訪問

下載TeeChart Pro ActiveX最新版本 介紹 將TeeChart控制元件連線到ADO.NET資料庫可以在設計時使用TeeChart編輯器完成,並在執行時使用幾行程式碼完成。 任何Series都可以使用TeeChart Editor連線到ADO.NET表或查詢。每個系列

深度學習筆記——理論與推導之Structured LearningSequence Labeling Problem

Sequence Labeling(序列標註問題),可以用RNN解決,也可以用Structured Learning(two steps,three problems)解決 常見問題: - POS tagging(標記句子中每個詞的詞性):

跟廠長學PHP7核心深入理解字串的實現

在前面大致預覽了常用變數的結構之後,我們今天來仔細的剖析一下字串的具體實現。 一、字串的結構 struct _zend_string { zend_refcounted_h gc; /* 字串類別及引用計數 */ zend_ulong h; /* 字

CNN筆記通俗理解卷積神經網路

   在深度學習中,有一個很重要的概念,就是卷積神經網路(CNN),是入門深度學習需要搞懂的東西。 1 卷積網路         也叫卷積神經網路(convolutional neural networ

目標檢測之網路篇3Faster R-CNN

前言 1.有關VGG16結構,參見:VGG16圖形化描述 2.本週目標是看三篇網路類,讀到第三篇Faster R-CNN的時候我發現需要先弄懂R-CNN以及Fast R-CNN。引用@v_JULY_v的文章的總結: R-CNN 1.在影象中確定約1000-200

Spring Cloud配置中心服務化與高可用Finchley 版

outer get btn discovery ofo DC master 配置 兩個 Spring Cloud(八):配置中心(服務化與高可用)【Finchley 版】 發表於 2018-04-19 | 更新於 2018-04-26 | 本文接之前的《Spring

Unity Shader ------ 高階紋理之立方體紋理及光線反射、折射的實現

筆者使用的是 Unity 2018.2.0f2 + VS2017,建議讀者使用與 Unity 2018 相近的版本,避免一些因為版本不一致而出現的問題。      【Unity Shader】(三) ------ 光照模型原理及漫反射和

Unity Shader ------ 高級紋理之立方體紋理及光線反射、折射的實現

int rap 原理 src 靜態 toc lighting ati orm 筆者使用的是 Unity 2018.2.0f2 + VS2017,建議讀者使用與 Unity 2018 相近的版本,避免一些因為版本不一致而出現的問題。 【Unity Shade

Unity Shader ------ 高級紋理

向量 sdn 定義 紋理 天空 get main .com 而是 筆者使用的是 Unity 2018.2.0f2 + VS2017,建議讀者使用與 Unity 2018 相近的版本,避免一些因為版本不一致而出現的問題。 【Unity Shader】(三) -

GLSL教程紋理貼圖

簡單的紋理貼圖(Simple Texture)為了在GLSL中應用紋理,我們需要訪問每個頂點的紋理座標。GLSL中提供了一些屬性變數,每個紋理單元一個: attribute vec4 gl_MultiTexCoord0;

linuxValgrind工具集詳解Memcheck命令列引數詳解

【linux】Valgrind工具集詳解(五):命令列詳解中不夠全,在此專門針對Memcheck工具中的命令列引數做一次詳細的解釋。 Memcheck命令列選項 –leak-check=<no|summary|yes|full> [default: summary]

Unity Shader ------ 高階紋理

筆者使用的是 Unity 2018.2.0f2 + VS2017,建議讀者使用與 Unity 2018 相近的版本,避免一些因為版本不一致而出現的問題。 前言 關於紋理,之前在 【Unity Shader】(四) ------ 紋理之法線紋理、單張紋理及遮罩紋理的實現 已經解釋過相關原理,不過那些是屬

SpringCloud Greenwich版本配置中心客戶端config client

一、SpringCloud版本 本文介紹的Springboot版本為2.1.1.RELEASE,SpringCloud版本為Greenwich.RC1,JDK版本為1.8,整合環境為IntelliJ IDEA 二、config client介紹 Spring Boot應用程式可以

Machine Learning第非監督學習-- PCA應用

一、Reconstruction from Compressed Representation(壓縮特徵的復原) 本部分主要講我們如何將已經壓縮過的特徵復原成原來的,如下圖: 左邊的二維圖是未縮減維數之前的情況,下面的一維圖是利用縮減之後的情況,我們利用公式可以得到x的近似值,如右圖,

Machine Learning第非監督學習--主成分分析PCA

一、Principal Component Analysis Problem Formulation(主成分分析構思) 首先來看一下PCA的基本原理: PCA會選擇投影誤差最小的一條線,由圖中可以看出,當這條線是我們所求時,投影誤差比較小,而投影誤差比較大時,一定是這條線偏離最優直線。

Machine Learning第非監督學習-- 動因

一、Motivation I: Data Compression(動因I:資料壓縮) 下面是2個降維處理的例項: 例項1:將cm和inch的2維資料降成1維資料: 例項2:降3維資料降成2維資料: 二、Motivation II: Visualization(動因II:視

終極指南構建用於檢測汽車損壞的Mask R-CNN模型附Python演練

介紹 計算機視覺領域的應用繼續令人驚歎著。從檢測視訊中的目標到計算人群中的人數,計算機視覺似乎沒有無法克服的挑戰。 這篇文章的目的是建立一個自定義Mask R-CNN模型,可以檢測汽車上的損壞區域(參見上面的影象示例)。這種模型的基本應用場景為,如果使用