2013-08-27 45 views
16

Câu hỏi
Mã khai thác HOG mã nguồn mở nhanh nhất cho CPU đa lõi là gì?Thực hiện trích xuất tính năng HOG nhanh nhất?

Động lực
Tôi đang làm việc trên một ứng dụng phát hiện đối tượng thời gian thực. Cụ thể, tôi đã phát triển một biến thể của Deformable Parts Model cascades, nhắm mục tiêu phát hiện đối tượng 30fps. Tôi đã đạt đến một điểm trong đó trích xuất các tính năng HOG đắt hơn phần còn lại của đường dẫn của tôi, kết hợp. Tôi đang sử dụng thông số [Felzenzwalb, Girshick, et al] để khai thác HOG. Đó là, một kim tự tháp multiresolution của bộ mô tả HOG, và mỗi bộ mô tả có tổng cộng 32 thùng để định hướng và một vài dấu hiệu khác.

Mục tiêu
Tôi muốn làm multiscale khai thác tính năng HOG tại 60fps (16ms) cho 640x480 hình ảnh trên một CPU đa lõi.

liên quan làm việc
Tôi đã benchmarked một vài off-the-shelf triển khai HOG multiscale trên 6-core CPU 3930k Intel. Đối với một hình ảnh 640x480, tôi quan sát những con số thực hiện sau đây:

  • HOG trong FFLD DPM đang Dubout 's: 19fps (52ms) - C++ với OpenMP, nhưng không có vector hóa
  • HOG trong voc-release5 DPM mã: 2,4fps (410ms) - đơn chiếc C++, cùng với nắp đậy Matlab

Tôi cũng đã thử nghiệm với OpenCV HOG extraction code. Phiên bản OpenCV hoạt động, nhưng nó có vẻ được mã hóa cứng cho thiết lập HOG Dalal-Triggs ', và OpenCV dường như không cho phép tôi sử dụng các tham số HOG giống nhau (lược đồ chuẩn hóa, tính năng vị trí nhị phân, v.v.) như [Felzenzwalb, Girshick, et al]. Phiên bản OpenCV cũng không hỗ trợ HOG đa nhiệm, mặc dù bạn có thể tự mình thực hiện downsampling và gọi OpenCV HOG cho từng thang đo. Tôi không nhớ hiệu suất của OpenCV HOG trông như thế nào.

Kết luận

  1. Việc thực hiện HOG nhanh nhất - FFLD - dường như để lại rất nhiều hiệu suất trên bàn. Tôi đã không thực hiện ước tính của GFLOP/s, nhưng tôi nhận thấy rằng mã HOG của FFLD không sử dụng bất kỳ vector hóa SSE/AVX nào. Không có nhiều luồng điều khiển như vậy, do đó việc vectơ hóa dường như là một cơ hội tăng tốc giá rẻ ở đây.
  2. Tôi chưa đề cập đến việc triển khai GPU HOG tại đây. Tôi đã thử nghiệm với groundHOG/CUHOGfasthog. Các tác giả CUHOG yêu cầu 20fps (50ms) Trích xuất HOG trên NVIDIA GTX560. Nhưng, CPU Intel là nền tảng mục tiêu cho ứng dụng của tôi và việc sao chép một kim tự tháp HOG đầy đủ từ GPU sang CPU là cực kỳ tốn kém.
+0

OpenCV bao gồm việc triển khai HAL của Dalal cả trong các phiên bản CPU và GPU. Họ làm việc khá tốt theo ý kiến ​​của tôi, và họ có thể dễ dàng được sử dụng để phát hiện đối tượng với CvSVM của OpenCV. –

+0

Biến đổi bộ lọc là phần đắt nhất trong DPM nên bạn quản lý phần này như thế nào? –

+1

@MickeyShine công cụ thông thường ... lượng hóa khổng lồ các tính năng và thực hiện các thác. Tôi đang học tập sâu hơn và ít DPM dựa trên HOG những ngày này. Nhưng tôi đã đạt đến một điểm mà tôi có thể thực hiện các cuộc cách mạng cho một mô hình 3 thành phần, 8 phần-mỗi-thành phần dựa trên HOG ở dưới 50ms. – solvingPuzzles

Trả lời

1

Có xem xét việc thực hiện sau HoG SSE

Nó không phù hợp với yêu cầu thời gian của bạn.Nó được viết bằng C và sử dụng các hướng dẫn SIMD dài 128 bit.

Mã này cũng có thể được tùy chỉnh thêm tùy thuộc vào chiến lược chuẩn hóa và loại đầu ra bạn cần.

Tôi rất vui khi được nghe phản hồi của bạn và có thể cải thiện mã này.

+0

Thú vị! Tôi sẽ thử. Liệu nó có khai thác nhiều lần (một "kim tự tháp HOG", như một số người gọi nó)? – solvingPuzzles

+1

@solvingPuzzles, HoG SEE có phù hợp với các yêu cầu thời gian của bạn không? bạn đã tìm thấy giải pháp nào? – Tin

+0

@ivan_a bạn có thể giải thích, làm thế nào để sử dụng mã này? Tôi thấy rằng nó chỉ sử dụng 16 thùng và nó được viết rằng bạn không thể thay đổi điều này? Điều đó nghĩa là gì? –