8

4 năm trước Tôi đã đăng this question và nhận được một vài câu trả lời không may bên ngoài cấp độ kỹ năng của tôi. Tôi vừa tham dự một cuộc hội thảo xây dựng nơi họ nói về việc học máy và điều này khiến tôi nghĩ đến khả năng sử dụng ML như một giải pháp cho vấn đề của tôi. tôi tìm thấy this trên trang web xanh nhưng tôi không nghĩ rằng nó sẽ giúp tôi vì phạm vi của nó là khá hẹp.Sử dụng tính năng Học máy của Azure để phát hiện biểu tượng trong một hình ảnh

Đây là những gì tôi đang cố gắng để đạt được:

tôi có một hình ảnh nguồn:

source image

và tôi muốn mà một trong những biểu tượng sau (nếu có) được chứa trong hình trên:

symbols

sự so sánh nhu cầu để hỗ trợ bóp méo nhỏ, mở rộng quy mô, đồng khác biệt lor, luân chuyển, và độ sáng khác biệt.

số lượng biểu tượng phù hợp cuối cùng sẽ tối thiểu là lớn hơn 100.

là ML là công cụ tốt để giải quyết vấn đề này? nếu có, bất kỳ mẹo khởi động nào?

Trả lời

18

Theo như tôi biết, Dự án Oxford (MS Azure CV API) sẽ không phù hợp với nhiệm vụ của bạn. API của họ rất tập trung vào các nhiệm vụ liên quan đến khuôn mặt (phát hiện, xác minh, v.v.), OCR và mô tả hình ảnh. Và dường như bạn không thể mở rộng mô hình của mình hoặc đào tạo mô hình mới từ các mô hình hiện tại.

Tuy nhiên, mặc dù tôi không biết giải pháp hộp cho vấn đề phát hiện đối tượng của bạn; có đủ phương pháp tiếp cận dễ dàng mà bạn có thể thử và điều đó sẽ cho bạn một số kết quả điểm xuất phát.

Ví dụ, đây là một phương pháp ngây thơ bạn có thể sử dụng:

1) Tạo bộ dữ liệu của bạn: Đây có lẽ là bước tẻ nhạt hơn và nghịch lý một rất quan trọng. Tôi sẽ giả sử bạn có một số lượng lớn các hình ảnh để làm việc. Những gì bạn cần làm là chọn một kích thước cửa sổ cố định và trích xuất các ví dụ tích cực và tiêu cực. enter image description here

Nếu một số hình ảnh trong tập dữ liệu của bạn có kích thước khác nhau, bạn cần phải rescale chúng thành kích thước chung. Bạn không cần phải quá điên về kích thước, có lẽ 30x30 hình ảnh sẽ là quá đủ. Để làm cho mọi việc dễ dàng hơn, tôi cũng sẽ biến những hình ảnh đó thành thang màu xám.

2) Chọn thuật toán phân loại và đào tạo thuật toán: Có một số lượng lớn các thuật toán phân loại ngoài đó. Nhưng nếu bạn mới học máy tôi sẽ chọn cái tôi sẽ hiểu nhất. Giữ điều đó trong tâm trí, tôi sẽ kiểm tra hồi quy logistic cho kết quả khá, nó đủ dễ dàng cho người mới bắt đầu và có rất nhiều thư viện và hướng dẫn. Ví dụ: this one hoặc this one. Lúc đầu, tôi sẽ nói để tập trung vào một vấn đề phân loại nhị phân (như nếu có một logo UD trong hình ảnh hay không) và khi bạn nắm vững rằng bạn có thể nhảy đến trường hợp nhiều lớp. Có các tài nguyên cho rằng too hoặc bạn luôn có thể có một vài mô hình một biểu trưng và chạy công thức này cho từng biểu tượng riêng biệt.

Để đào tạo mô hình của bạn, bạn chỉ cần đọc các hình ảnh được tạo trong bước 1 và biến chúng thành một véc tơ và gắn nhãn cho phù hợp. Đó sẽ là tập dữ liệu sẽ cung cấp mô hình của bạn. Nếu bạn đang sử dụng hình ảnh có thang màu xám thì mỗi vị trí trong vectơ sẽ tương ứng với giá trị pixel trong khoảng 0-255. Tùy thuộc vào thuật toán bạn có thể cần phải rescale những giá trị cho phạm vi [0-1] (điều này là do một số thuật toán thực hiện tốt hơn với các giá trị trong phạm vi đó). Lưu ý rằng rescaling phạm vi trong trường hợp này là khá dễ dàng (new_value = value/255).

Bạn cũng cần chia bộ dữ liệu của mình, đặt trước một số ví dụ về đào tạo, tập hợp con để xác thực và một tập hợp con khác để thử nghiệm. Một lần nữa, có nhiều cách khác nhau để làm điều này, nhưng tôi giữ câu trả lời này càng ngây thơ càng tốt.

3) Thực hiện phát hiện: Vì vậy, bây giờ hãy bắt đầu phần thú vị. Cho bất kỳ hình ảnh nào bạn muốn chạy mô hình của bạn và tạo ra tọa độ trong hình ảnh có logo. Có nhiều cách khác nhau để làm điều này và tôi sẽ mô tả một cách mà có lẽ không phải là tốt nhất cũng không hiệu quả hơn, nhưng nó dễ dàng hơn để phát triển theo ý kiến ​​của tôi.

Bạn sẽ quét ảnh, trích xuất các pixel trong "cửa sổ", thay đổi kích thước các pixel đó thành kích thước bạn đã chọn ở bước 1 và sau đó cho chúng vào mô hình của bạn.

Extracting windows to feed the model

Nếu mô hình cung cấp cho bạn một câu trả lời tích cực thì bạn đánh dấu rằng cửa sổ trong ảnh gốc. Vì logo có thể xuất hiện ở các mức độ khác nhau, bạn cần phải lặp lại quá trình này với các kích thước cửa sổ khác nhau. Bạn cũng cần phải tinh chỉnh lượng không gian giữa các cửa sổ.

4) Rửa sạch và lặp lại: Tại lần lặp đầu tiên, rất có khả năng bạn sẽ nhận được nhiều phản hồi sai. Sau đó, bạn cần phải lấy những ví dụ tiêu cực và đào tạo lại mô hình của bạn. Đây sẽ là một quá trình lặp đi lặp lại và hy vọng trên mỗi lần lặp lại bạn sẽ có ít hơn và ít sai tích cực và ít âm tính giả.

Khi bạn hợp lý hài lòng với giải pháp của mình, bạn có thể muốn cải thiện nó. Bạn có thể muốn thử các thuật toán phân loại khác như SVM hoặc Deep Learning Artificial Neural Networks hoặc để thử các khung phát hiện đối tượng tốt hơn như Viola-Jones. Ngoài ra, bạn có thể sẽ cần phải sử dụng crossvalidation để so sánh tất cả các giải pháp của bạn (bạn thực sự có thể sử dụng crossvalidation từ đầu). Bởi thời điểm này tôi đặt cược bạn sẽ đủ tự tin rằng bạn muốn sử dụng OpenCV hoặc một sẵn sàng để sử dụng khuôn khổ trong trường hợp này bạn sẽ có một sự hiểu biết công bằng về những gì đang xảy ra dưới mui xe.

Ngoài ra, bạn chỉ có thể bỏ qua tất cả câu trả lời này và đi cho một hướng dẫn phát hiện đối tượng OpenCV như thế này one. Hoặc lấy một câu trả lời khác từ câu hỏi khác như thế này one. Chúc may mắn!

+1

wow, câu trả lời là gì. Tôi rất trân trọng điều này. Thật không may, tôi bỏ qua lớp tầm nhìn máy tính ở trường đại học nên sẽ mất một thời gian để tôi có được tất cả các liên kết và thông tin bạn đã cung cấp. Tôi không muốn đánh dấu nó như là một câu trả lời vì tôi muốn xem nếu tôi có thể sử dụng Azure ML (không phải dự án oxford) mà có thể tóm tắt một số những gì bạn đã viết ở trên và lý tưởng sẽ thấp hơn đường cong học tập cho một giải pháp làm việc. tôi đã đăng câu hỏi này (http://bit.ly/1FmU05e) lên các diễn đàn msdn. – josh

+1

@josh Cool ... Hãy cho chúng tôi biết làm thế nào mà đi. Thời gian qua tôi đã thử Azure ML Studio nó đã không làm việc trực tiếp với hình ảnh (trừ khi bạn sử dụng dự án oxford) nhưng nó sẽ có thể nếu bạn viết kịch bản R để biến dữ liệu từ nhị phân sang văn bản và viceversa. – Pedrom

Các vấn đề liên quan