3.2.4.1 Arduino Uno
50 Arduino Uno là một bo mạch thiết kế với bộ xử lý trung tâm là vi điều khiển AVR Atmega328. Cấu tạo chính của Arduino Uno bao gồm các phần:
• Cổng USB: là cổng giao tiếp để upload code từ máy tính lên vi điều khiển. Đồng thời nó cũng là giao tiếp serial để truyền dữ liệu giữa vi điều khiển và máy tính.
• Jack nguồn: để chạy Arduino có thể lấy nguồn từ USB hoặc nguồn ngoài từ 9V đến 12 V.
• Có 14 chân vào/ra số đanh từ 0 đến 13, ngoài ra có một chân nối đất (GND) và một chân điện áp tham chiếu (AREF).
• Vi điều khiển AVR: là bộ xử lý trung tâm của toàn bo mạch.
Hình 3.10 Sơ đồ chân Arduino Uno
Thông số kỹ thuật:
Bảng 3.4 Thông số kỹ thuật Arduino Uno
Vi xử lý Atmega328 Điện áp hoạt động 5V
Điện áp đầu vào 7-12V Điện áp đầu vào (giới hạn) 6-20V
Chân vào/ra (I/O) 14 chân (6 chân có thể cho đầu ra PWM) Chân vào tương tự 6
Dòng điện cho mỗi chân I/O 40mA Dòng điện chân nguồn 3.3V 50mA
51 Bộ nhớ trong 32 KB (Atmega328)
SRAM 2 KB (Atmega328)
EEFROM 1 KB (Atmega328)
Xung nhịp 16MHZ
3.2.4.2 Mạch điều khiển 16 Channel PWM PCA9685
Mạch điều khiển 16 channel PWM PCA9685 được sử dụng để có thể xuất ra 16 xung PWM từ 16 cổng khác nhau thông qua giao tiếp I2C sử dụng IC PCA9685, giúp điều khiển đồng thời 16 RC Servo hoặc Dimmer 16 thiết bị đồng thời,… Mạch điều khiển 16 Channel PWM PCA9685 có cấu trúc phần cứng đơn giản (hình 3.6) cũng như bộ thư viện có sẵn trên Arduino rất dễ dàng sử dụng và kết nối.
Hình 3.11 Mạch điều khiển 16 Channel PWM PCA9685
Thông số kỹ thuật:
Bảng 3.5 Thông số kỹ thuật mạc điều khiển 16 Channel PWM PCA9685
IC chính PCA9685
Điện áp sử dụng 2.3 - 5.5VDC
Số kênh PWM 16 kênh, tần số: 40 – 1000Hz Độ phân gải PWM 12 bit
Giao tiếp I2C
52
3.2.4.3 Động cơ Servo SG90
Động cơ servo SG90 có kích thước nhỏ, được sử dụng nhiều trong các mô hình nhỏ hoặc các cơ cấu kéo không cần đến lực năng. Động cơ servo SG90 có tốc độ phản ứng nhanh, các bánh răng được làm bằng nhựa nên cần lưu ý khi nâng tải nặng có thể làm hư bánh răng, động cơ RC Servo SG90 có tích hợp sẵn Driver điều khiển động cơ bên trong nên có thể dễ dàng điều khiển góc quay bằng phuwong pháp điều chế độ rộng xung.
Hình 3.12 Động cơ Servo SG90
Thông số kỹ thuật:
Bảng 3.6 Thông số kỹ thuật động cơ Servo SG90
Khối lượng 9g
Kích thước 22.2×11.8× 32 mm
Moment xoắn 1.8kg/cm
Tốc độ hoạt động 60 độ trong 0.1 giây Điện áp hoạt động 4.8 (~5V)
Nhiệt độ hoạt động 0℃ - 55℃
3.2.4.4Mạch điều khiển động cơ L298N
Mạch điều khiển động cơ DC L298N có khả năng điều khiển 2 động cơ DC, dòng tối đa 2A mỗi động cơ, mạch tích hợp diode bảo vệ và IC nguồn 7805 giúp cấp nguồn 5VDC cho các module khác (chỉ sử dụng 5V này nếu nguồn cấp < 12VDC).
53
Hình 3.13 Mạch điều khiển động cơ L298N
Thông số kỹ thuật:
Bảng 3.7. Thông số kỹ thuật mạch điều khiển động cơ L298N
Driver L298N tích hợp hai mạch cầu H Điện áp điều khiển 5V – 12V
Dòng tối đa cho mỗi cầu H 2A Điện áp của tín hiệu điều khiển 5V – 7V Dòng của tín hiệu điều khiển 0 – 36mA
Công suất hao phí 20W (khi nhiệt độ t=75℃
Nhiệt độ bảo quản -25℃ - 130℃
3.2.4.5 Led Matrix 8x8 MAX7219
Led Matrix 8x8 MAX7219 dùng ic 7219 để điều led matrix 1 cách dễ dàng và đơn giản.
54
Hình 3.14 Led matrix 8×8 MAX7219
Thông số kỹ thuật
Bảng 3.8 Thông số kỹ thuật Leb matrix 8x8 MAX7219
Dòng điện hoạt động 4.7 – 5.3 VDC Dòng điện tiêu thụ 320mA
Nhiệt độ hoạt động 0℃ - 50℃
Kích thước 32mm×32mm×8mm
3.2.4.6Động cơ DC giảm tốc V1
Động cơ DC giảm tốc V1 cải tiến khác với bình thường ở phần thiết kế trục bổ sung thêm những vòng đồng ở các chỗ tiếp xúc giúp tăng độ bền và giảm ma sát, trong phần đuôi của động cơ sẽ thấy sự khác nhau về cơ cấu chổi than, chổi than của động cơ bình thường chỉ là tiếp xúc bằng đồng mỏng trong khi với động cơ V1 cải tiến là 2 khối chổi than lớn, điều này giúp động cơ V1 cải tiến có độ bền > 10 lần so với động cơ thường cùng với khả năng chịu được mức điện áp lên đến 12VDC.
55
Thông số kỹ thuật:
Bảng 3.9 Thông số kỹ thuật động cơ DC giảm tốc V1
Điện áp hoạt động 3-12VDC Dòng điện tiêu thụ 110-200mA Tỉ số truyền 1:48 Số vòng/phút - 125 vòng/phút tại 3VDC - 208 vòng/phút tại 5VDC Moment 0.8KG.CM 3.2.4.7 Pin 18650 Hình 3.16 Pin 18650 Thông số kỹ thuật
Bảng 3.10 Thông số kỹ thuật Pin 18650
Kiểu Pin 18650
Điện áp trung bình 3.7V
Sạc đầy 4.2V
Dung lượng 3250 – 3400mAh
Dòng xả 5A
Số lần sạc xả 1000 lần Kích thước 18×65mm Trọng lượng 43g
56
3.2.4.8 Nối dây cho mô hình robot
Các thiết bị được nối dây theo sơ đồ:
Arduino:
• Arduino pin D2 => L298N pin IN4 • Arduino pin D3 => L298N pin IN3
Hình 3.17 Sơ đồ nối dây cho robot
• Arduino pin D6 => L298N pin IN2 • Arduino pin D7 => L298N pin IN1 • Arduino pin D9 => MAX7219 pin DIN • Arduino pin D10 => MAX7219 pin CS • Arduino pin D11 => MAX7219 pin CLK • Arduino pin A4 => SDA
• Arduino pin A5 => SCL • Arduino pin Vin => Battery
Mạch điều khiển 16 Channel PWM PCA9685
• Pin SCL => Arduino pin A5 • Pin SDA => Arduino pin A4
57 • Pin Vcc => Arduino pin 5V
• Pin GND => Arduino pin GND • Pin V+ => Battery V+
• Pin GND => Arduino pin GND
Cầu H L298N
• Pin IN1 => Arduino pin D7 • Pin IN2 => Arduino pin D6 • Pin IN3 => Arduino pin D3 • Pin IN4 => Arduino pin D2 • Pin +12V => V+ của Pin 18650 • Pin GND => Arduino GND • OUT1 => Motor 1
• OUT2 => Motor 2
MAX7219 đầu tiên
• Pin Din => Arduino pin D9 • Pin CS => Arduino pin D10 • Pin CLK => Arduino pin D11 • Pin Vcc => Arduino pin 5V • Pin GND => Arduino pin GND
Các MAX7219 khác
• Pin Din => MAX7219 pin DOUT (MAX7219 trước đó) • Pin CS => MAX7219 pin CS (MAX7219 trước đó) • Pin CLK => MAX7219 pin CLK (MAX7219 trước đó) • Pin Vcc => MAX7219 pin Vcc (MAX7219 trước đó) • Pin GND => MAX7219 pin GND (MAX7219 trước đó)
58
CHƯƠNG 4 PHẦN MỀM VÀ THUẬT TOÁN
4.1 Nhiệm vụ nhận dạng khuôn mặt
Face detection: Sử dụng thuật toán MTCNN để nhận diện khuôn mặt.
Hình 4.1 Cách thức MTCNN hoạt động Thông số chính cho MTCNN:
• Ngưỡng NMS: Giá trị ngưỡng NMS sẽ chặn ngưỡng IOU khi NMS lọc khung mặt. Giá trị ba mạng được đặt các ngưỡng riêng, giá trị các ngưỡng lần lượt là NMS_threshold [3] = {0.7, 0.8, 0.82}.
• Minisize: Hình ảnh nhỏ nhất có thể phát hiện. Giá trị này là một trong những tham số dùng để kiểm soát số lượng lớp của kim tự tháp hình ảnh. Kích thước càng nhỏ, phân cấp càng nhiều, tính toán càng nhiều. Ở đây minisize được đặt là 20.
• Factor: Hệ số tỷ lệ khi tạo kim tự tháp hình ảnh, phạm vi (0,1), một trong những tham số có thể kiểm soát số lượng lớp của kim tự tháp hình ảnh. Lớp càng lớn, số lượng tính toán càng nhiều. Hệ số factor được chọn ở đây là 0.7
Face Alignment: Sử dụng pháp biến đổi Affine (Affine transformation) để
59
Hình 4.2 Phép biến đổi affine căn chỉnh khuôn mặt
Các điểm landmark được căn chỉnh theo tọa độ:
𝑠𝑟𝑐 = [[30.2946, 51.6963],
[65.5318, 51.5014],
[48.0252, 71.7366],
[33.5493, 92.3655],
[62.7299, 92.2041]]
4.2 Nhiệm vụ nhận diện khuôn mặt (Face recognition)
Trong deep convolutional neural network (DCNN), lớp convolutional có tác dụng lấy ra các đặc trưng của ảnh, và sau hàng loạt các lớp convolutional + lớp pooling (ConvNet) thì model sẽ học được đặc điểm của các ảnh, trước khi cho vào lớp fully connected.
Biểu diễn khuôn mặt thông qua việc nhúng mạng tích chập sâu (DCNN) là phương pháp tiên tiến để xác minh khuôn mặt, phân cụm khuôn mặt và nhận dạng khuôn mặt. Mạng DCNN chịu trách nhiệm ánh xạ hình ảnh khuôn mặt sau bước căn chỉnh khuôn mặt (face alignment) thành một vector đặc trưng để các đặc trưng của một người có khoảng cách nhỏ trong khi khoảng cách giữa hai người khác nhau có
60 khoảng cách đáng kể. Sau khi lấy ra các đặc trưng của ảnh bằng việc sử dụng pre- trained model, thì sinh viên sẽ dùng hồi quy softmax để phân loại ảnh.
Trích xuất đặc trưng
Sử dụng pre-train model là LResNet100E-IR để trích xuất các đặc trưng từ bộ dữ liệu dùng để đào tạo (training set)
Hình 4.3 Mô phỏng pre-traned model LResNet100E-IR trích xuất đặc trưng
Pre-trained model LResNet100E-IR đã được đạo tạo với bộ dữ liệu ms1-refine- v2 [13] với thuật toán sử dụng là ArcFace. Đầu vào của mạng là hình ảnh có kích thước 112 × 112 × 3, đầu ra là một vector nhúng 512-d tương ứng với mỗi ảnh trong bộ dữ liệu (như trong hình 4.3).
Phân loại bằng softmax
Bước phân loại có thể được thực hiện bằng cách tính khoảng cách nhúng giữa một mặt mới và các khuôn mặt đã biết, nhưng cách tiếp cận này cần nhiều tính toán và tốn kém bộ nhớ (phương pháp này được gọi là k-NN). Thay vào đó, sinh viên sử dụng trình phân loại softmax để ghi nhớ ranh giới giữa các vector nhúng một cách hiệu quả hơn nhiều.
Phân loại softmax được sử dụng như bước cuối cùng để phân loại một người dựa trên việc nhúng mặt.
Như trong hình 4.4 đầu vào của mạng là một điểm dữ liệu 512-d tương ứng với hình ảnh của một khuôn mặt. Mạng có 2 lớp FC, mỗi lớp có 1024 nơ-ron, hàm tác động ReLU, dropout 0.5. Mạng được tối ưu bằng phương pháp Adam với learning rate 0.001
61
Hình 4.4 Bộ phân loại Softmax
4.3 Môi trường làm việc với Deep Learning 4.3.1 Tensorflow 4.3.1 Tensorflow
Tensorflow là một interface để thể hiện các thuật toán machine learning và thực hiện các thuật toán đó. Hệ thống này linh hoạt và có thể sử dụng để thể hiện nhiều loại thuật toán, bao gồm thuật toán đào tạo và suy luận cho các mô hình mạng DNN, và nó đã được sử dụng để tiến hành nghiên cứu và triển khai các hệ thống machine learning vào sản xuất trên hơn một chục lĩnh vực khoa học máy tính và các lĩnh vực khác, bao gồm nhận dạng giọng nói, computer vision, robot, thu hồi thông tin, xử lý ngôn ngữ tự nhiên (NLP), khai thác thông tin địa lý.
Tensorflow là một thư viện phần mềm mã nguồn mở để tính toán số liệu. Ban đầu, nó được nhóm Google Brain phát triển trong tổ chức nghiên cứu về machine learning và nghiên cứu mạng DNN sâu rộng, nhưng sau đó hệ thống này có thể áp dụng rộng rãi nhiều lĩnh vực khác tốt.
Tensorflow là đa nền tảng. Nó có thể chạy trên hầu hết mọi thứ: GPU và CPU bao gồm cả nền tảng di động và nhúng, thậm chí là các đơn vị xử lý tensor (TPU). Trong hình 4.4, công cụ thực thi phân tán Tensorflow trừu tượng hóa nhiều thiết bị được hỗ trợ và cung cấp lõi hiệu năng cao được triển khai trong C++ cho nền tảng Tensorflow.
62
Hình 4.5 Công cụ thực thi phân tán Tensorflow
Mô hình thực thi Tensorflow
Machine learning có thể trở nên phức tạp một cách nhanh chóng và các mô hình deep learning có thể trở nên lớn hơn. Đối với nhiều biểu đồ mô hình, cần được phân phối đào tạo để có thể lặp lại trong khung thời gian hợp lý. Với phiên bản hiện tại của Tensorflow, code có thể được viết để xây dựng biểu đồ đầy đủ tính toán muốn thực hiện. Điều này có nhiều lợi thế:
• Nó là di động, vì đồ thị có thể được thực thi ngay lập tức hoặc được lưu để sử dụng sau này, và nó có thể chạy trên nhiều nền tảng: CPU, GPU, TPU, di động, embedded. Ngoài ra, nó có thể được triển khai để sản xuất mà không phải phụ thuộc vào bất kỳ mã nào đã xây dựng biểu đồ, chỉ có thời gian chạy cần thiết để thực thi nó.
• Nó có thể điều chỉnh và tối ưu hóa, vì biểu đồ có thể được chuyển đổi để tạo ra một phiên bản tối ưu hơn cho một nền tảng nhất định. Ngoài ra, tối ưu hóa bộ nhớ hoặc tính toán có thể được thực hiện và đánh đổi giữa chúng. Điều này rất hữu ích, ví dụ trong việc hỗ trợ suy luận di động nhanh hơn sau khi đào tạo trên các máy lớn hơn.
• Hỗ trợ thực thi phân tán cao cấp API cấp cao của Tensorflow, kết hợp với biểu đồ tính toán, cho phép môi trường phát triển phong phú và linh hoạt, khả năng sản xuất mạnh mẽ trong một khung hình.
Các ứng dụng của Tensorflow
Khi nói đến Deep learning, Tensorflow đã đạt được nhiều thành công hơn các đối thủ của nó – Caffe, Theano, Torch và các framework khác. Tensorflow được sử dụng rộng rãi trong nhận dạng giọng nói, các ứng dụng dựa trên văn bản như Google
63 dịch, nhận dạng hình ảnh và Video detection. Điều thú vị là, NASA đang phát triển một mô hình dự đoán về các vật thể gần trái đất với Tensorflow và deep learning. Theo những người ở NASA, Tensorflow có thể giúp thiết kế một mô hình đa lớp có thể nhận ra và phân loại tiềm năng của NEO. Tensorflow được sử dụng bởi một số công ty dữ liệu lớn nhất trên thế giới như – Airbnb, Airbus, Dropbox, Snapchat và uber. Một số ứng dụng chính của Tensorflow là:
• Tensorflow đã được triển khai thành công trong DeepDream – phần mềm chú thích hình ảnh tự động – sử dụng Tensorflow.
• Google RankBrain, được hỗ trợ bởi Tensorflow, xử lý một số lượng truy vấn đáng kể mỗi phút và đã thay thế hiệu quả tìm kiếm theo thuật toán tĩnh truyến thống.
4.3.2 MXNet
MXNet là một Deep Learning framework được phát triển bởi các kỹ sư từ các công ty và trường đại học khác nhau bao gồm Microsoft, Nvidia, Baidu, Intel, Đại học Carnegie Mellon, Đại học Alberta và đại học Washington. MXNet hỗ trợ rất nhiều ngôn ngữ lập trình bao gồm R, Python, Julia và Scala. Nó cũng hỗ trợ GPU tiên tiến hơn so với các framework khác và thời gian cũng tương đối nhanh khi chạy các thuật toán deep learning. MXNet có khả năng model CNN và Recurrent Neural Network. MXNet cũng là Deep Learning framework của Amazon Web Services (AWS).
Apache MXNet được thiết kế với tính mềm dẻo vào hiệu quả. MXNet chứa một bộ lập dịch phụ thuộc động để tự động song song hóa các hoạt động mang tính tượng trưng và các hoạt động bắt buộc. Một lớp tối ưu hóa đồ thị trong đó làm cho việc thực thi các biểu tượng nhanh và tiết kiệm bộ nhớ. MXNet có kích thước nhỏ và có tính khả chuyển cao, có thể hoạt động hiệu quả trên dữ liệu lớn khi sử dụng chip đa lõi hoặc GPU.
4.3.3 Ngôn ngữ lập trình Python
Python là ngôn ngữ lập trình hướng đối tượng, cấp cao, mạnh mẽ, được tạo bởi Guido van Rosum: Python hoàn toàn tạo kiểu động và sử dụng cơ chế cấp phát bộ nhớ tự động. Python có cấu trúc dữ liệu cấp cao mạnh mẽ và cách tiếp cận đơn giản nhưng hiệu quả đới với lập trình hướng đối tượng. Python được thiết kế rất dễ đọc. Nó sử dụng các từ khóa tiếng Anh và nó có cấu trúc cú pháp đơn giản hơn các ngôn ngữ khác.
• Python được phiên dịch – Python được trình thông dịch xử lý trong thời gian chạy. Không cần phải biên dịch chương trình trước khi thực hiện nó.
64 • Python hướng đối tượng – Python hỗ trợ kiểu hướng đối tượng hoặc kỹ thuật
lập trình đóng gói trong các hướng đối tượng.
• Python là ngôn ngữ của người mới bắt đầu – Python là một ngôn ngữ tuyệt vời cho các lập trình viên mới bắt đầu và hỗ trợ phát triển một loạt ứng dụng từ xử lý văn bản đơn giản để trình duyệt WWW đến các trò chơi.
Python có nguồn gốc từ nhiều ngôn ngữ khác, bao gồm ABC, Modula3, C, C++,