10. Superpoint: Self-Supervised Interest Point

 Mở đầu

Thay vì biện pháp xác định keypoint dựa vào model như SIFT và SURF, Superpoint đem lại ý tưởng mới model tự học từ các xác định, phân loại (Supervised) thủ công từ người dùng (human annotator)

Super -> Self-Supervised

Point -> Interest Point

Vì vậy, có thể bỏ bớt công sức xác định lại những object data thường gặp (có thể tìm được từ nguồn data ngoài)

Đồng thời hạn chế tác hại từ dữ liệu không rõ ràng (ill-defined) -> pseudo-ground truth

Vì là tự training (Self-supervised), model không nhất thiết cần sự chỉ dẫn rõ ràng từ người dùng -> Unsupervised learning

Hmmm, vậy là Demi-supervised?


Có thể hiểu nôm na Superpoint là tìm interest point mới qua homographic transform

Mục đích chính: là tạo dataset để train model (modern Deep SLAM Frontend)


Để training Superpoint, ta có 3 bước chính:

    - Interest point pre-training

    - Interest point Self-labeling

    - Joint Training

Interest point pre-training

Ban đầu ta có một Conv network chưa train gì (dạng VGG)

Đầu tiên ta tập trung vào những hình dạng hình học cơ bản với labels có sẵn (gọi là Synthetic Shape data

Train network qua tập data này, ta có Magicpoint network (Có nhiều loại Magicpoint khác nhau dựa vào các tập Synthetic Shape data khác nhau). Đối với Superpoint algorithm thì ứng với vị trí Base Detector



Để model có được nhận thức chung nhất (generate the pseudo-ground truth). Ta train fully connected layer (FC) với rất nhiều mẫu (hàng triệu hoặc hơn) từ tập Synthetic Shape data => Magicpoint/Base Detector


Interest Point Self-Labeling

Với cách nhìn chung, Magicpoint hoạt động tốt trong tập Synthetic Shape nhưng thiếu đi sự đặc trưng của vật cụ thể (potential interest point locations)

Để giải quyết vấn đề này, ta sử dụng Homographic Adaptation

Thường ta sẽ train với COCO dataset ( hay MS-COCO) tại đây (là input)


Tức là ta biến đổi tùy ý ảnh gốc ( random homography) và sau đó áp dụng MagicPoint detector cho ảnh đã biến đổi sau đó lưu lại vị trí tương ứng ở ảnh gốc (nghịch đảo vị trí keypoint mới về vị trí tương ứng trong ảnh gốc)

Từ đó ta có thêm 1 tập các keypoint trên ảnh gốc (Aggregate Heatmap)




Ta phải làm việc này rất nhiều lần :(, tạo ra 1 bộ dataset mới

Sau đấy ta tối ưu heatmap, đây chính là kết quả quan trọng nhất của Superpoint


Tóm gọn 2 bước đầu trong trường hợp đọc không hiểu :v
1. train cái network với synthetic data -> magicpoint + weight parameters
2. chạy hình gốc A qua network có weight parameter => basic detector
3. homography hình A ra các hình B
4. chạy các hình B qua network có weight parameter => lấy kết quả homography ngichj đảo lại hình A => tập data
5. tối ưu đống data này => kết quả cuối

Superpoint Architest

Ta sử dụng cấu trúc dạng VGG (xem lại VGG16, VGG19) để giảm chiều ảnh đồng thời kết hợp poolingnon-linear activation 

8 Convolution layers (size 64 x4 -> size 128 x4) . Mỗi 2 conv layer là 1 2x2 max pool layer. Mỗi conv layer dùng ReLU làm non-linear activation và BatchNorm normalization (L2)

Ta chia class output là kết quả pixel có phải keypoint không (probability of "point-ness"). Ta gọi việc này là sub-pixel convolution hoặc depth to space trong Tensorflow

Điểm đặc biệt là ở đây ta có 1 Encode nhưng 2 Decode (1 cho keypoint detector và 1 cho Description (size WxHxD = 256-D)

Loss function là tổng của keypoint loss và descriptor loss



Joint training

Từ bước 2 Interest Point Self-labeling, ta đã có 1 tập dataset đủ lớn

Ta sử dụng tập dataset này để train một Conv network mới

Từ đó ta mới dùng network mới này để xử lí hình ảnh mà ta cần xử lí




Hầu hết các tham số của network đều được dùng bởi 2 task. Sự khác biệt với network truyền thống ở chỗ đầu tiên tìm interest points, rồi tính descriptors

Tối ưu loss function, ta có kết quả là (keypoints + description)

Conclusion
Tóm gọn trong trường hợp đọc không hiểu :v
1. train cái network với synthetic data -> magicpoint + weight parameters
2. chạy hình gốc A qua network có weight parameter => basic detector
3. homography hình A ra các hình B
4. chạy các hình B qua network có weight parameter => lấy kết quả homography ngichj đảo lại hình A => tập data
5. tối ưu đống data này => kết quả cuối


3 bước:
    - Interest point pre-training: 
        Synthetic Shape data -> Conv network 1 not trained A->  Magicpoint network/Base Detector A'
    - Interest Point Self-labeling
        COCO dataset -> Base Detector A' + homography -> new dataset (labeled) D
    - Joint Training
        dataset D -> new Conv network 2 not trained -> Conv network 2 trained
        Our image -> Conv network 2 trained -> keypoints + Description
    

Implement




Compare

So sánh với các model khác, Superpoint có phần  tỉ lệ đúng cao hơn hoặc tốn ít thời gian hơn


https://github.com/rpautrat/SuperPoint




Hầu như các model đều dùng Euclide distance giữa các Descriptors để matching
Và findHomography() với RANSAC trong OpenCV để tối ưu homography




https://colab.research.google.com/drive/1-cafp2E9b3BmOKNrc5pZNC8WBjXwW_uC?usp=sharing

Nhận xét