BÁO cáo TIỂU LUẬN NHẬN DIỆN BIỂN báo GIAO THÔNG BẰNG YOLOv5

43 368 2
BÁO cáo TIỂU LUẬN NHẬN DIỆN BIỂN báo GIAO THÔNG BẰNG YOLOv5

Đ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

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN ĐIỆN TỬ BỘ MÔN KỸ THUẬT MÁY TÍNH - VIỄN THƠNG BÁO CÁO TIỂU LUẬN NHẬN DIỆN BIỂN BÁO GIAO THÔNG BẰNG YOLOv5 NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ - VIỄN THÔNG Sinh viên: VÕ TRẦN CHƯƠNG MSSV: 18161193 VŨ HUY HOÀNG MSSV: 18161225 TP HỒ CHÍ MINH – 6/2021 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐIỆN ĐIỆN TỬ BỘ MƠN KỸ THUẬT MÁY TÍNH - VIỄN THƠNG BÁO CÁO TIỂU LUẬN NHẬN DIỆN BIỂN BÁO GIAO THÔNG BẰNG YOLOv5 NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ - VIỄN THÔNG Sinh viên: VÕ TRẦN CHƯƠNG MSSV: 18161193 VŨ HUY HOÀNG MSSV: 18161225 Hướng dẫn: PGS.TS TRƯƠNG NGỌC SƠN TP HỒ CHÍ MINH – 6/2021 Stt BẢNG NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Nội dung thực Nhận xét Nhận xét tổng quát: ……………………………………………………………………………………… ……………………………………………………………………………………… ……………………………………………………………………………………… LỜI CẢM ƠN Trước tiên nhóm chúng em xin dành lời cảm ơn chân thành đến Thầy Cô khoa Điện - Điện tử truyền đạt, cung cấp cho chúng em kiến thức cần thiết để vận dụng thực tiễn đề tài Và đặc biệt PGS.TS Trương Ngọc Sơn tận tình hướng dẫn, giúp đỡ cho chúng em suốt trình thực tiểu luận, thầy nhiệt tình hướng dẫn giai đoạn cần làm, cần chuẩn bị cách để tiếp cận nghiên cứu đề tài hiệu Do kiến thức bị giới hạn nên q trình thực tiểu luận chúng em khơng thể tránh khỏi sai sót Kính mong thầy dẫn thêm để nhóm rút kinh nghiệm, hồn thành tốt tiểu luận mơn học Chúng em xin chân thành cảm ơn ! MỤC LỤC LỜI CẢM ƠN DANH MỤC HÌNH ẢNH CHƯƠNG GIỚI THIỆU 1.1 GIỚI THIỆU 1.2 MỤC TIÊU CỦA ĐỀ TÀI 1.3 GIỚI HẠN ĐỀ TÀI .8 1.4 PHƯƠNG PHÁP NGHIÊN CỨU 1.5 BỐ CỤC ĐỀ TÀI CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 KIẾN TRÚC MẠNG YOLO 2.2 GRID SYSTEM 10 2.3 KHÁI NIỆM VỀ CHỈ SỐ IOU VÀ THUẬT TOÁN NON-MAX SUPPRESSION 13 2.4 GÁN NHÃN CÁC MẪU 14 2.5 HÀM MẤT MÁT 16 2.6 NGÕ RA 17 2.7 THUẬT TOÁN YOLOV5 18 2.8 CẤU TRÚC NHẬN DIỆN VẬT THỂ CỦA YOLOV5 .18 2.9 ĐẶC ĐIỂM CỦA YOLOV5 VỚI CÁC PHIÊN BẢN TRƯỚC CỦA YOLO .19 CHƯƠNG 3: THIẾT KẾ HỆ THỐNG NHẬN DIỆN TRÊN VIDEO .20 3.1 CHUẨN BỊ FOLDER TRAINING DATA 20 3.2 THIẾT LẬP MÔI TRƯỜNG ĐỂ HUẤN LUYỆN VÀ NHẬN DẠNG BIỂN BÁO GIAO THÔNG 25 3.3 TRAINING 29 CHƯƠNG KẾT QUẢ 31 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .37 5.1 KẾT LUẬN .37 5.1.1 Ưu điểm 37 5.1.2 Nhược điểm 37 5.2 HƯỚNG PHÁT TRIỂN 37 PHỤ LỤC 39 TÀI LIỆU THAM KHẢO 41 DANH MỤC HÌNH ẢNH 10 11 12 13 15 16 17 22 22 23 23 24 24 29 30 31 32 32 33 33 34 35 35 36 36 CHƯƠNG GIỚI THIỆU 1.1 Giới thiệu Với phát triển mạnh mẽ công nghệ 4.0, Artificial Intelligence (trí tuệ nhân tạo) hay cụ thể Machine Learning (máy học) bước phát triển không ngừng Các ứng dụng lĩnh vực ngày áp dụng nhiều vào đời sống người như: Robot giúp việc, hệ thống dịch thuật, chatbox, phân loại sản phẩm,… Mạng Nơron học sâu (Deep learning Network) lĩnh vực nghiên cứu thuật tốn, chương trình máy tính để máy tính học tập đưa dự đốn người Nó ứng dụng vào nhiều ứng dụng khác khoa học, kỹ thuật, lĩnh vực đời sống khác ứng dụng phân loại phát đối tượng Một ví dụ điển hình CNN (Convolutional Neural Network) áp dụng để nhận dạng tự động, tìm hiểu mẫu phân biệt từ ảnh cách xếp chồng liên tiếp lớp lên nhiều ứng dụng, CNN coi trình phân loại ảnh mạnh thúc đẩy công nghệ lĩnh vực thị giác máy tính, làm địn bẩy cho q trình học máy Nhưng bên cạnh đó, để phân loại đối tượng cơng nghệ CNN tiêu tốn cực lớn tài nguyên băng thông, nhớ khả xử lý phần cứng Để giảm thiểu tài ngun tiêu hao này, thuật tốn, mơ hình giải thuật theo thời gian đời ngày nhiều có mơ hình YOLOv5 cho toán phân loại vật thể, cụ thể ứng dụng vào đề tài “Phân loại biển báo giao thơng” 1.2 Mục tiêu đề tài - Tìm hiểu Deep Learning ứng dụng - Hiểu rõ sở lý thuyết, kiến trúc mơ hình YOLO cho toán nhận diện vật thể - Sử dụng thư viện hỗ trợ, môi trường ảo để thực thi mơ hình 1.3 Giới hạn đề tài Trong đề tài nhận biết 20 loại biển báo khác Hệ thống dừng lại việc nghiên cứu, chưa thể áp dụng thị trường 1.4 Phương pháp nghiên cứu - Thu thập tài liệu, tham khảo ứng dụng liên quan có trước - Dựa các kiến thức đã học về cách huấn luyê ̣n mô ̣t mạng nơ-ron - Đọc thêm tài liê ̣u và tra cứu mạng - Tham khảo ý kiến thực theo hướng dẫn giảng viên 1.5 Bố cục đề tài - Chương 1: Tổng quan Ở chương này, trình bày mục tiêu, giới hạn đề tài, phương pháp nghiên cứu, bố cục đặt vấn đề - Chương 2: Cơ sở lý thuyết Ở chương này, trình bày hình thành phát triển Yolo va thuật toán Yolov5 - Chương 3: Thiết kế hệ thống Ở chương này, trình bày sơ đồ hoạt động, thiết kế phần mềm, chức hoạt động phần mềm - Chương 4: Kết thực Ở chương này, trình bày kết đạt sau thiết kế thi công - Chương 5: Kết luận hướng phát triển Ở chương tổng kết lại, trình bày ưu điểm, khuyết điểm trình nghiên cứu hướng phát triển đề tài - Phụ lục - Tài liệu tham khảo CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Kiến trúc mạng Yolo Kiến trúc YOLO bao gồm: base network mạng convolution làm nhiệm vụ trích xuất đặc trưng Phần phía sau Extra Layers áp dụng để phát vật thể feature map base network Base network YOLO sử dụng chủ yếu convolutional layer fully conntected layer thể hình 2-1 Các kiến trúc YOLO đa dạng tùy biến thành version cho nhiều input shape khác Hình 2-1 Sơ đồ kiến trúc mạng YOLO Thành phần Darknet Architechture gọi base network có tác dụng trích suất đặc trưng Output base network feature map có kích thước 7x7x1024 sử dụng làm input cho Extra layers có tác dụng dự đốn nhãn tọa độ bounding box vật thể Trong YOLO version 3, áp dụng mạng feature extractor darknet-53 hình 2-2 Mạng gồm 53 convolutional layers kết nối liên tiếp, layer theo sau batch normalization activation Leaky Relu Để giảm kích thước output sau convolution layer, down sample sử dụng filter với kích thước Mẹo có tác dụng giảm thiểu số lượng tham số cho mơ hình [-1, 9, BottleneckCSP, [256]], [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16 [-1, 9, BottleneckCSP, [512]], [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 [-1, 1, SPP, [1024, [5, 9, 13]]], ] # YOLOv5 head head: [[-1, 3, BottleneckCSP, [1024, False]],  # 9 [-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 6], 1, Concat, [1]],  # cat backbone P4 [-1, 3, BottleneckCSP, [512, False]],  # 13 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 4], 1, Concat, [1]],  # cat backbone P3 [-1, 3, BottleneckCSP, [256, False]], [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 18 (P3/8-small) [-2, 1, Conv, [256, 3, 2]], [[-1, 14], 1, Concat, [1]],  # cat head P4 [-1, 3, BottleneckCSP, [512, False]], [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 22 (P4/16-medium) [-2, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]],  # cat head P5 [-1, 3, BottleneckCSP, [1024, False]], [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 26 (P5/32-large) 28 [[], 1, Detect, [nc, anchors]],  # Detect(P5, P4, P3) ] Download file coco128.yaml chỉnh sửa tên nhãn lớp, sau đổi tên file thành custom_data.yaml lưu file thư mục data google colab train:  /traindata/images/train/  val:  /traindata/images/val/  # number of classes nc: 20 # class names  names: [ 'Left', 'Right', 'Stop' , 'Straight' , 'Straight_Ri ght' , 'Straight_Left' , 'R305' , 'P.112' , 'Slow' , 'Limit_3 0' , 'Limit_60' , 'Main road' , 'Dangerous' , 'Roundabout' ,  'Cross Road , 'No Left Turn','Disabled Person' , 'No parking'  , 'Two Way' , 'W.207a'] 3.3 Training Tiếp theo để xác định cấu hình kiến trúc mơ hình YOLOv5 ta viết tệp cấu hình mơ hình cho custom object detector Chọn base model (mơ hình sở) nhỏ nhất, nhanh YOLOv5 YOLOv5 đề xuất versions theo hình 3-7 Hình 3-7 Các version YOLOv5 APtest biểu thị kết máy chủ COCO test-dev2017, tất kết AP khác, biểu thị độ xác val2017, size(pixels) 640 Params (M) biến 29 thu nhận chương trình FLOPs thước hiệu suất máy tính Với data và custom_data.yaml files, ta sẵn sàng để huấn luyện, để bắt đầu huấn luyện, ta chạy the training command theo tùy chọn sau: - img: xác định kích thước hình ảnh đầu vào - batch: số ảnh để load vào (16-32) lần - epochs: số lần học - data: đặt đường dẫn đến tệp yaml - cfg: định cấu hình mơ hình - weights: định đường dẫn tùy chỉnh đến weights - name: tên kết - nosave: lưu điểm kiểm tra cuối - cache: hình ảnh nhớ cache để train nhanh Tiến hành huấn luyện nhận dạng biển báo giao thơng YOLOv5 thể hình 3-8 python train.py  img 640  batch 10  epochs 2000  data cus tom_data.yaml  weights yolov5s.pt  nosave  cache 30 Hình 3-8 Quá trình huấn luyện YOLOv5 CHƯƠNG KẾT QUẢ Nhận diện biển báo giao thông cách quay video Đầu tiên quay lại hình ảnh biển báo giao thơng hình 4-1 31 Hình 4-1 Biển báo giao thông cắt từ video.mp4 Upload video.mp4 vào google colab để lưu lại xuất kết dự đoán YOLOv5 !python detect.py  weights runs/train/exp/weights/last.pt -img 640  conf 0.25  source  /video.mp4 Hình 4-2 thể YOLOv5 nhận dạng labels biển báo video 32 Hình 4-2 Nhận dạng labels biến báo video Sau kết lưu lại ta vào đường dẫn yolov5 →runs→dectect hình 4-3 để xem kết nhận diện Hình 4-3 Đường dẫn xuất kết video Kết cắt từ video.mp4 thể hình 4-4,5,6,7,8,9,10 33 Hình 4-4 Kết nhận diện biển báo thẳng rẽ phải Hình 4-5 Kết nhận diện biển báo thẳng rẽ trái 34 Hình 4-6 Hình biển báo: rẽ phải, rẽ trái, thẳng, cấm ngược chiều cắt từ video.mp4 35 Hình 4-7 Biển báo R305(cho phép người bộ), thẳng rẽ phải, rẽ trái, giới hạn 30km/h Hình 4-8 Biển báo đường ưu tiên, cảnh báo, chậm, giới hạn 60km/h 36 Hình 4-9 Biển báo cấm người bộ, chiều, nơi giao nhau, cấm dừng đỗ xe Hình 4-10 Biển báo người khuyết tật, cấm rẽ trái, vòng xoay, W207.a (đường giao không ưu tiên) 37 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1 Kết luận 5.1.1 Ưu điểm Bước đầu xây dựng mơ hình huấn luyện để phát nhận dạng đối tượng biển báo cách sử dụng thuật toán mạng YOLOv5 để hỗ trợ việc phát nhận dạng biển báo Sử dụng Google Colab – Platform mạnh mẽ để build train mơ hình học máy, học sâu giúp tiết kiệm tối đa thời gian GPU cung cấp Google Kết nhận diện, xác suất mơ hình image classification dự báo cho biển báo giao thơng xác tương đối ổn định Độ tin cậy trung bình hệ thống dự đoán với 20 class từ 70% trở lên Kết trình phụ thuộc nhiều vào trình thu thập liệu huấn luyện, phát hiện, nhận dạng 5.1.2 Nhược điểm Do thời gian tìm hiểu xây dựng hệ thống kiến thức hạn chế, thử với 20 loại biển báo khác thêm vào đề tài lĩnh vực nghiên cứu lớn nên hệ thống hoạt động dừng mức nghiên cứu, chưa thể đưa áp dụng thực tế chưa đầy đủ chức để tới tay người dùng Cần có thêm thời gian nghiên cứu để hồn thiện chương trình hơn, tìm thêm nhiều nguồn hình ảnh biển báo giao thơng khác mạng để huấn luyện nhận dạng nhiều biển báo khác, bên cạnh ứng dụng đề tài vào thực tiễn 5.2 Hướng phát triển Dựa vào phát triển cơng nghệ mạnh mẽ tương lai sử dụng phiên YOLO nhiều mạng khác Single Shot 38 Detector, RentiaNet, CenterNet,…để huấn luyện nhận dạng nhiều nhóm biển báo giao thơng cách xác nhanh gọn nhằm: - Cải tiến chất lượng huấn luyện phát ảnh biển báo - Mở rộng sở liệu biển báo giao thông - Cải tiến phương pháp giải trường hợp biển báo bị hư hỏng bị chồng lấp - Nâng cấp hoàn thiện khả hệ thống trở thành hệ thống nhận dạng đưa cảnh báo tức thời cho người tham gia giao thông chương trình hồn chỉnh 39 PHỤ LỤC Trích dẫn source code chương trình đề tài: !git clone https://github.com/ultralytics/yolov5  # clone rep o %cd yolov5 %pip install -qr requirements.txt  # install dependencies import torch from IPython.display import Image, clear_output  # to display  images clear_output() print(f"Setup complete. Using torch {torch. version } ({tor ch.cuda.get_device_properties(0).name if torch.cuda.is_availa ble() else 'CPU'})") torch 1.5.0+cu101 _CudaDeviceProperties(name='Tesla P100PCIE-16GB', major=6, minor=0, total_memory=16280MB, multi_processor_count=56) # Download Custom Dataset from Roboflow # Replace [YOUR LINK HERE] !unzip -q  /traindata.zip -d  / # parameters nc: 20 # number of classes depth_multiple: 0.33  # model depth multiple width_multiple: 0.50  # layer channel multiple # anchors anchors: [116,90, 156,198, 373,326]  # P5/32 [30,61, 62,45, 59,119]  # P4/16 [10,13, 16,30, 33,23]  # P3/8 # YOLOv5 backbone backbone: # [from, number, module, args] [[-1, 1, Focus, [64, 3]],  # 0-P1/2 [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4 [-1, 3, BottleneckCSP, [128]], [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8 [-1, 9, BottleneckCSP, [256]], [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16 [-1, 9, BottleneckCSP, [512]], [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 40 [-1, 1, SPP, [1024, [5, 9, 13]]], ] # YOLOv5 head head: [[-1, 3, BottleneckCSP, [1024, False]],  # 9 [-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 6], 1, Concat, [1]],  # cat backbone P4 [-1, 3, BottleneckCSP, [512, False]],  # 13 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 4], 1, Concat, [1]],  # cat backbone P3 [-1, 3, BottleneckCSP, [256, False]], [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 18 (P3/8-small) [-2, 1, Conv, [256, 3, 2]], [[-1, 14], 1, Concat, [1]],  # cat head P4 [-1, 3, BottleneckCSP, [512, False]], [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 22 (P4/16medium) [-2, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]],  # cat head P5 [-1, 3, BottleneckCSP, [1024, False]], [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]],  # 26 (P5/32large) [[], 1, Detect, [nc, anchors]],  # Detect(P5, P4, P3) ] train:  /traindata/images/train/  val:  /traindata/images/val/  # number of classes nc: 20 # class names  names: [ 'Left', 'Right', 'Stop' , 'Straight' , 'Straight_Ri ght','Straight_Left' , 'R305' , 'P.112' , 'Slow' , 'Limit_30'  , 'Limit_60' , 'Main road' , 'Dangerous' , 'Roundabout' , 'Cr oss Road , 'No Left Turn','Disabled Person' , 'No parking' ,  'Two Way' , 'W.207a'] python train.py  img 640  batch 10  epochs 2000  data cus tom_data.yaml  weights yolov5s.pt  nosave  cache !python detect.py  weights runs/train/exp/weights/last.pt -img 640  conf 0.25  source  /video.mp4 41 TÀI LIỆU THAM KHẢO [1] Joseph Redmon, Santosh Divvalay, Ross Girshick, Ali Farhadiy, You Only Look Once: Unified, Real-Time Object Detection, University of Washington, 2016 [2] Yi-Qi Huang, Jia-Chun Zheng, Shi-Dan Sun, Cheng-Yi Chen, Optimized YOLOv3 Algorithm and Its Application in Traffic Flow Detections, 2020 [3] Vũ Hữu Tiệp, “Machine Learning bản”, Nhà xuất khoa học kỹ thuật, 2016 [4] Tsung-Yi Lin, Piotr Dollár, Ross Girshick, Kaiming He, Bharath Hariharan, Serge Belongie, Feature Pyramid Networks for Object Detectio, Facebook AI Research (FAIR), Cornell University and Cornell Tech, 2017 [5] Shu Liu, Lu Qi, Haifang Qin, Jianping Shi, Jiaya Jia, Path Aggregation Network for Instance Segmentation, The Chinese University of Hong Kong, Peking University, SenseTime Research, YouTu Lab, Tencent, 2018 [6] Joseph Redmon, Ali Farhadi, YOLOv3: An incremental Improvement, University of Washington, 2018 [7] Mykola, GTSRB - German Traffic Sign Recognition Benchmark, https://www.kaggle.com/meowmeowmeowmeowmeow/gtsrb-german-traffic-sign, 2018 [8] Mì AI, Dữ liệu biển báo giao thông Việt Nam, https://miai.vn/thu-vien-mi-ai/, 2021 42 ... ĐIỆN TỬ BỘ MƠN KỸ THUẬT MÁY TÍNH - VIỄN THƠNG BÁO CÁO TIỂU LUẬN NHẬN DIỆN BIỂN BÁO GIAO THÔNG BẰNG YOLOv5 NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ - VIỄN THÔNG Sinh viên: VÕ TRẦN CHƯƠNG MSSV: 18161193... trình huấn luyện YOLOv5 CHƯƠNG KẾT QUẢ Nhận diện biển báo giao thông cách quay video Đầu tiên quay lại hình ảnh biển báo giao thơng hình 4-1 31 Hình 4-1 Biển báo giao thơng cắt từ video.mp4 Upload... 4-4 Kết nhận diện biển báo thẳng rẽ phải Hình 4-5 Kết nhận diện biển báo thẳng rẽ trái 34 Hình 4-6 Hình biển báo: rẽ phải, rẽ trái, thẳng, cấm ngược chiều cắt từ video.mp4 35 Hình 4-7 Biển báo R305(cho

Ngày đăng: 04/09/2021, 06:44

Từ khóa liên quan

Mục lục

  • LỜI CẢM ƠN

  • DANH MỤC HÌNH ẢNH

  • CHƯƠNG 1. GIỚI THIỆU

    • 1.1 Giới thiệu

    • 1.2 Mục tiêu của đề tài

    • 1.3 Giới hạn đề tài

    • 1.4 Phương pháp nghiên cứu

    • 1.5 Bố cục đề tài

    • CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

      • 2.1 Kiến trúc mạng Yolo

      • 2.2 Grid system

      • 2.3 Khái niệm về chỉ số IoU và thuật toán Non-max suppression

      • 2.4 Gán nhãn các mẫu

      • 2.5 Hàm mất mát

      • 2.6 Ngõ ra

      • 2.7 Thuật toán Yolov5

      • 2.8 Cấu trúc nhận diện vật thể của YOLOv5

      • 2.9 Đặc điểm của YOLOv5 với các phiên bản trước của YOLO

      • 3.1 Chuẩn bị folder training data

      • 3.2 Thiết lập môi trường để huấn luyện và nhận dạng biển báo giao thông

      • CHƯƠNG 4. KẾT QUẢ

      • CHƯƠNG 5 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

        • 5.1 Kết luận

          • 5.1.1 Ưu điểm

Tài liệu cùng người dùng

Tài liệu liên quan