Bài toán object detection

computer-vision

#1

Chào anh chị. Em mới bắt đầu với bài toán Object Detection sau khi học xong bài toán phân loại ảnh bằng CNN. Hiện tại, em thấy object detection có khá nhiều công nghệ: SSD, RCNN, Fast RCNN, YOLO. Không biết người mới học thì nên bắt đầu với công nghệ nào ạ? Cho em hỏi luôn: Có anh chị nào biết courses hay toturial nào dạy về cái này không ạ? Em có mày mò một số courses, một số bài medium nhưng hầu hết chỉ tòan lý thuyết, công thức, một số main idea mà không có code cụ thể nên rất khó tiếp cận. Bên cạnh đó, em đi copy code YOLOv3 và một số code SSD, RCNN trên github về chạy nhưng thực sự rất khó hiểu bản chất. Anh chị nào đã từng trải qua giai đoạn này có thể giúp em ko ạ? Em cảm ơn ạ.


#2

Mình k rõ về SSD nhưng mình biết khá rõ về Faster RCNN, RCNN, YOLO

  • YOLO có khóa trên Coursera nói rất kỹ càng,
  • RCNN -> Fast RCNN -> Faster RCNN
    • 3 thuật toán này có tính thừa kế rất cao, TỪ RCNN rất chậm chạp , tiến đến Faster RCNN, về ý tưởng đều được thừa kế lẫn nhau, vì thế em có thể đọc qua về RCNN, sau đó tìm hiểu kỹ về Faster RCNN

#3

Mới học thì bạn nên học từ CNN cơ bản rồi sau đó dần dần nghiên cứu lên RCNN, Fast RCNN, Faster RCNN. Ba mô hình này có nhiều điểm tương đồng nhau, và code cũng khá nhiều cho bạn khám phá.

Còn SSD thì nếu bạn làm đồ án thì hẵng nghiên cứu nó, YOLO cũng vậy. SSD thì bạn chịu khó đọc paper sẽ hiểu được cấu trúc và nguyên lý hoạt động của mô hình này mà không cần tới một course nào cả.


#4

Chào bạn, theo như mình biết thì hiện nay với bài toán phát hiện đối tượng (object detection) Faster RCNN đang mang lại độ chính xác cao nhất nhưng hoàn toàn không phù hợp với việc phát triển ứng dụng thực tiễn (rất chậm) và quá trình implementation cực kỳ phức tạp. Mình khuyên bạn nên tìm hiểu và sử dụng SSD vì nó cho độ chính xác cao và tốc độ khá nhanh.

Để hiểu đc thuật toán dò tìm đối tượng sử dụng SSD trước tiên bạn nên có (bước chuẩn bị):

  • Hiểu biết cơ bản về convolutional neural network.

  • Hiểu và thực thi được (implement) một số mạng (network) cơ bản hiện nay như VGG, Mobilenet cho bài toán phân loại ảnh.

  • Biêt cách khai thác và sử dụng một thư viện dành cho deep learning. Theo như mình biết thì tensorflow là thư viện đc hỗ trợ rất tốt với cộng đồng nghiên cứu đông đảo.

Về bản chất, việc huấn luyện cho SSD gồm có một số bước như sau:

  1. Chuẩn bị dữ liệu: phần này rất quan trọng và nhiều khi cũng khá là phức tạp. Nhiệm vụ của phần này là đọc ra vị trí và kích thước của các đối tượng trong từng ảnh, phục vụ sẵn sàng cho việc huấn luyện. Nếu làm việc với tensorflow các bạn nên tìm hiểu .tfrecord.

  2. Xây dựng mạng SSD: mạng SSD đc cấu thành từ hai thành phần chủ yếu:

    2.1. Mạng cơ sở: là mạng (ví dụ VGG hoặc Mobilenet) đã đc thiết kế và huấn luyện trước (pretrained) trên tập dữ liệu ImageNet. Phần cuối cùng của mạng, phần softmax, được loại bỏ để tạo ra mạng cơ sở. Về thực chất mạng cơ sở đóng vai trò như feature extractor dựa trên các trọng số tạo ra từ việc huấn luyện mạng (network) trên cơ sở dự liệu ImageNet từ trước.

    2.2. Các lớp SSD: các lớp này đc xây dựng bằng cách xếp chồng vào cuối của mạng cơ sở. Nên đọc kỹ bài báo để hiểu rõ cấu trúc toàn bộ mạng (https://arxiv.org/abs/1512.02325).

  3. Tự động sinh các default box: việc này hết sức quan trọng vì chúng ta cần so khớp các default box sinh ra từ network với box từ cơ sở dữ liệu (ground truth) để tính ra hàm chi phí và tối ưu nó. Chú ý rằng, làm việc với default box chúng ta có hai quá trình:

    3.1. Từ ground truth -> raw box gọi là quá trình mã hóa (encode). Quá trình này cần dùng khi huấn luyện mạng (training).

    3.2. Từ raw box -> box trong tọa độ ảnh gọi là quá trình giải mã (decode). Quá trình này dùng khi chạy SSD thực tế (inference).

  4. Xây dựng hàm chi phí và tiến hành huấn luyện.

Trên đây là một số bước cơ bản cho SSD. Để làm chủ nó ngoài cách đọc kỹ bài báo, tham khảo source code và tự mình trải nghiệm thì không còn cách nào khác. Dưới đây là đường link của video giải thích về thuật toán (bằng tiếng Nga) nhưng nhìn slide khá dễ hiểu, bạn có thể tham khảo thêm.

Chúc thành công.


#5

Mới học ob thì nên học các pp cơ bản truyền thống trước, ở trên toàn pp deep learning hiện đại. Học từ dưới lên sẽ cho bạn cái nhìn đúng đắn hơn khi chọn pp giải quyết 1 bài toán cụ thể. Vì học trên xuống hay gặp trường hợp vác búa đập ruồi lắm :3