TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
LUẬN VĂN THẠC SĨ
Xử lý ảnh, nhận biết phương tiện trong hệ
thống iot cho giao thông
ĐÀO HUY THẠCH
Ngành: Kỹ thuật viễn thông
Giảng viên hướng dẫn: TS. Phan Xuân Vũ
Viện:
Điện tử - Viễn Thông
Hà Nội, 2020
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
LUẬN VĂN THẠC SĨ
Xử lý ảnh, nhận biết phương tiện trong hệ
thống iot cho giao thông
ĐÀO HUY THẠCH
Ngành: Kỹ thuật viễn thông
Giảng viên hướng dẫn:
Viện:
TS. Phan Xuân Vũ
Điện tử - Viễn Thông
Hà Nội, 2020
Chữ ký của GVHD
LỜI NÓI ĐẦU
Luận văn tốt nghiệp là kết quả của quá trình học tập và nghiên cứu tại viện
Điện Tử - Viễn Thông, viện Đào tạo Sau Đại Học, trường đại học Bách Khoa Hà
Nội. Luận văn nghiên cứu và lập trình ứng dụng vào thiết bị IoT (điện thoại di
động) nhận biết phương tiện giao thông trong hệ thống giao thơng. Mục đích của
đề tài giúp sử dụng Keras và TensorFlow để training model nhận biết phương tiện.
Sử dụng TensorFlow Lite đưa model vào các thiết bị IoT như điện thoại, chip
nhúng, web … để đưa vào ứng dụng một cách nhanh chóng. Với thời gian khơng
nhiều và dịch bệnh xảy ra để thực hiện đề tài này, em đã gặp nhiều khó khăn trong
việc làm quen kiến thức về deep learning sử dụng TensorFlow và sử dụng
TensorFlow Lite để nhúng model vào trong các thiết bị IoT (điện thoại). Tuy nhiên
với sự giúp đỡ tận tình của các thầy cô và sự cố gắng của bản thân, em đã hồn
thành đề tài của mình.
LỜI CẢM ƠN
Em xin chân thành gửi lời cảm ơn đến T.S Phan Xuân Vũ đã tận tình giúp
đỡ em trong quá trình thực hiện đề tài này. Em cũng gửi lời cảm ơn đến các anh
và các bạn đã chia sẻ kinh nghiệm, kiến thức cho em.
Em xin chân thành cảm ơn sự dạy dỗ của các giáo viên Viện Điện Tử Viễn
Thơng, phịng Đào Tạo Sau Đại Học đã tận tình hướng dẫn, giúp đỡ em trong suốt
quá trình làm đồ án bất chấp dịch bệnh xảy ra.
Cuối cùng, em xin gửi lời cảm ơn đến gia đình mình, những người ln
bên cạnh động viên, khuyến khích để em hoàn thành đề tài này.
Em rất mong nhận được những sự góp ý, chỉ bảo tận tình của các thầy cơ
và các bạn về những vấn đề cịn khúc mắc hay thiếu sót của luận văn.
Em xin chân thành cảm ơn!
Học viên
ĐÀO HUY THẠCH
MỤC LỤC
MỞ ĐẦU................................................................................................................ 1
CHƯƠNG 1. MẠNG NƠ-RON TÍCH CHẬP ..................................................... 4
1.1.
Kiến trúc mạng CNN ................................................................................ 4
1.1.1
Tầng Tích chập .................................................................................. 5
1.1.2
Lớp Pooling ....................................................................................... 8
1.1.3
Fully Connected ................................................................................. 9
1.2
Lịch sử phát triển mạng CNN ................................................................ 10
1.2.1
LeNet-5 (1998) ................................................................................ 10
1.2.2
Alexnet (2012) ................................................................................. 11
1.2.3
ZFNet (2013) ................................................................................... 14
1.2.4
VGGNet (2014) ............................................................................... 15
1.2.5
GoogleNet (2014) ............................................................................ 17
1.2.6
ResNets (2015) ................................................................................ 20
CHƯƠNG 2. HỌC CHUYỂN GIAO (TRANSFER LEARNING) VÀ
TENSORFLOW LITE ......................................................................................... 23
2.1
Học Chuyển Giao (Transfer learning) .................................................... 23
2.2
Tensorflow Lite ...................................................................................... 32
CHƯƠNG 3. HỆ THỐNG IoT XỬ LÝ ẢNH NHẬN BIẾT PHƯƠNG TIỆN
TRONG GIAO THÔNG ...................................................................................... 35
3.1
Tổng quan hệ thống ................................................................................ 35
3.2
Phần huấn luyện ..................................................................................... 36
3.2.1
Môi trường huấn luyện .................................................................... 38
3.2.2
Xử lý dữ liệu đầu vào để học ........................................................... 40
3.2.3
Lựa chọn mô hình và phương pháp để thực hiện học chuyển giao . 41
3.3
Phần mềm ứng dụng vào điện thoại ....................................................... 45
3.4
Kết luận phần mềm nhận diện xe ........................................................... 52
CHƯƠNG 4. KẾT LUẬN .................................................................................. 53
TÀI LIỆU THAM KHẢO.................................................................................... 54
i
DANH MỤC HÌNH VẼ
Hình 1.1 Mạng nơ ron tích chập ............................................................................. 4
Hình 1.2 Kiến trúc một mạng CNN........................................................................ 5
Hình 1.3 Ma trận đầu vào mà ma trận kernel thực thiện tích chập ........................ 6
Hình 1.4 Cách qt và tính giá trị feature map [1] ................................................. 6
Hình 1.5 Kết quả thu được sau khi hồn tất việc qt và tính .............................. 7
Hình 1.6 Kích thước tăng lên của feature map sau khi thêm padding ................... 7
Hình 1.7 Mơ tả hoạt động của Max Pooling với strike là 2 ................................... 9
Hình 1.8 Lớp Fully Connected ............................................................................... 9
Hình 1.9 Kiến trúc mạng LeNet (1998) [3] .......................................................... 10
Hình 1.10 Kiến trúc mạng Alexnet (2012) [6] .................................................... 12
Hình 1.11 Kiến trúc mạng ZFNet (2013) [6] ....................................................... 14
Hình 1.12 Kiến trúc mạng VGGNet (2014) [6] ................................................... 16
Hình 1.13 Kiến trúc mạng VGG16....................................................................... 16
Hình 1.14 Kiến trúc Inception Module [6] ........................................................... 18
Hình 1.15 Kiến trúc Inception V1 [6] .................................................................. 18
Hình 1.16 Kiến trúc Inception V2 [6] ................................................................. 19
Hình 1.17 Kiến trúc Inception V3 [6] ................................................................. 19
Hình 1.18 Kiến trúc Inception V4 [6] .................................................................. 20
Hình 1.19 So sánh tỉ lệ chính xác với việc tang layers [6] ................................... 21
Hình 1.20 ResNets Block [6]................................................................................ 22
Hình 1.21 ResNets (2015) .................................................................................... 22
Hình 2.1 Kết quả thực nghiệm theo số lượng lớp mạng CNN được chuyển giao [9]
.............................................................................................................................. 25
Hình 2.2 Mơ hình VGG16 (trái) và mơ hình VGG16 chỉ bao gồm ConvNet bỏ
Fully connected layer (phải) [10] ......................................................................... 26
Hình 2.3 Dạng một khơng có lớp ẩn, đầu ra là hàm Softmax [10] ...................... 27
Hình 2.4 Dạng hai mỗi class sẽ phân loại với các class cịn lại [10].................... 27
Hình 2.5 Model VGG16 bỏ đi các lớp fully connected và thêm fully connected
layer mới [10] ....................................................................................................... 28
ii
Hình 2.6 Freeze các layer của pre-trained model, chỉ train ở các layer mới [10] 29
Hình 2.7 Unfreeze các layer của pre-trained và train tất cả các layer [10] .......... 30
Hình 2.8 Bảng các models có sẵn trên keras [11] ................................................ 31
Hình 2.9 Quy trình triển khai TensorFlow Lite [1] ............................................. 33
Hình 3.1 Luồng nhận dạng phương tiện của hệ thống ......................................... 35
Hình 3.2 Pha huấn luyện ...................................................................................... 36
Hình 3.3 Các thư viện deep learning và các hãng công nghệ lớn [13] ................ 38
Hình 3.4 Số lượng tuổi và các đóng góp trên github repo của các thư viện [13] 39
Hình 3.5 Số lượng các bài báo đề cập đến các thư viện năm 2017 [13] .............. 39
Hình 3.6 Một số hình ảnh xử lý bộ dữ liệu bằng Keras với lật và zoom ............. 41
Hình 3.7 Một số hình ảnh xử lý bộ dữ liệu bằng Keras với zoom và dịch .......... 41
Hình 3.8 Độ chính xác của học chuyển giao với MobileNetV2 .......................... 44
Hình 3.9 Độ chính xác của học chuyển giao với Inception V3 ........................... 44
Hình 3.10 Sơ đồ người dùng sử dụng ứng dụng nhận diện loại phương tiện ...... 45
Hình 3.11 Luồng hoạt động của ứng dụng .......................................................... 46
Hình 3.12 Vị trí đặt file model và nhãn ............................................................... 46
Hình 3.13 Giao diện xuất hiện cho phép lựa chọn ảnh từ bộ sưu tập .................. 47
Hình 3.14 Giao diện xuất hiện ảnh các loài phương tiện trong bộ sưu tập.......... 48
Hình 3.15 Giao diện kết quả hiển thị sau khi chọn xe máy ................................. 49
Hình 3.16 Giao diện kết quả hiển thị sau khi chọn xe tải .................................... 50
Hình 3.17 Giao diện kết quả hiển thị sau khi chọn xe bán tải ............................. 51
iii
DANH MỤC VIẾT TẮT
STT
Ý nghĩa
Từ viết tắt
1
ConvNet/CNN
Mạng Nơ-ron tích chập
2
Feature map
Bản sao được tạo ra sau khi thực hiện
tích chập
3
Feature
Các tính năng
4
Kernel
Ma trận lõi để nhân tích chập
5
Input
Đầu vào
6
Pixel
Giá trị điểm ảnh
7
Stride
Bước nhảy
8
Pooling
Lớp Pooling làm giảm kích thước
feature map
9
Training
Đào tạo
10
Dimensionality
Giảm chiều sâu đầu vào
reduction
11
Model
Mơ hình
iv
MỞ ĐẦU
1. Lý do chọn đề tài
Hiện nay, tình trạng ùn tắc giao thông tại các thành phố lớn như Hà Nội và
thành phố Hồ Chí Minh diễn ra thường xuyên, gây thiệt hại hàng ngàn tỷ đồng.
Nhiều biện pháp được đưa ra như mở rộng đường, xây thêm cầu vượt, thành lập
tuyến đường sắt trên cao hay việc cấm đường một số phương tiện trong những
khung giờ nhất định. Trong các giải pháp trên, việc cấm đường một số loại
phương tiện là một giải pháp dễ triển khai hơn đồng thời cũng mang lại những
hiệu quả nhất định trong khi chờ đợi các giải pháp đồng bộ quy mô hơn. Để hỗ
trợ việc cấm các loại phương tiện tại một nút giao thơng thì việc xác định các loại
phương tiện lưu thơng qua nút giao thơng đó là vơ cùng quan trọng. Bài tốn nhỏ
hơn chính là xác định từng loại phương tiện đó, vì vậy cần phân loại từng loại
phương tiện giao thông cần được giải quyết để giải quyết bài toán xác định lưu
lương của loại phương tiện đó qua các nút giao thơng từ đó giúp các cơ quan
chức năng biết được các phương tiện giao thông nào hay lưu thông qua các nút
giao thông để từ đó đưa ra quy hoạch phù hợp. Việc thực hiện chủ yếu quan sát
camera sau đó xử lý ảnh đơn thuần, tuy nhiên phương pháp khó áp dụng với một
lưu lượng lớn, có sự mở rộng về chủng loại phương tiện.
Thời gian gần đây, nhờ sự phát triển mạnh mẽ về khả năng tính tốn của
các thế hệ máy tính hiện đại cũng như sự bùng nổ dữ liệu thông qua mạng
Internet, ta đã chứng kiến nhiều sự đột phá trong lĩnh vực học máy, đặc biệt trong
lĩnh vực thị giác máy tính. Sự phát triển vượt bậc của các phương pháp học sâu
và khả năng tính tốn của máy tính đã giúp thị giác máy tính đạt được những
thành tựu đáng kể trong lĩnh vực nhận dạng hình ảnh.
Việc nhúng các file model sau khi training vào các thiết bị IoT như điện
thoại, chip … thường có độ trễ lớn. Thường việc triển khai sẽ gửi ảnh đến server
thực hiện nhận dạng rồi trả lại về thiết bị IoT. Tuy nhiên với sự ra đời của
TensorFlow Lite việc nhúng các file model vào các thiết bị IoT sẽ trở nên dễ
dàng, nó cho phép suy luận học máy trên các thiết bị IoT với độ trễ nhỏ và kích
thước nhị phân nhỏ.
1
Đề tài “Xử lý ảnh, nhận biết phương tiện trong hệ thống IoT cho giao
thông” đã được đưa ra với hi vọng ứng dụng các mơ hình học sâu vào nhận dạng
hình ảnh với số lượng các loại phương tiện hạn chế sự dụng chúng là bộ nhận
dạng nhúng vào thiết bị IoT cụ thể ở đây là một ứng dụng di động nhận dạng một
vài loại phương tiện
2. Mục đích của luận văn
Do thời gian hạn chế trong thời gian thực hiện nghiên cứu cùng dịch bệnh
kéo dài, luận văn trước hết tập trung nghiên cứu mạng tích chập CNN và học
chuyển giao (transfer learning) trong học máy đồng thời thực hiện cài đặt một mơ
hình huấn luyện về nhận dạng ảnh trong học sâu với số lượng phương tiện được
hạn chế, và sử dụng TensorFlow Lite nhúng chúng vào thiết bị IoT (cụ thể là
điện thoại) làm bộ nhận dạng cơ sở cho ứng dụng hỗ trợ nhận dạng phương tiện
trên điện thoại thông minh mà không cần kết nối mạng internet.
3. Cơ sở dữ liệu
Bộ cơ sở dữ liệu ảnh là một trong các thành phần quan trọng hàng đầu
trong các phương pháp Học máy nói chung, được sử dụng để phục vụ cho q
trình tính tốn tham số và huấn luyện, tinh chỉnh các mơ hình. Thông thường, bộ
dữ liệu càng lớn và càng được chọn lọc tỉ mỉ cẩn thận thì độ chính xác của mơ
hình càng được cải thiện, nhưng trong phạm vi luận văn này kích thước CSDL sẽ
được hạn chế, cả về số lượng loại phương tiện sẽ nhận dạng cũng như số lượng
ảnh chụp cho mỗi loại phương tiện đó. Cụ thể:
- Số lượng phương tiện sẽ nhận dạng: 5 loại phương tiện như xe tải, xe
bán tải….
- Số lượng ảnh gốc cho mỗi loại phương tiện: khoảng 150 ảnh, bao gồm
các ảnh chụp phương tiện ở các góc độ khác nhau với nền tùy ý, có thể lấy từ
nguồn trên mạng hoặc tự chụp bằng thiết bị camera cá nhân.
4. Bộ huấn luyện nhận dạng phương tiện
Sử dụng phương pháp Học máy thuộc phương pháp học sâu, kết hợp sử
dụng học chuyển giao với các mơ hình đã được đánh giá tối ưu như google_v3,
ImageNet ...vv. Thực hiện huấn luyện, so sánh kết quả thu được giữa các
chương trình học chuyển giao khác nhau để lựa chọn file model tốt nhất nhúng
vào thiết bị IoT.
2
Lưu file model dưới dạng *tflite để đưa vào thiết bị di động sử dụng cho
việc dự đốn hình ảnh.
5. Ứng dụng nhận dạng phương tiện
Một trong các mục tiêu của luận văn là xây dựng thành công một ứng
dụng đơn giản trên điện thoại thông minh nhằm hỗ trợ người dùng nhận dạng
phương tiện, với tỉ lệ bao nhiêu phần trăm chính xác, bộ dự đốn sẽ đưa ra ba kết
quả cho người sử dụng.
Lý do em chọn điện thoại thơng minh làm nền tảng cho ứng dụng vì sự
phổ biến cũng như tính cơ động của thiết bị, điều này giúp cho ứng dụng dễ dàng
được phổ biến hơn từ đó hỗ trợ việc thu thập ảnh chụp cho cơ sở dữ liệu từ các
cộng tác viên sử dụng ứng dụng. Hệ thống cho phép người dung lựa chọn ảnh từ
thư viện ảnh của máy điện thoại sau đó thơng qua TensorFlow Lite tự động suy
luận ra kết quả với thời gian nhanh và độ chính xác cao mà không cần kết nối
internet hay sử dụng server. Nếu cần cập nhật chỉ cần cập nhật file model thông
qua cập nhật app hệ thống sẽ ngay lập tức được cập nhật.
6. Cấu trúc của luận văn
Chương 1: Trình bày về Mạng Nơ-Ron Tích chập, một mạng chuyên
được sử dụng trong các bài tốn về nhận dạng qua hình ảnh. Tìm hiểu về lịch sử
phát triển của Mạng Nơ-ron tích chập cũng như kiến trúc của các mạng Nơ-ron
này nhằm giải quyết các bài toán về nhận dạng ảnh.
Chương 2: Trình bày về học chuyển giao (Transfer learning), cung cấp
các thực hiện học chuyển giao và cung cấp bộ application của Keras cho việc học
chuyển giao. Tìm hiểm về TensorFlow Lite, các lợi ích của TensorFlow Lite
cũng như quy trình triển khai lưu một model định dạng TensorFlow Lite rồi sử
dụng trình biên dịch TensorFlow Lite để dự đốn trên model được lưu.
Chương 3: Trình bày về hệ thống xử lý hình ảnh nhận biết phương tiện
trên điện thoại thơng minh, sử dụng TensorFlow Lite để thực hiện dự đoán trên
model được đào tạo trước đó. Trình bày một số kết quả so sánh giữa các file
model dựa trên các application học chuyển giao khác nhau. Lựa chọn model phù
hợp để nhúng vào ứng dụng nhận diện phương tiện. Đưa ra một số nhận xét về
kết quả dự đoán của ứng dụng.
Chương 4: Kết luận thu được và hướng phát triển tiếp của đề tài
3
CHƯƠNG 1. MẠNG NƠ-RON TÍCH CHẬP
Hình 1.1 Mạng nơ ron tích chập
Một mạng Nơ-ron tích chập (ConvNet/CNN) là một thuật tốn học sâu có
thể lấy các hình ảnh đầu vào, tầm quan trọng của việc gán (trọng số và độ lệch có
thể học được) tới các khía cạnh/đối tượng khác nhau trong ảnh và có khả năng
phân biệt hình ảnh này với hình ảnh khác. Yêu cầu chuẩn bị xử lý trong một
ConvNet là thấp hơn nhiều so với các thuật toán phân loại khác. Trong khi ở các
thuật toán nguyên thủy các bộ lọc được thiết kế thủ công, với đủ sự đào tạo.
ConvNet có khả năng để học những bộ lọc/ các đặc tính. Để thuận tiện khi nói
đến mạng Nơ-ron tích chập tơi xin phép sử dụng cụm từ viết tắt là CNN.
CNN là một trong những mơ hình mạng Học sâu phổ biến nhất hiện nay,
có khả năng nhận dạng và phân loại hình ảnh với độ chính xác rất cao, thậm chí
cịn tốt hơn con người trong nhiều trường hợp. Mơ hình này đã và đang được
phát triển, ứng dụng vào các hệ thống xử lý ảnh lớn của Facebook, Google hay
Amazon… cho các mục đích khác nhau như các thuật tốn tagging tự động, tìm
kiếm ảnh hoặc gợi ý sản phẩm cho người tiêu dùng.
1.1. Kiến trúc mạng CNN
Kiến trúc của một CNN tương tự như mơ hình kết nối của các tế bào thần
kinh trong não người và được lấy cảm hứng từ tổ chức của vỏ não thị giác. Các tế
bào thần kinh riêng lẻ chỉ phản ứng với các kích thích của một vùng hạn chế của
trường thị giác gọi là trường tiếp nhận. Tập hợp các trường như vậy chồng nên
nhau để bao phủ toàn bộ khu vực trực quan.
4
Hình 1.2 Kiến trúc một mạng CNN
Nhìn trên hình ta thấy CNN có ba tầng chính để xây dựng kiến trúc cho
một mạng Nơ-ron tích chập:
●
Tầng tích chập;
●
Tầng gộp (pooling layer);
●
Tầng được kết nối đầy đủ (fully-connected).
Tầng kết nối đầy đủ giống như các mạng Nơ-ron thông thường, và tầng
chập thực hiện tích chập nhiều lần trên tầng trước. Tầng gộp có thể làm giảm
kích thước mẫu trên từng khối 2x2 của tầng trước đó.
1.1.1 Tầng Tích chập
Lớp tích chập là một tập các là một bản sao chép (feature map) của input
ban đầu, nhưng được trích xuất ra các đặc tính (feature) cụ thể. Sao chép như thế
nào thì lại dựa vào một ma trận con (kernel). Đây là một ma trận sẽ quét qua ma
trận dữ liệu đầu vào, từ trái qua phải, trên xuống dưới, và nhân tương ứng từng
giá trị của ma trận đầu vào mà ma trận kernel rồi cộng tổng lại, đưa qua
activation function (sigmoid, relu, elu, ... ), kết quả sẽ là một con số cụ thể, tập
hợp các con số này lại là 1 ma trận nữa, chính là feature map.
Hãy nhìn vào ví dụ sau cho dễ hiểu:
5
Ta có 1 ma trận đầu vào input và 1 kernel:
Hình 1.3 Ma trận đầu vào mà ma trận kernel thực thiện tích chập
Thực hiện quét ma trận kernel qua từng phần tử input và tính tốn trên
phần nhân tương ứng rồi cộng các kết quả lại ta thu được một giá trị tại feature
map.
Hình 1.4 Cách qt và tính giá trị feature map [1]
Như trên hình ta thấy việc tính ra điểm đầu tiên dễ dàng được tính bằng
nhân từng điểm của ma trận kernel với từng điểm tương ứng trên ma trận đầu vào
sau đó cộng tổng tất cả chúng lại.
1x1 + 1x0 + 1x1 + 0x0 + 1x1 + 1x1 + 1x0 + 0x1 + 0x0 + 1x1 = 4
Chúng ta thực hiện lần lượt cho đến hết với bước nhảy là 1pixel kết quả
thu được thể hiện dưới đây:
6
Hình 1.5 Kết quả thu được sau khi hồn tất việc quét và tính
Như ta thấy nếu dịch (stride) từng pixel thì ma trận kernel sẽ qt 2 ơ cạnh
nhau nhưng nếu dịch 2 pixels (strike = 2) thì kernel sẽ quét ô số 1 và ô số 3 bỏ
qua ô số 2. Điều này nhằm tránh lặp lại giá trị ở những ô vừa quét. Ta cũng nhận
thấy rằng nếu tăng strike hoặc kích thước kernel ma trận feature map sẽ ngày một
nhỏ đi và ma trận kernel phải nằm trọn vẹn trong ma trận đầu vào. Để giữ nguyên
kích cỡ của feature map so với ban đầu. Ta thêm 0 vào xung quanh ma trận đầu
vào lúc này ma trận đầu vào, người ta gọi kĩ thuật này là padding. Khi ta điều
chỉnh padding = 1, tức là ta đã thêm 1 ô bọc xung quanh các cạnh của input,
muốn phần bọc này càng dày thì ta cần phải tăng padding lên.
Hình 1.6 Kích thước tăng lên của feature map sau khi thêm padding
Trong ví dụ Hình 1.5 ta thấy rằng kích thước của ma trận feature thu được
là 3x3 nhỏ hơn kích thức ma trận gốc. trong ví dụ Hình 1.6 thì kích thước ma trận
feature thu được là 5x5 bằng kích thước của ma trận gốc 5x5. Vậy kích thước của
7
ma trận feature thu được sẽ được quyết định bởi phần padding thêm vào, trong ví
dụ Hình 1.6 là phần viền màu xám nét đứt, kích thước ma trận filter và bước dịch
stride. Ta thấy rằng kích thước của ma trận feature map sẽ phụ thuộc vào kích
thước ma trận kernel, stride, padding, chúng được thể hiện theo công thức dưới
dây: [2]
𝑜=
𝑖+2∗𝑝−𝑘
𝑠
+1
(1)
trong đó:
𝑜: là kích thước ma trận feature map
𝑖: là ma trận đầu vào
𝑝: kích thước khoảng trắng padding thêm vào
𝑘: kích thước ma trận kernel
𝑠: strike của bộ lọc
1.1.2 Lớp Pooling
Tương tự như lớp Tích Chập, lớp Pooling có trách nhiệm giảm kích thước
khơng gian của Đối tượng kết hợp. Điều này là để giảm sức mạnh tính tốn cần
thiết để xử lý dữ liệu thơng qua giảm kích thước, tránh overfitting. Hơn nữa, nó
rất hữu ích để trích xuất các đặc trưng nổi trội là bất biến xoay và vị trí, do đó
duy trì q trình đào tạo mơ hình một cách hiệu quả.
Pooling hoạt động gần giống với lớp tích chập, nó cũng có 1 cửa sổ trượt
gọi là pooling window, cửa sổ này trượt qua từng giá trị của ma trận dữ liệu đầu
vào (thường là các feature map trong convolutional layer), chọn ra một giá trị từ
các giá trị nằm trong cửa sổ trượt.
Có hai loại pooling window: Tổng hợp tối đa và Tổng hợp trung bình.
Max Pooling trả về giá trị lớn nhất từ phần hình ảnh được bao phủ bởi Kernel.
Mặt khác, Average Pooling trả về giá trị trung bình của tất cả các giá trị từ phần
hình ảnh được bao phủ bởi Kernel.
Max Pooling cũng hoạt động như một bộ triệt nhiễu. Nó loại bỏ hồn tồn
các nhiễu hoạt động và cũng thực hiện khử nhiễu cùng với giảm kích thước. Mặt
khác, Average Pooling chỉ đơn giản là thực hiện giảm kích thước như một cơ chế
khử nhiễu. Do đó, chúng ta có thể thấy rằng Max Pooling sẽ được sử dụng rộng
dãi hơn so với Average Pooling.
8
Cơ chế hoạt động được minh họa dưới hình dưới đây. ở đây chúng ta thấy
pooling window sẽ có strike = 2 để đảm bảo không trùng nhau và sử dụng Max
Pooling.
Hình 1.7 Mơ tả hoạt động của Max Pooling với strike là 2
1.1.3
Fully Connected
Hình 1.8 Lớp Fully Connected
Lớp Fully connected, một layer để tập hợp các feature layer mà ta đã tìm
ra, chuyển đổi dữ liệu từ 3D, hoặc 2D thành 1D, tức chỉ còn là một vector. Còn
một layer cuối cùng là output, số Nơ-ron của layer này phụ thuộc vào số output
mà ta muốn tìm ra.
Có nhiều kiến trúc khác nhau của CNN có sẵn, là chìa khóa trong việc xây
dựng các thuật tốn có sức mạnh và sẽ cung cấp sức mạnh cho toàn bộ AI trong
tương lai gần. Một số trong số chúng đã được liệt kê dưới đây:
1.
LeNet
2.
AlexNet
3.
VGGNet
9
4.
GoogLeNet
5.
ResNet
6.
ZFNet
1.2 Lịch sử phát triển mạng CNN
1.2.1 LeNet-5 (1998)
Authors: Yann Lecun, Yoshua Bengio[3]
LeNet là một trong những mạng CNN lâu đời nổi tiếng nhất được Yann
Lecun phát triển vào những năm 1998s. Cấu trúc của LeNet gồm 2 layer
(Convolution + maxpooling) và 2 layer fully connected layer và output là
softmax layer . Chúng ta cùng tìm hiểu chi tiết architect của LeNet .
Hình 1.9 Kiến trúc mạng LeNet (1998) [3]
●
Input shape 32x32x1
●
Layer1:
●
Convolution layer 1: Kernel 5x5x3, stride = 1, no padding,
number filter = 6, output = 28x28x6.
●
AvgPooling layer: pooling size 2x2, stride = 2, padding =
“same”, output = 14x14x6.
●
Layer 2:
●
Convolution layer 2: kernel 5x5x6, stride = 1, no padding,
number filter = 16, output = 10x10x16.
●
AvgPooling layer: pooling size = 2x2, stride = 2, padding =
“same”, output = 5x5x16.
●
Flatten output = 5x5x16 = 120
●
Fully connected 1: output = 84
●
Fully connected 2: output = 10
●
SoftMax layer, output = 10 (10 digits). Nhược điểm của LeNet
là mạng còn rất đơn giản và sử dụng sigmoid (or tanh) ở mỗi convolution
layer mạng tính tốn rất chậm.
10
1.2.2 Alexnet (2012)
Authors: Alex Krizhevsky, Ilya Sutskever, Geoffrey Hinton. University of
Toronto, Canada. [3]
Mạng huấn luyện AlexNet là cơng trình đầu tiên phổ biến mạng CNN
trong lĩnh vực Thị giác máy tính, cũng là một trong những mạng huấn luyện
CNN nổi tiếng nhất nhờ thành tích ấn tượng mà nó đạt được trong cuộc thi nhận
dạng ảnh quy mô lớn tổ chức vào năm 2012. Cuộc thi này có tên chính thức là
ILSVRC – ImageNet Large Scale Visual Recognition Challenge [4], được
ImageNet - một hãng CSDL ảnh - tổ chức thường niên và được coi là cuộc thi
Olympics quy mô thế giới trong lĩnh vực Thị giác máy tính (computer vision).
Mục đích của cuộc thi là nhằm thử nghiệm các cơng nghệ mới giúp cho máy tính
có thể hiểu, phân tích, phát hiện và nhận dạng các vật thể trong một bức ảnh.
Cụ thể hơn, mục tiêu chính của cuộc thi năm 2012 đặt ra mà các đội tham
gia phải giải quyết là bài toán nhận dạng, với bộ dữ liệu huấn luyện lên đến 1,2
triệu ảnh được gán nhãn cho 1.000 hạng mục khác nhau. Nhóm SuperVision,
gồm các thành viên Alex Krizhevsky, Ilya Sutskever và Geoff Hinton, cùng với
mạng AlexNet của họ đã đạt được kết quả đáng kinh ngạc là chiến thắng áp đảo
nhóm đứng thứ hai với độ chính xác chênh lệch đến hơn 10% (15,31% và
26,17%) [5]. Điều đặc biệt là mạng huấn luyện này chỉ nhận dữ liệu đầu vào là
các giá trị điểm ảnh thô và khơng hề áp dụng bất kỳ phương pháp trích chọn đặc
trưng nào, trong khi mọi hệ thống nhận dạng thị giác truyền thống đều phải gồm
nhiều giai đoạn trích chọn đặc trưng hết sức tỉ mỉ, cẩn thận, thậm chí phải áp
dụng nhiều mẹo để cải thiện chất lượng nhận dạng. Thiết kế kiến trúc mạng huấn
luyện gần như hộp đen của máy bay, cộng với khả năng tự học các đặc trưng
thông qua các lớp ẩn, đã khiến CNN nói riêng và Học sâu nói chung trở thành
giải pháp mạnh mẽ nhất cho bài toán nhận dạng và phân loại vật thể cho tới bây
giờ.
Từ năm 2012, mạng CNN trở thành cái tên gắn liền với cuộc thi và đã có
rất nhiều mạng CNN nổi bật khác xuất hiện trong những năm sau đó VGG,
GoogleNet hay Microsoft ResNet… Các mạng CNN càng ngày càng đạt độ
chính xác cao hơn, tuy nhiên chúng có độ phức tạp và độ sâu lớn hơn rất nhiều,
ví dụ mạng CNN có thể coi là tốt nhất hiện nay – ResNet – đã sử dụng đến 152
11
lớp tính tốn. Sự phức tạp này u cầu khả năng tính tốn lớn, thời gian huấn
luyện lâu, và gây nhiều khó khăn trong việc cài đặt triển khai hệ thống, do đó
mạng AlexNet đã được chọn làm cơ sở phát triển phiên bản 26 thử nghiệm ban
đầu và việc cài đặt các mạng huấn luyện khác nhằm nâng cao chất lượng nhận
dạng của hệ thống sẽ được thử nghiệm trong tương lai.
AlexNet là một mạng CNN training với một số lượng parameter rất lớn
(60 million) so với LeNet. Một số đặc điểm:
●
Sử dụng relu thay cho sigmoid (or tanh) để xử lý với non-linearity.
Tăng tốc độ tính tốn lên 6 lần.
●
Sử dụng dropout như một phương pháp regularization mới cho CNN.
Dropout khơng những giúp mơ hình tránh được overfitting mà cịn làm giảm thời
gian huấn luyện mơ hình
●
Overlap pooling để giảm size của network (Traditionally pooling
regions không overlap).
●
Sử dụng local response normalization để chuẩn hóa ở mỗi layer.
●
Sử dụng kỹ thuật data augmentation để tạo thêm data training bằng
cách translations, horizontal reflections.
●
Alexnet training với 90 epochs trong 5 đến 6 ngày với 2 GTX 580
GPUs. Sử dụng SGD với learning rate 0.01, momentum 0.9 và weight decay
0.0005.
Hình 1.10 Kiến trúc mạng Alexnet (2012) [6]
●
Kiến trúc của Alexnet gồm 5 convolutional layer và 3 fully connection
layer. Activation Relu được sử dụng sau mỗi convolution và fully connection
layer. Detail architecter với dataset là imagenet size là 227x227x3 với 1000 class
(khác với trong hình trên size là 224x224):
●
Input shape 227x227x3.
12
●
Layer 1:
●
Conv 1: kernel: 11x11x3, stride = 4, no padding, number = 96,
activation = “relu”, output = 55x55x96.
●
Maxpooling layer: pooling size = 3x3stride = 2, padding = “same”,
output = 27x27x96.
●
Normalize layer.
●
Layer 2:
●
Conv 2: kernel :3x3x96, stride = 1, padding = “same”, number filter =
256, activation = relu, output = 27x27x256.
●
Maxpooling layer: pooling size = 3x3, stride=2, padding = “same”,
output = 13x13x256.
●
Normalize layer.
●
Layer 3:
●
Conv 3: kernel :3x3x256, stride = 1, padding= “same”, number filter =
384, activation = relu, output = 13x13x384.
●
Layer 4:
●
Conv 4: kernel: 3x3x384, stride = 1, padding = “same”, number filter =
384, activation= relu, output = 13x13x384
●
Layer 5:
●
Conv 5: kernel 3x3x384, stride = 1, padding = “same”, number filter =
256, activation = relu, output = 13x13x256.
●
Pooling layer: pooling size = 3x3, stride =2, padding = “same”, output
= 6x6x256.
●
Flatten 256x6x6 = 9216
●
Fully connected layer 1: activation = relu, output = 4096 + dropout
●
Fully connected layer 2: activation = relu, output = 4096 + dropout
●
Fully connected layer 3: activation = softmax, output = 1000 (number
(0.5).
(0.5).
class)
13
1.2.3 ZFNet (2013)
Author: Zeiler and Fergus [3]
ZFNet là một mạng CNN thắng trong ILSVRC 2013 với top-5 error rate
của 14.8%. ZFNet có cấu trúc rất giống với AlexNet với 5layer convolution, 2
fully connected layer và 1 output softmax layer. Khác biệt ở chỗ kernel size ở
mỗi Conv layer. Một số đặc điểm chính:
●
Tương tự AlexNet nhưng có một số điều chỉnh nhỏ.
●
AlexNet training trên 15m image trong khi ZF training chỉ có 1.3m
image.
●
Sử dụng kernel 7x7 ở first layer (AlexNet 11x11). Lý do là sử dụng
kernel nhỏ hơn để giữ lại nhiều thông tin trên image hơn.
●
Tăng số lượng filter nhiều hơn so với AlexNet
●
Training trên GTX 580 GPU trong 20 ngày
Hình 1.11 Kiến trúc mạng ZFNet (2013) [6]
●
Input shape 224x224x3.
●
Layer 1:
●
Conv 1: kernel = 7x7x3, stride = 2, no padding, number filter = 96,
output = 110x110x96.
●
Maxpooling1: pooling size = 3x3, stride=2, padding = “same”, output =
55x55x96
●
Normalize layer.
●
Layer 2:
●
Conv 2: kernel = 5x5x96, stride = 2, no padding, number filter = 256,
output = 26x26x256.
●
Maxpooling2: pooling size = 3x3, stride=2, padding = “same”, output =
13x13x256
●
Normalize layer.
14
●
Layer 3:
●
Conv 3: kernel = 3x3x256, stride=1, padding= “same”, number filter =
384, output = 13x13x384.
●
Layer 4:
●
Conv 4: kernel = 3x3x384, stride=1, padding= “same”, number filter =
384, output = 13x13x384.
●
Layer 5:
●
Conv 5: kernel = 3x3x384, stride=1, padding= “same”, number filter =
256, output = 13x13x256.
●
Maxpooling: pooling size = 3x3, stride =2, padding = “same”, output =
6x6x256.
●
Flatten 6x6x256 = 9216
●
Fully connected 1: activation = “relu”, output =4096
●
Fully connected 2: activation = “relu”, output =4096
●
Softmax layer for classifier ouput = 1000
1.2.4 VGGNet (2014)
Authors: Author: Simonyan and Zisserman; runners in ILSVRC 14.[3]
Sau AlexNet thì VGG ra đời với một số cải thiện hơn, trước tiên là model
VGG sẽ deeper hơn, tiếp theo là thay đổi trong thứ tự conv. Từ LeNet đến
AlexNet đều sử dụng Conv-maxpooling cịn VGG thì sử dụng 1 chuỗi Conv liên
tiếp Conv-Conv-Conv ở middle và end của architect VGG. Việc này sẽ làm cho
việc tính tốn trở nên lâu hơn nhưng những feature sẽ vẫn được giữ lại nhiều hơn
so với việc sử dụng maxpooling sau mỗi Conv. Hơn nữa hiện nay với sự ra đời
của GPU giúp tốc độ tính tốn trở nên nhanh hơn rất nhiều lần thì vấn đề này
khơng cịn đáng lo ngại. VGG cho small error hơn AlexNet trong ImageNet
Large Scale Visual Recognition Challenge (ILSVRC) năm 2014. VGG có 2
phiên bản là VGG16 và VGG19.
15
Hình 1.12 Kiến trúc mạng VGGNet (2014) [6]
●
Architect của VGG16 bao gồm 16 layer :13layer Conv (2layer conv-
conv, 3layer conv-conv-conv) đều có kernel 3x3, sau mỗi layer conv là
Maxpooling downsize xuống 0.5, và 3 layer fully connection. VGG19
tương tự như VGG16 nhưng có thêm 3layer convolution ở 3layer conv
cuối (thành 4 conv stack với nhau).
●
Detail parameter VGG16
Hình 1.13 Kiến trúc mạng VGG16
16
●
Sử dụng kernel 3x3 thay vì 11x11 ở Alexnet (7x7 ZFNet). Kết hợp 2
conv 3x3 có hiệu quả hơn 1 cov 5x5 về receptive field giúp mạng deeper hơn lại
giảm tham số tính tốn cho model.
●
3 Conv 3x3 có receptive field same 1 conv 7x7.
●
Input size giảm dần qua các conv nhưng tăng số chiều sâu.
●
Làm việc rất tốt cho task classifier và localizer (rất hay được sử dụng
trong object detection).
●
Sử dụng relu sau mỗi conv và training bằng batch gradient descent.
●
Có sử dụng data augmentation technique trong q trình training.
●
Training với 4 Nvidia Titan Black GPUs trong 2-3 tuần.
1.2.5 GoogleNet (2014)
Authors: Szegedy et al. in 2014 and is the winner of ILSVRC 14. [3]
Năm 2014, Google publish một mạng neural do nhóm research của họ
phát triển có tên là googleNet. Nó performance tốt hơn VGG, googleNet 6.7%
error rate trong khi VGG là 7.3% Ý tưởng chính là họ tạo ra một module mới có
tên là inception giúp mạng training sâu và nhanh hơn, chỉ có 5 triệu tham số so
với alexnet là 60m nhanh hơn gấp 12 lần.
Inception module là một mạng CNN giúp training wider (thay vì thêm
nhiều layer hơn vì rất dễ xảy ra overfitting + tăng parameter người ta nghĩ ra tăng
deeper ở mỗi tầng layer) so với mạng CNN bình thường. Mỗi layer trong CNN
truyền thống sẽ extract các thông tin khác nhau. Output của 5x5 conv kernel sẽ
khác với 3x3 kernel. Vậy để lấy những thơng tin cần thiết cho bài tốn của chúng
ta thì nên dùng kernel size như thế nào? Tại sao chúng sử dụng tất cả ta và sau đó
để model tự chọn. Đó chính là ý tưởng của Inception module, nó tính tốn các
kernel size khác nhau từ một input sau đó concatenate nó lại thành output.
Trong inception người ta dùng conv kernel 1x1 với 2 mục đích là giảm
tham số tính tốn và dimensionality reduction. Dimensionality reduction có thể
hiểu làm giảm chiều sâu của input (ví dụ input 28x28x100 qua kernel 1x1 với
filter = 10 sẽ giảm chiều sâu về cịn 28x28x10). Giảm chi phí tính tốn có thể
hiểu qua ví dụ sau:
17