👉 Đọc bài này của Phạm Đình Khánh ← Nói tới Faster R-CNN mà thôi, sau đó là nhắc tới Mask R-CNN và cái này được tích hợp trong Detectron2 của Facebook.
R-CNN (Region Based Convolutional Neural Networks)
Từ ảnh gốc → tách ra 2k ROI (regions proposal có chứa vật thể) → đưa vào CNN để xác định và tính toán. ← Nhược: dùng selective search để tìm ra 2k ROI + xử lý tới 2k ROI như 2k hình riêng biệt vào trong CNN ← slow (47s/ảnh input)
(Use a single model instead of pipeline like R-CNN)
Xử lý được vụ “xử lý riêng bằng CNN” 2K hình riêng biệt (2K ROI kia) bằng cách chỉ đưa ảnh gốc (và các ROIs này) vào CNN → ra feature map (của hình + các ROIs) → ROI pooling (để đưa các region proposal trong feature map về cùng kích thước do bước feature map ko thể resize được) + xác định ROI (cũng lại dùng selective search) → ….
VGG16 (an example in this case) mapping our image into 16x16x512 feature map
Mapping our RoIs onto the output of VGG16
Kiến trúc single model Fast R-CNN (được trích xuất từ bài báo gốc). Ở bước đầu ta áp dụng một mạng Deep CNN để trích xuất ra feature map. Thay vì warp image của region proposal như ở R-CNN chúng ta xác dịnh ngay vị trí hình chiếu của của region proposal trên feature map thông qua phép chiếu RoI projection. Vị trí này sẽ tương đối với vị trí trên ảnh gốc. Sau đó tiếp tục truyền output qua các layer RoI pooling layer và các Fully Connected layers để thu được RoI feature véc tơ. Sau đó kết quả đầu ra sẽ được chia làm 2 nhánh. 1 Nhánh giúp xác định phân phối xác suất theo các class của 1 vùng quan tâm RoI thông qua hàm softmax và nhánh còn xác định tọa độ của bounding box thông qua hồi qui các offsets.
Weak: Mô hình này nhanh hơn đáng kể cả về huấn luyện và dự đoán, tuy nhiên vẫn cần một tập hợp các region proposal được đề xuất cùng với mỗi hình ảnh đầu vào.
Faster R-CNN
Ngay cái bước dùng selective search để tìm ROI, mấy ông tác giả (mới) này dùng 1 mạng RPN (Region Proposal Network) riêng biệt để tìm ra ROI → còn lại giống Fast R-CNN
Mạng RPN hoạt động như một cơ chế attention cho mạng Fast R-CNN, thông báo cho mạng thứ hai về nơi cần xem hoặc chú ý.
Những cải tiến này vừa làm giảm số lượng region proposal vừa tăng tốc hoạt động trong thời gian thử nghiệm mô hình lên gần thời gian thực với hiệu suất tốt nhất. Tốc độ là 5fps trên một GPU.
ROI không phải là các bounding box! Những hình minh hoạ nhìn giống nhưng có thể có ROI ko chứa object, chúng chỉ là những vùng interests mà thôi!
Quantization
Quantization is the process of mapping continuous infinite values to a smaller set of discrete finite values. In the context of simulation and embedded computing, it is about approximating real-world values with a digital representation that introduces limits on the precision and range of a value.
ROI Pooling
Comes from the original Fast R-CNN paper.
Recall ROI is regions extracted from original image (by some methods)
Mapping our RoIs onto the output of VGG16 → chúng ta giảm 512/16 = 32 lần
Our RoI target (take a ROI as an example) → coor của top-left (296, 192) & size của cái ROI này (200x145) ko thể chia hết cho 32
→ nên trên cái 16x16 feature map, chúng ta ko thể có aspect (integer) like on the original được mà ta phải dùng quantization
ko thể apply pooling layer được (ví có mấy cell vị chia)
(SAU KHI CHIA + LÀM TRÒN) we’ve just lost a bunch of data (dark blue) and gain new data (green) → ROIAlign fix this!
Sau khi có mapped ROI → can apply pooling on it!
Look again the network: after ROI pooling layer, there is a FCs layer with fixed size! ← many different sizes ROI → diff sizes mapped ROIs → be pooled to same sizes (eg. 3x3x512)
Eg (cái ví dụ xét ở trên): 145x200 → 4x6 → 3x3 (again, từ 4x6 sang 3x3 lại phải quantization)
Data pooling process (we lose the bottom line info - again)
this process is done on the whole RoI matrix not only on the topmost layer
→ The same process is applied to every single RoI from our original image
Why?? ⇒ bởi vì ở ROI pooling steps, quantization process, we lost a lot of data (and also gain some)
Original Mask R-CNN architecture ← use this for testing diff between ROI Align and ROI Pooling because get more precise from pooling layer!
Model feature mapping process. Note: the final step → 16x16x512
Tới bước này, ko giống ROI pooling thường là chia rùi làm tròn thành 4x6, chúng ta vẫn giữ lại số thập phân!
Pooling layer
ROI Align is not using quantization!!!!
Recall: Fast R-CNN applies quantization twice (mapping process + pooling process)
Fast R-CNN dùng quantization
Còn ROI Align, ta chia cái ROI gốc thành 3x3 boxes (3x3 vì bước pooling ta dùng 3x3)
Sampling points for each cell
apply bilinear interpolation to sample data for this box. (this figure is applied for the 1st sample point on the left figure)
and this process is applied to all 512 layers
ROIAlign (left) vs ROIPooling (right) → RoIAlign uses the whole area to pool data from (green means additional data used for pooling, dark blue means lost data when pooling)