1. Trang chủ
  2. » Luận Văn - Báo Cáo

(Đồ án hcmute) xây dựng hệ thống phát hiện xâm nhập và thông báo cho người sử dụng qua tin nhắn telegram bằng học sâu

58 19 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

Thông tin cơ bản

Tiêu đề Xây Dựng Hệ Thống Phát Hiện Xâm Nhập Và Thông Báo Cho Người Sử Dụng Qua Tin Nhắn Telegram Bằng Học Sâu
Tác giả Đặng Ngọc Sơn
Người hướng dẫn ThS. Lê Thị Minh Châu
Trường học Trường Đại Học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đồ án
Năm xuất bản 2023
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 58
Dung lượng 6,53 MB

Cấu trúc

  • PHẦN 1: MỞ ĐẦU (14)
  • PHẦN 2: NỘI DUNG (15)
  • CHƯƠNG 1: KHẢO SÁT HIỆN TRẠNG (15)
    • 1.1 PHÂN TÍCH HIỆN TRẠNG (15)
    • 1.2 PHÂN TÍCH YÊU CẦU (15)
  • CHƯƠNG 2: TỔNG QUAN VỀ YOLO (17)
    • 2.1. GIỚI THIỆU VỀ NEURAL NETWORK [1] (17)
    • 2.2. GIỚI THIỆU VỀ YOLO (19)
    • 2.3. LỊCH SỬ PHÁT TRIỂN (21)
    • 2.4. KIẾN TRÚC YOLO (22)
    • 2.5. THUẬT TOÁN YOLO (24)
    • 2.6. OUTPUT CỦA YOLO [3] (27)
    • 2.7. ANCHOR BOX [4] (29)
    • 2.8. THUẬT TOÁN NON-MAXIMUM SUPPRESSION(NMS) [8] (30)
    • 2.9. DỰ BÁO TRÊN NHIỀU FEATURE MAP [4] (32)
    • 2.10. HÀM LOSS FUNCTION [4] (32)
    • 2.11. ỨNG DỤNG CỦA YOLO (34)
    • 2.12. TỔNG KẾT (34)
  • CHƯƠNG 3: HUẤN LUYỆN YOLOv4 (35)
    • 3.1. TẬP DỮ LIỆU (35)
    • 3.2. CẤU HÌNH ĐỂ HUẤN LUYỆN (36)
    • 3.3. SỬ DỤNG GOOGLE COLABORATORY ĐỂ HUẤN LUYỆN [10] (36)
  • CHƯƠNG 4: XÂY DỰNG HỆ THỐNG (45)
    • 4.1. THIẾT KẾ HỆ THỐNG (45)
    • 4.2. TẠO RA BOTCHAT TELEGRAM [11] (46)
    • 4.3. XÂY DỰNG HỆ THỐNG YOLODETECT (47)
    • 4.4. TRIỂN KHAI HỆ THỐNG VÀ KẾT QUẢ (52)
  • PHẦN 3: KẾT LUẬN (55)
    • 1. KẾT QUẢ ĐẠT ĐƯỢC (55)
    • 2. ƯU ĐIỂM (4)
    • 3. NHƯỢC ĐIỂM (55)
    • 4. HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI (55)

Nội dung

NỘI DUNG

Trước khi triển khai đề tài, tôi đã tiến hành khảo sát các biện pháp giảm thiểu tình trạng xâm nhập vào khu vực không an toàn tại các bệnh viện và công trình trong và ngoài nước Tại các nước đang phát triển, hầu hết các biện pháp đều phụ thuộc vào con người, trong khi một số nước vẫn chưa có giải pháp khắc phục hiệu quả Ngược lại, các nước phát triển thường trang bị camera giám sát tại các công trình và bệnh viện, và một số ít trong số đó đã thiết lập hệ thống phát hiện đối tượng xâm nhập.

Qua quá trình tìm hiểu và khảo sát đối với các hệ thống phát hiện đối tượng nhóm có nhận xét sau: Ưu điểm:

• Có thể phát hiện kịp thời và ngăn cản đối tượng khi xuất hiện ở các vùng nguy hiểm

• Tiêu tốn nhiều vào nguồn nhân lực để phát hiện

• Không phát huy hết công dụng của những camera

Dựa trên khảo sát và phân tích, tôi đã xác định những khía cạnh cần học hỏi và cải tiến để áp dụng vào việc xây dựng hệ thống của mình.

• Cần tạo ra một hệ thống phát hiện và thông báo kịp thời

• Hệ thống sẽ thay đổi vị trí nguy hiểm do người sử dụng chỉ định

• Hệ thống sẽ thông báo liên tục đến telegram người sử dụng đến khi đối tượng ra khỏi vùng nguy hiểm

Dựa trên kết quả phân tích hiện trạng của lĩnh vực, nhóm đã xác định các yêu cầu chức năng nghiệp vụ cần thiết để đảm bảo tiêu chuẩn chất lượng và tạo ra những điểm mới trước khi tiến hành xây dựng đề tài.

KHẢO SÁT HIỆN TRẠNG

PHÂN TÍCH HIỆN TRẠNG

Trước khi triển khai đề tài, tôi đã khảo sát các biện pháp giảm thiểu tình trạng xâm nhập vào khu vực không an toàn tại các bệnh viện và công trình cả trong và ngoài nước Nhìn chung, các nước đang phát triển chủ yếu sử dụng nhân lực để đảm bảo an ninh, trong khi một số quốc gia vẫn chưa có giải pháp hiệu quả Ngược lại, nhiều nước phát triển đã lắp đặt camera giám sát tại các cơ sở y tế và công trình, trong đó một số ít đã triển khai hệ thống phát hiện đối tượng xâm nhập.

Qua quá trình tìm hiểu và khảo sát đối với các hệ thống phát hiện đối tượng nhóm có nhận xét sau: Ưu điểm:

• Có thể phát hiện kịp thời và ngăn cản đối tượng khi xuất hiện ở các vùng nguy hiểm

• Tiêu tốn nhiều vào nguồn nhân lực để phát hiện

• Không phát huy hết công dụng của những camera

Dựa trên kết quả khảo sát và phân tích, tôi đã xác định những khía cạnh cần tiếp thu, học hỏi và cải tiến để áp dụng vào việc xây dựng hệ thống của mình.

• Cần tạo ra một hệ thống phát hiện và thông báo kịp thời

• Hệ thống sẽ thay đổi vị trí nguy hiểm do người sử dụng chỉ định

• Hệ thống sẽ thông báo liên tục đến telegram người sử dụng đến khi đối tượng ra khỏi vùng nguy hiểm.

PHÂN TÍCH YÊU CẦU

Dựa trên kết quả phân tích hiện trạng của lĩnh vực, nhóm đã xác định các yêu cầu chức năng nghiệp vụ cần xây dựng nhằm đảm bảo tiêu chuẩn chất lượng và tạo ra những điểm mới trước khi tiến hành xây dựng đề tài.

• Tính toán vị trí của đối tượng tiếp xúc với vùng nguy hiểm Kết quả:

• Đưa ra thông báo kịp thời đến người dùng

TỔNG QUAN VỀ YOLO

GIỚI THIỆU VỀ NEURAL NETWORK [1]

Trước tiên muốn hiểu về YOLO và cách thức hoạt động của YOLO chúng ta cần hiểu về mạng Neural Network là gì

Mạng nơ-ron nhân tạo, hay còn gọi là Neural Network, là một chuỗi thuật toán được thiết kế để mô phỏng hoạt động của não bộ con người Hệ thống này nhằm tìm kiếm các mối quan hệ cơ bản trong tập hợp dữ liệu, tương tự như cách mà các tế bào thần kinh trong não bộ xử lý thông tin.

Hình 1: Hình ảnh mô phỏng mạng nơ-ron nhân tạo

2.1.1 Kiến trúc mạng Neutal Network [1]

Mạng Neural Network là sự kết hợp của những tầng perceptron (perceptron đa tầng) và thường bao gồm 3 kiểu tầng:

• Tầng vào (tầng input layer): Nằm bên trái cùng, thể hiện cho đầu vào của mạng

• Tầng ẩn (tầng hidden layer): Nằm giữa, thể hiện quá trình suy luận logic của mạng

• Tầng ra (tầng output layer): Nằm bên phải cùng, thể hiện đầu ra của mạng

Hình 2: Kiến trúc mạng nơ-ron nhân tạo

Trong mạng Neural Network, mỗi nút mạng hoạt động như một nơ-ron sigmoid nhưng có hàm kích hoạt khác nhau Số lượng nút mạng ở mỗi tầng có thể thay đổi tùy thuộc vào bài toán cụ thể và phương pháp giải quyết Các nơ-ron trong cùng một tầng thường được kết nối chặt chẽ với nhau, tạo nên một mạng lưới kết nối đầy đủ Từ số tầng và số nơ-ron, có thể tính toán kích thước của mạng một cách chính xác.

2.1.2 Thuộc tính của mạng Neural Network [2]

Giống như con người, mạng Neural Network có khả năng giải quyết vấn đề và áp dụng kỹ năng vào các tập dữ liệu lớn, nhờ đó mà chúng sở hữu những thuộc tính mạnh mẽ.

Học tập thích ứng là quá trình mà mạng nơ-ron sử dụng kiến thức đã có để mô hình hóa các mối quan hệ phức tạp và phi tuyến tính, từ đó phát triển và mở rộng thêm kiến thức mới.

• Tự tổ chức: Mạng nơ-ron có khả năng phân cụm và phân loại lượng dữ liệu khổng lồ

• Hoạt động theo thời gian thực: Mạng có thể cung cấp những câu trả lời của con người theo thời gian thực

• Khả năng chịu lỗi: Mạng nơ-ron có thể tự điền vào chỗ trống khi các phần quan trọng của mạng bị mất hoặc thiếu

Mạng Neural Network được phân loại thành nhiều loại khác nhau nhằm phục vụ cho các mục đích khác nhau Một số loại mạng phổ biến hiện nay bao gồm:

• The Perceptron: Là mạng được xem là đơn giản và lâu đời nhất Đây được xem là nền tảng của những mạng nơ-ron khác

• Multilayer Perceptron (MPL): Đây thực ra là một dạng Perceptron nhưng phức tạp hơn

Mạng nơ-ron tích chập (CNN) là một loại mạng nơ-ron có cấu trúc và cách sử dụng tương tự như mạng nơ-ron đa lớp (MPL) CNN thường được áp dụng trong việc nhận diện hình ảnh và các tác vụ liên quan đến thị giác máy tính.

• Recurrent Neural Network (RNN): Là mạng nơ-ron hồi quy Thường được dùng để tìm pattern liên tục của dữ liệu và dự đoán stock data.

GIỚI THIỆU VỀ YOLO

YOLO (You Only Look Once) là mô hình phát hiện đối tượng do Joseph Redmon phát triển, nổi bật với khả năng xử lý nhanh chóng khi chỉ cần quét qua bức ảnh một lần để phát hiện các đối tượng Mặc dù YOLO được xem là thuật toán nhanh nhất, nhưng độ chính xác của nó có thể không đạt mức cao nhất so với các phương pháp khác Điểm mạnh của YOLO là khả năng phát hiện nhiều vật thể khác nhau trong cùng một bức ảnh.

Mô hình thống nhất của YOLO có một vài ưu điểm so với các phương pháp phát hiện vật thể truyền thống như sau:

YOLO sở hữu tốc độ xử lý cực kỳ nhanh, giúp cho việc phát hiện vật thể trở nên đơn giản và hiệu quả Nhờ vào cách tiếp cận bài toán hồi quy, YOLO không cần đến cơ chế pipeline phức tạp, mà chỉ đơn giản chạy mạng nơ-ron trên bức ảnh mới tại thời điểm kiểm thử để dự đoán các phát hiện Điều này cho phép YOLO đạt tốc độ xử lý lên đến 45 khung hình mỗi giây, giúp xử lý video trực tuyến trong thời gian thực với độ trễ nhỏ hơn 25 mili giây Đặc biệt, YOLO đạt được độ chính xác mAP cao hơn gấp đôi so với các hệ thống thời gian thực khác.

YOLO tiếp cận việc dự đoán bức ảnh một cách toàn cục, khác với các phương pháp như cửa sổ trượt hay đề xuất vùng, bằng cách xem xét toàn bộ bức ảnh trong quá trình huấn luyện và kiểm tra Điều này giúp YOLO hiểu rõ hơn về ngữ cảnh của các lớp và hình dáng của chúng, dẫn đến việc giảm thiểu đáng kể lỗi nền so với các phương pháp khác như Fast R-CNN.

YOLO có khả năng học và tổng quát hóa các biểu diễn của vật thể, cho phép nó hoạt động hiệu quả hơn so với các phương pháp phát hiện hàng đầu khác như DPM hay R-CNN Khi được huấn luyện với ảnh thực và thử nghiệm với ảnh vẽ, YOLO cho kết quả vượt trội Nhờ vào tính tổng quát hóa cao, YOLO ít khi thất bại khi áp dụng trong các lĩnh vực mới hoặc khi xử lý các đầu vào bất thường.

Hình 4: Kết quá dự đoán của YOLO trên các bức ảnh vẽ.

LỊCH SỬ PHÁT TRIỂN

YOLO đã trải qua 7 phiên bản (Từ năm 2015-2022) phiên bản mới nhất bao gồm:

Tác giả Joseph Redmon đã ngừng nghiên cứu sau khi phát hành YOLOv3 do lo ngại về việc công nghệ này có thể bị lạm dụng Kể từ phiên bản YOLOv4 trở đi, các tác giả khác như Alexey Bochkovskiy (YOLOv4) và Glenn Jocher (YOLOv5) đã tiếp tục phát triển công nghệ này.

Hiện nay YOLOv7 là phiên bản mới nhất

Các phiên bản sau của YOLO đã được điều chỉnh để phù hợp với từng ứng dụng cụ thể, bao gồm khả năng xử lý đầu vào có độ phân giải cao, tăng tốc độ khung hình hiển thị (FPS) và nhận diện các nhóm đối tượng khác nhau trong các tình huống đa dạng.

Từ phiên bản YOLOv1 đến YOLOv4, các tác giả tập trung vào việc tinh chỉnh các thông số Tuy nhiên, ở các phiên bản YOLOv5, YOLOv6 và YOLOv7, các thông số đã được thiết kế sẵn, giúp người dùng không cần phải lo lắng về việc tinh chỉnh.

Các phiên bản YOLOv5, YOLOv6 và YOLOv7 đã gây ra tranh cãi trong cộng đồng người dùng do gặp phải tình trạng treo máy khi chạy trên các GPU hiệu năng thấp Trong khi đó, YOLOv4 được đánh giá là phiên bản ổn định nhất Vì lý do này, tôi đã quyết định chọn YOLOv4 cho hệ thống của mình.

KIẾN TRÚC YOLO

Kiến trúc của YOLO bao gồm:

• Base network: Có nhiệm vụ trích xuất đặc trưng (Darknet Architecture)

• Extra Layers: Có tác dụng phát hiện vật thể trên feature map của base network

YOLO hoạt động bằng cách phát hiện vật thể trong từng vùng của ảnh, chia ảnh thành S x S ô (cell) mà thực chất chỉ là cách phân chia trong tưởng tượng, không phải cắt ảnh hay thực hiện bước xử lý ảnh nào Việc chia này thực chất là phân chia output, target thành ma trận A kích thước S x S Nếu tâm của vật thể nằm trong ô (i,j), thì output tương ứng sẽ nằm trong A[i,j] Kiến trúc YOLO cũng có thể được tùy biến thành các phiên bản khác nhau để phù hợp với các hình dạng input khác nhau.

Hình 5: Kiến trúc của YOLO

YOLOv4 employs Convolutional Layers, making it a Fully Convolutional Network (FCN) Building on YOLOv3, the author utilizes the darknet-53 network as a Feature Extractor, followed by a Leaky ReLU activation function and batch normalization To optimize the model, the author implements a technique to reduce the number of parameters by downsampling using filters of size 2.

Hình 6: Các layer trong mạng Darknet-53

Hiện tại, YOLO hỗ trợ 2 kích thước đầu vào chính là 416x416 và 608x608 Ở mỗi đầu vào sẽ có các layers riêng biệt để phù hợp với shape của input

• Kích thước đầu vào sẽ quy định kích thước của feature map

• Với input 416x416 các kích thước của feature map lần lượt là 13x13, 26x26, 52x52

• Với input 608x608 các kích thước của feature map lần lượt là 19x19, 38x38, 72x72.

THUẬT TOÁN YOLO

Residual blocks là phương pháp chia hình ảnh đầu vào thành lưới SxS với các ô bằng nhau, giúp phát hiện các vật thể trong từng ô.

Hình 7: Residual block được thể hiện trên một bức ảnh

Bounding box regression được sử dụng để dự đoán khi hình ảnh có các biến ngõ ra liên tục

Hình 8: Bounding box màu vàng bao quanh xe hơi

Mỗi bounding box bao gồm các thuộc tính:

• Các lớp (Người, xe, ) được kí hiệu bằng chữ "c"

• Đường viền tâm box (bx, by)

Hình 9: Công thức ước lượng Bounding box từ Anchor box

Hình chữ nhật nét đứt đại diện cho Anchor box với kích thước (pw, ph) Tọa độ của một bounding box được xác định dựa trên cả anchor box và cell mà nó thuộc về, giúp kiểm soát vị trí của bounding box dự đoán gần vị trí của cell mà không vượt quá giới hạn cho phép.

Intersection over union (IOU) được sử dụng để đánh giá độ chính xác của object detector trên tập dữ liệu cụ thể

Hình 10: Công thức tính IOU

Area of Overlap là diện tích giao nhau giữa predicted bounding box và ground-truth bounding box, trong khi Area of Union là diện tích hợp của hai bounding box này Các bounding box được gán nhãn thủ công trong quá trình huấn luyện, và một dự đoán được coi là chính xác khi chỉ số IOU đạt giá trị ≥ 0,5.

OUTPUT CỦA YOLO [3]

Output của mô hình là véc tơ bao gồm:

Hình 11: Công thức output của YOLO

• P 0 : xác suất dự báo bounding box có vật thể xuất hiện bên trong

• t x , t y : Tọa độ tâm của bounding box

• t w , t h : Độ rộng và chiều cao của bounding box

• p 1 , p 2 ,…,p c : Véc tơ phân phối xác suất dự báo của n classes

Output được xác định dựa theo số lượng classes theo công thức (n_class+5)

Hình 12 minh họa kiến trúc đầu ra của YOLO, trong đó hình ảnh được phân chia thành 13x13 ô (cell) bằng nhau Mỗi ô này được chia thành 3 anchor box không bằng nhau, với tâm của các anchor box trùng khớp với ô đó Kết quả là một véc tơ được tạo thành từ 3 bounding boxes, đây chính là đầu ra của YOLO.

VD: Output sẽ bằng 85 khi ta huấn luyện 80 class, và sẽ bằng 255 khi áp dụng ba anchors/cell (85x3%5)

ANCHOR BOX [4]

Anchor box là một bounding box cơ bản, được xác định thông qua các phép dịch tâm và điều chỉnh kích thước (chiều dài, chiều rộng) để tạo ra các bounding box bao quanh các vật thể.

Các Anchor box được thiết kế để bao quanh các vật thể một cách chính xác và đã được xác định trước Để tạo ra một bounding box dự đoán cho vật thể trong tương lai, chúng ta sẽ áp dụng thuật toán hồi quy để tinh chỉnh bounding box.

Hình 13: Hình ảnh xác định Anchor box của một vật thể

Ta sẽ xác định IOU của từng anchor box với ground truth bounding box với trường hợp từ 2 anchor boxes trở lên, anchor box cao hơn sẽ được chọn

Mỗi vật thể trong hình ảnh được phân bố vào các cell trên feature map dựa trên mid point của nó Từ những cell này, chúng ta có thể xác định các anchor boxes bao quanh vật thể Tóm lại, thông qua hai thành phần chính là cell và anchor box, việc nhận diện một vật thể trở nên khả thi.

Ngoài ra, có một số trường hợp khi xác định nhiều vật thể, sẽ có hiện tượng cả

2 vật thể bị trùng mid point Đó là nguyên nhân dẫn đến thuật toán không xác định

Hình 14: hai vật thể bị trùng mid point và cùng thuộc 1 cell

THUẬT TOÁN NON-MAXIMUM SUPPRESSION(NMS) [8]

Khi sử dụng YOLO để xác định đối tượng sẽ tạo cho đối tượng có nhiều bounding boxes xung quanh Mỗi box có dạng (x1, y1, x2, y2, c) trong đó:

• (x1, x2): Là tọa độ điểm top và left của bounding box

• (y1, y2): Là tọa độ bottom và right của bounding box

• c: Là confidence score tương ứng với box đó (được trả về từ

YOLODETECT) Để loại bỏ các bounding box thừa xuất hiện khi YOLODETECT thì ta sẽ dùng thuật toán NMS

Ký hiệu của thuật toán:

• P: Tập các box đầu vào

• nms_threshold: Ngưỡng IOU để loại bỏ box thừa

• indices: Tập các box sau khi loại bỏ box thừa

Thuật toán bao gồm 3 bước:

• Bước 1: Loại bỏ các box S có confidence score cao nhất ra khỏi tập P và thêm nó vào tập indices

Bước 2: Tính toán chỉ số IOU giữa hộp S vừa thêm vào danh sách chỉ số và tất cả các hộp còn lại trong tập P Nếu giá trị nms_threshold nhỏ hơn IOU của bất kỳ hộp nào trong P so với hộp S đang xem xét, thì hộp đó sẽ bị loại khỏi tập P.

• Bước 3: Lặp lại bước 1 cho đến khi không còn box nào trong tập P

Kết thúc thuật toán indices là tập sẽ chứa toàn bộ những box phù hợp

Việc lựa chọn giá trị cho ngưỡng nms_threshold có ảnh hưởng đáng kể đến hiệu suất của YOLO Thông thường, ngưỡng nms_threshold được chọn nhỏ hơn 0,5 để tối ưu hóa kết quả.

Hình 15: Từ đầu có 3 bounding box bao quanh chiếc xe sau khi sử dụng NMS đã giảm xuống còn 1

DỰ BÁO TRÊN NHIỀU FEATURE MAP [4]

YOLOv4 được phát triển từ YOLOv3, cho phép dự đoán trên nhiều feature map khác nhau Đối với các đối tượng có kích thước lớn, những feature ban đầu với kích thước nhỏ vẫn có khả năng dự đoán chính xác Trong khi anchor box giữ kích thước cố định, các feature map lớn hơn sau đó sẽ hỗ trợ trong việc dự đoán các đối tượng có kích thước nhỏ hơn.

Trong mô hình YOLO, các feature map có kích thước 416x416 sẽ cho ra output lần lượt là 13x13, 26x26 và 52x52 Mỗi cell của feature map sẽ áp dụng 3 anchor box để thực hiện dự đoán, dẫn đến việc tạo ra tổng cộng 9 anchor box khác nhau trong mô hình.

Bên cạnh đó mỗi feature map có kích thước SxS sinh ra anchor box=SxSx3 Vậy tổng số anchor box ở hình trên là:

Với số lượng lớn như trên là nguyên nhân chính gây ra tình trạng huấn luyện trên YOLO trở nên chậm lại.

HÀM LOSS FUNCTION [4]

Hàm lỗi trong YOLO được chia thành 2 phần:

• : Đo lường sai số của bounding box (Localization Loss)

Localization loss dùng để tính giá trị lỗi cho boundary box được dự đoán bao gồm offset x,y và chiều dài, rộng so với nhãn chính xác của chúng ta

Khi tính toán giá trị lỗi, cần chuẩn hóa kích thước ảnh về khoảng [0-1] cho tọa độ điểm tâm, thay vì tính trực tiếp trên kích thước ảnh Đồng thời, không nên dự đoán trực tiếp điểm tâm mà phải dự đoán giá trị lệch offset x,y so với ô vuông tương ứng Việc chuẩn hóa kích thước ảnh và dự đoán offset giúp mô hình hội tụ nhanh hơn so với việc dự đoán giá trị mặc định.

• : Đo lường sai số phân phối xác suất các classes (Confidence Loss)

Confidence loss phản ánh mức độ sai lệch giữa dự đoán của bounding box chứa đối tượng và nhãn thực tế trong ô vuông đó Độ sai lệch này được tính toán cho cả các ô vuông có chứa đối tượng và những ô vuông không chứa đối tượng.

Hình 17: Công thức hàm loss function

• : Được xác định bằng 1 nếu cell i chứa vật thể và ngược lại

• : Cho biết bounding box thứ j của cell i có phải là bouding box của vật thể được dự đoán hay không

• : : Điểm tin cậy của cell i

• : Điểm tin cậy dự đoán

• : Xác suất có điều kiện

• : Xác suất có điều kiện dự đoán

ỨNG DỤNG CỦA YOLO

Mô hình YOLO được áp dụng vào vào các trường hợp như:

• Xác định các vật thể phía trước giúp xe tự vận hành có thể cảnh báo cho người dùng và né tránh va chạm

• Phát hiện động vật hoang dã khác nhau trong rừng

• Hệ thống an ninh giám sát để thực thi an ninh trong một khu vực

• Hệ thống giao thông giúp phát hiện biển số và hình dáng của xe

• Hệ thống phát hiện gian lận trong các trò chơi điện tử.

TỔNG KẾT

YOLO là một thuật toán mạnh mẽ nhưng phức tạp, đòi hỏi xử lý tính toán cao để đạt hiệu quả tối ưu Trong quá trình huấn luyện, cần chia nhỏ batch_size để tránh tình trạng tràn RAM, vì batch_size quá lớn có thể gây ra vấn đề này Ngoài ra, cần có đủ RAM để xử lý số lượng anchor box sinh ra từ mỗi bức hình Thời gian xử lý mỗi bước trên YOLO cũng khá lâu, do đó việc chia nhỏ các bước sẽ giúp dễ dàng theo dõi và nắm bắt thông số hơn.

HUẤN LUYỆN YOLOv4

TẬP DỮ LIỆU

Tập dữ liệu được lấy từ trang:

Tập dữ liệu được nén bằng file zip bên trong bao gồm

• 15.000 (8.04GB) hình ảnh về con người được sử dụng dưới hình thức phi lợi nhuận được lưu trên 3 thư mục (CrowdHuman_train01, CrowdHuman_train02, CrowdHuman_train03)

• 4.370 (2.38GB) hình ảnh về con người được sử dụng dưới hình thức phi lợi nhuận được lưu trên thư mục CrowdHuman_val

• File Annotation_train.odgt bên trong chứa chú thích nhãn dán của 15.000 bức ảnh ở 3 thư mục (CrowdHuman_train01, CrowdHuman_train02, CrowdHuman_train03)

• File Annotation_val.odgt bên trong chứa chú thích nhãn dán của 4.370 bức ảnh ở thư mục CrowdHuman_val

Hình 18: Hình ảnh dữ liệu dùng để huấn luyện

CẤU HÌNH ĐỂ HUẤN LUYỆN

Tác giả không đưa ra cấu hình cụ thể cho quá trình huấn luyện nhưng đã khuyến khích sử dụng cấu hình gồm:

GPU (Bắt buộc): Các dòng NDVIA từ GTX 1080 trở về sau với dung lượng GPU trên 12GB

• Windows: từ Windows 7 trở về sau

• Ở MacOS tác giả không đưa ra thông số

Dựa trên các khuyến nghị từ tác giả, Google Colaboratory gần như đáp ứng đầy đủ nhu cầu của tôi, vì vậy tôi đã quyết định sử dụng Google Colaboratory để huấn luyện mô hình của mình.

SỬ DỤNG GOOGLE COLABORATORY ĐỂ HUẤN LUYỆN [10]

Google Colaboratory cho phép người dùng thực thi Python trên nền tảng đám mây mà không cần cài đặt hay cấu hình máy tính, mang lại nhiều lợi ích như khả năng chạy Python trên bất kỳ thiết bị nào có kết nối internet, dễ dàng chia sẻ và hợp tác trong nhóm, cùng với việc miễn phí sử dụng GPU (Nvidia K80s, T4s, P4s và P100s) và TPU cho các dự án Deep Learning Tuy nhiên, Google Colaboratory cũng có một số hạn chế, bao gồm việc dữ liệu chỉ có thể được cập nhật và sử dụng trong vòng 10-12 tiếng, sau đó sẽ bị mất hoàn toàn, và thời gian sử dụng GPU miễn phí chỉ từ 6-7 tiếng tùy vào tác vụ, với GPU không thể lựa chọn mà sẽ thay đổi liên tục.

Hình 19: Logo của Google Colaboratory

Với những ưu điểm nổi bật, em đã chọn Google Colaboratory để huấn luyện YOLOv4 Để khắc phục nhược điểm của việc mất dữ liệu, em đã tải file zip chứa dữ liệu lên Google Drive và kết nối với Google Colaboratory Tại đây, Google Colaboratory hoạt động như một máy tính ảo để xử lý dữ liệu, trong khi Google Drive đóng vai trò là nơi lưu trữ dữ liệu Để Google Colaboratory có thể truy cập dữ liệu trên Google Drive, em sẽ thực hiện việc mount drive bằng câu lệnh phù hợp.

Hình 20: Kết nối Google Colaboratory và Google Drive

Bắt đầu, để Google Colaboratory có thể chạy ổn định khi huấn luyện thì cần phải bật GPU của Google Colaboratory lên

Hình 21: Hình ảnh mở GPU trên Google Colaboratory

Kiểm tra xem GPU mà em được Google Colaboratory cho sử dụng miễn phí

Google Colaboratory cho phép người dùng kiểm tra và sử dụng GPU, trong đó có GPU Tesla T4 với phiên bản CUDA 11.2 Với GPU này, tôi đánh giá rằng nó đủ mạnh để thực hiện các tác vụ huấn luyện mô hình.

Sau khi kết nối với Google Drive, tôi đã thiết lập đường dẫn lưu trữ log và biểu đồ mAP để giữ lại dữ liệu trên Drive Tôi cũng giảm kích thước đầu vào xuống còn 416x416 để rút ngắn thời gian huấn luyện.

Hình 23: Địa chỉ lưu và thay đổi đầu vào của dữ liệu

Sử dụng source code có sẵn bên trong chứa các file bash về cài đặt thích hợp cho quá trình huấn luyện

Hình 24: Sử dụng source code có sẵn để cài đặt

Từ mã nguồn đã tải ở trên em chạy file prepare_data.sh để có thể lấy dữ liệu về và tạo ra file text chứa chú thích dữ liệu

Hình 25: Lấy dữ liệu bằng file bash

Tiếp theo em tải Darknet về để huấn luyện

Hình 26: Sử dụng mã nguồn mở của YOLO để huấn luyện

Cấu hình file Makelife trong thư mục đã tải ở trên theo từng GPU mà Google Colaboratory cho phép sử dụng

Hình 27: Cấu hình lại file Makelife cho phù hợp với các thông số

Quá trình huấn luyện sẽ tạo ra các file log và hình ảnh, được lưu trữ trong một thư mục Để đảm bảo an toàn cho dữ liệu, tôi sẽ tạo một thư mục backup trên Drive Do đó, cần phải có ít nhất 2GB dung lượng trống trên Drive để lưu trữ các file này.

To ensure an effective training process, I will utilize the pre-trained model "yolov4.conv.137" from the file prepare_training.sh, which serves as the storage location for the training files.

Hình 29: Sử dụng file bash để tải file pre-traind

Với số vòng lặp là 4000 vòng thời gian huấn luyện rơi vào hơn 6 tiếng

Hình 30: Bắt đầu huấn luyện

Hình 31: Các thông số bên trong quá trình huấn luyện

Khi quá trình hoàn thành sẽ sinh ra 7 file weight và được lưu trên thư mục backup với:

• yolov4-crowdhuman-414x414_last.weights: file weight cuối cùng sau khi huấn luyện hoàn tất Nếu chúng ta tiếp tục huấn luyện thì sử dụng file weight này

• yolov4-crowdhuman-414x414_final.weights: file weight hoàn tất quá trình huấn luyện

• yolov4-crowdhuman-414x414_best.weights: file weight được chọn là tốt nhất trong quá trình huấn luyện Đây là file weight sẽ được đưa vào hệ thống sử dụng

• yolov4-crowdhuman-414x414_1000.weights: file weight hoàn thành ở vòng lập thứ 1000

• yolov4-crowdhuman-414x414_2000.weights: file weight hoàn thành ở vòng lập thứ 2000

• yolov4-crowdhuman-414x414_3000.weights: file weight hoàn thành ở vòng lập thứ 3000

• yolov4-crowdhuman-414x414_4000.weights: file weight hoàn thành ở vòng lập thứ 4000

Trong quá trình huấn luyện file log sẽ được sinh ra chứa thông tin trong quá trình huấn luyện, ta có thể xem file khi đang huấn luyện

Hình 32: File log của quá trình huấn luyện sau khi hoàn thành

Bây giờ em sẽ sử dụng file weight tốt nhất để chạy thử

Hình 33: Chạy thử file weight tốt nhất với hình có sẵn

Hình 34: Kết quả quá trình chạy thử

Cùng với đó ta nhận được hình ảnh chart.png Đây là biểu đồ loss/mAP

Hình 35: Biểu đồ cho quá trình huấn luyện

Quá trình huấn luyện hoàn thành với mAP lên đến 78% và avg loss = 24.7803 ở 4000 vòng lặp Với những chỉ số trên mô hình được xem là thành công

XÂY DỰNG HỆ THỐNG

THIẾT KẾ HỆ THỐNG

Hình 36: Hình ảnh pipeline của hệ thống

Hệ thống phát hiện xâm nhập và thông báo cho người sử dụng qua tin nhắn telegram bằng học sâu sẽ được thực hiện qua 6 bước:

Bước đầu tiên trong quy trình là đọc dữ liệu từ camera và hiển thị trên màn hình bằng thư viện OpenCV trong Python Thư viện này hỗ trợ người dùng trong việc xử lý hình ảnh và phát triển ứng dụng đồ họa theo thời gian thực Trong hệ thống này, OpenCV được sử dụng để mở camera và thực hiện các thao tác trong thời gian thực.

• Bước 2: Người sử dụng sẽ định nghĩa vùng nguy hiểm cho khung hình được mở từ bước 1

• Bước 3: Xác định đối tượng cần phát hiện Ở hệ thống này em chọn đối tượng là con người

• Bước 4: Sử dụng YOLO để phát hiện đối tượng từ camera Nếu như

YOLO phát hiện được đối tượng thì phải cần tìm tâm của đối tượng

• Bước 5: Kiểm tra xem tâm của đối tượng mình vừa tìm ở bước 4 có nằm trong vùng nguy hiểm được vẽ ở bước 2 hay không

• Bước 6: Nếu ở bước 5 tâm của đối tượng nằm trong vùng được chọn ở bước 2 thì sẽ thông báo trên màn hình và gửi thông báo đến telegram đến người dùng.

TẠO RA BOTCHAT TELEGRAM [11]

Trong hệ thống này, em mong muốn khi có đối tượng xâm nhập vào vùng nguy hiểm, sẽ có thông báo nhanh chóng gửi đến người dùng để kịp thời xử lý Mặc dù hiện nay có nhiều mạng xã hội phổ biến, em đã chọn Telegram làm nền tảng chính để YOLO gửi thông báo, nhờ vào những ưu điểm vượt trội của nó.

• Dễ dàng tạo bot không cần thông qua bên thứ 3

• Là mạng xã hội dành riêng cho nhắn tin

• Token tồn tại lâu hơn các mạng xã hội khác

• Không có điều kiện ràng buộc khi tạo bot

Để tạo botchat trên Telegram, bạn không cần sử dụng dịch vụ bên thứ ba mà chỉ cần sử dụng bot có sẵn trên nền tảng, được gọi là "BotFather" (hay còn gọi là bot cha).

Hình 38: Tạo botchat trên nền tảng mạng xã hội Telegram

Sau khi tạo và đặt tên cho bot chat trong hệ thống, "BotFather" sẽ gửi thông tin chi tiết về bot, bao gồm token cần thiết để kết nối bot chat với tài khoản người dùng.

Hình 39: Token của botchat được gửi về sau khi tạo bot

Botchat được tích hợp với thư viện “telegram” trên Python, cho phép gửi tin nhắn tự động Khi có đối tượng xâm nhập vào vùng nguy hiểm, botchat sẽ ngay lập tức gửi thông báo đến người dùng qua chat_id, kèm theo một bức ảnh và chú thích “Có xâm nhập, nguy hiểm!”.

Lưu ý với token của botchat và chat_id của người dùng là những thứ cần được bảo mật không nên để lộ ra bên ngoài.

XÂY DỰNG HỆ THỐNG YOLODETECT

4.3.1 Xác định đối tượng:

Để xác định đối tượng bằng YOLO, bạn cần cung cấp cho nó hai tệp quan trọng: tệp cấu hình (cfg) và tệp trọng số (weight) Đây là những tệp mà bạn đã sử dụng trong quá trình huấn luyện và chúng được tạo ra sau khi quá trình huấn luyện hoàn tất.

Hình 40: Thêm 2 file nhận được sau khi huấn luyện để sử dụng

Sau khi YOLO đọc được file weight em sẽ xác định đối tượng

Hình 41: Thiết lặp loại bỏ các bounding box không phù hợp

Hình ảnh từ camera sẽ được chuyển đổi thành các khung hình và khối dư, sau đó chia thành lưới kích thước 416x416 để tăng tốc độ xác định đối tượng.

Khi xác định đối tượng bằng YOLO, nhiều bounding box có thể được sinh ra cho cùng một đối tượng Để giảm thiểu số lượng bounding box thừa và chỉ giữ lại một bounding box chính, thuật toán NMS sẽ được sử dụng Trong bài viết này, ngưỡng nms_threshold được chọn là 0,4 và ngưỡng tin tưởng conf_threshold là 0,5, nhằm tối ưu hóa tốc độ xử lý.

Hình 42: Tùy chỉnh các ngưỡng conf_threshold và nms_threshold

Sau khi lọc các bounding box và chọn ra một bounding box phù hợp bao quanh đối tượng, tôi sẽ tiến hành vẽ bounding box đó để xác định rõ ràng đối tượng.

Hình 43: Vẽ bounding box đã lọc lên đối tượng

Trong khi vẽ bouding box em có thêm vào một label là tên của đối tượng mặc định ở đây là “person”

Để cải thiện độ chính xác trong việc xác định vị trí của đối tượng, tôi đã thêm hàm centroid nhằm xác định tâm của đối tượng Điều này là cần thiết vì có những trường hợp đối tượng đưa tay vào vùng nguy hiểm nhưng chưa thực sự chạm vào, dẫn đến việc bounding box bao quát toàn bộ đối tượng và gây ra nhầm lẫn trong việc nhận diện.

Khi centroid nằm trong vùng nguy hiểm, điều này cho thấy trọng tâm của đối tượng đã xâm nhập vào khu vực nguy hiểm, từ đó cho phép xác định đối tượng cần được cảnh báo.

Khi điểm centroid của đối tượng vào vùng nguy hiểm, hệ thống sẽ gửi thông báo Có hai hình thức thông báo: một là hiển thị trên màn hình với dòng chữ “warning!!!” màu đỏ, và hai là gửi một thông báo kèm hình ảnh và văn bản đến tài khoản Telegram của người sử dụng.

Hình 44: Thiết lặp thông báo cho hệ thống

Khi có đối tượng trong khu vực nguy hiểm, người dùng sẽ nhận thông báo liên tục trên tài khoản Telegram với tần suất 3 giây một lần cho đến khi đối tượng rời khỏi khu vực đó.

4.3.3 Mở camera và tạo vùng nguy hiểm: Để mở camera em sử dụng hai thư viện là OpenCV và imutils

Trong quá trình sử dụng OpenCV em đã sử dụng nhiều camera để kiểm tra và nhận thấy:

• OpenCV có thể mở được tất cả các camera khi kết nối đến

• OpenCV ổn đinh ở mức 45 khung hình trên mỗi giây (45FPS)

Khi sử dụng máy ảnh như Fujifilm XT5 và Canon R6 để kiểm tra, OpenCV chỉ kết nối mà không thể mở hình ảnh, dẫn đến việc chỉ hiển thị màn hình đen.

Vì nguyên nhân trên em đã sử dụng thêm thư viện là imutils để có thể hỗ trợ thêm

Khi sử dụng camera, có nhiều yếu tố như mưa bão, gió lớn hoặc tác động từ con người có thể làm thay đổi khung hình Để nâng cao khả năng kiểm soát, hệ thống sẽ tự động vẽ lại vùng nguy hiểm trên khung hình, giúp người sử dụng dễ dàng theo dõi và quản lý tình huống một cách hiệu quả.

Sử dụng sự kiện chuột để người dùng đánh dấu các điểm nguy hiểm trên hệ thống, người dùng có thể sử dụng chuột trái để lưu lại các điểm này vào biến points Những điểm được đánh dấu sẽ hiển thị bằng màu đỏ, giúp dễ dàng nhận diện vùng nguy hiểm.

Tiếp theo đó em sử dụng hàm polylines vẽ kết nối các điểm của người dùng Các đường vẽ sẽ có màu xanh dương

Hệ thống này được thiết kế để phục vụ mọi đối tượng, bao gồm cả người lớn tuổi và những người có thị giác kém, nhằm giúp họ dễ dàng chọn vùng nguy hiểm Người dùng chỉ cần nhấn phím “d” để kết thúc việc chọn vùng, và hàm detect sẽ được kích hoạt sau khi hoàn tất Để tắt hệ thống, người dùng chỉ cần nhấn phím “q”.

Hình 47: Thêm nút ấn thuận tiện thao tác.

TRIỂN KHAI HỆ THỐNG VÀ KẾT QUẢ

Khi mở hệ thống, trên màn hình sẽ xuất hiện một cửa sổ là camera của mình

Hình 48: Cửa sổ hệ thống

Để vẽ và chọn vùng nguy hiểm, người dùng chỉ cần nhấn chuột trái và kết thúc quá trình bằng cách nhấn nút “d” Việc chọn nút “d” để hoàn tất quá trình vẽ nhằm tạo sự thuận tiện cho người lớn tuổi, thay vì yêu cầu nhấn vào điểm đầu.

Hình 49: Cửa sổ hệ thống được người dung vẽ vùng nguy hiểm

Khi quá trình vẽ vùng nguy hiểm hoàn tất, hệ thống sẽ ngay lập tức bắt đầu xác định đối tượng Khi tâm của đối tượng xâm nhập vào vùng nguy hiểm, kết quả cuối cùng sẽ là một cảnh báo xuất hiện ngay trên màn hình.

Hình 50: Cảnh báo xuất hiện ở góc trên bên trái của sổ hệ thống

Ngoài việc hiển thị cảnh báo trên màn hình, người dùng cũng sẽ nhận được tin nhắn từ botchat trên tài khoản Telegram của mình để thông báo về các rủi ro.

Hình 51: Cảnh báo tin nhắn qua Telegram cho người sử dụng

Ngày đăng: 10/10/2023, 15:17

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[2] Phân loại neural network – Quang Tran's Blogs (wordpress.com) Sách, tạp chí
Tiêu đề: Phân loại neural network
Tác giả: Quang Tran
Nhà XB: wordpress.com
[14] pjreddie/darknet: Convolutional Neural Networks (github.com) Sách, tạp chí
Tiêu đề: Convolutional Neural Networks
Tác giả: pjreddie
Nhà XB: github.com
[1] Neural Network là gì? Ứng dụng thực tế của mạng thần kinh (meeyland.com) Khác
[3] Tìm hiểu về YOLO trong bài toán real-time object detection (viblo.asia) [4] Khoa học dữ liệu (phamdinhkhanh.github.io) Khác
[5] Residual Block Explained | Papers With Code Khác
[6] Object detection: Bounding box regression with Keras, TensorFlow, and Deep Learning - PyImageSearch Khác
[7] Hiểu về độ đo IoU trong nhận diện thực thể - Trí tuệ nhân tạo (trituenhantao.io) Khác
[8] Non Maximum Suppression: Theory and Implementation in PyTorch (learnopencv.com) Khác
[11] How to Create a Telegram Bot | Toptal Khác
[12] How To Create Telegram Bot Step by Step | Part1:bot token - YouTube [13] Google Colab Khác

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w