Làm thế nào để học sâu giúp phát hiện nhiều đối tượng trong một hình ảnh?


8

Hãy nói rằng có hai chiếc xe trong một hình ảnh. Làm thế nào nó có thể phát hiện những chiếc xe này, cho rằng nó có thể phát hiện chiếc xe duy nhất trong một hình ảnh?

Câu trả lời:


11

Mặc dù nhiều giải pháp trong các hệ thống sản xuất vẫn sử dụng cửa sổ trượt như được mô tả dưới đây trong câu trả lời này, lĩnh vực thị giác máy tính đang chuyển động nhanh chóng. Những tiến bộ gần đây trong lĩnh vực này bao gồm R-CNNYOLO .


Phát hiện các đối tượng khớp trong một hình ảnh, khi bạn đã có một trình phân loại đối tượng được đào tạo, thường là vấn đề quét vũ lực thông qua các bản vá hình ảnh.

Bắt đầu với kích thước bản vá lớn nhất dự kiến. Ví dụ: nếu hình ảnh của bạn là 1024 x 768, nhưng luôn là một khoảng cách trên đường có thể bạn không mong đợi bất kỳ chiếc xe nào chiếm hơn 80 x 80 pixel trong hình ảnh. Vì vậy, bạn lấy một khối pixel 80x80 từ một góc của hình ảnh và hỏi người phân loại xem cơ hội nào có một chiếc xe ở góc đó. Sau đó lấy bản vá tiếp theo - có thể di chuyển 20 pixel.

Lặp lại cho tất cả các vị trí có thể và quyết định bản vá nào có khả năng chứa ô tô nhất.

Tiếp theo, giảm kích thước khối xuống (có thể là 60 x 60, di chuyển 15 pixel mỗi lần) và lặp lại bài tập tương tự một lần nữa. Lặp lại điều này cho đến khi bạn đạt được kích thước khối nhỏ nhất dự kiến ​​cho mục tiêu của mình.

Cuối cùng, bạn sẽ có một danh sách các khu vực trong hình ảnh, với xác suất mỗi khu vực chứa một chiếc xe hơi.

Các khối chồng chéo cả hai với xác suất cao rất có thể là cùng một chiếc xe, vì vậy logic cần phải có ngưỡng để hợp nhất các khối - thường lấy khu vực chồng chéo với điểm xác suất cao nhất - và tuyên bố chỉ có một chiếc xe trong khu vực đó.

Như thường lệ với các phương pháp ML, bạn sẽ cần thử nghiệm các meta-param chính xác - trong trường hợp này là kích thước khối, kích thước bước và quy tắc để hợp nhất / tách các khu vực - để có được kết quả chính xác nhất.


10

Tôi muốn thêm câu trả lời của @ Neil_Slater bằng cách chia sẻ ứng dụng của mình.

Trong ứng dụng của mình, tôi muốn đào tạo một mô hình có thể tự động tải một vị trí cờ từ một cuốn sách cờ như thế này:

nhập mô tả hình ảnh ở đây

  1. Trước khi tôi làm bất cứ điều gì, tôi chắc chắn rằng tôi đã có một mô hình có thể phát hiện chính xác một quân cờ.

nhập mô tả hình ảnh ở đây

Đó không phải là một vấn đề khó vì nó giống như đào tạo các chữ số MINST. Tôi đã thu thập đủ các mẫu, ngẫu nhiên thêm một số tiếng ồn cho các mẫu đó. Mô hình của tôi là một học sâu tích chập 2 lớp.

  1. Vì bàn cờ luôn là một hình vuông. Tôi sử dụng tính năng phát hiện vuông có sẵn trong OpenCV để đưa cho tôi danh sách các ứng cử viên. Tôi sẽ vứt bỏ bất kỳ hình vuông nào quá nhỏ, quá lớn hoặc không chia hết cho 64 (vì có 64 hình vuông).

  2. Tiếp theo, tôi sẽ cắt hình ảnh thành một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

Bây giờ, tôi có một mạng tích chập nhiều lớp khác để kiểm tra từng ô vuông trong bảng. Độ dài sải chân là kích thước của hình ảnh chia cho 8 (vì có tám hình vuông trong mỗi chiều). Kích thước bản vá giống như chiều dài sải chân.

Hệ thống đường ống của tôi hoạt động khi tôi có thể kết hợp hai phân loại khác nhau. Cá nhân tôi thích đào tạo hai trình phân loại, vì sẽ dễ đào tạo và xác minh hơn là cố gắng đưa mọi thứ vào một mô hình duy nhất.


3

Bản thân câu hỏi không rõ ràng lắm, vì bạn không nói rằng bạn có một mô hình có thể phát hiện một chiếc ô tô mỗi lần chạy cho một hình ảnh hoặc bạn chỉ đang hỏi công cụ, thuật toán hoặc khung nào để sử dụng để phát hiện ô tô (hoặc các đối tượng khác) trong một hình ảnh.

Trả lời biến thể thứ hai, bạn nên sử dụng các thuật toán được phát triển để phát hiện đối tượng, đó là Haar Cascades (được nhúng vào OpenCV và có hướng dẫn rõ ràng về cách huấn luyện trình phát hiện đối tượng tùy chỉnh của bạn, ví dụ: hướng dẫn chuối ) hoặc CNN, Cá nhân, tôi lựa chọn phát hiện đối tượng bằng cách sử dụng các mạng thần kinh, tôi thích làm việc với triển khai đó - mã đơn giản và toàn diện và kết quả tuyệt vời.

Cả hai cách tiếp cận (Haar Cascades và CNNs) về cơ bản đều tìm thấy các mẫu hình dạng được kết nối và cùng vị trí mô tả đối tượng cụ thể của bạn (có thể là mặt, chuối, xe hơi hoặc UFO) và sử dụng các mẫu này để tìm các đối tượng trên một hình ảnh mới. Sự bao gồm lẫn nhau của các đối tượng được phát hiện (khi đường viền của các đối tượng giao nhau hoặc một đối tượng được bao gồm bởi một đối tượng khác) được sử dụng để tìm kết quả phù hợp nhất cho mọi khu vực.


0

Câu hỏi của bạn nói rõ rằng bạn chỉ tìm kiếm nhiều xe hơn là nhiều đối tượng, vì vậy câu trả lời nằm trong câu hỏi. Bạn không tìm kiếm nhiều đối tượng, thay vào đó là nhiều lần xuất hiện của cùng một đối tượng.

Cung cấp cho bạn hệ thống được đào tạo đủ tốt để nhận ra cả hai loại xe thì cả hai nên được phát hiện bằng cách sử dụng các phương pháp tiếp cận bộ lọc xếp tầng tiêu chuẩn ... Điều này giống như hỏi làm thế nào tôi có thể phát hiện 2 khuôn mặt trong một bức ảnh?

Nếu bạn đang tìm kiếm một chiếc xe hơi và một con khỉ thì tình hình rất khác biệt và sử dụng các phương pháp phổ biến với các công cụ như CV mở, bạn thường huấn luyện 2 phân loại (một cho ô tô và một cho khỉ) lặp đi lặp lại hình ảnh hai lần.

Càng nhiều lớp đối tượng khác nhau mà bạn muốn phát hiện càng nhiều phân loại và lặp lại bạn sẽ cần.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.