Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.27 MB, 41 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
<b><small>Danh mục các thuật ngữ, ký hiệu, từ viết tắt...3</small></b>
<b><small>Lời cảm ơn...4</small></b>
<b><small>Lời nói đầu...5</small></b>
<b><small>Chương 1. Giới thiệu đề tài...6</small></b>
<b><small>2.2.3. Phương pháp PCA (eigenface)...11</small></b>
<b><small>Chương 3: Kết quả thực nghiệm...14</small></b>
<b><small>3.1. Dữ liệu...14</small></b>
<b><small>3.2. Các thuật tốn chạy chương trình...15</small></b>
<b><small>3.2.1. Thư viện chương trình và đọc đường dẫn đến dữ liệu ảnh...15</small></b>
<b><small>3.2.3. Chia thành tập huấn luyện và tập kiểm tra...18</small></b>
<b><small>3.2.4. Chức năng trợ giúp để vẽ một bộ sưu tập chân dung...19</small></b>
<b><small>3.2.5 Thực hiện huấn luyện bằng SVM...20</small></b>
<b><small>3.2.6. Báo cáo phân loại...22</small></b>
<b><small>3.2.7. Dự đoán người dùng dựa trên mơ hình...23</small></b>
<b><small>3.2.8. Dự đốn tồn bộ người dùng dựa trên mơ hình...24</small></b>
<b><small>3.2.9. Nhận diện khn mặt bằng</small></b><i><b><small> camera...26</small></b></i>
<b><small>3.2.10. Nhận diện khn mặt bằng hình ảnh...29</small></b>
<b><small>3.3. Kết quả nhận diện khuôn mặt...31</small></b>
<b><small>CHƯƠNG 4: KẾT LUẬN VÀ BÀI HỌC KINH NGHIỆM...42</small></b>
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">Để hoàn thành bài tập lớn này, chúng em xin cảm ơn chân thành đến tồn thể thầy cơ trong trường Đại học cơng nghiệp Hà Nội nói chung và các thầy cô trong khoa Công nghệ thông tin nói riêng, những người đã tận tình hướng dẫn, chỉ bảo và trang bị cho chúng em những kiến thức bổ ích trong những năm học vừa qua. Chúng em xin gửi lời cảm ơn đến cơ đã tận tình hướng dẫn, trực tiếp chỉ bảo và tạo điều kiện giúp đỡ chúng em trong suốt quá trình làm bài tập lớn. Cô không chỉ truyền đạt kiến thức của mơn học mà cịn truyền đạt những kỹ năng về thuyết trình, kỹ năng làm việc nhóm. Trong q trình nghiên cứu và làm báo cáo do năng lực, kiến thức, trình độ nhóm cịn hạn hẹp nên khơng tránh khỏi những thiếu sót. Nhóm em kính mong nhận được sự thơng cảm và những ý kiến đóng góp của quý thầy cô và các bạn.
Em xin chân thành cảm ơn! Nhóm thực hiện
Nhóm 16
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">Những năm gần đây, AI nổi lên như một bằng chứng của cuộc cách mạng công nghiệp lần thứ tư. Trí tuệ nhân tạo có thể được định nghĩa như một ngành của khoa học máy tính liên quan đến việc tự động hóa các hành vi thơng minh. Trí tuệ nhân tạo là một bộ phận của khoa học máy tính và do đó nó phải được đặt trên những nguyên lý lý thuyết vững chắc, có khả năng ứng dụng được các lĩnh vực này. Ở thời điểm hiện tại, thuật ngữ này thường dùng để nói đến các máy tính có mục đích không nhất định và ngành khoa học nghiên cứu về các lý thuyết và các ứng dụng của trí tuệ nhân tạo. Theo đà phát triển của cơng nghệ, ứng dụng trí tuệ nhân tạo luôn là xu hướng công nghệ tương lai mà các hãng cơng nghệ trên tồn thế giới đua nhau sáng tạo, nó là nền tảng cốt lõi của cuộc cách mạng công nghệ 4.0.
ML (Machine Learning) là một lĩnh vực của trí tuệ nhân tạo, được sinh ra từ khả năng nhận diện mẫu vả từ lý thuyết các máy tính có thể học mà khơng cần phải lập trình để xử lý các nhiệm vụ cụ thể nào đó.
Hầu hết mọi ngành cơng nghiệp đang làm việc với hàm lượng lớn đã liệu đều nhận ra tâm quan trọng của cơng nghệ AI. Những cái nhìn sáng suốt từ nguồn dữ liệu này chủ yếu dùng thời gian thực sẽ giúp các tổ chức vận hành hiệu quả hơn hoặc tạo lợi thế cạnh tranh với các đối thủ. Các ứng dụng của AI đã quá quen thuộc với con người: xe tự hành của Google và Tesla, hệ thống tự tag khuôn mặt trên Facebook , hệ thống gợi ý sản phẩm của Amazon, hệ thống gợi ý phim trên ứng dụng Netflix… chỉ là một vài ứng dụng trong muôn vàn những ứng dụng của trí tuệ nhân tạo và cụ thể là ML - Machine Learning.
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">Như ta đã biết, thời đại hiện nay là thời đại internet, là thời đại của sự bùng nổ thông tin, khi mà tất cả mọi người trên thế giới đều sống trên một thế giới phẳng, đặc biệt là hiện nay khi đang diễn ra cuộc cách mạng cơng nghiệp 4.0 thì lượng thông tin ngày càng nhiều, việc phân loại chúng trở nên khó khăn. Ở bất kỳ một tổ chức nào, với bất kỳ một mơ hình hay quy mơ nào cũng đều có những nhu cầu về lưu trữ và khai thác thơng tin. Đã có nhiều hệ thống phân loại tin tức để ra quyết định.
Việc phân loại tin tức đã đem lại nhiều thành tựu nhất định, cụ thể như:
• Xác định được xu thế của cộng đồng mạng khí mà cộng đồng này chiếm ngày càng đơng trong xã hội, qua đó xác định được xu thế về mặt ngắn hạn của xã hội, hỗ trợ cho người sử dụng đưa ra các quyết định phù hợp.
• Việc phân loại tin tức cũng được ứng dụng trên các website thương mại nhằm nắm bắt được xu thế tiêu dùng của người sử dụng.
Một trong những thuật toán để ứng dụng công việc ứng dụng trong nhận diện khn mặt là xác định khn mặt đó là thuật tốn SVM – Support Vector Machine.
Thuật tốn này có ưu điểm: Xử lý trên không gian số chiều cao: SVM là một cơng cụ tính tốn hiệu quả trong khơng gian chiều cao, trong đó đặc biệt áp dụng cho các bài tốn phân loại văn bản và phân tích quan điểm nơi chiều có thể cực kỳ lớn.Tiết kiệm bộ nhớ.
<b>Mục đích nghiên cứu của đề tài</b>
Nghiên cứu và đề xuất các phương pháp phân loại văn bản theo chủ đề dựa trên thuật tốn SVM – Support Vector Machine.
- Tích hợp các giải pháp ứng dụng vào một hệ thống và đánh giá hiệu quả.
<b>Ý nghĩa khoa học thực tiễn của đề tài</b>
- Đóng góp về mặt phương pháp luận và thực nghiệm vào lĩnh vực phân loại văn bản, một nhánh nghiên cứu của xử lý ngôn ngữ tự nhiên.
- Cải tiến chất lượng hệ thống phân loại văn bản hiện có để nâng cao quản lý xu thế của tin tức.
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">Mục tiêu:
- Mục tiêu chính của đề tài là Ứng dụng thuật toán SVM – Support Vector Machine vào hệ thống để xác định khuôn mặt.
- Nghiên cứu và cải thiện thuật toán SVM trong hệ thống phân loại tin tức. Nhiệm vụ:
- Thu thập dữ liệu mẫu.
- Nghiên cứu các phương pháp xác định khuôn mặt
SVM là một thuật toán giám sát, nó có thể sử dụng cho cả việc phân loại hoặc đệ quy. Tuy nhiên nó được sử dụng chủ yếu cho việc phân loại. Trong thuật toán này, chúng ta vẽ đồi thị dữ liệu là các điểm trong n chiều ( ở đây n là số lượng các tính năng bạn có) với giá trị của mỗi tính năng sẽ là một phần liên kết. Sau đó chúng ta thực hiện tìm "đường bay" (hyper-plane) phân chia các lớp. Hyper-plane nó chỉ hiểu đơn giản là 1 đường thẳng có thể phân chia các lớp ra thành hai phần riêng biệt.
Hình 2.1.1. Mơ tả khái niệm SVM
Support Vectors hiểu một cách đơn giản là các đối tượng trên đồ thị tọa độ quan sát, Support Vector Machine là một biên giới để chia hai lớp tốt nhất.
Giả sử rằng các cặp dữ liệu của training set là (x1,y1),(x2,y2),…,(xN,yN) (x1,y1), (x2,y2),…,(xN,yN) với vector xi ∈Rd thể hiện đầu vào của một điểm dữ liệu và yi là nhãn của điểm dữ liệu đó. d là số chiều của dữ liệu và N là số điểm dữ liệu. Giả sử rằng nhãn của mỗi điểm dữ liệu được xác định bởi yi= 1 (class 1) hoặc yi= −1 (class 2) giống như trong PLA.
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">Hình 2.2.1. Minh họa SVM với cặp dữ liệu training
Giả sử rằng các điểm vng xanh thuộc class 1, các điểm trịn đỏ thuộc class -1 và mặt wTx+b=w1x1+w2x2+b= 0 là mặt phân chia giữa hai classes .Hơn nữa, class 1 nằm về phía dương, class -1 nằm về phía âm của mặt phân chia. Nếu ngược lại, ta chỉ cần đổi dấu của w và b. Chú ý rằng chúng ta cần đi tìm các hệ số w và b.
Ta quan sát thấy một điểm quan trọng sau đây: với cặp dữ liệu (xn,yn) bất kỳ, khoảng cách từ điểm đó tới mặt phân chia là:
Điều này có thể dễ nhận thấy vì theo giả sử ở trên, yn luôn cùng dấu với phía của xnxn. Từ đó suy ra ynyn cùng dấu với (wTxn+b), và tử số luôn là 1 số không âm.
Với mặt phần chia như trên, margin được tính là khoảng cách gần nhất từ 1 điểm tới mặt đó (bất kể điểm nào trong hai classes):
Margin = min
Bài toán tối ưu trong SVM chính là bài tốn tìm w và b sao cho margin này đạt giá trị lớn nhất :
(w,b) = arg max (w,b) {min } = arg max(w,b) {minYn (wTxn+b)}(1)
Việc giải trực tiếp bài toán này sẽ rất phức tạp, nhưng các bạn sẽ thấy có cách để đưa nó về bài tốn đơn giản hơn.
Nhận xét quan trọng nhất là nếu ta thay hệ số w bởi kw và b bởi kb trong đó k là một hằng số dương thì mặt phân chia khơng thay đổi, tức khoảng cách từ từng điểm đến mặt phân chia khơng đổi, tức margin khơng đổi. Dựa trên tính chất này, ta có thể giả
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">Với những điểm nằm gần mặt phân chia nhất như hình dưới đây :
Hình 2.2.2. Minh họa SVM những điểm gần mặt phân chia nhất Như vậy, với mọi n, ta có :
Yn (wTxn + b)>=1
Vậy bài tốn tối ưu (1) có thể đưa về bài tốn tối ưu có ràng buộc sau đây:
(w,b) = arg max(w,b) subject to :Yn(wTxn+b)≥1, ∀n=1,2,…,N(2) Bằng 1 biến đổi đơn giản ,ta có thể đưa bài toán này về bài toán dưới đây:
(w,b) = arg min(w,b) ||w||2 subject to: 1-yn(wTxn + b)≤0, ∀n=1,2,…,N (3)
Ở đây, chúng ta đã lấy nghịch đảo hàm mục tiêu, bình phương nó để được một hàm khả vi, và nhân với 1212 để biểu thức đạo hàm đẹp hơn.
Xác định class cho một điểm dữ liệu mới: Sau khi tìm được mặt phân cách wTx+b=0; wTx+b=0, class của bất kỳ một điểm nào sẽ được xác định đơn giản bằng cách:
Class(x) = sgn(wTx+b)
Trong đó hàm sgn là hàm xác định dấu ,nhận giá trị 1 nếu đối số không âm và -1 nếu ngược lại.
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">Hình 2.2.3 Margin trong SVM
Margin là khoảng cách giữa siêu phẳng đến 2 điểm dữ liệu gần nhất tương ứng với các phân lớp. Trong ví dụ quả táo quả lê đặt trên mặt bán, margin chính là khoảng cách giữa cây que và hai quả táo và lê gần nó nhất. Điều quan trọng ở đây đó là phương pháp SVM ln cố gắng cực đại hóa margin này, từ đó thu được một siêu phẳng tạo khoảng cách xa nhất so với 2 quả táo và lê.
Nhờ vậy,SVM có thể giảm thiểu việc phân lớp sai (misclassification) đối với điểm dữ liệu mới đưa vào.
Phép phân tích thành phần chính (Principal Components Analysis - PCA) là một thuật tốn thống kê sử dụng cho phép biến đổi trực tiếp giao để biến một tập hợp dữ liệu từ một khơng gian nhiều chiều sang một khơng gian mới ít chiều hơn (2 hoặc 3) Chiều tối ưu hóa khả năng thể hiện sự biến thiên của dữ liệu
Phương pháp PCA cho nhận dạng mặt (eigenface): Mỗi ảnh có kích thước WxH (kích thước phổ biến là 128 × 128) sẽ được chuyển thành một vector cột có độ dài W*H (cho cả tập training và probe) (gọi là các vector Xi). Ở bước training, một vector trung bình của tất cả các ảnh training sẽ được tính (vector M), sau đó mỗi vector thuộc tập training sẽ bị mean-subtracted: Xi=Xi-M, ma trận hiệp phương sai được tính bằng C = A’*A, trong đó A’ là ma trận chuyển vị của A và A = [X1, X2, …Xk] là ma trận
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">với các cột là các vector Xi, k là số ảnh thuộc tập training (k=40*n với CSDL ORL). A sẽ có kích thước là (W*H)xk, cịn ma trận C sẽ có kích thước là kxk, do k nhỏ hơn W*H rất nhiều nên việc tính k vector riêng (eigenvectors) và giá trị riêng tương ứng (eigenvalues) của C là dễ. Ta sẽ tìm được k giá trị riêng tương ứng với k vector riêng
<b>của C. Các vector riêng được sắp xếp theo thứ tự giảm dần của các giá trị riêng tương</b>
ứng, việc sử dụng tất cả các vector riêng là không cần thiết nên chỉ có N (N viết hoa nhé) giá trị riêng đầu tiên tương ứng với N vector riêng được sử dụng (chính về thế
<b>nên phương pháp này được gọi là phân tích thành phần chính-PrincipalComponent Analysis). N vector riêng này sẽ tạo thành một ma trận có kích thước</b>
(W*H)xN là ma trận của không gian con nhận được (ta gọi ma trận này là Cp). Tiếp đến các ảnh thuộc tập training (ở đây cũng là tập reference) sẽ được chiếu vào không gian con bằng phép nhân: Ap = Cp’ * A, tương tự các ảnh của tập probe sẽ được chiếu vào không gian con bằng phép nhân: Bp = Cp’*B. Ap và Bp sẽ có kích thước tương ứng là NxNoTrain (NoTrain là số ảnh training, tức là bằng k) và Nx NoTest (NoTest là số ảnh của tập probe), nghĩa là mỗi ảnh tương ứng được biểu diễn bằng một vector cột. Ở bước phân lớp, với mỗi ảnh thuộc tập probe, ta tìm ảnh thuộc tập training
<b>gần với nó nhất. Ở bước này các hàm khoảng cách: euclidean, mahalanobis, cosine</b>
angle distance đều có thể sử dụng.
Thực chất, ở nguyên bản của phương pháp PCA ma trận C = A*A’, và có kích thước là (W*H)x(W*H), tức là một ma trận rất, rất lớn nên Mathew A. Turk and Alex P. Pentland (tác giả của phương pháp eigenface) đã sử dụng một thủ thuật là
<b>tìm N vector riêng vi (i=1..N) và giá trị riêng của ma trận L=A’*A (dễ hơn do ma trận</b>
có kích thước nhỏ hơn) sau đó tính N vector riêng của C=A*A’ bằng công
<b>thức ui=A*vi.</b>
Việc tìm các vector riêng của ma trận hiệp phương sai C (trên thực tế là với ma
<b>trận L) có hai cách: dùng phương pháp eigen decomposition (hàm eig của matlab)hoặc singular value decomposition-SVD (hàm svd của matlab), tuy nhiên svd có vẻ</b>
nhanh và cho kết quả tốt hơn so với eig.
Sau đây là bảng tỉ lệ kết quả nhận dạng (Rank-1 Recognition Rate-RR) với số ảnh huấn luyện cho mỗi đối tượng:
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14"><b>Bước 1:</b>
Khai báo thư viện:
Thư viện đồ hoạ: cv2 Thư viện hệ thống: os Thư viện toán học: numpy
Thư viện thuật toán học máy: sklearn Nối đường dẫn đến folder “dataset/”
<b>Bước 2:</b>
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">Trích xuất phần đặc trưng của tệp hình ảnh. data_slice = [70,195,78,172]
Thay đổi kích thước tỷ lệ để giảm kích thước mẫu. resize_ratio = 2.5
Thiết lập chiều cao (h) và chiều rộng (w) của hình ảnh.
h = int((data_slice[1] - data_slice[0])/resize_ratio) w = int((data_slice[3] - data_slice[2])/resize_ratio)
print("Image dimension after resize (h,w) :", h, w)
n_sample = 0 <i>#Số lượng mẫu ban đầu</i>
label_count = 0 <i>#Số lượng nhãn ban đầu</i>
n_classes = 0 <i>#Số lớp ban đầu</i>
<i>#Thành phần PCA </i>
n_components = 7
Kết quả:
<small>target_names =[] </small><i><small>#Mảng để lưu trữ tên của mỗi người</small></i>
<small>for directory in os.listdir(path):</small>
<small> for file in os.listdir(path+directory): img=cv2.imread(path+directory+""file)</small>
<small>[data_slice[]:data_slice[1], data_slice[]:data_slice[3]]</small>
Hàm resize thay đổi kích thước hình ảnh src đến kích thước đã chỉ định.
Hàm cvtColor chuyển đổi một hình ảnh đầu vào từ khơng gian màu ban đầu sang không gian màu BGR2GRAY (Dạng màu xám hoặc trắng đen).
<small>Xappend(featurevector)</small> <i><small>#Nối đối tượng vào cuối danh sách</small></i>
<small>Yappend(label_count)</small> <i><small>#Danh sách đối tượng đã được duyệt qua </small></i>
Thực hiện đếm số lượng hình ảnh có trong thư mục được nối đến là “dataset/”.
<small>target_names.append(directory)label_count=label_count+1</small>
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">Đưa ra tên đối tượng có tên là tên của thư mục.
<small>n_classes = len(target_names) </small><i><small># Chiều dài của mảng tên người </small></i>
Kết quả:
<b>Bước 4:</b>
Tách thành một tập huấn luyện và một tập kiểm tra bằng cách sử dụng k lần phân tầng.
<small>X_train, X_test, y_train, y_test =train_test_split( X, Y, test_size=0.25, random_state=42)</small>
Tính tốn PCA (Principal Components Analysis) trên tập dữ liệu khuôn mặt (được coi là tập dữ liệu chưa được gắn nhãn): trích xuất tính năng / giảm kích thước khơng được
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19"><b>Bước 5: </b>
Khai báo thư viện đồ thị plt
<small>import matplotlib.pyplot as plt</small>
Tạo một hình mới hoặc kích hoạt một hình hiện có.
<small>plt.figure(figsize=1.8 * n_col,2.4 n_row))</small>
Căn chỉnh kích thước và vị trí của chân dung.
<small>plt.subplots_adjust(bottom=, left=.01, right=.99, top=.90, hspace=.35)</small>
Thêm một Trục vào hình hiện tại hoặc truy xuất một Trục hiện có.
<small>plt.subplot(n_row, n_col, i +)</small>
Hiển thị hình ảnh chân dung và đánh số
<small>plt.imshow(images[i], cmap=plt.cm.gray)</small>
</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">Tìm kiếm toàn diện trên các giá trị tham số được chỉ định. Các tham số của cơng cụ ước tính được sử dụng để áp dụng các phương pháp này được tối ưu hóa bằng cách tìm
</div>