Trang | 1 GVHD: Mai Trọng Khang 1 TỔNG QUAN 1.1 Vài nét về Machine Learning 1.1.1 Khái niệm Machine learning là một lĩnh vực con của Trí tuệ nhân tạoArtificial Intelligence sử dụng cá
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO MÔN HỌC
ĐỒ ÁN 1
ĐỀ TÀI: TÌM HIỂU MACHINE LEARNING VÀ ỨNG DỤNG
VÀO NHẬN DẠNG ẢNH
Giảng viên hướng dẫn:
Mai Trọng Khang
Sinh viên thực hiện:
1 Nguyễn Trần Hoàng Thanh 16521125
Lớp: SE121.L11.PMCL
TP HỒ CHÍ MINH, 2021 ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
Trang 2BÁO CÁO MÔN HỌC
ĐỒ ÁN 1
ĐỀ TÀI: TÌM HIỂU MACHINE LEARNING VÀ ỨNG DỤNG
VÀO NHẬN DẠNG ẢNH
Giảng viên hướng dẫn:
Mai Trọng Khang
Sinh viên thực hiện:
1 Nguyễn Trần Hoàng Thanh 16521125
Lớp: SE121.L11.PMCL
TP HỒ CHÍ MINH, 2020
LỜI CẢM ƠN
Đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến tập thể quý thầy cô Trường Đại học Công nghệ thông tin – Đại học Quốc gia TP.HCM và quý thầy cô khoa Công nghệ phần mềm đã giúp cho chúng em có những kiến thức cơ bản làm nền tảng để thực hiện đề tài này
Trang 3Đặc biệt, nhóm tác giả xin gửi lời cảm ơn và lòng biết ơn sâu sắc nhất tới thầy
Mai Trọng Khang, giảng viên môn Đồ án 1, Khoa Công nghệ phần mềm Thầy đã
hướng dẫn tận tình, sửa chữa và đóng góp nhiều ý kiến quý báu giúp em hoàn thành báo cáo môn học của mình
Trong thời gian một học kỳ thực hiện đề tài, em đã vận dụng những kiến thức nền tảng đã tích lũy đồng thời kết hợp với việc học hỏi và nghiên cứu những kiến thức mới
Từ đó, em đã vận dụng tối đa những gì đã thu thập được để hoàn thành một báo cáo đồ án tốt nhất Tuy nhiên, trong quá trình thực hiện không tránh khỏi những thiếu sót Chính vì vậy, em rất mong nhận được những sự góp ý từ phía thầy nhằm hoàn thiện những kiến thức mà em đã học tập và là hành trang để em thực hiện tiếp các đề tài khác trong tương lai
Xin chân thành cảm ơn Thầy!
MỤC LỤC
Mục lục 1 1 Tổng quan 2 1.1 Vài nét về Machine Learning 2 1.1.1 Khái niệm 2 1.1.2 Phân loại thuật
toán của Machine Learning 2 1.2 Object Detection 2 1.2.1 Khái niệm 2 1.2.2 Một số phương pháp Object Detection 2 1.3 Một số bài toán và
bộ dữ liệu của Object Detection 5 1.3.1 Phát hiện chữ số viết
tay 5 1.3.2 Phát hiện người 5 1.3.3 Bộ dữ liệu
VOC2007 6 2 thực nghiệm 7 2.1 Google Colab 7 2.2 Nhận diện chữ
số viết tay 8 2.3 Phát hiện người 11 3 Kết luận và hướng
phát triển 13 3.1 Kết luận 13 3.1.1 Kết quả
đạt được 13 3.1.2 Hạn chế 13 3.2 Hướng phát triển 13 Tài liệu tham
khảo 14
Trang 4Trang | 1 GVHD: Mai Trọng Khang
1 TỔNG QUAN
1.1 Vài nét về Machine Learning
1.1.1 Khái niệm
Machine learning là một lĩnh vực con của Trí tuệ nhân tạo(Artificial Intelligence) sử dụng các thuật toán cho phép máy tính có thể học từ dữ liệu để thực hiện các công việc thay vì được lập trình một cách rõ ràng
1.1.2 Phân loại thuật toán của Machine Learning
− Học có giám sát là thuật toán học và dự đoán đầu ra dựa trên các dữ liệu đã có từ trước được chú thích các thuộc tính và định danh đầy đủ cho từng đối tượng − Học không giám sát là thuật toán học dự đoán dựa trên các dữ liệu có sẵn, tuy nhiên các dữ liệu này không có chú thích hay định danh đầy đủ
− Học bán giám sát là thuật toán học và dự đoán dựa trên một bộ dữ liệu mà chỉ một phần trong số đó được chú thích và có định danh đầy đủ
− Học củng cố là thuật toán tự học và dự đoán đầu ra sao cho đạt được kết quả tốt nhất trong một hoàn cảnh nào đó
1.2 Object Detection
1.2.1 Khái niệm
− Bài toán phát hiện đối tượng (object detection) là bài toán nhận diện và định vị các đối tượng Đầu vào của bài toán có thể là ảnh hoặc video, đầu ra bao gồm tên và vị trí của các đối tượng xuất hiện trong ảnh
− Hiện nay object detection được áp dụng rất nhiều trong các lĩnh vực hàng ngày như nhận diện biển số xe, phát hiện phương tiện giao thông, phát hiện khuôn mặt người,…Mỗi lĩnh vực lại có các thách thức cũng như các phương pháp khác nhau
để giúp các thuật toán object detection đạt được hiệu quả tốt nhất có thể
1.2.2 Một số phương pháp Object Detection
1.2.2.1 Faster-RCNN
Faster R-CNN là một phương pháp để giải quyết bài toán phát hiện đối tượng trong ảnh
Trang | 2
Trang 5GVHD: Mai Trọng Khang
Hình 1.1 Framework Faster R-CNN
Trang 6Trang | 3 GVHD: Mai Trọng Khang
− Đầu tiên, đầu vào của Faster R-CNN là một hình ảnh Bức hình này được đưa vào một deep Fully Convolutional Network (tương tự Fast R-CNN) để lấy được feature maps của bức hình
− Sau đó feature maps này được đưa vào Region Proposal Network để tạo ra các vùng đề xuất
− Các vùng đề xuất được ánh xạ lên feature maps để lấy được các features của từng vùng Các đặc trưng này được đưa vào RoI Pooling Layer để tạo ra các ma trận có cùng kích thước
− Từng ma trận đặc trưng sẽ được đưa vào để phân lớp và hồi quy bouding-box − Trong Faster R-CNN, mạng đầu tiên là mạng RPN – một Deep Fully Convolutional Network Mạng này nhận đầu vào là một ảnh có kích thước bất kỳ Đầu ra là tập hợp các vùng đề xuất cùng với điểm đánh giá chứa vật thể của từng vùng
Hình 1.2 RoI Pooling Layer
− Khi lấy được ma trận đặc trưng của từng vùng đề xuất, các ma trận này không cùng kích thước Để chuẩn hoá dữ liệu, các ma trận sẽ được đưa vào RoI pooling layer Faster R-CNN sử dụng max pooling layer
− Khi chúng ta có đầu vào là một ma trận đặc trưng và RoI với độ lớn w×h và vị trí như hình và cần đầu ra là ma trận có độ lớn W×H Khi đó mỗi pooling area trung gian sẽ có kích thước h/H×w/W
− Sau đó, với mỗi pooling area, ta chọn giá trị lớn nhất trong đó, kết quả thu được là
ma trận có kích thước mong muốn
Trang | 4 GVHD: Mai Trọng Khang
1.3 Một số bài toán và bộ dữ liệu của Object Detection
Trang 71.3.1 Phát hiện chữ số viết tay
− Phát hiện chữ số viết tay có thể xem như là bài toán cơ bản cho người mới tìm hiểu
về bài toán Object Detection
− Bài toán sử dụng bộ dữ liệu Mnist với đầu vào là ảnh và đầu ra là chữ số cùng với
dự đoán tương ứng
1.3.2 Phát hiện người
− Phát hiện người là bài toán khá phổ biến trong lĩnh vực Object Detection, bài toán còn mở rộng ra với các yêu cầu như phát hiện hành động của người, phát hiện các
bộ phận người, phát hiện khuôn mặt hay thậm chí là nhận diện cảm xúc khuôn mặt,… tuy nhiên do thiếu thốn về mặt dữ liệu nên các nghiên cứu vẫn chỉ
dừng ở mức nội bộ và ít được công khai
− Bài toán thường có đầu vào là ảnh hoặc video và đầu ra là vị trí của người được phát hiện trong ảnh Hiện nay có khá nhiều bộ dữ liệu lớn có bao gồm nhận diện con người như VOC
Trang | 5 GVHD: Mai Trọng Khang
1.3.3 Bộ dữ liệu VOC2007
− VOC2007 là một bộ dữ liệu được công bố lần đầu tiên vào ngày 07/08/2007 − Bộ
dữ liệu gồm có 5011 ảnh huấn luyện và 4952 ảnh kiểm tra với 20 lớp đối tượng:
• Người: person
Trang 8• Động vật: bird, cat, cow, dog, horse, sheep
• Phương tiện: aeroplane, bicycle, boat, bus, car, motorbike, train
• Trong nhà: bottle, chair, dining table, potted plant, sofa, tv/monitor
Bộ dữ liệu đã được sử dụng trong cuộc thi The PASCAL Visual Object Classes Challenge 2007 với một số hạng mục như:
• Classification
• Detection
Trang | 6 GVHD: Mai Trọng Khang
2 THỰC NGHIỆM
2.1 Google Colab
Trang 9Google Colab là một công cụ trực tuyến miễn phí vô cùng hữu ích dành cho
người mới tìm hiểu về Machine Learning và muốn thực nghiệm các kiến thức của bản thân
Google Colab là một công cụ trực tuyến do Google cung cấp, nó cung cấp các tùy chọn cơ bản cần thiết cho một người nghiên cứu về Machine Learning:
• Công cụ miễn phí: bạn sẽ không mất một khoản phí nào khi sử dụng Google Colab trừ khi bạn muốn sử dụng một cấu hình mạnh mẽ hơn
• Cung cấp môi trường: máy ảo linux cho phép bạn cài đặt, upload, download toàn
bộ những gì bạn cần khi bắt đầu huấn luyện một bộ dữ liệu
• Cho phép bạn kết nối Google Drive: bạn có thể kết nối, lưu trữ và truy cập trực tiếp đến các tệp trên Google Drive
• Cho phép các bạn sử dụng GPU: GPU miễn phí mà Google cung cấp có thể giúp bạn thực nghiệm hầu hết các phương pháp với các bộ dữ liệu vừa và nhỏ Nếu muốn thao tác với các bộ dữ liệu lớn hơn, bạn nên suy nghĩ về việc trả phí để có thể sử dụng các GPU mạnh mẽ hơn
Trang | 7 GVHD: Mai Trọng Khang
2.2 Nhận diện chữ số viết tay
Nhận diện chữ số viết tay là một bài toán khá đơn giản và có rất nhiều bài
hướng dẫn mà có thể dễ dàng thực hiện với Google Colab:
Đầu tiên, bạn cần các thư viện thích hợp:
Trang 10import numpy as np
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation,
Flatten from keras.layers import Conv2D, MaxPooling2D
from keras.utils import np_utils
from keras.datasets import mnist
Tiếp theo là upload bộ dữ liệu mnist, ở đây mnist đã có sẵn trong keras:
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_val, y_val = X_train[ 50000 : 60000 ,:], y_train[ 50000 : 60000 ]
X_train, y_train = X_train[: 50000 ,:], y_train[: 50000 ]
print (X_train.shape)
Tiếp theo cần sửa đổi kích thước của bộ dữ liệu cho phù hợp với đầu vào của mạng sẽ sử dụng:
X_train = X_train.reshape(X_train.shape[ 0 ], 28 , 28 , 1 )
X_val = X_val.reshape(X_val.shape[ 0 ], 28 , 28 , 1 )
X_test = X_test.reshape(X_test.shape[ 0 ], 28 , 28 , 1 )
Trang | 8 GVHD: Mai Trọng Khang
Sau đó chúng ta sẽ khởi tạo một model đơn giản dùng cho việc huấn luyện
# 5 Định nghĩa model
model = Sequential()
# Thêm Convolutional layer với 32 kernel, kích thước kernel 3*3 # dùng hàm sigmoid làm activation và chỉ rõ input_shape cho layer đầu tiên
model.add(Conv2D( 32 , ( 3 , 3 ), activation= 'sigmoid' , input_shape=( 28 , 28 ,
Trang 111 )))
# Thêm Convolutional layer
model.add(Conv2D( 32 , ( 3 , 3 ), activation= 'sigmoid' ))
# Thêm Max pooling layer
model.add(MaxPooling2D(pool_size=( 2 2 )))
# Flatten layer chuyển từ tensor sang vector
model.add(Flatten())
# Thêm Fully Connected layer với 128 nodes và dùng hàm
sigmoid model.add(Dense( 128 , activation= 'sigmoid' ))
# Output layer với 10 node và dùng softmax function để chuyển sang xác xuất
model.add(Dense( 10 , activation= 'softmax' ))
#!git clone https://github.com/titu1994/Keras-ResNeXt ! cp
"/content/drive/My Drive/LA/CODE/Mnist/resnext.py" "/content/"
from keras.models import Model
from keras import applications
from resnext import ResNext
model = ResNext(input_shape = ( 28 , 28 , ) )
Trang | 9 GVHD: Mai Trọng Khang
Hoàn thành các bước trên sẽ đến bước huấn luyện bộ dữ liệu, các bạn cần khai báo các thành phần tính toán cần thiết và sau đó sẽ bắt đầu huấn luyện
model compile (loss= 'categorical_crossentropy' ,
optimizer= 'adam' ,
metrics=[ 'accuracy' ])
H = model.fit(X_train, Y_train, validation_data=(X_val, Y_val),
batch_size= 64 , epochs= 3 , verbose= 1 )
Trang 12Khi xuất hiện các dòng sau có nghĩa là model đang được huấn luyện
Train on 50000 samples, validate on 10000 samples
Epoch 1/3
50000/50000 [==============================] - 1409s 28ms/step - loss: 1.8353 - acc: 0.9047 - val_loss: 1.0486 - val_acc: 0.8884 Epoch 2/3 50000/50000 [==============================] - 1406s 28ms/step - loss: 0.7904 - acc: 0.9385 - val_loss: 4.0462 - val_acc: 0.4705 Epoch 3/3 50000/50000 [==============================] - 1402s 28ms/step - loss: 0.6880 - acc: 0.9426 - val_loss: 2.8854 - val_acc: 0.6843
Sau khi huấn luyện kết thúc, có thể dễ dàng kiểm tra kết quả bằng cách cho model dự đoán một ảnh:
image = X_test[ 10 ]
plt.imshow(image.reshape( 28 , 28 ), cmap= 'gray' )
y_predict = model.predict(image.reshape( 1 28 , 28 , ))
print ( 'Giá trị dự đoán: ' , np.argmax(y_predict))
Ta được kết quả như sau:
Trang | 10 GVHD: Mai Trọng Khang
2.3 Phát hiện người
Để phát thực nghiệm cho bài toán phát hiện người, em sử dụng bộ dữ liệu
VOC2007, framework mmdetection và phương pháp Faster-RCNN
Để có thể cài đặt MMDetection trên Google Colab cần các lệnh sau:
! conda install pytorch torchvision -c pytorch
#mmcv-full
%cd /content/drive/MyDrive/LA/CODE/Thermal
! git clone https://github.com/open-mmlab/mmcv.git
%cd mmcv
! MMCV_WITH_OPS= 1 pip install -e
#mmdet
Trang 13%cd /content/drive/MyDrive/LA/CODE/Thermal
! git clone
https://github.com/open-mmlab/mmdetection.git %cd
mmdetection
! pip install -r requirements/build.txt
! pip install -v -e
#cài đặt các thư viện cần thiết khác
! pip install onnx
! pip install onnxoptimizer
! pip install onnxruntime
Sau đó bước quan trọng khác là chuẩn bị file config thích hợp để huấn luyện, cần chú ý các thông số sau:
Thay đổi num_classes cho phù hợp với số class trong bộ dữ liệu
bbox_head=dict(
type = 'Shared2FCBBoxHead' ,
in_channels= 256 ,
fc_out_channels= 1024 ,
roi_feat_size= 7 ,
num_classes = 15 )
Chọn thư mục lưu trữ các model huấn luyện được:
work_dir = '/VOC/work_dir/faster_r50_fpn_1x_VOC2007'
Trang | 11 GVHD: Mai Trọng Khang
Thay đổi các đường dẫn đến bô dữ liệu của bạn:
Trang 14Các thông số còn lại lấy theo mặc định
Kết quả nhận diện trên ảnh
Tra
ng | 12 GVHD: Mai Trọng Khang
3 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
3.1 Kết luận
3.1.1 Kết quả đạt được
− Hiểu được một số kiến thức cơ bản về Machine Learning
− Nắm được cách huấn luyện một model
− Huấn luyện được một số model đơn giản
Trang 153.1.2 Hạn chế
− Trong quá trình thực nghiệm xuất hiện nhiều lỗi và gặp nhiều khó khăn để giải quyết
− Trang thiết bị hạn chế dẫn đến việc mất nhiều thời gian để huấn luyện model
3.2 Hướng phát triển
− Tìm hiểu các phương pháp Object Detection khác
− Áp dụng lại các kiến thức đã đạt được cho các bài toán khác với các thử thách cao hơn
Trang | 13 GVHD: Mai Trọng Khang
TÀI LIỆU THAM KHẢO
[1] http://host.robots.ox.ac.uk/pascal/VOC/voc2007/,
[2] https://docs.microsoft.com/en-us/aspnet/core/?view=aspnetcore-3.1,
[3] https://github.com/open-mmlab/mmdetection
[4] Ren, Shaoqing, et al "Faster r-cnn: Towards real-time object detection with region proposal networks." IEEE transactions on pattern analysis and machine intelligence 39.6 (2016): 1137-1149
Trang 16Trang | 14