Đăng ký Đăng nhập

Tài liệu Đồ án nhận dạng vật thể

.PDF
39
1
100

Mô tả:

ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM BÁO CÁO ĐỒ ÁN 1 NHẬN DẠNG VẬT THỂ Sinh viên thực hiện: Lê Thành Luân - 19520702 Lớp: SE121.M21 Giảng viên hướng dẫn: ThS. Mai Trọng Khang - Khoa CNPM TP.Hồ Chí Minh, Ngày 22 tháng 6 năm 2022 LỜI CẢM ƠN Lời đầu tiên, nhóm tác giả xin chân thành cảm ơn quý thầy cô khoa Công nghệ Phần mềm, trường Đại Học Công Nghệ Thông Tin, ĐHQG TP.HCM, đã tận tình hướng dẫn nhóm trong suốt thời gian qua. Những kiến thức mà thầy cô đã truyền đạt là nền tảng quan trọng để có thể hoàn thành đề tài này. Nhóm tác giả xin gửi lời cảm ơn đặc biệt sâu sắc và chân thành đến ThS. Mai Trọng Khang, cảm ơn thầy đã tận tình hướng dẫn và tạo điều kiện tốt nhất để chúng em có thể hoàn thành đề tài này. Những lời động viên, góp ý chân tình của thầy là động lực quý báu để chúng em vượt qua những khó khăn khi tìm hiểu và thực hiện đề tài. Trong thời gian hơn 3 tháng thực hiện đề tài, nhóm đã cố gắng vận dụng những kiến thức nền tảng đã học, kết hợp với học hỏi và tìm hiểu công nghệ mới để ứng dụng xây dựng đề tài môn học. Tuy nhiên trong quá trình thực hiện, do kiến thức và kinh nghiệm còn nhiều hạn chế, khó tránh khỏi những thiếu sót. Chính vì vậy, nhóm tác giả rất mong nhận được sự góp ý từ quý thầy cô để nhóm hoàn thiện thêm những kiến thức mà nhóm đã học tập, làm hành trang quý báu cho nhóm trong công việc sau này. Xin chân thành cảm ơn quý thầy cô! MỤC LỤC 2 Mục lục 1 Giới thiệu 1.1 Trí tuệ nhân tạo và ứng dụng . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Giới thiệu đề tài và lý do chọn đề tài . . . . . . . . . . . . . . . . . . . . . . 1.3 Mục tiêu đề ra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Các 2.1 2.2 2.3 2.4 2.5 2.6 khái niệm Nhận dạng vật thể . . . . . . . . . . Học sâu . . . . . . . . . . . . . . . . Mạng thần kinh (Neural Network) . Lớp tích chập (Convolutional Layer) Lớp gộp (Pooling Layer): . . . . . . Intersection Over Union (IOU) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 5 6 . . . . . . 6 . 6 . 8 . 9 . 11 . 16 . 17 3 YOLO (You Only Look Once) 3.1 Mạng YOLO là gì? . . . . . . 3.2 Kiến trúc mạng YOLO . . . . 3.3 Anchor box (hộp neo) . . . . 3.4 Non-max suppression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 19 19 20 21 4 Các 4.1 4.2 4.3 4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 22 22 22 22 5 Quá trình thực hiện 5.1 Bắt đầu với bài toán phân loại biển báo giao thông 5.1.1 Bộ dữ liệu . . . . . . . . . . . . . . . . . . . 5.1.2 Đọc và xử lý dữ liệu đầu vào . . . . . . . . 5.1.3 Mô hình học sâu sử dụng . . . . . . . . . . 5.1.4 Kết quả . . . . . . . . . . . . . . . . . . . . 5.2 Nghiên cứu về nhận diện vật thể sử dụng YOLOv5 5.2.1 Bộ dữ liệu . . . . . . . . . . . . . . . . . . . 5.2.2 Đọc và xử lý dữ liệu . . . . . . . . . . . . . 5.2.3 Tiến hành huấn luyện . . . . . . . . . . . . 5.2.4 Kết quả . . . . . . . . . . . . . . . . . . . . 5.3 Tạo ra API nhận diện vật thể trên đường phố . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 23 23 24 25 26 27 27 28 29 30 31 công nghệ sử dụng TensorFlow . . . . . . Keras . . . . . . . . . YOLOv5 . . . . . . . . Flask . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Hướng dẫn cài đặt và sử dụng 34 6.1 Điều kiện yêu cầu: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 6.2 Các bước thực hiện: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 7 Kết 7.1 7.2 7.3 luận Ưu, nhược điểm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hướng phát triển trong tương lai . . . . . . . . . . . . . . . . . . . . . . . . Lời kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 36 37 37 3 1 Giới thiệu 1.1 Trí tuệ nhân tạo và ứng dụng Trong xã hội hiện đại, với sự phát triển nhanh chóng của ngành khoa học và công nghệ thông tin, việc áp dụng những nền tảng công nghệ vào thực tiễn đã không còn là xa lạ. Đặc biệt là các cuộc cách mạng trong lĩnh vực trí tuệ nhân tạo, học sâu, nhờ đó mà sự vận dụng trí tuệ nhân tạo vào các sản phẩm phần mềm, tạo ra những ứng dụng thay thế con người thực chất đã trở thành chuyện hết sức thực tế. Hơn hết, ngành công nghiệp phần mềm cũng bắt kịp xu hướng đó. Ngày càng có nhiều ứng dụng được áp dụng trí tuệ nhân tạo, đem đến vô số lợi ích cho người dùng. Lấy ví dụ, có những ứng dụng sử dụng trí tuệ nhân tạo đã trở nên gắn liền với cuộc sống của nhiều người như: Google Assistant, Siri của Apple, ELSA, Replika, Spotify... Thậm chí, việc sử dụng trí tuệ nhân tạo đã mang lại sự tiện lợi, khiến các ứng dụng này trở nên nổi bật và có thể chiếm lĩnh thị trường. Ngày nay, việc một ứng dụng có tích hợp trí tuệ nhân tạo sẽ trở thành lợi thế cạnh tranh tuyệt vời cho các nhà phát triển. Từ đó, có thể thấy được, trí tuệ nhân tạo cùng với ứng dụng là một sự kết hợp khôn khéo hết sức tuyệt vời của loài người. Vì thế, việc lập trình viên được trang bị những kiến thức này là điều cần thiết để có thể chuẩn bị cho những bước tiến xa hơn của xã hội trong tương lai. Hình 1: Trong một chiếc điện thoại thông minh, có hàng chục ứng dụng tích hợp trí tuệ nhân tạo đang được sử dụng hằng ngày bởi hàng triệu người dùng Với sự cải thiện hằng ngày có thể thấy qua các công trình nghiên cứu liên tục được công bố, trí tuệ nhân tạo đang hứa hẹn một tương lai tươi sáng cho loài người. Các lập trình viên, những người luôn đón đầu xu hướng công nghệ, đã nghĩ ra rất nhiều cách để sử dụng trí tuệ nhân tạo trong các ứng dụng, có thể kể đến như: 1. Máy học: Máy học có thể nói là công nghệ trí tuệ nhân tạo phổ biến nhất trong công nghệ thông tin. Máy học là khả năng máy tính và các sản phẩm phần mềm đưa ra các quyết định có hiểu biết và đưa ra kết luận học hỏi từ kinh nghiệm trong quá khứ của chúng. Sở dĩ nó có thể đạt được hiệu quả như vậy là thông qua 2 kỹ thuật. Đầu tiên, mô hình học tập có giám sát được huấn luyện để dự báo các phản ứng trong tương lai đối với dữ liệu mới bằng cách phân tích các đầu vào và đầu ra. Kỹ thuật thứ hai là học không giám sát, chỉ hoạt động trên các thông tin đầu vào và phát hiện các mẫu liên tục (còn gọi là phân cụm). Cho dù chiến lược máy học được chọn là gì, nó 1.1 Trí tuệ nhân tạo và ứng dụng 4 sẽ mở ra những khung cảnh rộng lớn để triển khai chúng trong các ứng dụng được sử dụng trong các lĩnh vực khác nhau - từ giáo dục và chăm sóc sức khỏe đến bán hàng và sản xuất. Một ví dụ về máy học được sử dụng trong ứng dụng là một giải pháp fintech tên Oval. Ứng dụng này phân tích thói quen chi tiêu của tất cả người dùng để rút ra chiến lược tiết kiệm cá nhân hóa cho từng khách hàng. Hơn nữa, là một sản phẩm sử dụng máy học, ứng dụng này ngày càng được cải thiện với mỗi tập dữ liệu mới mà người dùng cung cấp để đưa ra những khuyến nghị phù hợp và chính xác hơn. 2. Nhận diện giọng nói: Con người ngày nay không chỉ nói chuyện thông qua điện thoại, mà còn thực sự đang nói chuyện với chiếc điện thoại của mình. Việc trang bị trí cho thiết bị CUI (Conversational User Interface - giao diện người dùng hội thoại) giúp chúng đủ thông minh để tuân theo mệnh lệnh bằng giọng nói và hiểu giọng nói của con người bằng cách chuyển đối nó thành định dạng mà máy tính có thể hiểu được. Phương pháp ứng dụng trí tuệ nhân tạo này đã giúp các trợ lí ảo như Siri hoặc Cortana như đang "sống"bên trong các thiết bị di động của chúng ta và giúp chúng ta các công việc vặt hằng ngày như tìm chỗ đậu xe, phát bài nhạc yêu thích, đặt chỗ nhà hàng... Bên cạnh việc cung cấp những trải nghiệm tiện lợi cho người dùng, ứng dụng nhận diện giọng nói là thứ không thể thiếu cho những người có thị giác kém, cho phép họ có cơ hội tương tác với chiếc điện thoại thông minh mà không cần nhìn vào màn hình. 3. Tổng hợp giọng nói: Công nghệ tổng hợp giọng nói cho phép trí tuệ nhân tạo trong thiết bị di động cũng có thể nói chuyện với chúng ta. Tuy nhiên, trên thực tế, thiết bị di động không thực sự "nói chuyện"với chúng ta mà chỉ phát âm lại các văn bản được nhập vào. Dịch vụ này được hiển thị trong các tiện ích do Android hỗ trợ bởi tính năng gốc với đặc điểm giọng nói có thể tùy chỉnh (tốc độ nói và cao độ giọng) và tùy chọn cài đặt thêm ngôn ngữ, giới tính,... Tuy nhiên, ứng dụng này có thể được cường đáng kể với các ứng dụng chuyên biệt hiện hữu khá nhiều trên thị trường công nghệ thông tin hiện tại. Ví dụ: Narrator’s Voice không chỉ đọc văn bản từ nhiều nguồn mà còn có nhiều lựa chọn giọng nói để phát âm văn bản và tùy chọn thêm nhiều hiệu ứng âm thanh (tiếng vọng, hợp xướng,...). Ngoài ra, trí tuệ nhân tạo có thể chạy văn bản chúng ta viết thông qua bộ tổng hợp và lưu nó dưới dạng tệp MP3, trở thành công cụ mạnh mẽ để lồng tiếng cho các bộ phim, thuyết trình,... 4. Chatbot: Để tăng cường trải nghiệm cho khách hàng sử dụng ứng dụng di động, đòi hỏi các doanh nghiệp phải tự động hóa một phần các dịch vụ tương tác với khách hàng. Đây là lúc chatbot vào cuộc, giúp giảm bớt trọng trách cho các nhân viên đối với việc phản hồi lại khách hàng yêu cầu những dịch vụ phổ biến như giúp điền vào biểu mẫu, trả lời các câu hỏi điển hình, giúp đặt hàng,... Loại hình ứng dụng này của trí tuệ nhân tạo hiện đang trở thành thứ cần thiết phải có đối với các doanh nghiệp vừa và nhỏ, trong khi tất cả những "gã khổng lồ"trong giới kinh doanh (Apple, Microsoft, Amazon, IBM,...) đều sử dụng công nghệ chatbot trên quy mô lớn trên toàn hệ thống dịch vụ khách hàng của họ. Chatbot không chỉ mang lại trải nghiệm tốt cho khách hàng khi không phải mệt mỏi chờ đợi phản hồi từ nhà cung cấp, mà còn giúp các nhà cung cấp dịch vụ có thể cắt giảm bớt nhân lực và vốn dùng trong việc phản hồi khách hàng. 5. Nhận diện hình ảnh: Đây cũng chính là chủ đề được nghiên cứu trong đồ án này. Có thể nhận ra và phân loại đối tượng trong một bức ảnh hoặc video là điều mà tưởng chừng như là không 1.2 Giới thiệu đề tài và lý do chọn đề tài 5 thể đối với máy móc cho đến khoảng thời gian gần đây. Ngày nay, các ứng dụng trí tuệ nhân tạo thực hiện việc này với độ chính xác cao, thậm chí là cao hơn con người. Khả năng này của trí tuệ nhân tạo được ứng dụng trong các lĩnh vực khác nhau từ xác định biển số xe vi phạm quy định giao thông đến giám sát chất lượng sản phẩm trong quá trình sản xuất yêu cầu độ chính xác cao. Một trong những ứng dụng thuộc loại này là Calorie Mama, giúp người dùng kiểm soát lượng calo họ tiêu thụ bằng cách phân tích các bức ảnh về bữa ăn. Hơn nữa, việc người dùng thêm các hình ảnh mới vào cơ sở dữ liệu giúp việc tính toán hàm lượng dinh dưỡng của ứng dụng trở nên chính xác hơn theo thời gian. 6. Nhận dạng văn bản: Đôi khi, chúng ta có thể cần trích xuất các chữ cái hoặc số (hoặc thậm chí một đoạn văn bản lớn) từ một hình ảnh để nhập và sử dụng cho các mục đích khác nhau. Các ứng dụng nhận dạng quang học (OCR) sẵn sàng trợ giúp chúng ta đối với tác vụ này. Một trong những ứng dụng phổ biến nhất trong số đó là Google Keep, giúp ghi lại văn bản từ ảnh và lưu trữ nó ở định dạng kỹ thuật số để chúng ta không phải nhập bất cứ thứ gì theo cách thủ công và có thể xóa hoàn toàn hình ảnh, chỉ để lại các ký tự. Không những thế, ứng dụng này của trí tuệ nhân tạo còn giúp chúng ta trích xuất những thông tin quan trọng trong văn bản, tóm tắt một văn bản lớn,... 7. Sinh trắc học: Các cơ chế được hỗ trợ bởi trí tuệ nhân tạo không chỉ có thể nhận dạng văn bản, hình ảnh hoặc giọng nói mà còn cả các thông số sinh học trên cơ thể con người như hình dạng khuôn mặt, kích thước cơ thể, dấu vân tay, cử chỉ... Chủ yếu được sử dụng trong lĩnh vực tiếp thị, công nghệ này cũng có thể được tận dụng trong các ngành công nghiệp khác. Ví dụ, các ngân hàng, cơ sở cải tạo và cơ sở giáo dục có thể được hưởng lợi từ việc sử dụng công nghệ này cho các hệ thống xác thực người dùng. Ví dụ, Face2Gene là một ứng dụng chuyên biệt dành cho các bác sĩ và giúp họ chẩn đoán các rối loạn di truyền. Nó được huấn luyện để phân tích khuôn mặt của bệnh nhân, đưa ra phản hồi tức thì và cho phép các nhà cung cấp dịch vụ chăm sóc sức khỏe chia sẻ kết quả trong các diễn đàn kín. 8. Phân tích cảm xúc và tình thái: Đây là sự cải tiến của các công nghệ nhận dạng đã đề cập ở trên, nhưng tập trung vào việc xác định cảm xúc của một người. Ngôn ngữ cơ thể, sự biến đổi trong giọng nói và nét mặt là những dấu hiệu nhận biết đóng vai trò là chìa khóa để nhận biết cảm xúc của một người. Việc phân tích chúng rất hữu ích để đánh giá thái độ của người dùng đối với các sản phẩm hoặc quảng cáo cụ thể, đánh giá xếp hạng truyền hình hoặc thậm chí xác định tội phạm ở sân bay, ngân hàng, sân vận động và các địa điểm khác. Thị trường ứng dụng hiện đại có rất nhiều sản phẩm như vậy, trong đó Face Reader của Noldus và Project Oxford của Microsoft là những sản phẩm nổi bật đáng được nhắc đến. 1.2 Giới thiệu đề tài và lý do chọn đề tài Với những kết quả nghiên cứu và ứng dụng của trí tuệ nhân tạo đối với việc phát triển phần mềm, có thể thấy một tương lai đầy hứa hẹn khi mà hầu hết những ứng dụng trên thế giới đều tích hợp trí tuệ nhân tạo. Là những lập trình viên, nhiệm vụ của chúng em là phải đón đấu và nắm bắt xu hướng công nghệ, để có thể đem những công nghệ tiên tiến đó phục vụ trải nghiệm người dùng. Chính vì vậy mà chúng em đã lựa chọn đề tài "Nhận dạng vật thể". Đây vốn là một bài toán thuộc về công nghệ nhận diện hình ảnh đã đề cập ở trên, và cũng là một trong số những bài toán được các nhà nghiên cứu khoa học đầu tư chất xám để giải quyết nhất trong số những bài toán trong lĩnh vực trí tuệ nhân tạo. Đã và đang có vô số những công trình nghiên cứu xoay quanh bài toán này, giúp cho độ hoàn 1.3 Mục tiêu đề ra 6 thiện của những mô hình giải quyết bài toán ngày càng tăng. Do giới hạn của môn học nên chúng em chỉ nghiên cứu vận dụng những gì mà các nhà nghiên cứu trước đó đã đạt được để đưa vào ứng dụng chứ không cải tiến hay thực hiện một công trình nghiên cứu hoàn toàn mới. 1.3 Mục tiêu đề ra Như đã đề cập ở trên, với giới hạn thời gian của môn học, cũng như do cơ sở vật chất không thể đáp ứng được (không có máy tính cấu hình mạnh) và sự thiếu thốn tài nguyên thông tin (không đủ dữ liệu để huấn luyện mô hình học sâu), nên nhóm chúng em chỉ có thể dừng lại ở mức vận dụng thành quả nghiên cứu của những người đi trước, ứng dụng nó vào việc phát triển sản phẩm phục vụ người dùng. Chính vì vậy, nhóm chúng em đã đặt ra mục tiêu cho môn học này là nghiên cứu và phát triển một API ứng dụng thành quả nghiên cứu trong bài toán "Nhận diện vật thể", cụ thể là API nhận dạng các vật thể trên đường như xe cộ, đèn giao thông, biển báo,... Tuy nhiên, nếu chỉ có như vậy thì lại khó mà đáp ứng được tiêu chí của môn học, thê nên nhóm quyết định thực hiện thêm việc nghiên cứu và huấn luyện một phần mô hình học sâu để máy tính phát hiện vật thể bằng phương pháp học chuyển giao (transfer learning) - sẽ được giải thích ở phần sau. 2 Các khái niệm Phần này sẽ nói về những khái niệm mà chúng em đã tìm hiểu được trong quá trình nghiên cứu, đồng thời cũng có đề cập đến sẽ được sử dụng để giải thích về mô hình học sâu dùng để tạo nên API nhận diện vật thể trên đường phố. 2.1 Nhận dạng vật thể Nhận dạng vật thể là một kỹ thuật trong thị giác máy tính để xác định các vật thể trong hình ảnh hoặc video. Nhận dạng vật thể là đầu ra chính của các thuật toán học sâu và học máy. Khi con người nhìn vào một bức ảnh hoặc xem một đoạn video, chúng ta có thể dễ dàng phát hiện ra người, đồ vật, cảnh và các chi tiết trực quan khác. Mục đích của nhận dạng vật thể là dạy máy tính làm được những gì đã được coi là bản năng của con người: đạt được đến mức độ hiểu được nội dung của hình ảnh. 2.1 Nhận dạng vật thể 7 Hình 2: Ứng dụng nhận dạng đối tượng để xác định phân loại của đối tượng (ở đây là chó và mèo). Nhận dạng vật thể là một công nghệ quan trọng, được ứng dụng trong rất nhiều lĩnh vực. Trong đó có thể kể đến nổi bật nhất chính là xe không người lái. Nhận dạng vật thể cho phép những chiếc xe không người lái nhận ra biển báo dừng hoặc để phân biệt người đi bộ với cột đèn. Ngoài ra, nó cũng được ứng dụng để xác định bệnh trong y học, kiểm tra công nghiệp và thị giác robot (giúp robot nhận diện được các vật thể). Hình 3: Nhận diện vật thể trên đường phố, được ứng dụng trong xe tự hành. Bài toán nhận dạng vật thể sản sinh ra những bài toán con khác, cũng là những bài toán nhận được sự quan tâm sâu sắc của giới nghiên cứu khoa học. Trong số đó có thể kể đến như: • Gán thẻ hình ảnh: Là quá trình thêm thẻ văn bản vào một hình ảnh dựa trên những gì có trong hình ảnh đó. Mỗi hình ảnh có thể được gán nhiều hơn một thẻ. – Đầu vào: Hình ảnh và các thẻ có thể được gán cho hình ảnh. 2.2 Học sâu 8 – Đầu ra: Các thẻ phù hợp để gán cho hình ảnh. • Phân loại hình ảnh: Dự đoán loại hoặc lớp của đối tượng trong hình ảnh. – Đầu vào: Một hình ảnh với một đối tượng duy nhất. – Đầu ra: Nhãn phân loại đối tượng. • Định vị đối tượng: Định vị sự hiện diện của các đối tượng trong một hình ảnh và chỉ ra vị trí của chúng bằng một hộp giới hạn. – Đầu vào: Một hình ảnh có một hoặc nhiều đối tượng. – Đầu ra: Một hoặc nhiều hộp giới hạn (xác định bởi tọa độ một điểm tâm chính giữa, chiều rộng và chiều cao). • Phát hiện đối tượng: Định vị sự hiện diện của các đối tượng bằng hộp giới hạn và các loại hoặc lớp của các đối tượng được định vị trong một hình ảnh. – Đầu vào: Một hình ảnh có một hoặc nhiều đối tượng. – Đầu ra: Một hoặc nhiều hộp giới hạn và nhãn phân loại cho từng hộp giới hạn. • Phân đoạn đối tượng: Các đối tượng trong hình ảnh được nhận dạng bằng cách đánh dấu các pixel cụ thể của đối tượng thay vì hộp giới hạn. – Đầu vào: Một hình ảnh có một hoặc nhiều đối tượng. – Đầu ra: Mảng các pixel được đánh dấu tương ứng với từng loại đối tượng. Trong số các bài toán này, bài toán được biết đến nhiều nhất là phát hiện đối tượng. Nó phổ biến đến mức mà khi một người nhắc đến nhận diện vật thể, ý của họ là đang chỉ đến việc phát hiện đối tượng bằng các hộp giới hạn. 2.2 Học sâu Việc sử dụng học sâu vào giải quyết bài toán nhận diện vật thể đang là một trong những phương pháp phổ biến nhất mà các nhà nghiên cứu khoa học sử dụng. Các mô hình học sâu như mạng thần kinh tích chập (Convolutional Neural Network - CNN) được sử dụng để tự động tìm kiếm các đặc điểm của đối tượng hiện hữu trong hình ảnh nhằm xác định đối tượng đó. Ví dụ: CNN có thể học cách xác định sự khác biệt giữa mèo và chso bằng cách phân tích hàng nghìn hình ảnh và tìm hiều các đặc điểm khiến chó và mèo khác nhau. Học sâu là một tập hợp con của học máy, khác biệt ở một số khía cạnh quan trọng so với học máy truyền thống, cho phép máy tính giải quyết một loạt các vấn đề phức tạp không giải quyết được. Một ví dụ về các vấn đề phức tạp này là bài toán nhận dạng các chữ số viết tay. Để giải quyết bài toán này, máy tính cần phải có khả năng đối phó với sự đa dạng trong cách thức trình bày dữ liệu. Mỗi chữ số từ 0 đến 9 có thể được viết theo vô số cách: kích thước và hình dạng chính xác của mỗi chữ số viết tay có thể rất khác nhau tùy thuộc vào người viết và viết trong hoàn cảnh nào. Để đối phó với sự đa dạng này, việc sử dụng các phương trình tính toán bình thường có độ phức tạp thấp là bất cả thi, mà đòi hỏi phải sử dụng những phương trình tính toán với độ phức tạp cao. Những phương trình này được máy tính học bằng phương pháp học sâu, mà cụ thể hơn là bằng mạng lưới thần kinh. 2.3 Mạng thần kinh (Neural Network) 9 Hình 4: Ví dụ về 100 cách viết tay chữ số 2 khác nhau được trích từ bộ dữ liệu MNIST nổi tiếng. 2.3 Mạng thần kinh (Neural Network) Mạng lưới thần kinh (tên tiếng Anh là neural network) là các mô hình tính toán có cấu trúc được lấy cảm hứng từ cấu trúc mạng lưới thần kinh của con người. Mỗi neural trong mạng thần kinh là một hàm toán học lấy dữ liệu thông qua các đầu vào, biến đổi dữ liệu đó thành dạng dễ điều chỉnh hơn và sau đó đưa ra đầu ra để tiếp tục truyền vào đầu vào ở lớp tiếp theo, hoặc tính toán để đưa ra đầu ra cuối cùng. Tất cả các mạng thần kinh đều có một lớp đầu vào, trong đó dữ liệu ban đầu được đưa vào, và một lớp đầu ra dự đoán cuối cùng. Nhưng không chỉ thế, thứ làm nên sức mạnh của mạng thần kinh chính là các lớp ẩn nằm ở giữa các lớp đầu vào và đầu ra. Các lớp này được kết nối với nhau bằng cách đầu ra của lớp đứng trước là đầu vào của lớp đứng sau. Do đó, thuật ngữ học sâu có liên quan đến số lượng lớn các lớp ẩn nằm ở giữa đầu vào và đầu ra của mạng thần kinh. 2.3 Mạng thần kinh (Neural Network) 10 Hình 5: Cấu trúc một mạng thần kinh đơn giản, với một lớp đầu vào, một lớp đầu ra và hai lớp ẩn. Sơ đồ đơn giản hóa ở trên hy vọng sẽ giúp cung cấp một ý tưởng về cấu trúc của một mạng thần kinh đơn giản. Trong sơ đồ trên, mỗi nốt tròn đại diện cho một neural trong mạng, với các neural được tổ chức thành các lớp thẳng đứng. Như có thể thấy, mỗi neural được liên kết với mọi neural ở lớp trước nó, thể hiện rằng mỗi neural tạo ra một giá trị đầu vào cho mỗi neural ở lớp tiếp theo. Các mũi tên liên kết giữa các neural cũng có ý nghĩa quan trọng, chúng sẽ mang những giá trị khác nhau thể hiện tầm quan trọng khác nhau của các liên kết giữa các neural. Những liêu kết có ý nghĩa lớn hơn sẽ khuếch đại giá trị của neural khi nó được truyền qua các lớp. Đổi lại, sự khuếch đại giá trị này có thể giúp kích hoạt tế bào neural mà giá trị đang được đưa vào. Có thể hiểu rằng, mỗi kết nối giữa hai nốt trong mạng thần kinh chính là một hệ số của phương trình tính toán giá trị của nốt tiếp theo. Một neural được kích hoạt khi tổng các giá trị được đưa vào neural này vượt qua ngưỡng nhất định. Ngưỡng này thường được xác định bởi các hàm kích hoạt ở mỗi lớp. Sự kích hoạt này có ý nghĩa khác nhau qua từng lớp của mạng thần kinh. Ví dụ đối với mạng thần kinh được xây dựng để giải quyết bài toán nhận dạng chữ số viết tay, lớp đầu vào là những pixel hình ảnh chữ viết tay. Lớp ẩn đầu tiên có thể phát hiện những đường thẳng và đường xiên theo các hướng khác nhau. Lớp ẩn thứ hai có thể phát hiện ra thêm những đường gấp khúc, nét cong, nét chồng,... Neural được kích hoạt trong lớp đầu ra của mạng thần kinh trong trường hợp này tương ứng với số lượng nhãn mà bài toán muốn phân loại, ở đây là 10 nhãn tương ứng theo thứ tự từ 0 đến 9. Từ đó, ta có thể đúc kết ra được giá trị của một nốt được tính bằng 2 công thức sau: (l) (l−1) zi = Σlj=1 aj (l) (l) (2.3.1) (l) (2.3.2) ai = σ(zi ) Trong đó: (l) (l) ∗ wji + bi • zi : là giá trị của nốt thứ i trong lớp thứ l. 2.4 Lớp tích chập (Convolutional Layer) 11 (l) • aj : là giá trị của nốt thứ j trong lớp thứ l sau khi áp dụng hàm kích hoạt σ. (l) • wji : là giá trị hệ số của liên kết giữa nốt thứ i của lớp trước và nốt thứ j của lớp hiện tại. (l) • bi : là hệ số tự do của phương trình tính toán nốt thứ i của lớp thứ l trong mạng thần kinh, thường được liên kết với nốt có giá trị bằng 1 được thêm vào ở lớp đầu vào và các lớp ẩn. Mục đích là để hạn chế việc kết quả huấn luyện cho ra phương trình luôn đi qua gốc tọa độ. • σ: là hàm kích hoạt. Khi chuyển đổi về dạng vector và ma trận, ta có 2 công thức trên trở thành: z (l) = (W (l) )T ∗ a(l) + b(2) (2.3.3) a(l) = σ(z (l) ) (2.3.4) Mô hình học được các liên kết giữa các nơ-ron rất quan trọng trong việc đưa ra dự đoán thành công trong quá trình huấn luyện. Ở mỗi bước trong quá trình huấn luyện, mạng sẽ sử dụng một hàm toán học để xác định mức độ chính xác của dự đoán mới nhất của nó so với dự kiến, được gọi là hàm mất mát. Hàm này tạo ra một loạt các giá trị lỗi, thường được xác định bằng cách tính toán độ sai lệch giữa dự đoán của mô hình với giá trị đúng của đầu ra và tìm cách tối thiểu hóa nó, do đó hệ thống có thể sử dụng để tính toán cách mô hình nên cập nhật giá trị của các trọng số được gắn vào mỗi liên kết, với mục đích cuối cùng là cải thiện độ chính xác của các dự đoán của mạng. Việc cải thiện độ chính xác của dự đoán của mạng được thực hiện thông qua các bước tính toán đạo hàm để tìm "điểm rơi"để giá trị hàm mất mát là nhỏ nhất. Mức độ mà các giá trị này sẽ được thay đổi được tính bởi một hàm tối ưu hóa, chẳng hạn như giảm độ dốc và những thay đổi đó được đẩy lùi trên toàn mạng vào cuối mỗi chu kỳ huấn luyện trong một bước gọi là lan truyền ngược. Trải qua nhiều, rất nhiều chu kỳ huấn luyện và với sự trợ giúp của việc điều chỉnh tham số thủ công, mạng sẽ tiếp tục tính toán để tạo dự đoán tốt hơn và tốt hơn cho đến khi nó đạt gần với độ chính xác cao nhất. Mỗi lớp ẩn còn được gọi với cái tên khác là lớp kết nối đủ (Fully Connected Layer) và những mô hình mạng học sâu có cấu trúc chỉ gồm lớp đầu vào, lớp đầu ra và lớp ẩn thường được gọi là mạng thần kinh kết nối đủ (Fully Connected Neural Network - FCN). Nhược điểm của FCN xuất hiện khi ta sử dụng nó với những bài toán yêu cầu xử lý dữ liệu đầu vào cực kỳ phức tạp, chẳng hạn như hình ảnh kích thước lớn, video, văn bản dài, giọng nói,... Điều này dẫn đến sự xuất hiện của những cách tạo lớp khác, đi kèm đó là những cấu trúc mạng thần kinh khác, chuyên biệt để giải quyết những bài toán đó. 2.4 Lớp tích chập (Convolutional Layer) Đối với bài toán xử lý ảnh, giả sử chúng ta làm việc với tập dữ liệu huấn luyện gồm các ảnh màu có kích thước 64*64 với 3 kênh màu R, G và B. Lúc này, để có thể truyền dữ liệu vào mạng thần kinh thông qua lớp đầu vào với mỗi nốt đầu vào tương ứng với một pixel trên ảnh thì lớp đầu vào cần phải có 64*64*3 = 12288 nốt. Giả sử số lượng nốt trong lớp ẩn thứ nhất là 1000. Số lượng trọng số W giữa lớp đầu vào và lớp ẩn thứ 1 là 12288*1000 = 12288000, số lượng hệ số tự do là 1000. Khi đó, tổng số tham số của mô hình là: 12289000. Đấy mới chỉ là số tham số giữa lớp đầu vào và lớp ẩn thứ 1, trong mô hình còn nhiều lớp nữa, và nếu kích thước ảnh tăng, ví dụ 512*512 thì số lượng tham số sẽ tăng cực kì nhanh. Vậy nên chúng ta cần một giải pháp tốt hơn để giải quyết những bải toán liên quan đến dữ liệu đầu vào hình ảnh, và đây là lúc lớp tích chập vào cuộc. 2.4 Lớp tích chập (Convolutional Layer) 12 Lớp tích chập được xây dựng dựa trên phép toán tích chập. Phép toán tích chập giúp giảm bớt chiều của một ma trận nhưng vẫn giữ được những điểm đặc trưng nhất định của ma trận đó. Để lấy ví dụ, có thể nhìn vào hình sau: Hình 6: Bắt đầu thực hiện phép toán tích chập. Trong ví dụ trên, chúng ta sẽ thực hiện phép toán tích chập giữa một ma trận vuông 5*5 với một kernel kích thước 3*3. Một kernel là một ma trận vuông luôn có chiều là số lẻ. Kernel sẽ đóng vai trò như một "cửa sổ trượt", trượt qua toàn bộ ma trận 5*5. Với mỗi lần trượt, nó sẽ thực hiện phép toán nhân từng phần tử của ma trận kernel với khung hình mà nó nhắm đến trong ma trận 5*5, và ghi lại kết quả vào một ma trận đầu ra. Như trong hình trên có thể thấy phần tử đầu tiên của ma trận đầu ra được tính như sau: 1∗1+1∗0+1∗1+0∗0+1∗1+1∗0+0∗1+0∗0+1∗1=4 (2.4.1) Và cứ tiếp tục như vậy, quá trình này được thực hiện cho đến khi kernel trượt qua hết ma trận 5*5 đó. Hình 7: Bước thứ 2 trong phép toán tích chập. 2.4 Lớp tích chập (Convolutional Layer) 13 Hình 8: Hoàn thành phép toán tích chập khi kernel đi hết ma trận 5*5. Tổng quan cách thực hiện phép toán tích chập giữa ma trận XN có kích thước m*n và ma trận kernel W với kích thước k*k (k là số lẻ), với ký hiệu Y = X W . Với mỗi phần tử xij trong ma trận X lấy ra một ma trận có kích thước bằng kích thước của ma trận kernel W có phần tử xij làm trung tâm (đây cũng chính là lý do vì sao kích thước của kernel thường lẻ) gọi là ma trận A. Sau đó tính tổng các phần tử của phép tính element-wise của ma trận A và ma trận W, rồi viết kết quả vào ma trận Y. Nếu để ý sẽ thấy kích thước của ma trận kết quả Y nhỏ hơn ma trận X. Thật vậy, kích thước của ma trận Y là (m − k + 1) ∗ (n − k + 1). Thế thì sẽ xử lý thế nào với phần tử ở viền ngoài như x11 ? Bình thường khi thực hiện phép toán tích chập sẽ bỏ qua các phần tử ở viền ngoài, vì không tìm được ma trận A trong X. Cách giải quyết chính là thêm giá trị 0 ở viền ngoài ma trận X, để có thể thực hiện nhân tích chập đối với viền của X. 2.4 Lớp tích chập (Convolutional Layer) 14 Hình 9: Ma trận X khi thêm viền 0 bên ngoài. Lưu ý rằng khi nói padding = p, có nghĩa là thêm p vector 0 vào mỗi phía của ma trận. Như ở trên ta thực hiện tuần tự việc nhân tích chập với các phần tử trong ma trận X, thu được ma trận Y cùng kích thước với ma trận X, lúc đó ta nói rằng phép nhân tích chập đó có stride = 1. Hình 10: Phép nhân tích chập được thực hiện khi stride=1, padding=1 Tuy nhiên, nếu stride = s (s>1) thì ta chỉ thực hiện phép nhân tích chập trên các phần tử có dạng x1+i∗s,1+j∗s . Ví dụ như stride = 2 thì: 2.4 Lớp tích chập (Convolutional Layer) 15 Hình 11: Phép nhân tích chập được thực hiện khi stride=2, padding=1 Hiểu đơn giản là bắt đầu từ vị trí x11 , sau đó nhảy s bước theo chiều dọc và ngang cho đến khi đi hết ma trận X. Kích thước của ma trận Y trong ví dụ trên khi bước nhảy stride = 2 là 3*3, đã giảm đi đáng kể so với ma trận X. Vì vậy, stride thường được dùng để giảm kích thước của ma trận sau phép tính nhân tích chập. Công thức tổng quát cho phép tính nhân tích chập của ma trận X có kích thước m ∗ n với kernel có kích thước k ∗ k (với k là số lẻ), stride = s, padding = p được ma trận Y có kích thước ( m−k+2p +1)∗( n−k+2p +1). s s Lớp tích chập, theo như tên của nó, sẽ thực hiện phép toán tích chập trên ma trận pixel của hình ảnh. Tuy nhiên, ảnh màu có đến 3 kênh R, G, B nên khi biểu diễn, ảnh sẽ ở dưới dạng một tensor 3 chiều. Vì vậy, ta cũng sẽ định nghĩa kernel trong trường hợp này là một tensor 3 chiều có kích thước k ∗ k ∗ 3. Hình 12: Minh họa phép nhân tích chập trên ảnh màu với k=3 Ta định nghĩa kernel có cùng độ sâu (depth) với biểu diễn ảnh, rồi sau đó thực hiện di chuyển khối kernel tương tự như khi thực hiện trên ma trận 2 chiều. 2.5 Lớp gộp (Pooling Layer): 16 Hình 13: Tensor X, W 3 chiều được viết dưới dạng 3 ma trận. Với mỗi kernel khác nhau ta sẽ học được những đặc trưng khác nhau của ảnh, nên trong mỗi lớp tích chập ta sẽ dùng nhiều kernel để học được nhiều thuộc tính của ảnh. Vì mỗi kernel cho ra đầu ra là 1 ma trận nên k kernel sẽ cho ra k ma trận đầu ra. Ta kết hợp k ma trận đầu ra này lại thành 1 tensor 3 chiều có độ sâu k. Tổng quát, giả sử đầu vào của một lớp tích chập là tensor kích thước H ∗ W ∗ D, kernel có kích thước F ∗ F ∗ D (kernel luôn có độ sâu bằng độ sâu của đầu vào và F là số lẻ), stride là S và padding là P. Lớp tích chập áp dụng K kernel. Chúng ta có đầu ra của lớp tích chập là tensor 3 chiều có kích thước ( H−FS+2P + 1) ∗ ( W −FS+2P + 1) ∗ K. 2.5 Lớp gộp (Pooling Layer): Pooling layer thường được dùng giữa các convolutional layer, để giảm kích thước dữ liệu nhưng vẫn giữ được các thuộc tính quan trọng. Kích thước dữ liệu giảm giúp giảm việc tính toán trong model. Gọi pooling size kích thước K ∗ K. Đầu vào của pooling layer có kích thước H ∗ W ∗ D, ta tách ra làm D ma trận kích thước H ∗ W . Với mỗi ma trận, trên vùng kích thước K ∗ K trên ma trận ta tìm giá trị lớn nhất hoặc giá trị trung bình của dữ liệu rồi viết vào ma trận kết quả. Quy tắc về stride và padding áp dụng như phép tính tích chập trên ảnh. Hình 14: Max pooling layer với size=(3,3), stride=1, padding=0 Nhưng hầu hết khi dùng pooling layer thì sẽ dùng size=(2,2), stride=2, padding=0. Khi đó chiều dài và chiều rộng của dữ liệu đầu ra giảm đi một nửa, trong khi độ sâu thì được giữ nguyên. Có 2 loại pooling layer phổ biến là max pooling và average pooling. 2.6 Intersection Over Union (IOU) 17 Hình 15: Ví dụ về pooling layer 2.6 Intersection Over Union (IOU) Intersection over union (IOU), là một thuật ngữ được sử dụng để mô tả mức độ trùng lấp của 2 hộp giới hạn. Vùng chồng lấn càng lớn thì IOU càng lớn. IOU chủ yếu được sử dụng trong các ứng dụng liên quan đến phát hiện đối tượng, khi chúng ta đào tạo một mô hình học sâu cho ra kết quả là các hộp giới hạn bao xung quanh đối tượng. Ví dụ trong hình dưới đây, chúng ta có 2 hộp gới hạn, một màu xanh lục và một màu xanh lam. Hộp màu xanh lục là hộp chính xác và hộp màu xanh lam là dự đoán từ mô hình. Mục đích của mô hình này là tiếp tục cải thiện dự đoán của nó, cho đến khi hộp màu xanh lanh và hộp màu xanh lục trùng nhau hoàn toàn, tức là IOU giữa 2 hộp bằng 1. Hình 16: Khi IOU bằng 1, tức 2 hộp xanh lục và xanh lam trùng nhau, thì mô hình dự đoán chính xác nhất. Vậy làm sao để tính IOU? Giả sử rằng chúng ta có 2 hộp: hộp thứ nhất được biểu diễn bởi [x1, y1, x2, y2] và hộp thứ hai được biểu diễn bởi [x3, y3, x4, y4], chi tiết như trong 18 hình sau. Hình 17: Ý nghĩa x1, y1, x2, y2, x3, y3, x4, y4 và vùng giao nhau giữa hai hộp Hình 18: Biểu diễn hình học công thức tính toán IOU Từ biểu diễn hình học của công thức tính toán IOU, ta có thể dễ dàng suy ra được công thức tính IOU dựa trên tọa độ các hộp: IOU = Ainter Ainter = Aunion Abox1 + Abox2 − Ainter Ainter = (min(x2, x4) − max(x1, x3)) ∗ (min(y2, y4) − max(y1, y3)) 3 (2.6.1) (2.6.2) Abox1 = (x2 − x1) ∗ (y2 − y1) (2.6.3) Abox2 = (x4 − x3) ∗ (y4 − y3) (2.6.4) YOLO (You Only Look Once) Đối với các khái niệm đã tìm hiểu, có lẽ người đọc đã được trang bị đủ kiến thức để bước vào phần kiến thức trọng tâm của báo cáo đồ án này, đó là mạng học sâu YOLO. 3.1 3.1 Mạng YOLO là gì? 19 Mạng YOLO là gì? YOLO là viết tắt của cụm từ "You Only Look Once", cũng chính là tiêu đề bài báo nghiên cứu khoa học công bố YOLO. Nó có nghĩa là chúng ta chỉ cần nhìn một lần duy nhất là có thể phát hiện ra vật thể. Nghe có vẻ rất nhanh phải không? Thật vậy, về độ chính xác thì YOLO có thể không phải là thuật toán tốt nhất nhưng nó là thuật toán nhanh nhất trong các lớp mô hình phát hiện vật thể. Nó có thể đạt được tốc độ gần như real-time mà độ chính xác không quá giảm so với các model thuộc top đầu. YOLO là thuật toán phát hiện vật thể nên mục tiêu của mô hình không chỉ là dự đoán nhãn cho vật thể như các bài toán phân loại mà nó còn xác định vị trí của vật thể. Do đó YOLO có thể phát hiện được nhiều vật thể có nhãn khác nhau trong một bức ảnh thay vì chỉ phân loại duy nhất một nhãn cho một bức ảnh. 3.2 Kiến trúc mạng YOLO Kiến trúc YOLO gồm có mạng cơ sở là các các mạng tích chập làm nhiệm vụ trích xuất đặc trưng. Phần phía sau là những lớp thêm vào để phát hiện vật thể trên feature map của mạng cơ sở. Mạng cơ sở của YOLO sử dụng chủ yếu là các lớp tích chập và các fully connected layer. Các kiến trúc YOLO cũng khá đa dạng và có thể tùy biến thành các phiên bản cho nhiều dạng dữ liệu đầu vào khác nhau. Hình 19: Sơ đồ kiến trúc mạng YOLO Trong YOLOv3, các tác giả áp dụng một mạng trích xuất đặc trưng là darknet-53. Mạng này gồm 53 lớp tích chập được được kết nối liên tục nhau, mỗi lớp được theo sau bởi một batch normalization và một hàm kích hoạt Leaky Relu. Để giảm kích thước của đầu ra sau mỗi lớp tích chập, các tác giả giảm chiều giữ liệu bằng các filter với kích thước là 2. Việc này nhằm giảm thiểu số lượng tham số cho mô hình, từ đó tăng cường tốc độ tính toán.
- Xem thêm -

Tài liệu liên quan