Professional Documents
Culture Documents
Segmentation
2. Mask R-CNN
Mask R-CNN là phần mở rộng của Faster R-CNN. Faster R-CNN được sử dụng
rất nhiều trong các bài toán phát hiện đối tượng. Khi cho một hình ảnh vào
Faster R-CNN sẽ trả ra nhãn và bounding box của từng đối tượng cụ thể trong
một hình ảnh.
‘The Mask R-CNN framework is built on top of Faster R-CNN’. Khi cho một
hình ảnh vào ngoài việc trả ra label và bounding box của từng object trong một
hình ảnh thì nó sẽ thêm các object mask.
Hay là vùng giao nhau giữa bounding box dự đoán và bounding box thực tế
chia cho bounding box thực tế. Nếu IOU lớn hơn hoặc bằng 0.5 thì sẽ quan tâm
còn nhỏ hơn thì sẽ loại bỏ. Ví dụ
Ta có thể thấy box1 và box2 sẽ IOU nhỏ hơn 0.5 nên nó gọi là vùng loại bỏ còn
box3 và box4 là vùng lớn hơn hoặc bằng 0.5 nên nó sẽ gọi là vùng quan tâm.
Segmentation Mask
Chúng ta có ROI dựa trên những giá trị IOU qua việc tính toán nên tác giả đã
thêm một nhánh mask vào trong kiến trúc hiện đại.
Bước cuối cùng trong Mask R-CNN nơi chúng ta dự đoán mask cho tất cả các
đối tượng trong ảnh như hình dưới đây.
3. Các bước triển khai
Bước 1: Clone the repository
numpy
scipy
Pillow
cython
matplotlib
scikit-image
tensorflow>=1.3.0
keras>=2.0.8
opencv-python
h5py
imgaug
IPython
https://github.com/matterport/Mask_RCNN/releases
Cuối cùng cta sử dụng Mask R-CNN với các weight để dự đoán và tạo mask
cho hình ảnh.
import os
import sys
import random
import math
import numpy as np
import skimage.io
import matplotlib
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
%matplotlib inline
Tiếp theo chúng ta sẽ định nghĩa đường dẫn cho pretrained weight và hình ảnh
qua đoạn code dưới đây :
class InferenceConfig(coco.CocoConfig):
# Set batch size to 1 since we'll be running inference on
# one image at a time. Batch size = GPU_COUNT * IMAGES_PER_GPU
GPU_COUNT = 1
IMAGES_PER_GPU = 1
config = InferenceConfig()
config.display()
Chúng ta có thể nhìn thấy từ hình ảnh trên với model Mask R- CNN sử dung
resnet101 với kích thước mask trả về là 28x28 được training trên bộ dữ liệu
Coco và có tổng cộng 81 class bao gồm cả background. Tiếp theo chúng ta sẽ
tạo ra model và load pretrain weight
Chúng ta cùng load hình ảnh lên và show xem ảnh nhé :
# original image
plt.figure(figsize=(12,10))
skimage.io.imshow(image)
Chúng ta cùng đưa hình ảnh vào model và tận hưởng thành quả thôi nào:
# Run detection
results = model.detect([image], verbose=1)
# Visualize results
r = results[0]
visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'],
class_names, r['scores'])