1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đồ án nhận dạng vật thể

39 40 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

ĐẠ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 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 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 suốt thời gian qua Những kiến thức mà thầy cô truyền đạt tảng quan trọng để hồn thành đề tài Nhóm tác giả xin gửi lời cảm ơn đặc biệt sâu sắc chân thành đến ThS Mai Trọng Khang, cảm ơn thầy tận tình hướng dẫn tạo điều kiện tốt để chúng em hồn thành đề tài Những lời động viên, góp ý chân tình thầy động lực quý báu để chúng em vượt qua khó khăn tìm hiểu thực đề tài Trong thời gian tháng thực đề tài, nhóm cố gắng vận dụng kiến thức tảng học, kết hợp với học hỏi tìm hiểu công nghệ để ứng dụng xây dựng đề tài mơn học Tuy nhiên q trình thực hiện, kiến thức kinh nghiệm cịn nhiều hạn chế, khó tránh khỏi thiếu sót Chính vậy, nhóm tác giả mong nhận góp ý từ quý thầy để nhóm hồn thiện thêm kiến thức mà nhóm học tập, làm hành trang quý báu cho nhóm cơng việc sau Xin chân thành cảm ơn quý thầy cô! MỤC LỤC Mục lục Giới thiệu 1.1 Trí tuệ nhân tạo ứng dụng 1.2 Giới thiệu đề tài lý chọn đề tài 1.3 Mục tiêu đề 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 11 16 17 YOLO (You Only Look Once) 3.1 Mạng YOLO 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 Các 4.1 4.2 4.3 4.4 22 22 22 22 22 Q trình thực 5.1 Bắt đầu với tốn phân loại biển báo giao thông 5.1.1 Bộ liệu 5.1.2 Đọc xử lý liệu đầu vào 5.1.3 Mơ hình học sâu sử dụng 5.1.4 Kết 5.2 Nghiên cứu nhận diện vật thể sử dụng YOLOv5 5.2.1 Bộ liệu 5.2.2 Đọc xử lý liệu 5.2.3 Tiến hành huấn luyện 5.2.4 Kết 5.3 Tạo API nhận diện vật thể đường phố 23 23 23 24 25 26 27 27 28 29 30 31 công nghệ sử dụng TensorFlow Keras YOLOv5 Flask Hướng dẫn cài đặt 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 Kết 7.1 7.2 7.3 luận Ưu, nhược điểm Hướng phát triển tương lai Lời kết 36 36 37 37 Giới thiệu 1.1 Trí tuệ nhân tạo ứng dụng Trong xã hội đại, với phát triển nhanh chóng ngành khoa học cơng nghệ thơng tin, việc áp dụng tảng công nghệ vào thực tiễn khơng cịn xa lạ Đặc biệt cách mạng lĩnh vực trí tuệ nhân tạo, học sâu, nhờ mà vận dụng trí tuệ nhân tạo vào sản phẩm phần mềm, tạo ứng dụng thay người thực chất trở thành chuyện thực tế Hơn hết, ngành công nghiệp phần mềm bắt kịp xu hướng Ngày có nhiều ứng dụng á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ó ứng dụng sử dụng trí tuệ nhân tạo trở nên gắn liền với sống nhiều người như: Google Assistant, Siri Apple, ELSA, Replika, Spotify Thậm chí, việc sử dụng trí tuệ nhân tạo mang lại tiện lợi, khiến ứng dụng trở nên bật chiếm lĩnh thị trường Ngày nay, việc ứng dụng có tích hợp trí tuệ nhân tạo trở thành lợi cạnh tranh tuyệt vời cho nhà phát triển Từ đó, thấy được, trí tuệ nhân tạo với ứng dụng kết hợp khôn khéo tuyệt vời lồi người Vì thế, việc lập trình viên trang bị kiến thức điều cần thiết để chuẩn bị cho bước tiến xa xã hội tương lai Hình 1: Trong đ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 sử dụng ngày hàng triệu người dùng Với cải thiện ngày thấy qua cơng trình nghiên cứu liên tục cơng bố, trí tuệ nhân tạo hứa hẹn tương lai tươi sáng cho lồi người Các lập trình viên, người ln đón đầu xu hướng cơng nghệ, nghĩ nhiều cách để sử dụng trí tuệ nhân tạo ứng dụng, kể đến như: Máy học: Máy học nói cơng nghệ trí tuệ nhân tạo phổ biến cơng nghệ thơng tin Máy học khả máy tính sản phẩm phần mềm đưa định có hiểu biết đưa kết luận học hỏi từ kinh nghiệm khứ chúng Sở dĩ đạt hiệu thơng qua kỹ thuật Đầu tiên, mơ hình học tập có giám sát huấn luyện để dự báo phản ứng tương lai liệu cách phân tích đầu vào đầu Kỹ thuật thứ hai học không giám sát, hoạt động thông tin đầu vào phát mẫu liên tục (còn gọi phân cụm) Cho dù chiến lược máy học chọn gì, 1.1 Trí tuệ nhân tạo ứng dụng mở khung cảnh rộng lớn để triển khai chúng ứng dụng sử dụng lĩnh vực khác - từ giáo dục chăm sóc sức khỏe đến bán hàng sản xuất Một ví dụ máy học sử dụng ứng dụng giải pháp fintech tên Oval Ứng dụng phân tích thói quen chi tiêu tất người dùng để rút chiến lược tiết kiệm cá nhân hóa cho khách hàng Hơn nữa, sản phẩm sử dụng máy học, ứng dụng ngày cải thiện với tập liệu mà người dùng cung cấp để đưa khuyến nghị phù hợp xác Nhận diện giọng nói: Con người ngày khơng nói chuyện thơng qua điện thoại, mà cịn thực nói chuyện với điện thoại 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 để tn theo mệnh lệnh giọng nói hiểu giọng nói người cách chuyển đối thành định dạng mà máy tính hiểu Phương pháp ứng dụng trí tuệ nhân tạo giúp trợ lí ảo Siri Cortana "sống"bên thiết bị di động giúp công việc vặt ngày tìm chỗ đậu xe, phát nhạc yêu thích, đặt chỗ nhà hàng Bên cạnh việc cung cấp trải nghiệm tiện lợi cho người dùng, ứng dụng nhận diện giọng nói thứ khơng thể thiếu cho người có thị giác kém, cho phép họ có hội tương tác với điện thoại thơng minh mà khơng cần nhìn vào hình 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 thiết bị di động nói chuyện với Tuy nhiên, thực tế, thiết bị di động không thực "nói chuyện"với mà phát âm lại văn nhập vào Dịch vụ hiển thị tiện ích Android hỗ trợ tính gốc với đặc điểm giọng nói tùy chỉnh (tốc độ nói cao độ giọng) tùy chọn cài đặt thêm ngôn ngữ, giới tính, Tuy nhiên, ứng dụng cường đáng kể với ứng dụng chuyên biệt hữu nhiều thị trường công nghệ thông tin Ví dụ: Narrator’s Voice khơng đọc vă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 tùy chọn thêm nhiều hiệu ứng âm (tiếng vọng, hợp xướng, ) Ngồi ra, trí tuệ nhân tạo chạy văn viết thông qua tổng hợp lưu dạng tệp MP3, trở thành cơng cụ mạnh mẽ để lồng tiếng cho phim, thuyết trình, 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 doanh nghiệp phải tự động hóa phần dịch vụ tương tác với khách hàng Đây lúc chatbot vào cuộc, giúp giảm bớt trọng trách cho nhân viên việc phản hồi lại khách hàng yêu cầu dịch vụ phổ biến giúp điền vào biểu mẫu, trả lời câu hỏi điển hình, giúp đặt hàng, Loại hình ứng dụng trí tuệ nhân tạo trở thành thứ cần thiết phải có doanh nghiệp vừa nhỏ, tất "gã khổng lồ"trong giới kinh doanh (Apple, Microsoft, Amazon, IBM, ) sử dụng cơng nghệ chatbot quy mơ lớn tồn hệ thống dịch vụ khách hàng họ Chatbot không mang lại trải nghiệm tốt cho khách hàng mệt mỏi chờ đợi phản hồi từ nhà cung cấp, mà giúp nhà cung cấp dịch vụ cắt giảm bớt nhân lực vốn dùng việc phản hồi khách hàng Nhận diện hình ảnh: Đây chủ đề nghiên cứu đồ án Có thể nhận phân loại đối tượng ảnh video điều mà tưởng chừng không 1.2 Giới thiệu đề tài lý chọn đề tài thể máy móc khoảng thời gian gần Ngày nay, ứng dụng trí tuệ nhân tạo thực việc với độ xác cao, chí cao người Khả trí tuệ nhân tạo ứng dụng lĩnh vực khác 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 trình sản xuất yêu cầu độ xác cao Một ứng dụng thuộc loại Calorie Mama, giúp người dùng kiểm soát lượng calo họ tiêu thụ cách phân tích ảnh bữa ăn Hơn nữa, việc người dùng thêm hình ảnh vào sở liệu giúp việc tính tốn hàm lượng dinh dưỡng ứng dụng trở nên xác theo thời gian Nhận dạng văn bản: Đơi khi, cần trích xuất chữ số (hoặc chí đoạn văn lớn) từ hình ảnh để nhập sử dụng cho mục đích khác Các ứng dụng nhận dạng quang học (OCR) sẵn sàng trợ giúp tác vụ Một ứng dụng phổ biến số Google Keep, giúp ghi lại văn từ ảnh lưu trữ định dạng kỹ thuật số để nhập thứ theo cách thủ cơng xóa hồn tồn hình ảnh, để lại ký tự Khơng thế, ứng dụng trí tuệ nhân tạo cịn giúp trích xuất thơng tin quan trọng văn bản, tóm tắt văn lớn, Sinh trắc học: Các chế hỗ trợ trí tuệ nhân tạo khơng nhận dạng văn bản, hình ảnh giọng nói mà cịn thơng số sinh học thể người hình dạng khn mặt, kích thước thể, dấu vân tay, cử Chủ yếu sử dụng lĩnh vực tiếp thị, công nghệ tận dụng ngành cơng nghiệp khác Ví dụ, ngân hàng, sở cải tạo sở giáo dục hưởng lợi từ việc sử dụng công nghệ cho hệ thống xác thực người dùng Ví dụ, Face2Gene ứng dụng chuyên biệt dành cho bác sĩ giúp họ chẩn đoán rối loạn di truyền Nó huấn luyện để phân tích khn mặt bệnh nhân, đưa phản hồi tức cho phép nhà cung cấp dịch vụ chăm sóc sức khỏe chia sẻ kết diễn đàn kín Phân tích cảm xúc tình thái: Đây cải tiến công nghệ nhận dạng đề cập trên, tập trung vào việc xác định cảm xúc người Ngôn ngữ thể, biến đổi giọng nói nét mặt dấu hiệu nhận biết đóng vai trị chìa khóa để nhận biết cảm xúc người Việc phân tích chúng hữu ích để đánh giá thái độ người dùng sản phẩm quảng cáo cụ thể, đánh giá xếp hạng truyền hình chí xác định tội phạm sân bay, ngân hàng, sân vận động địa điểm khác Thị trường ứng dụng đại có nhiều sản phẩm vậy, Face Reader Noldus Project Oxford Microsoft sản phẩm bật đáng nhắc đến 1.2 Giới thiệu đề tài lý chọn đề tài Với kết nghiên cứu ứng dụng trí tuệ nhân tạo việc phát triển phần mềm, thấy tương lai đầy hứa hẹn mà hầu hết ứng dụng giới tích hợp trí tuệ nhân tạo Là lập trình viên, nhiệm vụ chúng em phải đón đấu nắm bắt xu hướng cơng nghệ, để đem cơng nghệ tiên tiến phục vụ trải nghiệm người dùng Chính mà chúng em lựa chọn đề tài "Nhận dạng vật thể" Đây vốn toán thuộc cơng nghệ nhận diện hình ảnh đề cập trên, số toán nhà nghiên cứu khoa học đầu tư chất xám để giải số tốn lĩnh vực trí tuệ nhân tạo Đã có vơ số cơng trình nghiên cứu xoay quanh tốn này, giúp cho độ hồn 1.3 Mục tiêu đề thiện mơ hình giải toán ngày tăng Do giới hạn môn học nên chúng em nghiên cứu vận dụng mà nhà nghiên cứu trước đạt để đưa vào ứng dụng không cải tiến hay thực cơng trình nghiên cứu hoàn toàn 1.3 Mục tiêu đề Như đề cập trên, với giới hạn thời gian môn học, sở vật chất đáp ứng (khơng có máy tính cấu hình mạnh) thiếu thốn tài nguyên thông tin (không đủ liệu để huấn luyện mơ hình học sâu), nên nhóm chúng em dừng lại mức vận dụng thành nghiên cứu người trước, ứng dụng vào việc phát triển sản phẩm phục vụ người dùng Chính vậy, nhóm chúng em đặt mục tiêu cho môn học nghiên cứu phát triển API ứng dụng thành nghiên cứu toán "Nhận diện vật thể", cụ thể API nhận dạng vật thể đường xe cộ, đèn giao thông, biển báo, Tuy nhiên, có lại khó mà đáp ứng tiêu chí mơn học, thê nên nhóm định thực thêm việc nghiên cứu huấn luyện phần mơ hình học sâu để máy tính phát vật thể phương pháp học chuyển giao (transfer learning) - giải thích phần sau Các khái niệm Phần nói khái niệm mà chúng em tìm hiểu trình nghiên cứu, đồng thời có đề cập đến sử dụng để giải thích mơ hình học sâu dùng để tạo nên API nhận diện vật thể đường phố 2.1 Nhận dạng vật thể Nhận dạng vật thể kỹ thuật thị giác máy tính để xác định vật thể hình ảnh video Nhận dạng vật thể đầu thuật tốn học sâu học máy Khi người nhìn vào ảnh xem đoạn video, dễ dàng phát người, đồ vật, cảnh chi tiết trực quan khác Mục đích nhận dạng vật thể dạy máy tính làm coi người: đạt đến mức độ hiểu nội dung hình ảnh 2.1 Nhận dạng vật thể Hình 2: Ứng dụng nhận dạng đối tượng để xác định phân loại đối tượng (ở chó mèo) Nhận dạng vật thể công nghệ quan trọng, ứng dụng nhiều lĩnh vực Trong kể đến bật xe không người lái Nhận dạng vật thể cho phép xe không người lái nhận biển báo dừng để phân biệt người với cột đèn Ngồi ra, ứng dụng để xác định bệnh y học, kiểm tra công nghiệp thị giác robot (giúp robot nhận diện vật thể) Hình 3: Nhận diện vật thể đường phố, ứng dụng xe tự hành Bài toán nhận dạng vật thể sản sinh toán khác, toán nhận quan tâm sâu sắc giới nghiên cứu khoa học Trong số kể đến như: • Gán thẻ hình ảnh: Là trình thêm thẻ văn vào hình ảnh dựa có hình ảnh Mỗi hình ảnh gán nhiều thẻ – Đầu vào: Hình ảnh thẻ gán cho hình ảnh 2.2 Học sâu – Đầ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 lớp đối tượng hình ảnh – Đầu vào: Một hình ảnh với đối tượng – Đầu ra: Nhãn phân loại đối tượng • Định vị đối tượng: Định vị diện đối tượng hình ảnh vị trí chúng hộp giới hạn – Đầu vào: Một hình ảnh có nhiều đối tượng – Đầu ra: Một nhiều hộp giới hạn (xác định tọa độ điểm tâm giữa, chiều rộng chiều cao) • Phát đối tượng: Định vị diện đối tượng hộp giới hạn loại lớp đối tượng định vị hình ảnh – Đầu vào: Một hình ảnh có nhiều đối tượng – Đầu ra: Một nhiều hộp giới hạn nhãn phân loại cho hộp giới hạn • Phân đoạn đối tượng: Các đối tượng hình ảnh nhận dạng cách đánh dấu pixel cụ thể đối tượng thay hộp giới hạn – Đầu vào: Một hình ảnh có nhiều đối tượng – Đầu ra: Mảng pixel đánh dấu tương ứng với loại đối tượng Trong số toán này, toán biết đến nhiều phát đối tượng Nó phổ biến đến mức mà người nhắc đến nhận diện vật thể, ý họ đến việc phát đối tượng 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 toán nhận diện vật thể phương pháp phổ biến mà nhà nghiên cứu khoa học sử dụng Các mơ hình học sâu mạng thần kinh tích chập (Convolutional Neural Network - CNN) sử dụng để tự động tìm kiếm đặc điểm đối tượng hữu hình ảnh nhằm xác định đối tượng Ví dụ: CNN học cách xác định khác biệt mèo chso cách phân tích hàng nghìn hình ảnh tìm hiều đặc điểm khiến chó mèo khác Học sâu tập hợp học máy, khác biệ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 loạt vấn đề phức tạp khơng giải Một ví dụ vấn đề phức tạp toán nhận dạng chữ số viết tay Để giải toán này, máy tính cần phải có khả đối phó với đa dạng cách thức trình bày liệu Mỗi chữ số từ đến viết theo vơ số cách: kích thước hình dạng xác chữ số viết tay khác tùy thuộc vào người viết viết hồn cảnh Để đối phó với đa dạng này, việc sử dụng phương trình tính tốn bình thường có độ phức tạp thấp bất thi, mà đòi hỏi phải sử dụng phương trình tính tốn với độ phức tạp cao Những phương trình máy tính học phương pháp học sâu, mà cụ thể mạng lưới thần kinh 2.3 Mạng thần kinh (Neural Network) Hình 4: Ví dụ 100 cách viết tay chữ số khác trích từ liệu MNIST tiếng 2.3 Mạng thần kinh (Neural Network) Mạng lưới thần kinh (tên tiếng Anh neural network) mơ hình tính tốn có cấu trúc lấy cảm hứng từ cấu trúc mạng lưới thần kinh người Mỗi neural mạng thần kinh hàm tốn học lấy liệu thơng qua đầu vào, biến đổi liệu thành dạng dễ điều chỉnh sau đưa đầu để tiếp tục truyền vào đầu vào lớp tiếp theo, tính tốn để đưa đầu cuối Tất mạng thần kinh có lớp đầu vào, liệu ban đầu đưa vào, lớp đầu dự đoán cuối Nhưng không thế, thứ làm nên sức mạnh mạng thần kinh lớp ẩn nằm lớp đầu vào đầu Các lớp kết nối với cách đầu lớp đứng trước đầu vào lớp đứng sau Do đó, thuật ngữ học sâu có liên quan đến số lượng lớn lớp ẩn nằm đầu vào đầu mạng thần kinh 5.1 Bắt đầu với toán phân loại biển báo giao thơng 24 Hình 23: Một vài hình ảnh nằm liệu German Traffic Sign Dataset Bộ liệu gồm khoảng gần 40 nghìn ảnh chia thành 43 thư mục 43 loại biển báo khác Mỗi thư mục có file CSV chứa thơng tin ảnh thư mục Có vài thơng tin sau cần lưu ý: • ROI: vùng ảnh chứa biến số với thơng tin X1, Y1, X2, Y2 • ClassID: nhãn biển số (từ đến 43) Hình 24: Thơng tin ảnh chứa file CSV 5.1.2 Đọc xử lý liệu đầu vào Để đọc xử lý liệu đầu vàng, chúng em dùng thư viện pandas để đọc liệu đầu vào file csv đưa liệu dạng bảng, thuận tiện cho việc xử lý Quá trình thực hàm getDataFromPandas loadDataset Chi tiết cài đặt hàm tìm tìm thấy Khai báo thư viện sử dụng: import os import cv2 as cv import numpy as np import matplotlib.pyplot as plt from google.colab.patches import cv2_imshow import pandas as pd from sklearn.model_selection import train_test_split from sklearn.metrics import precision_score, recall_score, f1_score from tensorflow import keras Hàm getDataFromPandas: def getDataFromPandas(pandas_data, input_size=(64, 64)): pixels = [] labels = [] for i in range(pandas_data.shape[0]): dir = "/content/" + pandas_data["Path"][i] img = cv.imread(dir) 5.1 Bắt đầu với toán phân loại biển báo giao thông 25 img = img[pandas_data["Roi.X1"][i]:pandas_data["Roi.X2"][i], pandas_data["Roi.Y1"][i]:pandas_data["Roi.Y2"][i]] img = cv.resize(img, input_size) pixels.append(img) labels.append(pandas_data["ClassId"][i]) labels = keras.utils.to_categorical(labels) return pixels, labels Hàm loadDataset: def loadDataset(train_dir="/content/Train.csv", test_dir="/content/Test.csv"): train_pd = pd.read_csv(train_dir) test_pd = pd.read_csv(test_dir) train_img, train_lab = getDataFromPandas(train_pd) test_val_img, test_val_lab = getDataFromPandas(test_pd) val_img, test_img, val_lab, test_lab = train_test_split(test_val_img, test_val_lab, test_size=0.5, random_state=42) return np.array(train_img), np.array(val_img), np.array(test_img), np.array(train_lab), np.array(val_lab), np.array(test_lab) 5.1.3 Mơ hình học sâu sử dụng Mơ hình học sâu mà chúng em sử dụng vô đơn giản, gồm convolutional layer, max pooling layer fully connected layer Ngồi cịn có batch normalization layer để giúp scale lại liệu, tăng cường tốc độc học, dropout layer để "loại bỏ"ngẫu nhiên nốt mạng học sâu, giúp tránh việc overfit (mơ hình hoạt động tốt tập huấn luyện không hoạt động tốt thực thế) 5.1 Bắt đầu với toán phân loại biển báo giao thơng 26 Hình 25: Sơ đồ lớp mơ hình học sâu nhóm xây dựng 5.1.4 Kết Mơ hình cho kết tốt, với độ xác liệu huấn luyện 98.95%, tập đánh giá 93.05% Hình 26: Kết sau huấn luyện mơ hình 5.2 Nghiên cứu nhận diện vật thể sử dụng YOLOv5 5.2 27 Nghiên cứu nhận diện vật thể sử dụng YOLOv5 Không thỏa mãn với việc nhận diện biển báo giao thơng, nhóm định thêm bước - nhận diện toàn vật thể có hình Bài tốn mà nhóm lựa chọn nghiên cứu toán kinh điển giới học sâu "Phát vật thể đường đi" Đây toán tảng cho xe tự lái 5.2.1 Bộ liệu Ban đầu, nhóm định tự thu thập liệu camera hành trình Nhưng việc hạn chế đường dịch bệnh COVID-19 nên thay vào đó, nhóm thực tìm kiếm video camera hành trình mạng trích xuất hình ảnh từ Việc gán nhãn liệu hình ảnh thực với cơng cụ LabelImg - công cụ phổ biến sử dụng để gán nhãn hình ảnh bounding box, phục vụ cho việc huấn luyện mơ hình YOLO Hình 27: Cơng cụ LabelImg Tuy nhiên, việc gán nhãn thủ công lại nhiều thời gian, việc huấn luyện cho mơ hình YOLO địi hỏi nhiều liệu, nên chúng em phải suy nghĩ lại việc có nên tự gán nhãn liệu hay không Cuối cùng, chúng em định sử dụng liệu gán nhãn sẵn tốn tốn lớn, lượng liệu có sẵn gán nhãn sẵn mạng nhiều Bộ liệu dùng toán chúng em lấy từ liệu khác vô tiếng Berkeley DeepDrive (BDD100k), gồm 100 nghìn hình ảnh khung cảnh lưu thông đường phố, ghi lại camera gắn xe ô tô Hơn nữa, liệu gán nhãn sẵn theo định dạng YOLO, tiện lợi cho việc sử dụng để huấn luyện mơ hình YOLOv5 5.2 Nghiên cứu nhận diện vật thể sử dụng YOLOv5 28 Hình 28: Một hình ảnh ví dụ gán nhãn sẵn lấy từ liệu Berkeley DeepDrive Bộ liệu đa dạng phong phú: có đủ độ sáng khác nhau, thời tiết, nhãn khoảng thời gian ngày Bộ liệu có hình ảnh phức tạp, liều lượng phương tiện đông đúc nhiều vật thể bị che khuất vật thể khác 5.2.2 Đọc xử lý liệu Do liệu lớn, mà YOLOv5 có tốc độ học lâu, cộng thêm việc huấn luyện mơ hình Google Colab bị giới hạn thời gian (6 tiếng) nên khơng thể sử dụng tồn bộ liệu Vì vậy, chúng em sử dụng 40% liệu, tức 40 nghìn ảnh Có nhiều loại vật thể nhận diện gán nhãn liệu, chúng em sử dụng 10 nhãn, đánh số theo thứ tự từ đến tương ứng là: "bike", "bus", "car", "motor", "person", "rider", "traffic light", "traffic sign", "train", "truck" Đây 10 nhãn xuất nhiều liệu chúng đánh dấu bounding box hình chữ nhật, thuận tiện cho việc xử lý liệu cho YOLOv5 Quá trình tiền xử lý liệu bao gồm chuyển đổi liệu dạng file JSON sang file TXT để đưa vào mơ hình, tính tốn lại thơng số cho phù hợp với YOLO (tâm bouding box, chiều dài, chiều rộng bounding box) def getDataFromJson(json_path): f = open(json_path) data = json.load(f) i = for image in data: writeYOLOFile(image) def writeYOLOFile(jsonImageData): imgName = jsonImageData["name"] imgData = jsonImageData["labels"] img = cv.imread(" /images/100k/val/" + imgName) imgWidth = img.shape[1] imgHeight = img.shape[0] print_buffer = [] for data in imgData: 5.2 Nghiên cứu nhận diện vật thể sử dụng YOLOv5 29 if data["category"] in category_label: x1 = data["box2d"]["x1"] x2 = data["box2d"]["x2"] y1 = data["box2d"]["y1"] y2 = data["box2d"]["y2"] label = category_label[data["category"]] centerX = (x1 + x2) / centerY = (y1 + y2) / centerX /= imgWidth centerY /= imgHeight width = abs(x1 - x2) / imgWidth height = abs(y1 - y2) / imgHeight print_buffer.append("{} {:.3f} {:.3f} {:.3f} {:.3f}".format( label, centerX, centerY, width, height)) if len(print_buffer) != 0: save_file_name = " /yolo_label/val/" + imgName.split(".")[0] + ".txt" print("\n".join(print_buffer), file=open(save_file_name, "w")) Sau đó, phải chia liệu thành phần train, val test riêng biệt theo tỷ lệ 6:2:2 bỏ vào thư mục khác 5.2.3 Tiến hành huấn luyện Đầu tiên, ta lấy source code YOLOv5 qua Github: git clone https://github.com/ultralytics/yolov5 Sau cài đặt package cần thiết: pip install -r yolov5/requirements.txt Rồi thực cấu hình cho mơ hình YOLOv5, việc thêm file vào yolov5/data với nội dung sau: # file name: road_object_detection_data.yaml train: /content/images/train/ val: /content/images/val/ test: /content/images/test/ # number of classes nc: 10 # class names names: [ "bike", "bus", "car", "motor", "person", "rider", "traffic light", "traffic sign", "train", "truck" ] Rồi thực chạy dòng lệnh sau để tiến hành huấn luyện mơ hình với tập liệu mới: python /content/yolov5/train.py img 720 cfg yolov5s.yaml hyp hyp.scratch-med.yaml batch 32 epochs data 5.2 Nghiên cứu nhận diện vật thể sử dụng YOLOv5 30 road_object_detection_data.yaml weights yolov5s.pt workers 24 name yolo_road_det Trong đó, file yolo5s.yaml thơng số mặc định mơ hình YOLOv5 cung cấp, tùy chỉnh file Cịn road_object_detection_data.yaml file mà vừa tạo 5.2.4 Kết Kết huấn luyện mơ hình khơng cao lắm, điểm số thấp Không thế, kết kiểm định thấp: Hình 29: Kết huấn luyện Hình 30: Kết kiểm định Tuy nhiên, kết thực tế thử nghiệm ảnh ngẫu nhiên lấy từ bên tập liệu lại xác Điều mơ hình dự đốn vị trí vật thể, độ tự tin lại không cao Để cải thiện điều này, cần phải huấn luyện mơ hình tập liệu lớn 5.3 Tạo API nhận diện vật thể đường phố 31 Hình 31: Kết thực tế 5.3 Tạo API nhận diện vật thể đường phố Sau thành công huấn luyện mô hình YOLOv5, tiến hành tải tham số mà mơ hình học để tạo API phát vật thể đường phố File mà tải best.pt Chúng ta sử dụng Flask cho việc dựng API: import os, shutil from werkzeug.exceptions import BadRequest from flask import Flask, render_template, request, make_response import torch import cv2 from PIL import Image import io import sys sys.path.append(’ /yolov5’) from detect import detectImg app = Flask( name ) def get_detection(img_bytes): img = Image.open(io.BytesIO(img_bytes)) file_path = ’ /images/cache.jpg’ img_src = img.save(file_path) result = detectImg(weights=’ /weights/best.pt’, source=’ /images/cache.jpg’, conf_thres=0.5, iou_thres=0.5, imgsz=(736, 736)) try: if os.path.isfile(file_path) or os.path.islink(file_path): os.unlink(file_path) elif os.path.isdir(file_path): shutil.rmtree(file_path) except Exception as e: print(’Failed to delete %s Reason: %s’ % (file_path, e)) return result @app.route(’/’, methods=[’POST’]) def predict(): file = extract_img(request) 5.3 Tạo API nhận diện vật thể đường phố 32 img_bytes = file.read() results = get_detection(img_bytes) RGB_img = cv2.cvtColor(results, cv2.COLOR_BGR2RGB) im_arr = cv2.imencode(’.jpg’, RGB_img)[1] response = make_response(im_arr.tobytes()) response.headers[’Content-Type’] = ’image/jpeg’ return response def extract_img(request): # checking if image uploaded is valid if ’file’ not in request.files: raise BadRequest("Missing file parameter!") file = request.files[’file’] if file.filename == ’’: raise BadRequest("Given file is invalid") return file if name == ’ main ’: app.run(debug=True, host=’0.0.0.0’) Và khơng thể thiếu source code YOLOv5, có trọng số khơng thể làm Tuy nhiên, source code YOLOv5 lại không cung cấp cho hàm detect để tiến hành nhận diện chương trình mà cung cấp hàm run tiến hành nhận diện thơng qua dịng lệnh terminal Vì vậy, chúng em viết thêm hàm detectImg để thực nhiệm vụ def detectImg( weights=ROOT / ’yolov5s.pt’, # model.pt path(s) source=ROOT / ’data/images’, # file/dir/URL/glob, for webcam data=ROOT / ’data/coco128.yaml’, # dataset.yaml path imgsz=(640, 640), # inference size (height, width) conf_thres=0.25, # confidence threshold iou_thres=0.45, # NMS IOU threshold max_det=1000, # maximum detections per image device=’’, # cuda device, i.e or 0,1,2,3 or cpu classes=None, # filter by class: class 0, or class agnostic_nms=False, # class-agnostic NMS augment=False, # augmented inference visualize=False, # visualize features # existing project/name ok, not increment line_thickness=3, # bounding box thickness (pixels) hide_labels=False, # hide labels hide_conf=False, # hide confidences half=False, # use FP16 half-precision inference dnn=False, # use OpenCV DNN for ONNX inference ): source = str(source) is_file = Path(source).suffix[1:] in (IMG_FORMATS + VID_FORMATS) is_url = source.lower().startswith((’rtsp://’, ’rtmp://’, ’http://’, ’https://’)) webcam = source.isnumeric() or source.endswith(’.txt’) or (is_url and not is_file) if is_url and is_file: source = check_file(source) # download # Load model device = select_device(device) 5.3 Tạo API nhận diện vật thể đường phố 33 model = DetectMultiBackend(weights, device=device, dnn=dnn, data=data, fp16=half) stride, names, pt = model.stride, model.names, model.pt imgsz = check_img_size(imgsz, s=stride) # check image size # Dataloader if webcam: cudnn.benchmark = True # set True to speed up constant image size inference dataset = LoadStreams(source, img_size=imgsz, stride=stride, auto=pt) bs = len(dataset) # batch_size else: dataset = LoadImages(source, img_size=imgsz, stride=stride, auto=pt) bs = # batch_size # Run inference model.warmup(imgsz=(1 if pt else bs, 3, *imgsz)) # warmup dt, seen = [0.0, 0.0, 0.0], for path, im, im0s, vid_cap, s in dataset: t1 = time_sync() im = torch.from_numpy(im).to(device) im = im.half() if model.fp16 else im.float() # uint8 to fp16/32 im /= 255 # - 255 to 0.0 - 1.0 if len(im.shape) == 3: im = im[None] # expand for batch dim t2 = time_sync() dt[0] += t2 - t1 # Inference pred = model(im, augment=augment, visualize=visualize) t3 = time_sync() dt[1] += t3 - t2 # NMS pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det) dt[2] += time_sync() - t3 # Second-stage classifier (optional) # pred = utils.general.apply_classifier(pred, classifier_model, im, im0s) # Process predictions for i, det in enumerate(pred): # per image seen += if webcam: # batch_size >= p, im0, frame = path[i], im0s[i].copy(), dataset.count s += f’{i}: ’ else: p, im0, frame = path, im0s.copy(), getattr(dataset, ’frame’, 0) p = Path(p) s += ’%gx%g ’ % im.shape[2:] # print string annotator = Annotator(im0, line_width=line_thickness, example=str(names)) if len(det): # Rescale boxes from img_size to im0 size det[:, :4] = scale_coords(im.shape[2:], det[:, :4], im0.shape).round() # Print results for c in det[:, -1].unique(): 34 n = (det[:, -1] == c).sum() # detections per class s += f"{n} {names[int(c)]}{’s’ * (n > 1)}, " # add to string # Write results for *xyxy, conf, cls in reversed(det): # Add bbox to image c = int(cls) # integer class label = None if hide_labels else (names[c] if hide_conf else f’{names[c]} {conf:.2f}’) annotator.box_label(xyxy, label, color=colors(c, True)) # Stream results im0 = annotator.result() return Về hàm giống với hàm run viết sẵn, loại bỏ phần tương tác với mơi trường dịng lệnh để chuyển sang tương tác với tham số truyền vào từ chương trình Cuối cùng, tiến hành chạy chương trình với dịng lệnh python app.py Sử dụng cơng cụ Postman để thử nghiệm API cho kết khả quan Hình 32: Phản hồi từ Postman, chứng tỏ API hoạt động tốt với hình ảnh thực tế, khơng nằm tập liệu Hướng dẫn cài đặt sử dụng 6.1 Điều kiện yêu cầu: Để thực cài đặt Road Object Detection API, máy tính người dùng phải thỏa mãn yêu cầu sau: • Đã cài đặt GIT phiên 2.34.1 trở lên • Đã cài đặt Python phiên 3.10.4 trở lên • Đã cài đặt Package Installer for Python (PIP) phiên 22.0.2 trở lên • Đã cài đặt package virtualvenv Python phiên 20.14.1 trở lên 6.2 Các bước thực hiện: 35 • Đã cài đặt hệ điều hành Window 10 Ubuntu • Đã cài đặt Postman 6.2 Các bước thực hiện: Đầu tiên, lấy source code project Road Object Detection API máy Mở giao diện dòng lệnh lên gõ: git clone https://github.com/ltl13/road_object_detection_apis.git Mở terminal bên thư mục chứa source gõ dòng lệnh sau: virtualenv -p python3 venv source venv/bin/activate Hai dịng lệnh tạo thư mục mơi trường ảo chứa thư viện project Mục đích việc làm để tránh xung đột package project khác máy Tiếp theo, gõ dòng lệnh sau để tiến hành cài đặt thư viện cần thiết cho project này: pip install -r requirements.txt Quá trình đôi chút thời gian Đợi sau cài đặt xong, gõ hai lệnh sau để chạy chương trình: cd source python3 app.py Đợi chương trình build khởi chạy, bước khoảng thời gian Trong lúc đợi, mở Postman lên, giao diện trơng giống sau: Hình 33: Giao diện Postman Trong mục "Enter request URL"gõ vào http://localhost:5000 chọn phương thức POST Chọn tab "Body"và chọn "form-data", chỉnh dạng liệu truyền vào "File", key "file"và chọn hình ảnh đường phố máy Cuối cùng, click nút "Send"và đợi phản hổi 36 Hình 34: Sau hồn thành bước bấm nút "Send", có giao diện phản hồi Postman Kết luận 7.1 Ưu, nhược điểm Trong suốt trình làm việc nghiên cứu để phát triển Road Object Detection API, nhóm nhận thấy tổng kết ưu điểm sau đồ án: • Ứng dụng đơn giản, gọn nhẹ, dễ dàng cài đặt sử dụng • Áp dụng cơng nghệ mơ hình học sâu YOLOv5, công nghệ phổ biến đại lĩnh vực học sâu nói chung xử lý ảnh nói riêng • Tốc độ xử lý nhanh, YOLO thuật toán nhận diện vật thể có tốc độ xử lý nhanh • Tốc độ phản hồi API nhanh, khơng có q nhiều khâu xử lý thức phức tạp không cần phải tương tác với sở liệu • Nắm rõ nguyên lý hoạt động Convolutional Neural Network • Tự xây dựng mạng học sâu thu kết tốt với toán phân loại biển báo giao thơng qua ảnh Bên cạnh đó, thời gian phát triển ngắn, nhóm nhận thấy nhược điểm đồ án cần phải khắc phục: • Vẫn chưa thể can thiệp q sâu vào mơ hình, mã nguồn YOLOv5 phức tạp để tùy chỉnh • Chưa thể tự xây dựng lại mơ hình YOLOv5 • Chưa deploy API yếu tố thời gian cố Heroku • Chưa áp dụng API tạo cho ứng dụng di động 7.2 7.2 Hướng phát triển tương lai 37 Hướng phát triển tương lai Qua việc phân tích ưu, nhược điểm đồ án, nhóm đưa giải pháp khắc phục phương hướng phát triển cho ứng dụng Vấn đề API đang chạy server local mà chưa deploy, việc cần làm lúc deploy sản phẩm, cụ thể triển khai Heroku Sở dĩ chúng em chọn Heroku tảng đám mây phổ biến để deploy sản phẩm có liên quan đến trí tuệ nhân tạo Vì vậy, có nhiều tài liệu tham khảo liên quan đến việc deploy API ứng dụng công nghệ học sâu lên Heroku Việc mà chúng em nhắm đến cần phải thực sau deploy API tạo ứng dụng di động để sử dụng API Sở dĩ chúng em chọn ứng dụng di động thiết bị di động tiện lợi việc thao tác với hình ảnh, đặc biệt với việc chụp, lưu trữ hình ảnh Điều khiến người dùng dễ dàng sử dụng cơng nghệ mà nhóm tạo Về việc lên ý tưởng làm ứng dụng gì, ứng dụng giúp phát có vật thể hình (ví dụ xe, người, ) tách chúng thành hình ảnh riêng biệt Nói chung API nhận dạng vật thể đường ứng dụng chủ yếu liên quan đến xe tự lái thiết bị tự hành khác, khơng có kiến thức chun mơn lập trình nhúng phần cứng nên chúng em chưa thể thực ý tưởng Do đội ngũ phát triển khơng thật có chuyên gia trí tuệ nhân tạo, thiếu thốn liệu sở vật chất để xây dựng mơ hình từ đầu nên chúng em chưa thể thật can thiệp sâu vào mơ hình YOLOv5 Vậy nên chúng em dự định bắt tay vào xây dựng lại mơ hình YOLO để hiểu rõ nó, đồng thời tìm kiếm điểm khơng cần thiết cần cải thiện áp dụng mơ hình với toán nhận diện vật thể đường 7.3 Lời kết Đồ án thành chúng em sau khoảng thời gian để vừa tìm hiểu cơng nghệ, vừa phát triển sản phẩm Tuy khoảng thời gian không coi nhiều thứ chúng em tìm hiểu thời gian mở cho chúng em chân trời cho hướng tương lai sau này, việc ứng dụng trí tuệ nhân tạo, mà cụ thể học sâu, vào sản phẩm phần mềm Tuy cịn nhiều thiếu sót thành phẩm cuối - Road Object Detection API, đạt mục tiêu ban đầu đề nhóm, ứng dụng trí tuệ nhân tạo, mà cụ thể học sâu với xử lý ảnh, vào phát triển sản phẩm phần mềm Chắc chắn sau hồn thành mơn học này, chúng em đúc kết nhiều kinh nghiệm làm việc với học sâu, xử lý ảnh, công nghệ khác liên quan đến lĩnh vực trí tuệ nhân tạo Chúng em muốn sản phẩm cuối hồn thiện nhất, hy vọng thời điểm xây dựng chí cải tiến mơ hình YOLO để hiểu rõ Qua đồ án mơn học này, thấy việc ứng dụng trí tuệ nhân tạo vào việc xây dựng ứng dụng thông minh, phục vụ người việc tồn phim khoa học viễn tưởng Với trình độ phát triển cơng nghệ nay, cộng thêm việc nghiên cứu liên quan đến trí tuệ nhân tạo cơng bố ngày, việc tương lai nơi người trí tuệ nhân tạo chung sống nhìn thấy trước mắt Là lập trình viên, người đón đầu xu hướng cơng nghệ, nên tìm hiểu ứng dụng cơng nghệ vào sản phẩm để mang đến cho người dùng công nghệ nhất, tốt TÀI LIỆU 38 Tài liệu [1] Mobile Artificial Intelligence: When Apps Get Smarter: Bài viết trang Nix United việc sử dụng trí tuệ nhân tạo ứng dụng di động mang lại lợi ích cho người [2] Object Recognition - things you need to know: Bài viết trang Math Works điều cần biết làm việc với toán nhận diện vật thể [3] A Gentle Introduction to Object Recognition With Deep Learning - Jason Brownlee PhD: Bài viết trang Machine Learning Mastery giới thiệu toán nhận diện vật thể sử dụng học sâu [4] Deep Learning gì? Tổng quan Deep learning: Bài viết giới thiệu học sâu trang blog tiếng công nghệ Việt Nam Nordic Coder [5] You Only Look Once: Unified, Real-Time Object Detection - Joseph Redmon et al: Bài báo khoa học mơ hình YOLO [6] How to Train YOLO v5 on a Custom Dataset - Ayoosh Kathuria: Bài viết hướng dẫn cách dùng phương pháp học chuyển đổi cho mô hình YOLOv5 [7] Deep Learning Specialization: Khóa học Coursera học sâu, tổ chức DeepLearning.AI giảng dạy ... sâu dùng để tạo nên API nhận diện vật thể đường phố 2.1 Nhận dạng vật thể Nhận dạng vật thể kỹ thuật thị giác máy tính để xác định vật thể hình ảnh video Nhận dạng vật thể đầu thuật tốn học sâu... 3.3 Anchor box (hộp neo) Một vấn đề nhận diện vật thể nhận diện vật thể bị che khuất vật thể khác Vì thuật tốn nhận diện vật thể gốc xác định vật thể có hai vật thể chồng lên Anchor box sinh để... nghiệp thị giác robot (giúp robot nhận diện vật thể) Hình 3: Nhận diện vật thể đường phố, ứng dụng xe tự hành Bài toán nhận dạng vật thể sản sinh toán khác, toán nhận quan tâm sâu sắc giới nghiên

Ngày đăng: 17/08/2022, 21:28

Xem thêm:

TỪ KHÓA LIÊN QUAN

Mục lục

    Trí tuệ nhân tạo và ứng dụng

    Giới thiệu đề tài và lý do chọn đề tài

    Mục tiêu đề ra

    Nhận dạng vật thể

    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)

    YOLO (You Only Look Once)

    Mạng YOLO là gì?

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w