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 (2.57 MB, 29 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
<b>TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAMKHOA CƠNG NGHỆ THƠNG TIN</b>
</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2"><i><b>Hải Phịng, tháng 4 năm 2023</b></i>
2
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3"><b>TRƯỜNG ĐẠI HỌC HÀNG HẢIKHOA CÔNG NGHỆ THÔNG TINBỘ MÔN KHOA HỌC MÁY TÍNH</b>
- Giúp nhận dạng số tiền bằng camera thơng qua VGG16 CNN classsìy hệ thống phải nhận diện mệnh giá của từng tờ tiền
- Tìm hiểu tổng quát về OpenCv, Keras, tensorflow, sklearn,
- Kết quả làm bài tập lớn: Báo cáo bài tập lớn, Chương trình nhận dạng tiền Việt Nam
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4"><i><b>Hải Phòng, tháng 4 năm 2023</b></i>
CHƯƠNG 3: CÀI ĐẶT CHẠY THỬ...13
<small>3.1 TẠODỮLIỆUCHOBÀITOÁN...13</small>
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">Ngày nay, với sự phát triển không ngừng của xã hội, tin học đã trở nên vô cùng phổ biến và đã có những bước phát triển vượt bậc được thể hiện qua nhiều lĩnh vực của đời sống xã hội. Tin học đã dần dần trở thành nhu cầu rất cần thiết và không thể thiếu trong cuộc sống của con người. Ở các quốc gia phát triển hiệu quả do tin học hóa đem lại đã góp phần thiết yếu và chiếm giữ một vị trí quan trọng trong các lĩnh vực kinh tế, chính trị, văn hóa, giáo dục…
Việt Nam là một trong những nước đang phát triển nên vẫn có lượng giao dịch thanh tốn chủ yếu là tiền mặt. Cho nên các công nghệ sử dụng việc nhân dạng tiền mặt thơng qua hình ảnh đang được nghiên cứu và phát triển rộng tại Việt Nam. Tất cả máy bán nước tự động hay các cây ATM đều đang xử dụng công nghệ quét hình ảnh để nhận diện tiền. Việc nhận diện tiền bằng công nghệ đã giúp cho việc kinh doanh hàng hóa hay giao dịch tiền mặt dễ dàng hơn. Trước đây thay vì cửa hàng phải có nhân viên trực thì cơng nghệ đã giúp cho việc cửa hàng khơng cần phải có nhân viên thu ngân trực tại quầy mà đã có thể áp dụng cơng nghệ cho việc bán hàng tự động bằng cách nhận diện tiền mặt thơng qua camera nhận diện hình ảnh tiền mặt. Sẽ giúp cho các cửa hàng có thể thuận tiện hơn khi tránh được việc tiếp xúc gần trong thời kì dịch bệnh vẫn cịn đang hồnh hành hiện nay.
Là sinh viên ngành CNTT em cũng đang thực hiện dự án nhỏ của việc nhận diện tiền Việt Nam mong có thể đóng góp cho việc phát triển các việc thanh tốn qua việc nhận diện tiền mặt tại Việt Nam được phát triển hơn nữa
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7"><b>2.1 Cơ sở lý thuyết</b>
1. Convolutional Neural Networks (CNNs): Đây là một loại mạng nơ-ron sử dụng trong thị giác máy tính để phân tích hình ảnh. CNNs sử dụng các lớp convolution để trích xuất đặc trưng của ảnh, sau đó sử dụng các lớp pooling để giảm kích thước của ảnh và cuối cùng là các lớp fully connected để phân loại ảnh.
2. Transfer Learning: Đây là một kỹ thuật sử dụng lại một mơ hình học máy đã được huấn luyện trên một tập dữ liệu lớn và sử dụng để giải quyết một bài tốn mới. Với transfer learning, ta có thể sử dụng mơ hình đã được huấn luyện để trích xuất các đặc trưng của ảnh và áp dụng chúng vào bài toán nhận dạng tiền.
3. Data Augmentation: Đây là một kỹ thuật cho phép tăng cường tập dữ liệu bằng cách thêm nhiễu vào ảnh, xoay ảnh, tạo ảnh mới từ ảnh gốc, v.v. Kỹ thuật này giúp cho mơ hình học tốt hơn trên các dữ liệu mới mà nó chưa từng thấy.
4. Fine-tuning: Đây là một kỹ thuật cho phép tinh chỉnh mơ hình đã được huấn luyện trên tập dữ liệu lớn để phù hợp với bài toán mới. Kỹ thuật này cho phép ta đóng băng các lớp trước và chỉ huấn luyện các lớp cuối cùng để phù hợp với bài toán mới.
<b>2.2 Một số thư viện </b>
<i>A. Keras</i>
Keras 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). Theano là một thư viện python
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">được sử dụng cho các tác vụ tính tốn số nhanh. TensorFlow là thư viện toán học biểu tượng nổi tiếng nhất được sử dụng để tạo mạng nơ-ron và mơ hình học sâu. TensorFlow rất linh hoạt và lợi ích chính là tính tốn phân tán. CNTK là khung học sâu được phát triển bởi Microsoft. Nó sử dụng các thư viện như Python, C #, C ++ hoặc các bộ công cụ học máy độc lập. Theano và TensorFlow là những thư viện rất mạnh nhưng khó hiểu để tạo mạng nơ-ron.
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. Keras được thiết kế để xác định nhanh các mơ hình học sâu. Chà, Keras là một lựa chọn tối ưu cho các ứng dụng học sâu
<i>B. Tensorflow</i>
TensorFlow chính là thư viện mã nguồn mở cho machine learning nổi tiếng nhất thế giới, được phát triển bởi các nhà nghiên cứu từ Google. Việc hỗ trợ mạnh mẽ các phép toán học để tính tốn trong machine learning và deep learning đã giúp việc tiếp cận các bài toán trở nên đơn giản, nhanh chóng và tiện lợi hơn nhiều.
Các hàm được dựng sẵn trong thư viện cho từng bài toán cho phép TensorFlow xây dựng được nhiều neural network. Nó cịn cho phép bạn tính tốn song song trên nhiều máy tính khác nhau, thậm chí trên nhiều CPU, GPU trong cùng 1 máy hay tạo ra các dataflow graph – đồ thị luồng dữ liệu để dựng nên các model. Nếu bạn muốn chọn con đường sự nghiệp trong lĩnh vực A.I. này, nắm rõ những điều cơ bản của TensorFlow thực sự rất quan trọn
<i>C. Sklearn</i>
Sklearn Scikit – learn (sklearn) là một thư viện mạnh mẽ nhất dành cho các thuật toán học máy và được viết trên ngôn ngữ Python . Thư viện cung cấp
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">một số tập công cụ xử lý các bài toán machine learning và statistical modeling gồm : classification, regression, clustering, và dimensionality reduction.
Thư viện được cấp phép bản quyền chuẩn FreeBSD và chạy được trên nhiều nền tảng Linux. Scikit-learn được sử dụng như một tài liệu để học tập.
Để cài đặt scikit-learn trước tiên phải cài thư viện SciPy (Scientific Python). Những thành phần gồm:
Numpy: Gói thư viện xử lý dãy số và ma trận nhiều chiều SciPy: Gói các hàm tính tốn logic khoa học
Matplotlib: Biểu diễn dữ liệu dưới dạng đồ thị 2 chiều, 3 chiều IPython: Notebook dùng để tương tác trực quan với Python SymPy: Gói thư viện các kí tự tốn học
Pandas: Xử lý, phân tích dữ liệu dưới dạng bảng
<i>D. OpenCV</i>
OpenCV là một thư viện mã nguồn mở hàng đầu cho thị giác máy tính (computer vision), xử lý ảnh và máy học, và các tính năng tăng tốc GPU trong hoạt động thời gian thực.
OpenCV được phát hành theo giấy phép BSD, do đó nó hồn tồn miễn phí cho cả học thuật và thương mại. Nó có các interface C++, C, Python, Java và hỗ trợ Windows, Linux, Mac OS, iOS và Android. OpenCV được thiết kế để tính tốn hiệu quả và với sự tập trung nhiều vào các ứng dụng thời gian thực. Được viết bằng tối ưu hóa C/C++, thư viện có thể tận dụng lợi thế của xử lý đa lõi. Được sử dụng trên khắp thế giới, OpenCV có cộng đồng hơn 47 nghìn người dùng và số lượng download vượt quá 6 triệu lần. Phạm vi sử dụng từ nghệ thuật tương tác, cho đến lĩnh vực khai thác mỏ, bản đồ trên web hoặc công nghệ robot.
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">OpenCV - Python là một thư viện các ràng buộc Python được thiết kế để giải quyết các vấn đề về thị giác máy tính.
Python là ngơn ngữ lập trình có mục đích chung được bắt đầu bởi Guido van Rossum, nó trở nên rất phổ biến rất nhanh, chủ yếu vì tính đơn giản và khả năng đọc mã của nó. Nó cho phép lập trình viên thể hiện ý tưởng trong ít dịng mã hơn mà khơng làm giảm khả năng đọc.
So với các ngôn ngữ như C/C++, Python chậm hơn. Điều đó nói rằng, Python có thể dễ dàng được mở rộng với C/C++, cho phép chúng ta viết mã chuyên sâu tính tốn trong C/C++ và tạo các trình bao bọc Python có thể được sử dụng làm mơ-đun Python. Điều này mang lại cho chúng ta hai lợi thế: thứ nhất, mã nhanh như mã C/C++ gốc (vì đây là mã C++ thực tế hoạt động ở chế độ nền) và thứ hai, mã dễ dàng hơn trong Python so với C/C++. OpenCV -Python là một trình bao bọc -Python để thực hiện OpenCV C++ ban đầu.
OpenCV - Python sử dụng Numpy, một thư viện được tối ưu hóa cao cho các hoạt động số với cú pháp kiểu MATLAB. Tất cả các cấu trúc mảng OpenCV được chuyển đổi sang và từ các mảng Numpy. Điều này cũng giúp tích hợp dễ dàng hơn với các thư viện khác sử dụng Numpy như SciPy và Matplotlib.
<b>2.3 Mạng CNN Classify </b>
<i><b>2.3.1 Mạng CNN là gì </b></i>
CNN là tên viết tắt của từ Convolutional Neural Network (hay còn gọi là CNNs_mạng nơ ron tích chập). Đây là một trong những mơ hình Deep Learning vơ cùng tiên tiến. CNN sẽ cho phép bạn xây dựng các hệ thống thơng minh với độ chính xác vơ cùng cao. Hiện nay, CNN được ứng dụng
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">nhiều trong những bài toán nhận dạng object của ảnh. CNN được chia cụ thể như sau:
<i><b>2.3.2 Convolutional</b></i>
Đây là một loại cửa sổ dạng trượt nằm trên một ma trận. Những convolutional layer sẽ có các parameter được học để điều chỉnh và lấy ra những thơng tin chính xác nhất mà khơng cần phải chọn feature. Convolution hay tích chập chính là nhân các phần tử trong ma trận. Sliding Window còn được gọi là kernel, filter hoặc feature detect và là loại ma trận có kích thước nhỏ.
<i><b>2.3.3 Feature</b></i>
Feature là đặc điểm, các CNN sẽ so sánh hình ảnh dựa theo từng mảnh và những mảnh này được gọi là Feature. Thay vì phải khớp các bức ảnh lại với nhau thì CNN sẽ nhìn ra sự tương động khi tìm kiếm thơ các Feature khớp với nhau bằng 2 hình ảnh tốt hơn. Mỗi Feature được xem là một hình ảnh mini có nghĩa chúng là những mảng 2 chiều nhỏ. Các Feature này đều tương ứng với các khía cạnh nào đó của hình ảnh và chúng có thể khớp lại với nhau
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 hàm nonlinear activation như ReLU để 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
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">(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 tồ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 quả 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 q trình huấn luyện mạng (traning) 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ự raw pixel > edges > shapes > facial > high-level features. Layer cuối cùng được dùng để phân lớp ảnh.
Trong mô hình CNN có 2 khía cạnh cần quan tâm là tính bất 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 này được chiếu theo các gốc độ khác nhau
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">(translation, rotation, scaling) thì độ chính xác của thuật tốn sẽ bị ảnh hưởng đáng kể.
Pooling layer sẽ cho bạn tính bất 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ý do 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:
<small></small> <b>Local receptive field (trường cục bộ): Lớp này có nhiệm vụ tách</b>
lọc dữ liệu, thông tin ảnh và lựa chọn các vùng ảnh có giá trị sử dụng cao nhất.
<small></small> <b>Shared weights and bias (trọng số chia sẻ): Lớp này giúp làm</b>
giảm tối đa lượng tham số có tác dụng chính của yếu tố này trong mạng CNN. Trong mỗi convolution sẽ có các feature map khác nhau và mỗi feature lại có khả năng giúp detect một vài feature trong ảnh.
<small></small> <b>Pooling layer (lớp tổng hợp): Pooling layer là lớp cuối cùng và có</b>
tác dụng làm đơn giản các thơng tin đầu ra. Có nghĩa là, sau khi đã hồn tất tính tốn và qt qua các lớp thì đến pooling layer để lược bớt các thơng tin khơng cần thiết. Từ đó, cho ra kết quả theo như ý mà người dùng mong muốn.
VGG16 có nền tảng là CNN(Convolutional neural network) là một mạng neural được ứng dụng rất nhiều trong deep learning trong computervision cho classifier và localizer. Từ mạng CNN cơ bản người ta có thể tạo ra rất nhiều
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">architect khác nhau, từ những mạng neural cơ bản 1 đến 2 layer đến 100 layer.
Mạng VGG16 (VGG-16) là một trong những kiến trúc mạng học sâu được phát triển bởi nhóm nghiên cứu Visual Geometry Group (VGG) thuộc Đại học Oxford vào năm 2014
Nó được đặt tên là VGG16 vì nó có 16 lớp (13 lớp tích chập và 3 lớp kết nối đầy đủ) và sử dụng kiến trúc tích chập rất sâu với các kernel kích thước nhỏ (3x3).
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">VGG16 đã đạt được nhiều kết quả ấn tượng trên nhiều tập dữ liệu ảnh khác nhau và là một trong những kiến trúc mạng học sâu được sử dụng rộng rãi trong các bài toán nhận diện ảnh và phân loại.
Các đặc điểm của VGG16 bao gồm:
<small></small> Sử dụng các kernel kích thước nhỏ (3x3) liên tiếp nhau để giảm số lượng tham số cần tối ưu và tăng tính tốn tái sử dụng.
<small></small> Sử dụng các lớp tích chập và kết nối đầy đủ (fully connected) với số lượng filter và nơ-ron lớn để học các đặc trưng phức tạp của ảnh.
<small></small> Sử dụng kỹ thuật Dropout để giảm overfitting.
<small></small> Sử dụng hàm kích hoạt ReLU để tăng tốc độ hội tụ và tránh hiện tượng mất gradient.
Tuy nhiên, kiến trúc VGG16 có số lượng tham số khá lớn, gây tốn kém về tính tốn và khơng thực tế cho các ứng dụng có giới hạn về tài ngun.
Nhìn vào cấu trúc VGG16 sẽ gồm 2 phần, phần màu cam là trích đặt trưng của ảnh cịn phần màu xanh sẽ là các lớp FC để classify
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16"><b>3.1 Tạo dữ liệu cho bài tốn </b>
Có bài tốn thì có dữ liệu cho trước rất nhiều trên mạng, ví dụ face, ví dụ ảnh đồ vật, ảnh phong cảnh. Tuy nhiên các dữ liệu về tiền, đặc biệt tiền Việt chưa có nên phải tự tạo cho mình.
Cách tạo dữ liệu đơn giản là viết một đoạn python đọc liên tục từ camera và save lại vào các thư mục tương ứng ảnh các tờ tiền.
Thực hiện chụp liên tục ảnh từ camera, khoảng 1000 tấm cho mỗi loại. Sau đó, lọc data thủ cơng, chỉ chọn những hình khơng bị mờ, rõ hình ảnh đượ in trên tiền.
Vì data tự tạo nên sẽ khơng được chính xác cao (khoảng 1000 tấm cho mỗi loại). Nên tiến hành augmentation data. Thực hiện augment dữ liệu để
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">làm phong phú hơn dữ liệu, tăng data variance , tăng tính tổng quát cho model bằng ImageDataGenerator của Keras.
Sau khi tạo file data tiếp tục chuyền vào các ảnh chi tiết của các mệnh giá tiền vào các file để máy save data
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">File 00000 khơng có dữ liệu
Dữ liệu tiền 10 nghìn
Dữ liệu tiền 20 nghìn
</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20"><b>3.2 Xử lý dữ liệu hình ảnh </b>
Trong quá trình chúng ta train model, thử nghiệm model thì sẽ phải chạy chương trình rất nhiều lần để debug, sửa lỗi… Như vậy mà mỗi lần chạy lại phải mò hết đống file và thư mục trên thì sẽ khá lâu nên em sẽ đọc 1 lần và thực hiện:
Convert nhãn (00000,10000,20000….) thành one-hot Resize ảnh về 128×128
Sau khi lưu xong thì khơng cần quan tâm đến cái folder data kia nữa mà chỉ quan tâm đến file pix.data mới sinh ra
</div>