CHƯƠNG 1. CƠ SỞ LÝ THUYẾT Hình 1. Cửa sổ trượt trên một ma trận Lớp tích chập có các tham số quan trọng là kích thước bộ lọc, bước nhảy và đường viền. Kích thước bộ lọc tỉ lệ thuận với số tham số cần học tại mỗi tầng tích chập và là tham số quyết định receptive field của tầng này.
Kích thước của bộ lọc nhỏ thường được ưu tiên vì nó sẽ rút trích được các đặc trưng có tính cục bộ cao, giúp phát hiện các đặc trưng nhỏ hơn, thông tin rút trích được đa dạng và hữu ích hơn ở tầng sau, ít trọng số do đó sẽ chia sẻ trọng số tốt hơn và cho phép mạng sâu hơn. Kích thước bộ lọc hầu hết đều là số lẻ, ví dụ như 3x3 hay 5x5. Với kích thước bộ lọc lẻ, các giá trị của feature map sẽ xác định một tâm điểm ở tầng phía trước. Nếu chọn bộ lọc có kích thước chẵn thì sẽ gặp khó khăn khi muốn tìm vị trí tương ứng của các giá trị ma trận ảnh đặc trưng trên không gian ảnh [18].
Ngoài kích thước bộ lọc, bước nhảy cũng là tham số quan trọng của lớp tích chập. Khi bước nhảy là 1 thì bộ lọc di chuyển qua một điểm ảnh mỗi lần. Khi bước nhảy là 2 thì bộ lọc nhảy qua 2 điểm ảnh mỗi lần tại thời điểm trượt bộ lọc xung quanh. Điều này sẽ tạo ra khối đầu ra nhỏ hơn theo không gian được minh họa qua hình 1.
Kích thước ảnh đầu ra khi thực hiện bước nhảy lần lượt là 1 và 2 10 Luan van CHƯƠNG 1. CƠ SỞ LÝ THUYẾT Tham số quan trọng cuối là đường viền. Sử dụng đường viền cho phép kiểm soát kích thước của không gian đầu ra, bảo toàn chính xác kích thước của không gian đầu vào sao cho kích thước của đầu vào và đầu ra là như nhau.5 minh họa viền với giá trị 0, nghĩa là bổ sung một ô vào xung quanh các cạnh của đầu vào. Ma trận khi thêm viền 0 bên ngoài 1.
Hàm kích hoạt Các hàm kích hoạt sẽ mô phỏng về tỷ lệ truyền xung qua sợi trục của một nơ-ron thần kinh và đóng vai trò là thành phần phi tuyến để giới hạn biên độ cho phép của giá trị đầu ra. Đây là một lớp được xây dựng để đảm bảo tính phi tuyến của mô hình sau khi trải qua nhiều phép toán tuyến tính ở lớp tích chập. Một số hàm kích hoạt thông dụng được thể hiện trong bảng 1. Một số hàm kích hoạt thông dụng Hàm kích hoạt Đồ thị Công thức Sigmoid 1 ( x) 1 ex Tanh e x e x Tanh( x) e x ex 11 Luan van CHƯƠNG 1.
CƠ SỞ LÝ THUYẾT ReLU f ( x) max(0, x) Leaky, ReLU f ( x) 1( x 0)(x) 1( x) với α là hằng số nhỏ Maxout f ( x) max(w1T x b1 , w2T x b2 ) 1. Lớp tổng hợp Lớp tổng hợp (Pooling Layer) thường được đặt sau lớp tích chập và hàm kích hoạt. Lớp tổng hợp là một lớp lấy những hình ảnh lớn và làm giảm kích thước dữ liệu nhưng vẫn giữ được các thông tin quan trọng trong đó. Việc giảm kích thước dữ liệu có tác dụng làm giảm được số lượng tham số cũng như tăng hiệu quả tính toán.
Lớp tổng hợp cũng sử dụng một cửa sổ trượt để quét toàn bộ các vùng trong ảnh giống như lớp tích chập và thực hiện phép tổng hợp, tức là chọn một giá trị đại diện của các điểm ảnh như hình 1. Như vậy, với mỗi ảnh đầu vào được đưa qua tổng hợp thu được ảnh đầu ra tương ứng có kích thước giảm xuống đáng kể nhưng vẫn giữ được những giá trị cần thiết cho quá trình tính toán sau này. Các hàm tổng hợp có nhiều loại khác nhau như [17]: - Max pooling lấy phần tử lớn nhất từ ma trận đối tượng. - Average pooling lấy tổng trung bình từ ma trận đối tượng.
- Sum pooling lấy tổng tất cả các phần tử trong ma trận. Lớp max pooling cho vùng ảnh 12 Luan van CHƯƠNG 1. Lớp kết nối đầy đủ Tầng cuối cùng của mô hình CNN là tầng kết nối đầy đủ (Fully Connected Layer). Đầu vào của lớp này là đầu ra từ lớp tổng hợp hoặc lớp tích chập cuối cùng được làm phẳng và sau đó đưa vào lớp kết nối đầy đủ.
Lớp kết nối đầy đủ được thiết kế tương tự mạng nơ-ron truyền thống. Vector phẳng này có các nơ-ron kết nối đầy đủ với các nơ- ron ở tầng sau được thể hiện qua hình 1.7, các kết nối này giống như mạng thần kinh nhân tạo và thực hiện tính toán tương tự. Lớp này có chức năng tìm ra đường phân chia giữa các điểm dữ liệu thông qua việc học các kết hợp phi tuyến trong không gian. Mô phỏng lớp kết nối đầy đủ 1.
THƯ VIỆN OPENCV Open Source Computer Vision được viết tắt là OpenCV là một thư viện mã nguồn mở được bắt đầu từ Intel bởi Gary Bradski vào năm 1999 [21]. Nó được viết bằng tối ưu hóa C/C++ và có các giao diện C++, C, Python và Java có thể hỗ trợ Windows, Linux, Mac OS, IOS và Android. OpenCV được thiết kế để tối ưu hóa và xử lý ứng dụng trong real-time – thời gian thực, giúp cho việc xây dựng các ứng dụng xử lý ảnh, thực tế ảo, thị giác máy tính… một cách nhanh gọn hơn. Cấu trúc của Opencv được chia thành năm phần chính, bốn trong số đó được biểu diễn như hình 1.9: - CV: chứa các hàm xử lý ảnh cơ sở và thuật toán về thị giác máy tính mức cao.
- MILL: là thư viện machine learning, chứa các thuật toán học máy bao gồm các bộ phân cụm, phân loại thống kê. - HighGUI: chứa các thủ tục vào, ra và các hàm dùng cho việc tải và lưu trữ file ảnh và file video. - CXCORE: chứa cấu trúc và nội dung dữ liệu cơ sở như cấu trúc XML, các hàm vẽ đồ họa… 13 Luan van CHƯƠNG 1. CƠ SỞ LÝ THUYẾT Computer Vision Machine learning library HighGUI (CV) (MILL) CXCORE Hình 1.
Cấu trúc cơ bản của OpenCV 1. THƯ VIỆN TENSORFLOW Tensorflow là một nền tảng học máy mã nguồn mở, được thiết kế bởi đội ngũ Google Brain và tổ chức nghiên cứu trí tuệ máy của Google nhằm triển khai các ứng dụng của học máy và học sâu theo cách đơn giản. Nó là kết hợp giữa đại số tính toán của các kỹ thuật tối ưu hoá để dễ dàng tính toán các biểu thức toán học [19]. Kiến trúc của Tensorflow bao gồm 3 phần: xử lý trước dữ liệu, xây dựng mô hình, đào tạo và ước tính mô hình.Một số tính năng nổi bật của Tensorflow: - Định nghĩa, tối ưu và tính toán các biểu thức số học dễ dàng nhờ vào sự trợ giúp của các mảng đa chiều, gọi là tensors.
- Hỗ trợ lập trình các kỹ thuật của mạng học máy và học sâu. - Bao gồm tính năng tính toán độ ổn định cao với đa dạng các tập dữ liệu. - Sử dụng GPU hoặc CPU để tính toán và tự động quản lý. Tensorflow có tài liệu đầy đủ và bao gồm nhiều thư viện học máy nên rất phổ biến hiện nay.
Vì là một sản phẩm của Google, nên hiện tại, Tensorflow đang được ứng dụng rất nhiều trong các sản phẩm của Google như phân loại chữ viết tay, nhận diện hình ảnh, xử lý ngôn ngữ tự nhiên. THƯ VIỆN KERAS Keras là một thư viện Học sâu mã nguồn mở dành cho Python, chạy trên các thư viện máy mã nguồn mở như TensorFlow, Theano hoặc Bộ công cụ nhận thức (CNTK). Keras dựa trên cấu trúc tối thiểu, cung cấp một cách dễ dàng và dễ dàng để tạo các mô hình học sâu dựa trên TensorFlow hoặc Theano [22]. Keras được thiết kế để xác định nhanh các mô hình học sâu.
Một số đặc điểm nổi bật của Keras: - API nhất quán, đơn giản và có thể mở rộng. - Cấu trúc tối thiểu, dễ dàng đạt được kết quả mà cần sự phức tạp. - Hỗ trợ đa nền tảng và backend. - Framework thân thiện, chạy được trên cả CPU và GPU.
- Độ ổn định cao. 14 Luan van CHƯƠNG 1. CHUẨN GIAO TIẾP I2C Inter – Integrated Circuit được viết tắt I2C là một giao thức giao tiếp được phát triển bởi Philips Semiconductors để truyền dữ liệu giữa một bộ xử lý trung tâm với nhiều IC trên cùng một board mạch chỉ sử dụng hai đường truyền tín hiệu [23]. Vì tính đơn giản nên được sử dụng làm bus giao tiếp ngoại vi giữa vi điều khiển và cảm biến, các thiết bị hiển thị, EEPROMs… và nó trở thành một chuẩn công nghiệp cho các giao tiếp điều khiển.
Nó là giao thức giao tiếp nối tiếp đồng bộ, các bit dữ liệu được truyền lần lượt từng bit một theo khoảng thời gian đều đặn được thiết lập trước bởi tín hiệu clock tham chiếu. I2C kết hợp những tính năng tốt nhất của SPI và UART. Vậy nên bus I2C (dây giao tiếp) cũng sử dụng hai dây để truyền dữ liệu giữa các thiết bị giống như UART gồm Serial Data Line (SDA) là đường truyền cho master và slave để gửi và nhận dữ liệu và Serial Clock Line (SDI) mang tín hiệu xung nhịp [24]. I2C là giao thức truyền thông nối tiếp, dữ liệu truyền đi từng bit được gửi qua dây SDA và giống như SPI, đầu ra của các bit sẽ được đồng bộ với việc lấy mẫu các bit bởi tín hiệu đồng hồ (clock) từ SCL được chia sẻ giữa master và slave.
Mô hình giao thức I2C SDA và SCL đều hoạt động như các bộ lái cực máng hở (open drain). Bất kỳ thiết bị hay IC trên mạng I2C có thể lái bus I2C xuống mức thấp nhưng không thể lái chúng lên mức cao. Vì vậy, một điện trở kéo lên (khoảng 1 kΩ đến 4,7 kΩ) được sử dụng cho mỗi đường bus để giữ chúng ở mức cao (ở điện áp dương) theo mặc định. Các thiết bị kết nối với bus I2C được phân loại là thiết bị chủ (master) hoặc thiết bị tớ (slave).
Ở bất cứ thời điểm nào thì chỉ có duy nhất một master ở trạng thái hoạt động trên bus I2C. Master điều khiển SCL và quyết định hoạt động nào sẽ được thực hiện trên SDA. Tất cả các thiết bị đáp ứng các hướng dẫn từ master này đều là slave. Để phân biệt giữa nhiều slave được kết nối với cùng một bus I2C, mỗi thiết bị sẽ được gán một địa chỉ vật lý 7-bit cố định.
15 Luan van CHƯƠNG 1. NGÔN NGỮ LẬP TRÌNH PYTHON Python là ngôn ngữ lập trình bậc cao được dùng cho nhiều mục đích khác nhau, và đặc biệt được ứng dụng phổ biến trong phát triển trí tuệ nhân tạo.