PCA cho từng ảnh trong Opencv?
Hello
Mình có 1 thắc mắc về pca giảm chiều dữ liệu
Theo mình biết pca có 2 cách tiếp cận
PCA trên từng ảnh, ma trận hiệp phương sai đươc xây dựng dựa vào chuyển vị của ảnh đó, nên eigen vector dùng để giảm chiều dữ liệu cũng được xây dựng trên từng ảnh
PCA trên tập training, ma trận hiệp phương sai và eigen vector được xây dựng từ ma trận gộp các ảnh lại
Mình đã thử pca trên toàn tập nhưng có kết quả khi nhân dạng không cao. Nên mình muốn thử pca trên từng ảnh xem thế nào. Nhưng mình không tìm thấy hướng dẫn nào pca cho từng ảnh cả, toàn thấy cho cả tập. Bạn nào từng dùng pca rồi chỉ mình với
Tiện đây mình muốn hỏi, mình thử nhân dạng loại chó bằng svm với đặc trưng thu được bằng pp hog lại cho kết quả cao hơn đặc trưng thu được bằng pca là sao nhỉ. Mình thầy nhận dạng khuôn mặt bằng pca tuy k phải tốt nhất nhưng cũng khá ổn. Vậy mà nhân dạng loại chó thì cho kết quả thấp. Hog thì cao hơn được chút
Thank you
Bạn thử 2DPCA chưa? Không cần trải phẳng gì cả.
H[1…n]: MxN size
avgH = 1/nsum_all(H)
H’[i] = cov(H[i]) = 1/n * T(H[i] - avgH) * (H[i] - avgH)
M[i] = 1/nsum_all(H’)
trích 20 vector riêng của M[i] V = [v[1] v[2] … v[20]]
H’[i] <- H’[i] * V
A. Vinay et al., BF-ASIFT-2DPCA and ABF-ASIFT-2DPCA for Face Recognition, Procedia Technology 25, 2016.
Thực ra trích xuất từ cov(avgH) là được rồi về toán thì như nhau.
Mình đọc lý thuyết thì pca có 2 cách tiếp cận. Cho từng ảnh và cho cả tập. Mình đã làm ví dụ bằng tay cả 2 cách. Nhưng k biết trong opencv dùng pca 1 ảnh ntn. Trang chủ chỉ hướng dẫn làm cho cả tập. Mà thầy k cho tự code
Mà pca cho từng ảnh cách của bạn khác cách mình đọc được
Khác chỗ này
M[i] = 1/n*sum_all(H’)
Vậy là bạn muốn trích từ cov của mỗi hình?
Mình đọc tài liệu thấy vậy. Bạn cho mình xin nguồn cách bạn làm với, có thể có nhiều biến thể khác nhau của pca
cụ thể là tài liệu mình đọc không có bước 4 mà từ bước 3 tính luôn eigen vector cho cov của các Hi, như vậy mỗi Hi có 1 cov và eigen vector cũng được tìm trên tưng ảnh
và số thành phần chính ở đây chọn cố định là 20 à bạn
Chỗ đó có thể thay bằng H’[i] = cov(avgH) rồi trích luôn, do mình dẫn từ bên đó qua nó ghi vậy
Mà mình tìm một buổi rồi, toàn là tổng hợp lại rồi trích thôi, chứ không có trích riêng cho mỗi ảnh.
Nếu ta chọn cỡ 300*240 thì sẽ sinh ra ma trận 240x240, chọn 20 là cũng khá rồi. Nếu trải ra như PCA cơ bản thì sẽ tới 10000 biến (bằng số ảnh trong tập huấn luyện n).
Sao nhiều cách vậy, mình đếm thấy pca trên từng ảnh có 3 cách rồi :3
Thầy hướng dẫn tt mình bảo có thể thực hiện trên mỗi ảnh. Vế lý thuyết thì mình cũng thấy ng ta làm trên từng ảnh nhưng khi dùng opencv thì k thấy :3
Bạn dùng tính chất phương sai thì sẽ thấy tính cov ngay trên avgH hay tính trên mỗi ảnh rồi lấy trung bình là như nhau. Vậy ta tính trên avgH thôi.
Ví dụ mình làm bằng tay cho cách pca tưng ảnh
Ví dụ làm bằng tay cho pca trên tập dữ liệu
Bạn thấy giống cách của bạn không
À, PCA trên một ảnh đó là để nén ảnh, chứ đâu dùng để nhận dạng được
Cách 2 mình làm trên là eigenface dùng để nhân dạng face. cách 1 tương tự cách 2 chỉ có là làm trên 1 ảnh thôi
À cách 1 ở trên khác ở bước cuối với cách 2. chuẩn hóa eigen và giảm chiều
Vậy bạn so với khuôn mặt mẫu ntn nếu mỗi hình có một bộ eigenvector khác nhau?
Mà mình đang đề cập đến 2D, ảnh chuyển thẳng qua ma trận.
Cách nhận dạng mặt của eigneface là sử dụng chung bộ eigenvector để giảm chiều dữ liệu rồi đánh giá độ tương đồng
Mình nghĩ mình train với svm chẳng hạn thì mình chỉ cần giảm chiều dữ liệu của các ảnh trong tập huấn luyện làm sao cho nó giữ lại k thành phần chính (với số k ở các ảnh là như nhau) mà mỗi ảnh được giảm chiều dữ liệu không cần cùng bộ eigen vector. Vì mục đích giữ lại k lượng thông tin nhất đinh thôi
Mình đã thử pca cho cả tập nhưng kết quả k cao nên thầy bảo thử pca cho tưng ảnh. Vấn đề là pca cho từng ảnh như trên mình nói thấy nhiều cách mà trong opencv k biết pca 1 ảnh kiểu gì, trên trang chủ toàn làm theo cả tập
Thì từ đầu pca mình bàn là 2d mà
Bạn đã dùng pca trong opencv bao giờ chưa. Thay vì chọn số k thành phần tính thì mình sử dụng chỉ số retained varianve đại diện cho lượng thông tin dữ lại (%) mà thấy sau khi thực hiện phép chiếu, cỡ vector cho ra khác nhau ~~