2.1. Thi giác máy tính - Computer Vision
2.1.1. Tổng quan
Trí tuệ nhân tạo và cách mạng công nghiệp 4.0 là những thuật ngữ được
nhắc đến nhiều nhất trong nghiên cứu khoa học hiện nay. Máy móc được kết nối với nhau và ngày càng có những hoạt động gần như con người. Trong đó, những hoạt động liên quan đến thị giác đã và đang phát trién mạnh mẽ bởi tính ứng dụng thực tiễn, trực quan, sinh động,... Thuật ngữ thị giác máy tính được bắt nguồn từ những hoạt động của máy tính mô phỏng hoạt động của mắt người và có thể thay thế cho con người trong các công việc quan sát, giám sát, phát hiện vật thẻ, phát hiện chuyển động, phân loại thông qua hình ảnh quan sát được.
Thị giác máy tính là một bộ phận quan trọng trong nhóm Trí tuệ nhân tạo.
Hoạt động chính bao gồm các phương pháp thu nhận, xử lý ảnh kỹ thuật số, phân
tích và nhận dạng các hình ảnh, phát hiện các đối tượng, tạo ảnh, siêu phân giải
hình ảnh và nhiều hơn vậy. Thị giác máy tính được ứng dụng rộng rãi trong thực
tế cuộc sống của chúng ta. Camera được đặt trên nhiều thiết bị như điện thoại, máy tính, máy ảnh, ô tô hoặc các hệ thống giám sát, quan sát trong các khu vực ngoài trời, trong nhà, trong giao thông... Có thé thay rang, máy tính đã có được cái nhìn gần như một con người qua một số ứng dụng như nhận diện, tìm kiếm, phân loại, phát hiện, trích xuất hình ảnh của các chủ thể tập trung theo nhu cầu của con người. Một trong những hoạt động dễ thấy nhất là nhận diện và trích xuất thông tin của chủ thể. Các hệ thống máy móc hiện nay đã có thể phát hiện chính xác gần như tuyệt đối nhờ vào các thuật toán, công cụ hỗ trợ, công nghệ áp dụng được nghiên cứu kỹ lưỡng. Điều đó góp phần làm cho máy tính ngày càng có một cái nhìn cụ thể, chính xác và nhanh chóng hơn bao giờ hết. Thị giác máy tính thực sự đã đạt được những bước tiến rõ rệt trong nghiên cứu khoa học hiện tại. Trong báo cáo này, nhóm sẽ tập trung vào những nghiên cứu về phát hiện khuôn mặt, một trong
những ứng dụng quan trọng của Thị giác máy tính.
Hình 2-1 Mô tả ảnh dưới góc nhinfcuar máy tính
Khi con người nhìn vào một bức ảnh họ có thé nhận diện được mọi vật thé, không như điều hầu hết các máy tinh “thay” được. Một bức ảnh được thể hiện bằng các pixel chứa giá trị màu sắc. Đối với ảnh xám, máy tính đọc ảnh dưới dạng một
ma trận 1 chiều với các pixel mang các giá trị từ 0-255. Đối với ảnh màu, máy tính nhận vào một ma trận 3 chiều với mỗi chiều là 1 ma trận pixel chứa giá trị của 3
màu Red — Green — Blue.
Và dé thực hiện việc đọc ghi, tương tác và xử lý trên ảnh, nhóm sử dụng 2 thư viện được xây dụng trên nền ngôn ngữ lập trình Python hỗ trợ mạnh mẽ và tốc
độ xử lý tối ưu nhất là Opencv và Pytorch.
2.1.2. Thư viện xử lý ảnh Opencv
Thư viện Opencv là một thư viện da nền tảng được sử dụng để phát triển các ứng dụng về thị giác máy tính theo thời gian thực. Thư viện này tập trung chủ yếu
về xử lý ảnh, quay video và phân tích các đặc trưng ảnh với các ứng dụng tiêu biểu như là nhận diện khuôn mặt và nhận diện vat thẻ,...
Các đặc trưng của thư viện Opencv:
- Đọc và lưu ảnh.
- Đọc và lưu video.
- _ Xử lý ảnh (lọc ảnh, biến đổi ảnh).
- Tién hành nhận diện các đặc trưng ảnh.
- Nhận diện các đối tượng cụ thé như khuôn mặt, mắt, phương tiện trong ảnh
hoặc video.
- Phân tích video (ước tính chuyền động, theo dõi đối tượng,...)
Opencv được phát triển trên ngôn ngữ C++, sau đó, hỗ trợ thêm các ngôn ngữ Python và Java. OpenCV có thể chạy trên nhiều hệ điều hành khác nhau như
Windows, Linux, OSx, FreeBSD, Net BSD, Open BSD, ...
Các module chính của thư viện Opencv
Cac module sau đây là các module chính của Opencv:
Chức năng lõi (Core functionality):
Module này xử lý các dang data cơ bản như Scalar, point, range, ... dùng dé xây dựng các ứng dụng Opencv. Ngoài ra, module này còn bao gồm dạng data
chuỗi đa chiều Mat, được dung dé lưu trử ảnh.
Xử lý ảnh:
Module này đảm nhận nhiều hoạt động về xử lý ảnh như là lọc ảnh, biến đồi
các ảnh về hình học, chuyển đổi màu sắc, biểu đồ, wee
Video:
Module này sẽ xử lý các van dé liên quan về video như tính toán chuyển động, khử nên, theo dõi các vật thé, ....
Video I/O:
Module nay hỗ trợ việc đọc và ghi các video.
Calib3d:
Module bao gồm các thuật toán về hình học, hiệu chỉnh âm thanh camera, đo
đạc và ước tính các đối tượng nhất định, và xây dựng các thuộc tính 3D.
Feature2d:
Module này thực hiện các hoạt động liên quan về các khái niệm nhận diện
các đặc trưng va mô tả các đặc trưng đó.
Objdetect:
Phát hiện vật thể và các đối tượng đã định dạng sẵn như là khuôn mặt, mắt,
con người va xe cộ,... .
Highgui:
Xây dụng các giao điện đơn giản dé dang sử dung.
2.1.3. Thư viện Pytorch
Pytorch là một thư viện Machine learning dựa trên ngôn ngữ lập trình
Python, được phát triển dựa trên Torch. Torch là thư viện machine learning được
open-sources dựa trên ngôn ngữ LUA. Pytorch có 2 đặc trưng chính:
- Xử lý tensor (tương tự kiểu dữ liệu ndarray của Numpy) với sự hỗ trợ của
GPU.
- Tu động phân biệt giữa xây dựng và huấn luyện các neural networks.
Sử dụng thư viện Pytorch để xứ lý thay vì các thư viện deep learning python:
- Không giống như Tensorflow, nhóm cần phải khai báo các đỗ thị tính toán
hoàn chỉnh trước khi chạy model, Pytorch cho phép nhóm có thé khai báo các đồ thị tính toán động.
- Pytorch cung cấp tốc độ xử lý nhanh gọn và sự linh hoạt cao cho việc
nghiên cứu và xử lý deep learning.
Pytorch tensors:
Pytorch tensors tương tự như kiểu đữ liệu ndarray của Numpy, tuy nhiên Tensor có thể được xử lý bang GPU. Điều này giúp thúc day việc tính toán số học
và từ đó tăng tốc độ của các neural network đến hơn 50 lần
Pytorch Autograd:
Pytorch sử dụng một kỹ thuật gọi là automatic differentiation dé tính toán số học thuộc đạo hàm của một fuction. Khi huấn luyện một model, các biến có thể
được train và hoc (learnable parameter) được gọi tắt là weights sẽ được khởi tạo với các giá trị gần bằng 0 nhưng không bằng 0. Sau đó, các tensor được thông qua các lớp mạng và cập nhật lại các biến weights từ phải sang trái, gọi là kỹ thuật
backward passes. Khi có lệnh .requires_grad các gradients sẽ được tính toán và tao
thành mô hình train với các input tensor cần thiết. Khi có lệnh torch.no grad() thì
việc tính toán các gradients và cập nhật weight sẽ được ngừng và input tensor sẽ
chuyển sang giao đoạn sử dụng model và kiểm thử.
Từ đó nhóm có thé phân tách việc đưa tensor từ các input ảnh vào tiến trình train và quá trình sử dụng và kiểm tra model riêng biệt.
Pytorch nn module:
Đây là module để xây dựng neural network của Pytorch. Module nn của Pytorch phụ thuộc vào module autograd để xây dụng model và tính toán. Quy trình
để train model được tổng quát như sau:
- Khởi tao neural network với các weights dé tính toán.
- Tao vòng lặp cho data inputs.
- Tién hành truyền dữ liệu inputs thông qua mang.
- So sánh kết quả từ model với kết quả thật tế.
- _ Truyén biến gradients ngược vào mạng lưới.
-_ Tiến hành cập nhập weight tại từng lớp mạng với công thức sau:
Weight = weight — learning_rate * gradient (2.1)
2.2. Machine Learning
2.2.1. Dinh nghia.
Machine Learning là một ngành học nghiên cứu về cách giúp cho máy tính điện tử có được khả năng có thể học tập mà không cần phải được lập trình một cách
tỉ mỉ trước đó.
Dưới góc nhìn của Machine Learning, mọi bài toán đều có input và output, ở
giữa của quy trình đó là một hàm. Hàm là một khái niệm toán học khá quen thuộc với
chúng ta. Hàm là một tập hợp các quy tắc được dùng đề các phần tử ở tập nguồn đến các phan tử ở tập đích sao cho mỗi một phan tử ở tập nguồn chi có một và chỉ một phan tử ở tập đích. Trong đó, một bộ phận nhỏ của hàm, khi tat cả các phan tử của cả hai tập đều là dạng số học, người ta gọi đó là hàm SỐ.
Hình 2-2 Mô hình input va output thông qua xử lý các ham
Cùng với sự phát triển của Computer Vision, nhiệm vụ của người làm Machine
Learning ở một mức cơ bản nao đó là giúp máy tính điện tử tìm ra được hàm quan hệ giữa tập input và tap output. Machine Learning chia các bài toán ra làm hai loại chính
là Supervised Learning(học có giám sát) và Un-Supervised Learning (học không giám sát).
2.2.2. Supervised Learning.
Học có giám sát là việc có sẵn một tập nguồn và một tập đích tương ứng để làm cơ sở xây dựng ra model mong muốn. Tập hợp kết hợp bởi hai tập này được gọi
là tập train. Theo thời gian, khi đưa bài toán vào áp dụng thực tế, dữ liệu mới lại được
sử dụng để train lại nhằm cải tiến model hiện tại. Điều này chính là mô tả cho khái
niệm học có giám sát.
Các thuật toán nằm trong nhóm các bài toán học có giám sát được chia nhỏ thành hai phần dựa trên đặc tính của tập đích trong tập train.
2.2.3. Regression(Bài toán hồi quy).
Hồi quy là một thuật ngữ rất khó hiểu. Hiểu đơn giản thì những cái gì có tính liên tục và tiếp nối với nhau thì người ta gọi là là hồi quy. Vậy khi tập đích trong tập train là một tập dữ liệu có dạng liên tục không thể phân thành nhóm mà là một dữ liệu cụ thé thì bài toán được xếp vào dạng hồi quy. Bài toán tiêu biểu cho dang này thường được ví dụ là tính toán giá cả của sản phẩm dựa trên thông số trước đó, hoặc
dự đoán biến động tài chính...
Sensor Output (mv)
Displacement (mm)
Hình 2-3 Hàm số regression
2.2.4. Un-Supervised Learning.
Được gọi là học không giám sát, chúng ta không hè có tap dich ma chi có tap nguồn, khi dữ liệu đủ lớn, chúng ta mặc dù không thể dự đoán được tập đích nhưng
bù lại thì có thể thực hiện phân nhóm hay làm giảm độ phức tạp của dữ liệu. Điều này đặc biệt có ích trong việc lưu trữ hoặc xử lí dữ liệu trong tương lai (đưa về bài toán học có giám sát khi đã có dữ liệu thực tế). Các bài toán học không giám sát cũng được chia làm hai loại dựa vào tập nguồn của chúng.
2.2.5. Classification (Bài toán phân loại).
Khi dữ liệu của tập đích là một nhóm hữu hạn và có thể gắn nhãn được, bài toán được xếp vào dạng classification. Ví dụ hay được sử dụng cho bài toán dạng này
là bài toán gắn nhãn xem một email có phải là spam hay không, hoặc phân loại giữa cam và táo hay phân biệt chữ viết tay,...
2.2.6. Clustering (Bài toán gom nhóm).
Với bài toán dạng này, ta buộc phải có một tập hợp các categories cho trước.
Dữ liệu nguồn sẽ được Clustering dựa trên các yếu tổ có trong tập hợp categories cho trước. Điều này có vẻ tương tự với bài toán ở dang Classification bị bỏ đi tập đích nhưng trên thực tế thì không chính xác. Ví dụ như với bài toán phân loại email là spam nhưng hoàn toàn không có bat kia ai đánh dấu mail là spam hay không. Việc phân loại lúc này đơn thuần chỉ dự trên những nhóm email được cho là giống nhau
về cách đặt tên, nguồn gửi, tần suất xuất hiện, nội dung....
2.2.7. Dimensionality reduction(Bài toán giảm chiều của dữ liệu).
Bài toán ở dạng này không được quy về các dạng trên mà được thực hiện dưới hình thức làm giảm đi số lượng các biến số đầu vào nhằm hạn chế độ phức tạp của
bài toán.
2.3. CNN - Convolutional Neural Network
2.3.1. Dinh nghia.
Convolutional Neural Network (CNNs — Mang no-ron tích chập) là một trong
những mô hình Deep Learning tiên tiến giúp cho chúng ta xây dựng được những hệ thống thông minh với độ chính xác cao như hiện nay như hệ thống xử lý ảnh lớn như Facebook, Google hay Amazon đã đưa vào sản phẩm của mình những chức năng thông minh như nhận diện khuôn mặt người dùng, phát triển xe hơi tự lái hay drone giao hàng tự động. CNN được sử dụng nhiều trong các bài toán nhận dạng các object
trong ảnh.
2.3.2. Convolutional
Là một cửa số trượt (Sliding Windows) trên một ma trận như mô tả hình dưới:
|
Convolved Feature
— Hình 2-4 Kernel trong CNN
Các convolutional layer có các parameter(kernel) đã được hoc dé tự điều chỉnh
Convolution hay tích chập là nhân từng phan tử trong ma trận 3x3.
Sliding Window hay còn gọi là kernel, filter hoặc feature detect là một ma trận
Source pixel
(1x3) +(0x0)+(1x1)+
(2x2) + (0x6) + 2x2) + (1x2) + (0x4) + (1x1) =-3
By ;2ae5ứ se ér 55 Bébéé
EEA BEEOGar coi
Convolution filter (Sobel Gx)
Hình 2-5 Mô tả cách hoạt động của mỗi kernel với ảnh inj
lấy ra những thông tin chính xác nhất mà không cần chọn các feature. Trong hình ảnh
ví dụ trên, ma trận bên trái là một hình ảnh trắng đen được số hóa. Ma trận có kích
thước 5x5 và mỗi điểm ảnh có giá trị 1 hoặc 0 là giao điểm của dòng và cột.
có kích thước nhỏ như trong ví dụ trên là 3x3. Convolution hay tích chập là nhân từng
phần tử bên trong ma trận 3x3 với ma trận bên trái. Kết quả được một ma trận gọi là
Convoled feature được sinh ra từ việc nhận ma trận Filter với ma trận ảnh 5x5 bên
put
2.3.3. Cấu trúc của mạng CNN.
Mạng CNN là một tập hợp các lớp Convolution chồng lên nhau và sử dụng các ham nonlinear activation như ReLU(Rectified Linear Unit) và tanH dé kích hoạt các trọng số trong các node. Mỗi một lớp sau khi thông qua các hàm kích hoạt sẽ tạo
ra các thông tin trừu tượng hơn cho các lớp tiếp theo. Mỗi một lớp sau khi thông qua
các hàm kích hoạt sẽ tạo ra các thông tin trừu tượng hơn cho các lớp tiếp theo. Trong
mô hình mạng truyền ngược (feedforward neural network) thì mỗi neural đầu vào
(input node) cho mỗi neural đầu ra trong các lớp tiếp theo. Mô hình này gọi là mạng kết nối đầy đủ (fully connected layer) hay mạng toàn vẹn (affine layer). Còn trong
mô hình CNNs thì ngược lại. Các layer liên kết được với nhau thông qua cơ chế convolution. Layer tiếp theo là kết qua convolution từ layer trước đó, nhờ vậy mà ta
có được các kết nói cục bộ. Như vậy mỗi neuron ở lớp kế tiếp sinh ra từ kết quả của
filter áp đặt lên một vùng ảnh cục bộ của neuron trước đó.
Mỗi một lớp được sử dụng các filter khác nhau thông thường có hàng trăm hàng nghìn filter như vậy và kết hợp kết quả của chúng lại. Ngoài ra có một số layer khác như pooling/subsampling layer dùng để chắt lọc lại các thông tin hữu ích hơn (loại bỏ các thông tin nhiễu). Trong quá trình training mạng CNN tự động học các
giá trị qua các lớp filter dựa vào cách thức mà bạn thực hiện. Ví dụ trong tác vụ phân
lớp ảnh, CNNs sẽ có gắng tìm ra thông số tối ưu cho các filter tương ứng theo thứ tự Taw pixel > edges > shapes > facial > high-level features. Layer cuối cùng được ding
để phân lớp ảnh.
Feature maps
Trong mô hình CNN có 2 khía cạnh cần quan tâm là tính bat biến (Location Invariance) và tính kết hợp (Compositionality). Với cùng một đối tượng, nếu đối tượng nay được chiếu theo các góc độ khác nhau (translation, rotation, scaling) thì độ chính xác của thuật toán sẽ bị ảnh hưởng đáng ké. Pooling layer sẽ cho bạn tính bat biến đối với phép dịch chuyền (translation), phép quay (rotation) và phép co giãn (scaling). Tính kết hợp cục bộ cho ta các cấp độ biểu diễn thông tin từ mức độ thấp đến mức độ cao và trừu tượng hơn thông qua convolution từ các filter. Đó là lý đo tại sao CNNs cho ra mô hình với độ chính xác rất cao. Cũng giống như cách con người nhận biết các vật thể trong tự nhiên.
Mạng CNN sử dụng 3 ý tưởng cơ bản:
2.3.4.
2.3.5.
Các trường tiếp nhận cục bộ (local receptive field) Trọng số chia sẻ (shared weights)
Tổng hợp (pooling).
Cách chọn tham số cho CNN.
Số các convolution layer: càng nhiều các convolution layer thì
performance càng được cải thiện. Sau khoảng 3 hoặc 4 layer, các tác
động bị giảm một cách đáng kể
Filter size: thường filter theo size 5x5 hoặc 3x3
Pooling size: thường là 2x2 hoặc 4x4 cho ảnh đầu vào lớn Cách cuối cùng là thực hiện nhiều lần việc train test để chọn ra được param tốt nhất.
Deep learning
Việc các mạng CNN ngày càng phát triển đã giúp các bai toán xử lý ảnh đạt được kết quả mong muốn. Tuy nhiên việc con người phải tiếp cận tiền xử lý và sau
đó các mang CNN xuất ra kết qua đã khiến việc hoạt động của CNN trở nên bat tiện.
Vi thé Deep learning ra đời giải quyết van đề nay.