Tải bản đầy đủ (.docx) (44 trang)

TRÍ TUỆ NHÂN TẠO ỨNG DỤNG DEEP LEARNING VÀO NHẬN DIỆN KÝ TỰ MÃ CONTAINER

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.93 MB, 44 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>KHOA HỆ THỐNG THÔNG TIN VÀ VIỄN THÁM</b>

<b>BÁO CÁO ĐỒ ÁN MƠN HỌC: TRÍ TUỆ NHÂN TẠO</b>

<b>ĐỀ TÀI: ỨNG DỤNG DEEP LEARNING VÀO NHẬN DIỆNKÝ TỰ MÃ CONTAINER</b>

<b>Giảng viên hướng dẫn: Th.S Phạm Minh Khan</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>Thành phố Hồ Chí Minh, ngày 10 tháng 10 năm 2023</b>

<b>TRƯỜNG ĐẠI HỌC TÀI NGUYÊN VÀ MÔI TRƯỜNGKHOA HỆ THỐNG THÔNG TIN VÀ VIỄN THÁM</b>

<b>BÁO CÁO ĐỒ ÁN MƠN HỌC: TRÍ TUỆ NHÂN TẠO</b>

<b>ĐỀ TÀI: ỨNG DỤNG DEEP LEARNING VÀO NHẬN DIỆNKÝ TỰ MÃ CONTAINER</b>

<b>Giảng viên hướng dẫn: Th.S Phạm Minh Khan</b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>Trương Thị Thùy Linh0950080013</b>

<b>Thành phố Hồ Chí Minh, ngày 10 tháng 10 năm 2023</b>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b>Nhận xét của giảng viên</b>

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>TS. Phạm Minh Khan</b>

<b>LỜI CAM ĐOAN</b>

Chúng em cam đoan rằng đề tài "Ứng dụng Deep Learning vào nhận diện ký tự mã container" đã được thực hiện một cách trung thực và minh bạch. Chúng em đã tôn trọng quy định về tài liệu tham khảo bằng cách liệt kê và chỉ rõ nguồn tham khảo tại phần tài liệu tham khảo trong báo cáo.

Mọi thành quả và kết quả nghiên cứu được trình bày trong báo cáo là sảnphẩm của sự tự tìm hiểu và nỗ lực cá nhân, hỗ trợ bởi sự hướng dẫn tận tâm từThầy Phạm Minh Khan. Chúng em khẳng định rằng không có sự sao chép hoặc sửdụng kết quả từ bất kỳ đề tài nghiên cứu khác nào về cùng chủ đề. Nếu có bất kỳdấu hiệu nào của sao chép hoặc sử dụng kết quả nghiên cứu từ nguồn khác, chúngem sẽ chịu hoàn toàn trách nhiệm và thân trọng nhận hậu quả.

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<b>TÓM TẮT NỘI DUNG</b>

Đề tài này tập trung vào ứng dụng Deep Learning để thực hiện nhiệm vụ quan trọng là nhận diện các ký tự trên mã container. Chúng em đã dành thời gian nghiên cứu và áp dụng những mơ hình Deep Learning có sẵn trong lĩnh vực xử lý ảnh.

Trong phạm vi báo cáo, chúng em đã lựa chọn một trong những mơ hình Deep Learning đã được cơng bố và tiến hành huấn luyện chúng bằng dữ liệu gồm 36 ký tự, bao gồm chữ cái in và số. Mục tiêu của chúng tơi là sử dụng mơ hình đã được huấn luyện để dự đoán và nhận diện các ký tự trên mã container một cách hiệu quả.

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

2.1 Mơ hình mạng nơ-ron tích chập (Convolutional Neural Network - CNN)...11

2.1.1 Tổng quan về mơ hình neural network...11

3.4.2 Lựa chọn và xây dựng mơ hình Deep Learning...27

3.4.2.1 Kết quả xây dựng mơ hình EfficientNetB0...28

3.4.2.2 Kết quả xây dựng mơ hình Lenet-5...29

3.4.3 Q trình training và kết quả training của mơ hình EfficientNetB0...29

3.4.4 Q trình training và kết quả training của mơ hình Lenet-5...32

<b>Chương 4 : Đánh giá hiệu quả...34</b>

4.1 Kiểm tra...34

4.2 Test...34

4.3 Đánh giá...40

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

Hình 9 - ReLu so với Tanh...19

Hình 10 - Kiến trúc của Lenet...20

Hình 11 - Phương thức tích chập ở layer 3 Lenet...21

Hình 12 - Kiến trúc mạng EfficientNetB0...23

Hình 13 - Pipeline của báo cáo...24

Hình 14 - Ảnh container đầu vào...25

Hình 15 - Output chứa vùng mã...26

Hình 16 - Output phát hiện ký tự...26

Hình 17 - Kết quả xây dựng mơ hình EfficientNetB0...28

Hình 18 - Kết quả xây dưng mơ hình LeNet-5...29

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<b>Chương 1: Giới thiệu1.1 Mở đầu</b>

Vận tải, lưu thơng hàng hóa từ lâu đã là một trong những hoạt động không thể thiếu của con người. Nhất là trong thời kỳ thế giới phát triển với tốc độ chóng mặt như hiện nay, nhu cầu về vận tải sẽ được nâng đến mức tối đa. Do đó, vận tải bằng container hiện nay đang là lĩnh vực rất đáng quan tâm. Theo Visco [7], đầu năm 2022, vận tải bằng container đã đạt mức kỷ lục.

Một số thông tin được nêu ra như sau: chỉ số vận tải hàng hóa container tại Thượng Hải tăng 76% so với cùng kỳ năm trước và đứng đầu với 5.000 điểm; có 101 tàu container chờ ở bến Los Angeles/Long Beach chỉ trong một ngày chủ nhật; tỷ giá vận tải xuyên Thái Bình Dương tăng mạnh, ...

Từ đó, có thể dự đốn được rằng số lượng container được dùng trong lưu thông sẽ ngày càng gia tăng. Cũng vì thế mà một số vấn đề khác sẽ được phát sinh. Trong đó, vấn đề về quản lý là một vấn đề quan trọng hơn hết. Nếu duy trì cách quản lý cũ là đặt container tại bến cảng để kiểm tra, sau đó mới được phép tiếp tục vận chuyển thì thời gian sẽ tăng rất nhiều, có thể khiến q trình bị chậm lại hoặc thậm chí tắc nghẽn vào mùa cao điểm.

Do đó, vấn đề tự động nhận dạng và kiểm tra container là một vấn đề rất thực tế và đáng tìm hiểu. Nên chúng em đã chọn đề tài "Ứng dụng Deep Learning vào nhận diện ký tự mã container" trong mơn học "Trí tuệ nhân tạo" này để nghiên cứu.

<b>1.2 Yêu cầu và mục tiêu của đề tài 1.2.1 Yêu cầu </b>

- Đề tài đã được thiết lập với mục tiêu giải quyết vấn đề nhận dạng đã được trình bày ở phần giới thiệu.

- Cuối cùng, mục tiêu là xây dựng một hệ thống đơn giản nhưng toàn diện, có khả năng tiếp nhận hình ảnh của container đầu vào và trả về kết quả nhận dạng mã container tương ứng ở đầu ra.

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

o Dự đốn ký tự ở mức độ chính xác khi ảnh đầu vào có chất tượng tốt.

<b>Chương 2</b>: <b>Tìm hiểu mơ hình deep learning dùngtrong object detection và object Classification </b>

<b>2.1 Mơ hình mạng nơ-ron tích chập (Convolutional Neural Network - CNN) </b>

<b>2.1.1 Tổng quan về mơ hình neural network</b>

Ở con người, các nơ-ron thần kinh được liên kết với nhau thông qua synapse, khi một nơ-ron muốn gửi thông tin cho nơ-ron khác, nó sẽ sinh ra điện thế hoạt động và lan truyền qua synapse, giải phóng chất dẫn truyền thần kinh tạo ra phản ứng ở nơ-ron kia [4].

Dựa vào đặc điểm này của não bộ con người, mơ hình mạng nơ-ron thần kinh (neural network) đã được phát triển. Một neural network sẽ có 3 lớp gồm: input, hidden và output. Input layer nhận dữ liệu đầu vào như ảnh, video, ... giống như não nhận thông tin từ mắt, tai, ... Hidden layer sẽ phân tích dữ liệu ấy và Output layer sẽ cho ra kết quả, tương tự việc não phân tích và đưa ra đánh giá về thông tin mà tai, mắt, ... nhận được. Các đơn vị tính tốn ở mỗi layer là một node.

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

Mỗi node này tương đương một nơ-ron trong não bộ. Chúng cũng được liên kết với nhau và có thể được kích hoạt bởi các hàm kích hoạt (activation function), tương tự việc synapse giải phóng chất dẫn truyền để gây ra phản ứng ở nơ-ron.

Được phát triển dựa trên cách nơ-ron hoạt động nhưng neural network cũng khơng hồn tồn giống với não bộ con người. Một đặc điểm khác là số lượng node không cố định, mỗi loại neural network sẽ sử dụng số lớp hidden khác nhau, từ đó có số node khác nhau, dẫn tới sự đa dạng trong q trình phát triển mơ hình.

<b>2.1.2 Mơ hình CNN </b>

CNN là một mạng nơ-ron áp dụng phép tính convolution lên các pixel của frame để giảm kích thước dữ liệu, lấy ra các đặc điểm quan trọng của các pixel để phân tích.[5]

Với mỗi phần tử xij<i> trong ma trận X lấy ra một ma trận có kích thước bằng kích</i>

thước của kernel W có phần tử xij<i> làm trung tâm (đây là vì sao kích thước của kernel</i>

thường lẻ) gọi là ma trận A. Sau đó tính tổng các phần tử của phép tính element-wise của ma trận A và ma trận W, rồi viết vào ma trận kết quả Y.

Tiếp theo lấy một phần tử khác cách phần tử ban đầu một đoạn khoảng cách bằng stride (sẽ trình bày ở mục sau) làm phần tử trung tâm và tính như trên. Tiếp tục đến cuối ma trận đầu vào sẽ cho ra ma trận Y hồn chỉnh.

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<i>Hình 2 - Phép tính convolution</i>

Ở hình 2, giá trị ở ô đầu tiên trong ma trận Y sẽ là 1*1 + 0*1 + 1*1 +0*0 + 1*1 + 1*0 + 0 *1 + 0*0 + 1*1 = 4

<i>→ Kích thước ma trận Y sẽ nhỏ hơn ma trận X ban đầu một lượng bằng stride ở cả</i>

2 chiều, giảm lượng dữ liệu nhưng vẫn giữ được các thông tin quan trọng.

 <i><b>Ý nghĩa của phép tính convolution: </b></i>

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<i>Hình 3 - Tác dụng một số loại kernel</i>

<b>Stride và pooling layer </b>

Tuy convolution layer đã giúp giảm số lượng dữ liệu cần phân tích, tuy nhiên lượng dữ liệu giảm đi ở mỗi lần tính convolution là không nhiều. Do đó nếu chỉ dùng convolution đến khi có được lượng dữ liệu mong muốn thì sẽ phải thực hiện rất nhiều lần. Vì vậy, trong CNN có sử dụng thêm 1 loại layer khác giúp giảm lượng dữ liệu là pooling layer. Pooling layer thường được đặt sau convolution layer. Pooling layer với size = k*k sẽ có 1 cửa sổ kích thước k*k trượt trên ma trận đầu vào và chọn các giá trị phù hợp đưa vào ma trận đầu ra. Khoảng cách mỗi lần trượt là stride.

Có 2 loại pooling thường dùng là max pooling và average pooling. Max pooing lấy giá trị lớn nhất trong cửa số k*k, còn avarage pooling thì lấy trung bình của các giá trị trong cửa sổ k*k.

Ví dụ về max pooling và average pooling với size = 2*2 và stride = 2 (Hình 4).

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

<i>Hình 4 - Pooling</i>

<b>Fully connected layer </b>

<i>Là các layer có các node liên kết với các node ở layer trước. Mỗi node trong layer</i>

Tổng linear ở đầu vào 1 node là tổng các (node ở layer trước * hệ số liên kết w của từng liên kết) cộng với bias b. Activation function sẽ áp dụng với tổng linear trên để đưa ra kết quả về thơng tin của node.

Vì fully connected layer cần tính tốn rất nhiều nên khơng thể đặt ở đầu hidden layer khi dữ liệu cịn q nhiều. Do đó fully connected layer thường đặt ở sau cùng khi dữ liệu đã trải qua 1 vài lớp convolution, pooling và làm phẳng thành 1 chiều.

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

<i>Hình 5 - Fully Connected Network</i>

Hình 5 là ví dụ về fully connected của một neural network. Các node ở mỗi layer được liên kết với tât cả các node ở layer trước.

Với CNN thì fully connected layer cũng sẽ giống như vậy, chỉ khác là lớp input ở đây sẽ trở thành lớp hidden và thêm vào phía trước những lớp convolution và pooling.

 <b>Một số hàm kích hoạt (Activation function) </b>

<b>2.1.2.1 Sigmoid: </b>

Công thức:

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

Đồ thị 6 cho thấy hàm sigmoid nhận đầu vào là tất cả các giá trị thực và kết quả là giá trị trong khoảng (0,1). Đây là hàm kích hoạt được dùng nhiều trong các mơ hình CNN ở q khứ vì nó có đạo hàm đẹp.

Tuy nhiên, sigmoid có nhược điểm là khi đầu vào có giá trị quá lớn (quá âm hoặc quá dương) thì đạo hàm gần như bằng 0, khơng có giá trị trong việc cập nhật trọng số của

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

<i>Hình 7 - Đồ thị hàm tanh</i>

<b>2.1.2.3 ReLU (Rectified Linear Unit): </b>

Công thức:

<i>Hình 8 - Đồ thị hàm ReLU</i>

Hàm ReLU đang được sử dụng rộng rãi trong các mơ hình CNN hiện nay. Nhìn vào hình 8 và cơng thức của hàm, có thể thấy được tính chất của ReLU khá đơn giản.

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

<i>Hàm chỉ lọc các giá trị âm và thay bằng 0. So với việc dùng exp như hàm sigmoid và tanh</i>

thì chi phí tính tốn cho hàm ReLU cũng thấp hơn nhiều.

Ngoài ra, tốc độ training khi dùng hàm ReLU cũng nhanh hơn nhiều lần. Theo Alex Krizhevsky [2], với cùng một mơ hình CNN 4 lớp, để đạt độ lỗi 25% trên tập CIFAR-10 thì hàm ReLU sẽ nhanh hơn hàm tanh gấp 6 lần.

Nguyên văn [2]:

<i>Hình 9 - ReLu so với Tanh</i>

<b>A four-layer convolutional neural network with ReLUs (solid line) reaches </b>

a 25% training error rate on CIFAR-10 six times faster than an equivalent

<b>network with tanh neurons (dashed line)</b>

<b>2.1.2.4. Softmax (hàm trung bình mũ): </b>

Cơng thức:

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

Hàm softmax nhận đầu vào là một vector <i> , với là các thành phần của</i>

vector, K là số lớp đối tượng và trả về một vector có cùng số thành phần với vector đầu vào với giá trị trong khoảng (0,1).

Hàm softmax thường được dùng ở lớp cuối cùng trong các bài toán phân loại để đưa ra tỷ lệ phân phối xác suất về các lớp đối tượng

<b>2.2 Một số mô hình đã tìm hiểu </b>

 <b>Lenet-5 [3] </b>

Đây là mơ hình được phát triển bởi Yann LeCunn (Director of AI Research Facebook) cùng với Léon Bottou, Yoshua Bengio (đồng tác giả với Ian Goodfellow của cuốn “Deep Learning”) và Patrick Haffner với mục tiêu là nhận dạng các chữ số viết tay. Hình 10 thể hiện kiến trúc của mơ hình.

<i>Hình 10 - Kiến trúc của Lenet</i>

Đầu vào của mơ hình là ảnh với kích thước 32x32x1. Layer thứ nhất là convolutional layer với 6 kernel 5x5x1, stride = 1 pad = 0. Output của lớp này là feature map 28x28x6. Layer thứ 2 là pooling layer với phương pháp subsampling kích thước 2x2. Output của lớp này có kích thước 14x14x6.

Lớp thứ 3 là lớp convolutional với 16 kernel size 5x5. Điểm đặc biệt ở layer này là nó khơng sử dụng tất cả các kernel cho input (output của S2) mà sử dụng theo một cách đặc biệt:

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<i>Hình 11 - Phương thức tích chập ở layer 3 Lenet</i>

Lấy ví dụ với feature map 0 ở hình 11 Feature map này được tạo bởi 3 feature map 0,1,2 của layer 2 (14x14) với kernel thứ 0. Layer thứ 4 là pooling layer với phương pháp average 10window size = 2x2. Kết quả của layer này là feature map 5x5x16. Lớp thứ 5 là lớp convolutional với 120 kernel size 5x5x16. Sau lớp này có được feature map 1x1x120. Lớp cuối cùng là lớp fully connected. Mơ hình dùng tanh làm hàm kích hoạt.

 <b>Nhận xét: </b>

Lenet nhận input có kích thước khá nhỏ, số lượng layer và số lượng kernel ở những convolu-tion layer là khơng nhiều. Do đó, mơ hình có thể được training với tốc độ khá nhanh trên CPU với tập data MNIST.

Tuy nhiên độ chính xác của mơ hình với các ký tự in là khơng cao. Mơ hình có số lượng tham số ít và dùng tanh làm hàm kích hoạt. Vì thế khi càng training về sau, các trọng số sẽ lớn dần và khi được kích hoạt bởi hàm tanh, giá trị kích hoạt sẽ khơng thay đổi nhiều dẫn đến khó khăn cho việc cập nhật lại trọng số.

 <b>EfficientnetB0 [6] </b>

Hai tác giả Mingxing Tan và Quoc V. Le đã nghiên cứu và nhận thấy rằng việc cân bằng giữa độ sâu, chiều rộng và độ phân giải (depth, width, and resolution) khi scaling mạng sẽ đem lại hiệu suất tốt hơn. Hai người đã đề xuất một phương pháp scaling mới:

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

<i>Trong đó: </i>

<i>• d, w, r lần lượt là độ rộng, độ sâu và độ phân giải của mạng </i>

<i>• α, β, γ là các hằng số có thể được xác định bằng small grid search. </i>

Nhóm tác giả nhận ra rằng số lượng phép tính floating-point trên giây (FLOPS) sẽ

<i>tỷ lệ thuận với d, w2, r2. Khi scaling theo 1 chiều, nhân đơi chiều sâu sẽ nhân đơi</i>

FLOPS, cịn nhân đơi chiều rộng hoặc độ phân giải sẽ nhân bốn FLOPS. Do đó, họ dặt

<i>ràng buộc α.β2.γ2 ≈ 2 để mỗi khi scaling theo φ thì FLOPS sẽ tăng 2φ. Nguyên văn nhưsau: Notably, the FLOPS of a regular convolution op is proportional to d, w2, r2, i.e.,</i>

doubling network depth will double FLOPS, but doubling network width or resolution will increase FLOPS by four times. Since convolution ops usually dominate the computation cost in ConvNets, scaling a ConvNet with equation 3 will approximately

<i>increase total FLOPS by (α. β2. γ2) φ. In this paper, we constraint α.β2.γ2 ≈ 2 such thatfor any new φ, the total FLOPS will approx-mately increase by 2φ </i>

Và vì scaling sẽ khơng làm thay đổi phép tính ở mỗi layer nên việc chọn một baseline model làm gốc cũng rất quan trọng. Vì thế nhóm tác giả đã phát triển một mơ hình mới phù hợp với cơng thức của mình với tên gọi EfficientNetB0.

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<i>Hình 12 - Kiến trúc mạng EfficientNetB0</i>

Các mạng EfficientNet từ B1 đến B7 sẽ được scale từ B0 theo công thức trên bằng

<i>cách thay đổi φ với α = 1.2, β = 1.1, γ = 1.15 được xác định bằng phương pháp </i>

grid-search.

 <b>Nhận xét: </b>

So với Lenet-5, EfficientNet có cấu trúc phức tạp hơn và khả năng phân tách các đặc điểm (feature) của đối tượng tót hơn, Do đó kết quả dự đốn của EfficientNet cũng khá chính xác ngay cả khi ảnh có chất lượng kém.

Đặc biệt với những mơ hình EfficientNet được scaling lên từ B0 thì khả năng dự đốn càng tốt hơn nữa. Tuy nhiên, mơ hình lại có tốc độ training khá chậm khi so với Lenet trên cùng một GPU do batch size mà có thể load nhỏ hơn.

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

<b>Chương 3: Pipeline và phương thức hiện thực 3.1 Pipeline</b>

Pipeline xử lý vấn đề gồm các bước chính:

<i>Hình 13 - Pipeline của báo cáo</i>

Mỗi bước sẽ được hiện thực như một module có thể chạy độc lập với nhau. Đầu tiên, ảnh cần nhận dạng sẽ dược đưa vào và chuyển về kích thước định trước. Bước tiếp theo, ta sẽ tìm vùng nào là vùng chứa mã cần tìm và cắt ra bằng module thứ hai. Sau đó, ảnh vừa cắt sẽ được đưa vào bước kế tiếp. Ở bước này, ảnh sẽ được resize lại và áp dụng một các phương pháp xử lý ảnh để tìm và cắt từng ký tự. Cuối cùng, những ký tự vừa cắt sẽ được nhận dạng bằng module thứ ba.

Kết quả từ việc dự đoán sẽ được ghi lại lên ảnh đã xử lý ở bước trước đó. Việc phát triển pipeline thành từng module như thế này giúp q trình hiện thực có thể tiến hành song song, khơng phụ thuộc nhau. Đồng thời có thể dễ dàng thay đổi, sửa chữa một module bất kỳ mà khơng cần thay đổi tồn bộ pipeline khiến cho q trình xây dựng trở nên thuận lợi và dễ dàng.

<b>3.2 Phát hiện vùng mã container: </b>

Mã container bao gồm 2 loại: mã sau (back code) và mã bên (side code). Thơng thường, xung quanh vùng mã sẽ có rất nhiều nhiễu. Ví dụ như container bị trầy xước, phai màu do ảnh hưởng của thời tiết, đặc biệt là với backcode được in trên trên cửa container ln có những thơng tin khác kèm theo. Do đó việc phát hiện các vùng mã này sẽ rất khó nếu chỉ dùng các giải thuật xử lý ảnh đơn thuần. Nên việc ứng dụng deep learning tại bước này sẽ giúp quá trình thực hiện báo cáo trở nên đơn giản hơn.

</div>

×