Các hướng áp dụng CNN và SVM trong bài toán nhận dạng

computer-vision

#1

Xin chào các anh chị và các bạn, Em đang là sinh viên và mới nhận đồ án là “Đánh giá hiệu quả của CNN và SVM cho bài toán nhận dạng khuôn mặt trong điều kiện dữ liệu không cân bằng”. Mọi người cho em xin hỏi hướng và cách tiếp cận của vấn đề này và cách áp dụng hai thuật toán trên sao cho đạt kết quả tốt nhất ạ? Em xin cảm ơn mọi người!


#2

SVM thì chú có thể dùng scikit-learn, cái này cũng không khó vì được viết thành hàm hết rồi. Cái củ cải là parameters search thôi, nếu nhà có điều kiện, clusters các kiểu thì cứ viết grid search, tức là viết vài vòng lặp ra rồi thử từng bộ parameters một. Sau kiểm soát tốt hơn thì làm random search.

CNN thì thành chuẩn trong ngành rồi, các toolkit đều có CNN viết sẵn chỉ cần dùng thôi. Nhưng nếu tự viết CNN thì rất có khả năng là không được tốt lắm, nhưng a vẫn khuyến khích viết thử để luyện tay dần. Cách hiệu quả hơn là chú lên github tìm một cái pretrain model về train lại trên data của chú là tốt nhất.

best


#3

em cảm ơn anh ạ, em muốn làm hết từ đầu để hiểu chi tiết hơn ấy anh ạ, với 2 thuật toán này thì em có thể hoàn thành đồ án không ạ, hay cần mix thêm thuật toán phát hiện khuôn mặt nữa anh?


#4

Viết từ đầu ý chú là sao. Viết tất cả bằng C hay python mà không dùng toolbox á. Cái đấy hồi mới học a viết MLP thôi mà mất một tháng đấy. Không dễ đâu. Chú biết tý gì về machine learning chưa, từng trainning hay build model chưa, nếu chưa thì căng đấy.

Còn nếu là đồ án kiểu này ấy thì a khuyên là dùng keras. Xong lên google tìm dataset nhân dạng khuông mặt. Rồi cứ thế chạy thử thôi, còn cái ý “trong điều kiện không cân bằng” thì a chưa hiểu lắm.

SVM làm nhận dạng khuôn mặt thì căng, anh nghĩ là không khả thi vì ảnh thì thường rất lớn, chuyển thành matrix rồi cho vào SVM thì có khi không chạy nổi luôn ấy. CNN nó dùng kernels, share weights, nên ảnh to vẫn xử lý được.

“Mix thêm thuật toán phát hiện khuôn mặt” câu này làm chú lòi đuôi ra là chú chưa có tý kinh nghiệm gì về mảng này cả. Nên giờ để bắt đầu ấy a đề nghị đọc lại machine learning từ đầu đi, xong đọc CNN, hiểu rồi thì viết keras chạy thử.

Nếu chú đọc được tiếng anh thì dễ thôi, nếu chưa thì anh nghĩ về luyện tiếng anh đọc tốt lên thì mới có cửa theo ngành này được.


#5

Vâng anh ạ, em vẫn đang tìm hiểu anh ơi, ý em là dùng cnn để lấy đặc trưng khuôn mặt, dùng tiếp svm để classification, em biết cnn có thể làm cả cái nhận diện luôn, svm cũng có thể nhưng ý em là dùng 2 thuật toán theo kiểu đó. và “điều kiện không cân bằng” ý là có những mấu thì râtd nhiều ảnh, có những mẫu thì ít ảnh đó anh.


#6

Nếu dùng model pretrain thì không ko lo việc ít dữ liệu hay nhiều dữ liệu do nó sẽ ra embedding vector từ cái model pretrain (cái mà họ đã train sẵn). còn nếu muốn train lại từ đầu thì data mỗi người nếu bạn sợ mất cân bằng dữ liệu thì dùng (down/up sampling hay một kỹ thuật nữa là gì mình quên rồi về cân bằng dữ liệu) dùng để train ra embedding vector SVM dùng để phân loãi các embeding vector từ CNN ra (cứ gọi là quá trình rút trích đặc trưng đi) còn detection thì dùng một mô hình nào đó như dlib, Retina Face, Yolo, … nói chung còn rất nhiều bước trước khi đến bước “rút trích đặc trưng” bạn từ từ tìm hiểu