Tại sao DETR lại ko cần bước NMS như YOLO hay SSD

computer-vision

#1

Chào mọi người, số là do theo trend Transformer mà em đã có tìm tòi và đọc đc một bài báo dùng Transformer vô Object Detection mà em thấy khá hay đó là DETR. Đọc kỹ thì ms thấy là DETR khác vs mấy giải thuật trc đó như YOLO, SSD hay Faster R-CNN là nó hoàn toàn ko cần bước post-processing NMS. Ai làm về Object Detection thì ít nhìu gì cug rất khó chịu vs NMS nên em thấy DETR loại bỏ đc thì quá tốt .Vì em cũng mới tìm hiểu Transformer thôi nên cũng chưa Hiểu hết đc bài này. Nên có cao thủ nào giải đáp giúp em tại sao DETR nó làm đc như vậy ko ạ? Thanks cả nhà


#2

Sở dĩ các thuật toán detection cần thêm mước NMS là vì tụi nó tạo ra hàng ngàn các anchor box với các kích cỡ và hình dạng khác nhau trong quá trình predict vật thể trên ảnh.

DETR bản chất nó là Transformer + với 1 cái backbone để xử lý đặc trưng ảnh.

Backbone thì chỉ có 1 nhiệm vụ là tạo ra feature map của ảnh. Sau đó feature map này sẽ được xử lý và + với encoding => 1 set các vectors và đưa vào Encoder của Transformer.

Transformer lúc này có thể nói là nó hoạt động y như transformer trong bài toán dịch máy. Bên phía Decoder nhận input là LẦN LƯỢT TỪNG VECTOR MỘT trong một tập N các vector object query. Mỗi object query khi đưa vào Decoder sẽ “query” dữ liệu output của Encoder (chính là key và value) để dò xét một vùng đặc trưng nào đó. Các object query này được train độc lập với nhau, sao cho object query sau không học theo object query trước. Có thể hiểu là mỗi object query là một lời giải của DETR. Và output của transformer là thông tin “class”, “predicted object/ not predicted” và “confident”.

Bạn hoàn toàn loại bỏ được overlapping-predicted boxes là khi bạn cài dặt ngưỡng confident_threshold rất cao (ví dụ khi confident_threshold = 0.95 thì các object query nào có “confident” cao hơn 0.95 thì mới được xuất hiện). Khi đó thì chỉ có 1 vài object query rất chắc chắn về lời giải của mình, mới xuất ra output cho bạn.

==> kết luận: chưa chắc DETR tốt hơn các thuật toán khác cần dùng NMS, vì chính DETR cũng cần người ta config cái confident_threshold.


#3

Em nghĩ confident threshold chỉ để giúp classify đúng class thui chứ ạ? chứ điều chỉnh confident thì sao lại ảnh hưởng đến việc overlap ạ? Và theo em hỉu thì output của DETR là bounding box, class probability chứ nhỉ? Em ko thấy confident ở đâu ạ.


#4

confident theo ý mình là class probability đó bạn :smile: À có một cái mình nói chưa rõ. Đó là khi chỉnh confident_threshold thấp thì nó không thực sự ovelap nhau! Mà nó giống như hình này! Nếu bạn đặt confident cao thì 2 cái prediction có confident thấp sẽ được loại bỏ.