Thuật toán này đảm nhiệm vai trò giải mã tập tin Video đầu vào. Trong luận văn này chỉ hỗ trợ cho tập tin AVI.
• Đầu vào: Tên của tập tin Video (AVI)
• Đầu ra: Toàn bộ nội dung của tập tin Video được lưu dưới dạng từng BYTE.
• Mô phỏng thuật toán:
VideoDecoder ()
//Khởi tạo bộ giải mã AVIFileInit();
//Mở tập tin Video với đường dẫn cho trước AVIFileOpen();
//Nếu mở thành công và định dạng của tập tin Video đầu vào đúng là định // dạng được hỗ trợ thì tiến hành đọc nội dung của Video
//Còn nếu không đọc dược file hay định dạng không được hỗ trợ thì giải phóng bộ nhớ và thoát.
AVIStreamRelease(); AVIFileExit();
End VideoDecoder
B.1.3 Thuật giải lan truyền ngược:
Bước 1: Tạo mạng truyền thẳng có Nin nơron đầu vào, Nhiden nơron trên mỗi lớp ẩn và h lớp ẩn trong mạng, Nout nơron đầu ra.
Bước 2: Khởi tạo bộ trọng cho mạng với giá trị nhỏ
Bước 3 :Trong khi <điều kiện kết thúc chưa thoả> làm :
Với mỗi cặp (x, t) trong không gian mẫu huấn luyện thực hiện:
• Xét lớp nhập : truyền x qua mạng, tại mỗi lớp xác định đầu ra của mỗi Nơron. Quá trình này được thực hiện đến lớp xuất dựa theo cấu trúc mạng cụ thể.
For(int i=0;i<lsize[0];i++) out[0][i]=in[i];
Gán dữ liệu cho tầng nhập :lsize[0] là kích thước tầng nhập, in[i] là giá trị nhập thứ i, out[0][i] là giá trị xuất của nơron i của tầng nhập.
For (i=1;i< numl ;i++) {
//Xét từng tầng với numl là số tầng For(int j=0;j<lsize[i];j++){
//xét mỗi nơron trong tầng hiện tại đang xét : lsize[i] là kích thước hay số phần tử trong tầng thứ i
Sum=0.0; // khởi tạo sum
For(int k=0;k<lsize[i-1];k++){ //cho ngõ nhập từ mỗi nơron ở tầng trước
//weight[i][j][k] là trọng số nối kết của nơron k ở tầng (i-1) với nơron j ở tầng i
}
sum+=weight[i][j][lsize[i-1]]; out[i][j]=sigmoid(sum);
//gọi hàm sigmoid tính và gán giá trị cho ngõ xuất của nơron j trong tầng i (out[i][j])
} }
• Xét lớp xuất: đối với đầu ra ok của Nơron k trong lớp xuất k, xác định sai số σ =k ok(1−o tk)(k−ok).
for(int i=1;i<lsize[numl-1];i++){
delta[numl-1][i]=out[numl-1][i]*(1-out[numl-1][i])*(tgt[i]-out[numl-1][i]); }
Chuyển sang lớp ẩn L kế nó, đặt L=k-1
• Xét các lớp ẩn: với mỗi Nơron trên lớp ẩn thứ L, xác định sai số k output k kh h h h o o w δ δ ← (1− )∑∈ For(i=numl-2;i>0;i--){ For(int j=0;j<lsize[i];j++){ Sum=0.0; For(int k=0;k<lsize[i+1];k++){ Sum+=delta[i+1][k]*weight[i+1][k][j]; } Delta[i][j]=out[i][j]*(1-out[i][j])*sum; } } Cập nhật lại trọng số có trong mạng :
ji ji ji ω ω ω ← + ∆ với ∆ωji =ηδjxji for(i=1;i<numl;i++){ for(int j=0;j<lsize[i];j++){ for(int k=0;k<lsize[i-1];k++){ prevDwt[i][j][k]=beta*delta[i][j]*out[i-1][k]; weight[i][j][k]+=prevDwt[i][j][k]; } prevDwt[i][j][lsize[i-1]]=beta*delta[i][j]; weight[i][j][lsize[i-1]]+=prevDwt[i][j][lsize[i-1]]; } }
Nếu (L>1) thì: chuyển sang lớp ẩn trên nó : L=L-1 và quay lại bước 3.3 Ngược lại: chọn cặp (x, t) mới trong không gian mẫu học, quay lại bước 3.1
B.1.4 Thuật toán SVM nhiều lớp:
Bước 1: Khởi tạo mảng vote gồm nr_class lớp int i;
int nr_class = model->nr_class;
double *dec_values = Malloc(double, nr_class*(nr_class-1)/2); svm_predict_values(model, x, dec_values);
int *vote = Malloc(int,nr_class); for(i=0;i<nr_class;i++)
vote[i] = 0;
Bước 2: Trong khi duyệt trên các lớp từ i=0 đến nr_class-1 Trong khi duyệt trên các lớp kế j=i+1 đến nr_class-1
Nếu mẫu X thuộc lớp i thì tăng giá trị vote[i]
Ngược lại X thuộc lớp j thì tăng giá trị vote[j] int pos=0;
for(int j=i+1;j<nr_class;j++) { if(dec_values[pos++] > 0) ++vote[i]; else ++vote[j]; }
Bước 3: Duyệt trên mảng vote, giá trị nào lớn nhất thì chỉ số của mảng sẽ là lớp mà mẫu X thuộc về . int vote_max_idx = 0; for(i=1;i<nr_class;i++) if(vote[i] > vote[vote_max_idx]) vote_max_idx = i; B.2 Cài đặt:
Chương trình thử nghiệm được cài đặt bằng ngôn ngữ C++ trên hệ điều hành Microsoft Windows XP, sử dụng môi trường lập trình Microsoft Visual C++ 6.0 IDE.
. Được thử nghiệm trên máy PC P4 3GHz.
• Các lớp chính của chương trình:
CDetect: Dùng để phát hiện khuôn mặt, mắt, miệng.
CImageProcessing: Dùng thực hiện các biến đổi xử lý ảnh.
CcreateData: Dùng để tạo dữ liệu cho PCA và ICA, dữ liệu cho ICA là dữ liệu đã được qua PCA.
CPCA: Dùng biến đổi PCA.
CregICA: Dùng nhận dạng với cách rút trích đặc trưng ICA.
VideoDecoder: Dùng để giải mã video.
CMPEGViewer: Dùng để hiển thị Video.
• Các thư viện được sử dụng trong luận văn:
Thư viện xử lý ảnh OpenCV của Intel: dùng cài đặt PCA và dò tìm khuôn mặt.[31]
Thư viện SVM svmlib2.8: dùng phân lớp SVM.
Thư viện toán học MKL (Math Kernel Library) của intel dùng cho thuật toán ICA [30]
Thư viện itpp-3.10.9 có cài đặt sẵn ICA [29]
B.3 Hướng dẫn sử dụng: B.3.1 Màn hình chính:
Hình B.3.1 – 1: Giao diện chính của chương trình
Màn hình chính gồm có một khung để chạy đoạn Video đầu vào, một khung để hiện thị Frame mà tại frame đó hệ thống đã phát hiện được đối tượng, một vùng để hiện thị thông tin của đoạn video đầu vào, một khung để hiện thị khuôn mặt của đối tượng tương ứng đã được lưu trong cơ sở dữ liệu, một text box Threshold, khi kết quả nhận dạng lớn hơn Threshold này thì mới được chấp nhận, tức đó mới là một đối tượng, một text box để hiện thông tin đã lưu sẵn trong cơ sở dữ liệu về đối tượng này, một text box để hiển thị số lượng khuôn mặt đối tượng mà hệ thống nhận dạng được trong các frame. Nếu frame nào có cùng lúc hai khuôn mặt đối tượng thì ta tạo hai frame copy của frame này, tuy nhiên trong mỗi frame ta tô đỏ biên một khuôn mặt để người sử dụng biết là đang nhận dạng frame nào.
B.3.2 Chức năng nhận dạng trên video:
Từ menu File chọn mục OpenAviFile để mở đoạn Video cần test, chương trình chỉ hỗ trợ với định dạng file AVI(uncompressed).
Hình B.3.2 -1: Màn hình minh họa chức năng test trên video
Sau khi chọn file AVI để test, nhấn vào nút Play trên màn hình chính lúc này hệ thống sẽ hiện thị Video lên màn hình đồng thời tiến hành nhận dạng các đối tượng có trong đoạn video. Khi frame được chọn đưa vào nhận dạng có đối tượng, hệ thống sẽ tự động nhận dạng và đưa ra thông tin về đối tượng tương ứng trong cơ sở dữ liệu, đồng thời tự động cập nhật số lượng frame detect có đối tượng.
Hình B.3.2 – 2 : Giao diện của chương trình khi hoạt động
Từ menu Neural network, chọn chức năng Train, màn hình tham số sẽ xuất hiện như bên dưới.
Hình B.3.3 – 1 : Màn hình tham số huấn luyện cho mạng nơron.
• Data in là đường dẫn thư mục chứa các thư mục ảnh huấn luyện ( ảnh của khuôn mặt sau khi qua detect bởi adaboost), ở đây mỗi đối tượng sẽ được lưu trong một thư mục riêng.
• K face, K left eye, K right eye, K mouth là số chiều véc tơ đặc trưng sau khi giảm bởi ICA.
• FNN Error là tổng lỗi của mạng Nơron
• Data out là đường dẫn nơi lưu bộ trọng của các mạng nơron sau khi huấn luyện.
Từ menu Neural network, chọn chức năng ReadData, màn hình Readdata sẽ xuất hiện như bên dưới.
Hình B.3.4 -1 : Màn hình đọc dữ liệu đã huấn luyện
• Data for PCA: đường dẫn thư mục chứa các file đã tính toán được bởi PCA như: avgVector, eigenVector.
• Data for ICA: đường dẫn thư mục chứa các file đã tính toán được của ICA: in_mix_matrix (nghịch đảo ma trận trộn).
• Data For FANN: đường dẫn thư mục chứa các mạng nơron đã được huấn luyện.
Từ menu TestOnImage chọn chức năng TestFolder, màn hình giao diện sẽ hiện ra như hình dưới:
Hình B.3.5 – 1: Màn hình test thư mục
• Folder In: đường dẫn thư mục cần nhận dạng, trong thư mục này chứa các ảnh.
• Folder Out: đường dẫn chứa file kết quả, file kết quả là một file text, gồm nhiều dòng, mỗi dòng là tên ảnh trong thư mục nhận dạng và thứ tự của đối tượng đã được nhận dạng tương ứng.
Từ menu TestOnImage chọn chức năng TestImage.
Hình B.3.6 – 1 : Màn hình nhận dạng trên ảnh tĩnh
• Chọn open để mở một ảnh cần nhận dạng.
Tài liệu tham khảo:
[1] Lu Buon Vinh, Hoàng Phương Anh (2004), ”Nghiên cứu và xây dựng hệ thống nhận
dạng mặt người dựa trên FSVM và Adaboost”, Luận văn cử nhân tin học Khoa công
nghệ thông tin, ĐH KHTN TP HCM.
[2] Trần Phước Long, Nguyễn Văn Lượng (2003), “Nhận dạng mặt người bằng thông
tin khuôn mặt xuất hiện trên ảnh”, Luận văn cử nhân tin học Khoa công nghệ thông tin,
ĐH KHTN TP HCM.
[3] Lê Minh Trí – Nguyễn Thúy Hằng (2006), “Đề xuất phương pháp trích chọn đặc
trưng mới cho bài toán nhận dạng mặt người”, Luận văn Cử nhân CNTT Trường Đại
Học KHTN TPHCM.
[4] Markus Weber, Frontal Face Dataset, California Institute of Technology, 1999 http:// www.vision.caltech.edu/html-files/archive.html
[5] CBCL Face Database, CMU and MIT
http://www.ai.mit.edu/projects/cbcl.old/software-datasets/FaceData2.html
[6] Nguyễn Thành Thái (12/2006) , “Nhận dạng mặt người dùng SVM và mạng nơron”, Luận văn Thạcsĩ CNTT Trường Đại học KHTN, TPHCM
[7] Bùi Xuân Hải, Trần Nam Dũng, “Đại Số Tuyến Tính”, NXB Đại Học Quốc Gia TPHCM 2001.
[8] Đinh Văn Gắng, “Lý Thuyết Xác Suất Và Thống Kê”, NXB GiáoDục.
[9] Tạ Văn Hùng – Nguyễn Phi Khứ (2000), “Đại Số Tuyến Tính Lý Thuyết Và Bài
Tập”, NXB Thống kê.
[10] Aapo Hyvarinen, Erkki Oja, (2000), “Independent Component Analysis: Algorithm
and Applications”, Neural Networks Research Centre Helsinki University of
Technology. Neural Networks, 13(4-5): 411 – 430
[11] Lê Hoàng Thái, Lê Minh Trí, Nguyễn Thuý Hằng (6/2006), “Đề xuất phương pháp
[12] Trần Phúc Trị (2006), “Phát hiện mặt người bằng Adaboost kết hợp mạng Nơron”,
Luận văn Thạc sĩ Công Nghệ Thông Tin, khoa công nghệ thông tin, ĐH KHTN TPHCM [13] Qing Chen (May 2, 2006), ”Hand Detection with a Cascade of Boosted Classifiers
Using Haar-like Features”, Discover Lab, SITE, University of Ottawa,
www.discover.ottawa.ca
[14] Viola and Michael Jones(5/2004), “Robust real-time face detection”, International Journal of Computer Vision, 57(2): 137-154.
[15] Pierre Comon (April,1994), ”Independent Component Analysis, Anew concept”, Vol. 36, no 3, Special issue on High order statistics, Appril 1994, pp 287 – 314
[16] Aapo Hyvarinen (1999), “Fast and Robust Fixed point Algorithms for Independent
Component Analysis”, Helsinki University of Technology Laboratory of Computer and
Information Science.
[17] Bruce A. Draper, Kyungim Baek, Marian Stewart Bartlett, J. Ross BeveRidge,
“Recognizing Face with PCA and ICA” Department of Computer Science Colorado State
University, Department of Biomedical Engineering Columbia University, University of California of Sandiego Institute for Neural Computatation.
[18] Marian Stewart Bartlet, Javier R.Movellan, Terrence J. Sejnowski, “Face
Recognition by Independent Component Analysis”, IEEE Transactions on Neural
Networks, Vol. 13, No. 6, November 2002.
[19] Marian Stewart Bartlet, H. Martin Lades, Terrence J. Sejnowski, “Independent
Component representation for face recognition”, University of California Sandiego and
Salk Institute.
[20] Võ Minh Sơn (2006), “Tách ảnh dùng biến đổi Wavelet và phân tích thành phần
độc lập”, Luận văn Thạc sĩ khoa học vật lý, khoa điện tử trường Đại Học KHTN
[21] Phan Duy Tuấn (2006), ”Ứng dụng phân tích thành phần độc lập ICA trong lọc
nhiễu ảnh”, Luận văn Thạc sĩ khoa học vật lý, khoa điện tử trường Đại Học KHTN
TPHCM
[22] Trương Tấn Quang, Nguyễn Hữu Phương (23/2/2006), “Tách âm dùng phương
pháp phân tích thành phần độc lập”, Tạp chí phát triển KhoaHọc và Công Nghệ, tập 9
số 2 năm 2006.
[23] Paul Cristea (2001) “Independent Component Analysis (ICA) for Genetic signals”, University of Bucharest, Romania.
[24] C. J. C. Burges and A. J. Smola, editors (1999), “Advances in Kernel Methods:
Support Vector Learning”, The MIT Press, Cambridge, MA, 1999, pp 255-268.
[25] Lê Hoàng Thái (2004) “Xây dựng, phát triển, ứng dụng một số mô hình kết hợp
giữa mạng nơron (NN), logic mờ (FL) và thuật giải di truyền (GA)”, Luận án tiến sĩ toán
học, ĐH KHTN TPHCM. Phụ lục C,D trang 1-17
[26] Hoàng Xuân Huấn, Đặng Thị Thu Hiền. “An Efficient Algorithm for Training
Interpolation Radial Basis Function Networks”, College of Technologies, Vietnam
National University.
[27] Hoàng Xuân Huấn, Nguyễn Xuân Vũ, Lê Hoàng Thái. “Developing An Interpolation
Radial Basis Function Networks for Verifying Human Face”, College of Technologies,
Vietnam National University.
[28] Nguyễn Đình Thúc[2000], “Trí Tuệ Nhân Tạo, Mạng NơRon Phương Pháp
và Ứng Dụng”, NXB Giáo Dục 2000.
[29] Thư viện itpp http://itpp.sourceforge.net/latest/
[30] Thư viện intel MKL http://www.intel.com/cd/software/products/asmo- na/eng/307757.htm
[31] Intel Open Source Computer Vision Library – OpenCV http://www.intel.com/technology/computing/opencv/ [32] Fast Artificial Neural Network Library – FANN
http://leenissen.dk/fann/ [33] www.codeproject.com