Nhận dạng các loại chó, các loại mèo với SVM

Hello
Mình tìm được 1 dataset 7349 ảnh về chó mèo. Trong đó chó có nhiều loại chó, mèo có nhiều loại mèo. Mình muốn sử dụng SVM phân lớp chó mèo. Với dataset trên thì svm có phù hợp không. Mình mới tìm hiểu về svm nên còn lơ mơ trong việc chọn dữ liệu :roll_eyes::roll_eyes:
http://www.robots.ox.ac.uk/~vgg/data/pets
Cập nhật thêm dataset >20k ảnh 120 loại chó
http://vision.stanford.edu/aditya86/ImageNetDogs/
Tiện đây mình cũng tìm được 1 tool crop ảnh, hỗ trợ cho việc chuẩn bị dữ liệu huấn luyện. Có load ảnh theo thư mục, tự lưu theo thư mục. Có tùy chọn kích thước cửa sổ cần cắt. Chỉ việc di chuột và cắt thôi, khá nhanh cho bạn nào cần


Thank you

1 Like

Help :smile: :slight_smile:

Phân biệt chó với mèo nên dùng ConvNet hơn là SVM.

ConvNet học từ feature căn bản như edge, circle, color. Sau đó học tiếp từ những gì đã học trước đó: hoa văn, gradient,… từ từ đến khi phân biệt từng giống chó, như Husky. Học tiếp từ các giống chó khác nhau để phân biệt ảnh nào có chó, ảnh nào có mèo.

SVM cần margin, độ rộng 2 margin càng lớn, SVM càng hiệu quả. Nó thích hợp với dữ liệu có 2 trạng thái trái ngược nhau, như: spam hay không spam, câu nói tích cực hay tiêu cực, tài liệu IT hay tiểu thuyết,…

2 Likes

mình được giao làm về nhân dạng đối tượng, đối tượng được tự chọn. Mình mới tìm hiểu nên còn lơ tơ mơ trong việc chọn dữ liệu. Bạn có thể cho mình xin keyword của 1 vài tập dataset phù hợp với svm không. Nhân dạng ảnh nhá
Trước định làm nhận dạng mã thẻ cào, nhưng thu thập dữ liệu mẫu không xuể, trên mạng có 1 tập 10k ảnh số 0-9 nhưng k biết font giống không

Về số có dữ liệu số nhà là phổ biến:
http://ufldl.stanford.edu/housenumbers/

Ngoài ra có thể đọc thêm paper này tham khảo:

1 Like

cái này là nên nghĩa là dùng svm vẫn được nhỉ, và dùng svm thì độ chính xác có cao không. mình tính chỉ phân lớp các loại chó thôi. có khoảng tầm 120 loại trong >20k ảnh

Nếu là classification, input là tấm ảnh, output chỉ có 2 giá trị: 0 - ảnh không có chó, 1 - ảnh có con chó. Trong ảnh con chó được đặt trung tâm, và chỉ có tối đa 1 con vật trong ảnh. Bài toán này SVM phân loại được, và theo cá nhân, có thể có kết quả tốt.

Còn bài toán khác, phân lớp các loại chó: input là tấm ảnh, output có k+1 giá trị: 1 - chó Nhật, 2 - chó Shiba, 3 - chó Husky, 4 - chó Alaska, 5 - chó Akita, …, k - chó Maltipoo, 0 - ảnh không có chó hoặc con khác. Điều kiện cũng là con vật ở trung tâm, chỉ có tối đa 1 con. SVM trường hợp này sẽ cho kết quả thấp hơn so với SVM dạng binary (0 và 1).

Bài toán nhận dạng nhiều động vật, vừa chó, vừa mèo, thỏ, ngựa, gà,… thì ConvNet sẽ tốt hơn.


Mà cũng hên xui, phải có train và số liệu mới đánh giá được. Cứ thử SVM trước, nếu chạy tốt thì dùng SVM, không thì chuyển sang các Deep Learning model.

4 Likes

Mình mới tìm hiểu về ml , svm thôi, chứ h tìm hiểu thêm cnn, dl thì sợ k kịp tiến độ đề tài.
Mình định làm ntn

Mình tìm hiểu thấy có thể sử dụng phân lớp nhị phân cho bài toán phân loại đa lớp mà, nhiều lớp thì quy về từng cặp thành bài toán phân lớp nhị phân.Ví dụ ảnh input là 1 con chó, xem nó có phải là cho shiba không, nếu không xem nó có hải chó boo không… đến khi hết tập dữ liệu đã train thì kết luận k phải là chó hoặc là chó nhưng k nằm trong tập huấn luyện.

sao phải đặt trung tâm nhỉ?

Nếu chỉ dùng SVM thì dùng thêm neural network (basic thôi, ko cần CNN) cho đủ bộ em! Link anh đã gửi cho em ở topic trước, em xem lại nhé!

2 Likes

học thêm em sợ k kịp anh ạ

Nghiên cứu thì phải làm cho tới, nếu ko ko có kết quả đâu em! Cái cốt lõi của hệ thống nhận dạng nằm ở neural network, em bỏ ra thêm 1 chút thời gian để học và làm ko khó đâu!

4 Likes

Cách One-verus-All là cách dễ nhất để chuyển từ binary classification sang multiple classification. Căn bản nó cũng trả lời cho công thức xác suất P(cat | image) = ? P(dog | image) = ?

Mình ví dụ nhé, giả sửa ngưỡng threshold là 0.5. P(cat | image) = 0.62, P(dog | image) = 0.65, đều vượt threshold. Cuối cùng nên chọn xác xuất nào? Cách đơn giản là lấy xác suất cao nhất. Tuy nhiên trong trường hợp lại khác, khoảng cách 0.65 - 0.62 = 0.03 giữa 2 trường hợp quá nhỏ để có sự khác biệt, nên cách chọn xác suất cao nhất có vẻ không khả thi. Cuối cùng đưa tất cả 2 kết quả, cat hoặc dog, để end-user tự lựa chọn sau cùng.

Còn cách phân loại lớp như thế nào thì có 2 cách:

  • chỉ có 1 phần tử được chọn, A(i) intersect A(j) = empty, i != j, (chó, mèo, ngựa)
  • Có nhiều phần tử được chọn, A(i) giao A(j) != empty, i != j, như {đỏ (màu), trắng (màu), chó (giống), mèo (giống), lớn (size), nhỏ (size)}

Kĩ thuật này thường gọi là Image Classification, nếu xác định thêm vị trí bounding box nữa gọi là Image Classification with Localization (ICL)

Mở rộng hơn nữa, dùng kĩ thuật Windowing cho từng vị trí bức ảnh, mỗi bước window áp dụng ICL. Ảnh sau khi quét hết nhận diện được nhiều vật thể => Object Detection.

Với lại hiện tại, các paper thường hay dùng ConvLayer để thay thế cho bước Window, vừa tính nhanh lại có kết quả chính xác

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?