Transfer Learning trong Deep Learning là một kỹ thuật mà trong đó: - Một pretrained model đã được train trên source tasks cụ thể nào đó, khi đó một phần hay toàn bộ pretrained model có t
Trang 2ĐẠI HỌC QUỐC GIA TP 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 2
ĐỀ TÀI: PET TINDER
Giảng viên hướng dẫn:
HUỲNH HỒ THỊ MỘNG TRINH
Sinh viên thực hiện:
LÊ NGỌC CHÍNH - 18520257
Trang 4CHƯƠNG 3: MÔ HÌNH USE CASE 26
3.4.13 Use case 13: Xem thông tin tinder của người dùng 57
Trang 66.3 Môi trường triển khai 79
7.2.13 Màn hình thêm/chỉnh sửa thông tin tinder 106
Trang 7DANH MỤC BẢNG
Trang 8Hình 2.3.3.6 Quá trình trượt và tính tích chập của một bộ lọc kích thước 3x3 trên ảnh và
Hình 2.3.3.7 Cấu trúc các khối nơ ron 3D mạng Alexnet 19
Hình 3.4.7 Activity flow chỉnh sửa thông tin thú cưng 46
Trang 9Hình 3.4.15 Activity flow quản lý match 61
Hình 7.13 Màn hình thêm/ chỉnh sửa thông tin tinder 106
Trang 10NỘI DUNG CHƯƠNG 1: PHÁT BIỂU BÀI TOÁN
1.1 Khảo sát hiện trạng
1.1.1 Nhu cầu thực tế của đề tài:
Trong cuộc sống hiện đại, khi con người bận bịu và chịu nhiều áp lực với công việc và có nhiều người xem thú cưng là bạn, là một phần quan trọng trong cuộc sống của con người Thế nhưng, các diễn đàn, hội nhóm về thú cưng chưa phổ biến và đôi lúc mất thời gian để tìm kiếm và tham gia Không chỉ vậy, các diễn đàn chưa có được các giao diện, thao tác đơn giản
để người dùng dễ tiếp cận, đặc biệt là phái nữ không thường xuyên tiếp xúc với các diễn đàn Chính vì thế, nhu cầu dành cho các diễn đàn, mạng xã hội dành riêng cho người bạn bốn chân
là rất lớn Để đáp ứng nhu cầu đó, nhóm em cho ra đời ứng dụng Tinder Pet với mục tiêu trở thành mạng xã hội dành cho người bạn trung thành có giao diện thân thiện và phổ biến nhất
Trang 11Cho phép dễ dàng continuous delivery và deployment các ứng dựng lớn, phức tạp:
Cải thiện khả năng bảo trì - mỗi service tương đối nhỏ do đó dễ hiểu và thay đổi hơn
Khả năng testing dễ dàng hơn - các services nhỏ hơn và nhanh hơn để test
Khả năng triển khai tốt hơn - các services có thể được triển khai độc lập
Cho phép các services được phát triển bởi những team khác nhau Mỗi team có thể phát triển, thử nghiệm, triển khai và mở rộng quy mô dịch vụ của mình một cách độc lập với tất cả các team khác
Trang 12Giảm thiểu rủi ro:
Nếu có lỗi trong một service thì chỉ có service đó bị ảnh hưởng Các services khác sẽ tiếp tục
xử lý các yêu cầu Trong khi đó, một thành phần hoạt động sai của kiến trúc một khối có thể làm ảnh hưởng toàn bộ hệ thống
Dễ dàng thay đổi sử dụng các công nghệ mới:
Khi triển khai các services bạn có thể lựa chọn nhiều công nghệ mới Tương tự khi có thay đổi lớn đối với các services hiện có bạn có thể dễ dàng thay đổi công nghệ
2.1.3 Nhược điểm
Phức tạp
Nhược điểm lớn nhất của microservice nằm ở sự phức tạp Việc chia ứng dụng thành các dịch
vụ siêu nhỏ độc lập đòi hỏi phải có nhiều tạo tác hơn để quản lý Kiểu kiến trúc này đòi hỏi lập kế hoạch cẩn thận, nỗ lực to lớn, tài nguyên nhóm và kỹ năng Những lý do cho sự phức tạp cao là như sau:
Nhu cầu tự động hóa tăng lên, vì mọi service cần được test và giám sát
Các công cụ có sẵn không hoạt động với phụ thuộc service
Tính nhất quán dữ liệu và quản lý giao dịch trở nên khó khăn hơn vì mỗi service có cơ sở dữ liệu
Bảo mật
Trong ứng dụng microservice, mỗi chức năng giao tiếp bên ngoài thông qua API sẽ tăng khả năng bị tấn công Những cuộc tấn công này chỉ có thể xảy ra nếu các tính toán bảo mật thích hợp không được thực hiện khi xây dựng ứng dụng
Ngôn ngữ lập trình khác nhau
Khả năng chọn các ngôn ngữ lập trình khác nhau là hai mặt của cùng một đồng tiền Sử dụng các ngôn ngữ khác nhau làm cho việc triển khai khó khăn hơn Ngoài ra, việc chuyển đổi lập trình viên giữa các giai đoạn phát triển trở nên khó khăn hơn khi mỗi dịch vụ được viết bằng một ngôn ngữ khác nhau
2.2 RabbitMQ
Trang 13Many Client: Vì producer giao tiếp với consumer trung gian qua message broker nên dù
producer và consumer có khác biệt nhau về ngôn ngữ thì giao tiếp vẫn thành công Hiện nay rabbitmq đã hỗ trợ rất nhiều ngôn ngữ khác nhau
Asynchronous (bất đồng bộ): Producer không thể biết khi nào message đến được consumer
hay khi nào message được consumer xử lý xong Đối với producer, đẩy message đến message broker là xong việc Consumer sẽ lấy message về khi nó muốn Đặc tính này có thể được tận dụng để xây dựng các hệ thống lưu trữ và xử lý log
Flexible Routing: message được định tuyến (route) thông qua Exchange trước khi đến Queue
RabbitMQ cung cấp một số loại Exchange thường dùng, chúng ta cũng có thể định nghĩa riêng Exchange cho riêng mình
Lightweight: một single instance của RabbitMQ chỉ chiếm khoảng 40MB RAM
Multiple message protocol: AMQP, MQTT, STOMP, HTTP
Cluster: các bạn có thể gom nhiều rabbitmq instance vào một cluster Một queue được định
nghĩa trên một instance khi đó đều có thể truy xuất từ các instance còn lại Có thể tận dụng để làm load balancing
High availability: cho phép failover khi sử dụng mirror queue
Reliability: có cơ chế ACK để đảm bảo message được nhận bởi consumer đã được xử lý, lưu
trữ (persistence) message, high availability, publisher confirm, …
Extensibility: cung cấp hệ thống plugin linh hoạt, dễ dàng tích hợp các plugin của third party
Ví dụ: plugin lưu message vào cơ sở dữ liệu
Cloud: dễ dàng triển khai với hạ tầng hiện có hoặc Cloud
Management & Monitoring: cung cấp HTTP API, command-line tool và UI để quản lý và
giám sát
Tools support: Hoạt động với các công cụ CI/CD và có thể triển khai với BOSH, Chef,
Docker và Puppet
2.2.2 Các khái niệm cơ bản
Producer: Ứng dụng gửi message
Consumer: Ứng dụng nhận message
Queue: Lưu trữ messages
Message: Thông tin truyền từ Producer đến Consumer qua RabbitMQ
Connection: Một kết nối TCP giữa ứng dụng và RabbitMQ broker
Channel: Một kết nối ảo trong một Connection Việc publishing hoặc consuming message từ
một queue đều được thực hiện trên channel
Trang 14Exchange: Là nơi nhận message được publish từ Producer và đẩy chúng vào queue dựa vào
quy tắc của từng loại Exchange Để nhận được message, queue phải được nằm (binding) trong
ít nhất 1 Exchange
Binding: là quy tắc (rule) mà Exchange sử dụng để định tuyến Message đến Queue Đảm
nhận nhiệm vụ liên kết giữa Exchange và Queue
Routing key: Một key mà Exchange dựa vào đó để quyết định cách để định tuyến message
đến queue Có thể hiểu nôm na, Routing key là địa chỉ dành cho message
AMQP (Advance Message Queuing Protocol): là giao thức truyền message được sử dụng
trong RabbitMQ
User: Để có thể truy cập vào RabbitMQ, chúng ta phải có username và password Trong
RabbitMQ, mỗi user được chỉ định với một quyền hạn nào đó User có thể được phân quyền đặc biệt cho một Vhost nào đó
Virtual host/ Vhost: Cung cấp những cách riêng biệt để các ứng dụng dùng chung một
RabbitMQ instance Những user khác nhau có thể có các quyền khác nhau đối với vhost khác nhau Queue và Exchange có thể được tạo, vì vậy chúng chỉ tồn tại trong một vhost
Trang 152.2.3 Các thức hoạt động
Hình 2.2.3.1 Cách thức hoạt động
(1) Producer đẩy message vào Exchange Khi tạo Exchange, bạn phải mô tả nó thuộc loại
gì Các loại Exchange sẽ được giải thích phía dưới
(2) Sau khi Exchange nhận Message, nó chịu trách nhiệm định tuyến message Exchange sẽ
chịu trách nhiệm về các thuộc tính của Message, ví dụ routing key, loại Exchange
(3) Việc binding phải được tạo từ Exchange đến Queue (hàng đợi) Trong trường hợp này, ta
sẽ có hai binding đến hai hàng đợi khác nhau từ một Exchange Exchange sẽ định tuyến Message vào các hàng đợi dựa trên thuộc tính của của từng Message
(4) Các Message nằm ở hàng đợi đến khi chúng được xử lý bởi một Consumer
Trang 16(5) Consumer xử lý Message nhận từ Queue
2.3.4 Publisher / Subscriber (Topic exchange)
Topic exchange định tuyến message tới một hoặc nhiều queue dựa trên sự trùng khớp giữa routing key và pattern Topic exchange thường sử dụng để thực hiện định tuyến thông điệp multicast Ví dụ một vài trường hợp sử dụng:
Phân phối dữ liệu liên quan đến vị trí địa lý cụ thể
Xử lý tác vụ nền được thực hiện bởi nhiều workers, mỗi công việc có khả năng xử lý các nhóm tác vụ cụ thể
Cập nhật tin tức liên quan đến một category hoặc gắn tag
Điều phối các dịch vụ của các loại khác nhau trong cloud
2.3 Machine Learning
2.3.1 Kỹ thuật Freeze, Unfreeze
Đóng băng (Freeze) một model nhằm ngăn chặn việc weight của mạng nơ ron bị thay đổi trong quá trình training Dần dần khóa weight của từng lớp để giảm số lượng tính toán và giảm thời gian training
Ngừng đóng băng (Unfreeze) một model khi chúng ta cần tiếp tục việc training như là transfer learning: bắt đầu với pre-trained model, unfreeze weight và tiếp tục training với dataset khác Khi chúng ta chọn đóng băng, cần phải cân bằng giữa việc đóng băng sớm để đạt được tốc độ tính toán nhưng không đóng băng quá sớm để dẫn đến kết quả weight dự đoán không chính xác
2.3.2 Transfer Learning
2.3.2.1 Một số khái niệm
a Model
Những Model đi kèm Weights là một Pretrained Model
Model mới sử dụng một phần hay toàn bộ pretrained model như một phần của nó để học một tasks mới được gọi là Transferred Model
Trang 17nào đó mà nó được train Chúng ta gọi các tasks mà pretrained model đó được train để thực hiện là source tasks
Nhiệm vụ của chúng ta là tạo ra một model mới để thực hiện một hoặc nhiều tasks nào đó Những tasks cần được thực hiện của model này có thể trùng hoặc không trùng với tasks mà pretrained model được train (thường thì sẽ không trùng), chúng ta gọi tasks này là target tasks
c Transfer Learning
Transfer Learning cũng chính là cách để các model truyền đạt cho nhau khả năng mà mỗi model có thể làm được Một model có thể học trên source tasks nào đó và rồi pretrained model này được sử dụng cho model khác để model mới đó học trên target tasks nhanh hơn
Transfer Learning trong Deep Learning là một kỹ thuật mà trong đó:
- Một pretrained model đã được train trên source tasks cụ thể nào đó, khi đó một phần hay toàn bộ pretrained model có thể được tái sử dụng phụ thuộc vào nhiệm vụ của mỗi layer trong model đó
- Một model mới sử dụng một phần hay toàn bộ pretrained model để học một target tasks
và tùy vào nhiệm vụ của mỗi layer mà model mới có thể thêm các layer khác dựa trên pretrained model sẵn có
Việc sử dụng pretrained model là một bước tiến lớn để những người đi sau tiếp bước những thành quả, tận dụng những pretrained model sẵn có để tạo ra những model mới phục vụ cho các target tasks cụ thể hơn, mang tính ứng dụng thực tiễn hơn
2.3.2.2 Cơ sở hình thành
a Featuriser
Trước năm 2012, hầu hết mọi model AI đều được tạo thành bởi 2 stages độc lập với nhau:
- Feature Engineering: là quá trình dựa trên những hiểu biết của con người về vấn đề cần giải quyết để từ đó rút ra những đặc trưng của dataset mà có thể giúp ích cho việc giải quyết vấn đề đó nên các feature này được làm thủ công Feature extractor là một phần của model dùng để trích xuất ra features nói chung
- Classifier/Regressor: dùng các thuật toán Machine Learning để học và dự đoán các kết quả từ những features được tạo ra ở bước trên
Trang 18Hình 2.2.3.2 So sánh phương pháp Featuriser của các hình thức cổ điển và Deep Learning
hiện đại Các model Deep Learning tự nó đã kết hợp 2 stages này lại, các layer ở phần đầu của model được gọi là Feature Extractor và phần còn lại là để Classify/Regress các features từ phần Feature Extractor để tạo ra kết quả Do đó phần Feature Extractor này có thể lấy ra được những features từ trong dataset một cách tự động trong quá trình học mà không cần con người định nghĩa các features như trong phương pháp Feature Engineering
Đây là nền tảng của Transfer Learning: chúng ta có thể sử dụng Feature Extractor đã được train để trích xuất các features cho model của chúng ta thay vì phải tạo ra một Feature Extractor mới và train lại từ đầu
b Fine-tuning
Để sử dụng pretrained model một cách hiệu quả, cần phải có 2 điều sau:
- Thêm các layer phù hợp với target tasks, loại bỏ các layer của pretrained model mà không dùng đến, khiến cho model trở nên hiệu quả hơn, đây là một vấn đề khó (rất rất khó) cần phải có những nghiên cứu chuyên sâu về từng layer và mục đích của chúng
Trang 19Fine-tuning không phải chỉ giúp cho điều chỉnh weights của transferred model cho phù hợp với target tasks mà còn đưa ra cách tối ưu để train cả phần pretrained model và phần mới trong transferred model nhằm đạt được accuracy cao trên target tasks, khiến cho 2 phần fit với nhau hoàn chỉnh thành một model mới
Tóm lại, fine-tuning là việc train một transferred model nhằm mục đích tối ưu hóa accuracy của model này trên target tasks Dưới đây là các chiến lược thường dùng:
Hình 2.2.3.3 Phân loại chiến lược Fine-tuning Phân loại chiến lược Fine-tuning
- Khi dataset cho target tasks lớn và tương tự với dataset cho source tasks: đây là trường hợp lý tưởng, có thể dùng weights của pretrained model để khởi tạo cho phần pretrained, sau đó train cả transferred model hay chỉ với phần được thêm vào
- Khi dataset cho target tasks nhỏ và tương tự với dataset cho source tasks: vì dataset là nhỏ, nếu train lại phần pretrained sẽ dẫn đến overfitting, do đó chỉ train những layer được thêm vào với weights khởi tạo cho pretrained như trên
- Khi dataset cho target tasks lớn và khác biệt với dataset cho source tasks: bởi vì dataset
có sự khác biệt nên khi dùng weights từ pretrained model sẽ làm giảm accuracy vì sự khác biệt trong tasks và dataset, nhưng cũng chính vì dataset lớn nên việc train toàn bộ transferred model từ đầu là hiệu quả nhất, giúp cho model thích nghi tốt hơn với dataset này
- Khi dataset cho target tasks nhỏ và khác biệt với dataset cho source tasks: đây là trường hợp khó khăn nhất, điều nên làm có thể là can thiệp vào pretrained model, thay thế
Trang 20những pretrained layer xa input để thích nghi với dataset mới (những high-level features sẽ thay đổi vào các low-level features đã được lấy từ các layer trước đó) nhưng không được train các layer gần input của pretrained vì dataset nhỏ sẽ không thể train được các layer này hiệu quả và các layer này chỉ trích xuất các features tổng quát từ dataset, sẽ không ảnh hưởng đến target task
2.3.2.3 Lợi ích và hạn chế
a Lợi ích
- Việc sử dụng Pretrained Model bản thân nó không chỉ giúp giảm thời gian vào việc tạo
ra một model mới để thực hiện một target tasks mà dựa trên một source tasks sẵn có,
mà còn giảm thời gian train một model từ đầu vì Weights của phần source tasks đã có sẵn
- Pretrained model đã cung cấp một model có accuracy cao ngay từ đầu, do đó khi train trên target tasks thì transferred model của sẽ tiếp tục tăng accuracy này thay vì phải bắt đầu từ điểm có accuracy thấp hơn
b Hạn chế
- Transfer Learning không phải một kỹ thuật dễ sử dụng, nếu sai sót trong quá trình transfer architecture của pretrained hay thêm/bớt không đúng layer thì khi train, accuracy sẽ thấp không tưởng tượng được, khi đó chúng ta sẽ phải kiểm tra lại quá trình sửa các layer hoặc làm lại từ đầu Lưu ý: khi model có accuracy thấp như vậy, chúng ta không gọi quá trình train là fine-tuning vì nó không phù hợp với định nghĩa
- Chỉ có thể dùng Transfer Learning khi mà có pretrained model liên quan trực tiếp đến target tasks, không phải pretrained model nào cũng có thể dùng để transfer vào target tasks mong muốn được
2.3.3 Kiến trúc VGG
2.3.3.1 Kiến trúc mạng nơ ron tích chập (CNN)
Tích chập được ứng dụng phổ biến trong lĩnh vực thị giác máy tính Thông qua các phép tích chập, các đặc trưng chính từ ảnh được trích xuất và truyền vào các tầng tích chập (layer
Trang 21Như vậy ta có thể thấy một mạng nơ ron tích chập về cơ bản có 3 quá trình khác nhau:
- Quá trình tích chập (convolution): Thông qua các tích chập giữa ma trận đầu vào với
bộ lọc để tạo thành các đơn vị trong một tầng mới Quá trình này có thể diễn ra liên tục ở phần đầu của mạng và thường sử dụng kèm với hàm kích hoạt ReLU Mục tiêu của tầng này là trích xuất đặc trưng hai chiều
- Quá trình tổng hợp (max pooling): Các tầng càng về sau khi trích xuất đặc trưng sẽ cần
số lượng tham số lớn do chiều sâu được quy định bởi số lượng các kênh ở các tầng sau thường tăng tiến theo cấp số nhân Điều đó làm tăng số lượng tham số và khối lượng tính toán trong mạng nơ ron Do đó để giảm tải tính toán chúng ta sẽ cần giảm kích thước các chiều của khối
ma trận đầu vào hoặc giảm số đơn vị của tầng Vì mỗi một đơn vị sẽ là kết quả đại diện của việc áp dụng 1 bộ lọc để tìm ra một đặc trưng cụ thể nên việc giảm số đơn vị sẽ không khả thi Giảm kích thước khối ma trận đầu vào thông qua việc tìm ra 1 giá trị đại diện cho mỗi một vùng không gian mà bộ lọc đi qua sẽ không làm thay đổi các đường nét chính của bức ảnh nhưng lại giảm được kích thước của ảnh Do đó quá trình giảm chiều ma trận được áp dụng Quá trình này gọi là tổng hợp nhằm mục đích giảm kích thước dài, rộng
- Quá trình kết nối hoàn toàn (fully connected): Sau khi đã giảm kích thước đến một mức
độ hợp lý, ma trận cần được trải phẳng (flatten) thành một vector và sử dụng các kết nối hoàn toàn giữa các tầng Quá trình này sẽ diễn ra cuối mạng CNN và sử dụng hàm kích hoạt là ReLU Tầng kết nối hoàn toàn cuối cùng (fully connected layer) sẽ có số lượng đơn vị bằng với số classes và áp dụng hàm kích hoạt là softmax nhằm mục đích tính phân phối xác suất Các cột mốc phát triển của mạng CNN:
Trang 22Hình 2.3.3.1 Các cột mốc phát triển của mạng CNN Các mạng CNN tiêu biểu:
Ý tưởng sử dụng các khối lần đầu xuất hiện trong mạng VGG, được đặt theo tên của nhóm VGG thuộc Đại học Oxford
Hình 2.3.3.2 Kiến trúc VGG-16
Trang 232014], tác giả sử dụng tích chập với các hạt nhân 3×3 và tầng gộp cực đại 2×2 với sải bước bằng 2 (giảm một nửa độ phân giải sau mỗi khối) Trong mã nguồn dưới đây, ta định nghĩa một hàm tên vgg_block để tạo một khối VGG Hàm này nhận hai đối số num_convs và num_channels tương ứng lần lượt với số tầng tích chập và số kênh đầu ra
Hình 2.3.3.3 Khối VGG
b Mạng VGG
Giống như AlexNet và LeNet, mạng VGG có thể được phân chia thành hai phần: phần đầu tiên bao gồm chủ yếu các tầng tích chập và tầng gộp, còn phần thứ hai bao gồm các tầng kết nối đầy đủ Phần tích chập của mạng gồm các mô-đun vgg_block kết nối liên tiếp với nhau Trong Fig 7.2.1, biến conv_arch bao gồm một danh sách các tuples (một tuple cho mỗi khối), trong đó mỗi tuple chứa hai giá trị: số lượng tầng tích chập và số kênh đầu ra, cũng chính là những đối số cần thiết để gọi hàm vgg_block Mô-đun kết nối đầy đủ giống hệt với mô-đun tương ứng trong AlexNet
Trang 24Hình 2.3.3.4 Thiết kế mạng từ các khối cơ bản
Mạng VGG gốc có 5 khối tích chập, trong đó hai khối đầu tiên bao gồm một tầng tích chập ở mỗi khối, ba khối còn lại chứa hai tầng tích chập ở mỗi khối Khối đầu tiên có 64 kênh đầu
ra, mỗi khối tiếp theo nhân đôi số kênh đầu ra cho tới khi đạt giá trị 512 Vì mạng này sử dụng
8 tầng tích chập và 3 tầng kết nối đầy đủ nên nó thường được gọi là VGG-11
c Cải tiến so với AlexNet
Trang 25- Lần đầu tiên trong VGG-16 chúng ta xuất hiện khái niệm về khối tích chập (block) Đây là những kiến trúc gồm một tập hợp các layers CNN được lặp lại giống nhau Kiến trúc khối đã khởi nguồn cho một dạng kiến trúc hình mẫu rất thường gặp ở các mạng CNN kể từ đó
- VGG-16 cũng kế thừa lại hàm activation ReLU ở AlexNet
- VGG-16 chỉ sử dụng các bộ lọc kích thước nhỏ 3x3 thay vì nhiều kích thước bộ lọc như AlexNet Kích thước bộ lọc nhỏ sẽ giúp giảm số lượng tham số cho mô hình và mang lại hiệu quả tính toán hơn VD: Nếu sử dụng 2 bộ lọc kích thước 3 x 3 trên một featurs map (là output của một layer CNN) có độ sâu là 3 thì ta sẽ cần n_filters x kernel_size x kernel_size x n_channels = 2 x 3 x 3 x 3 = 54 tham số Nhưng nếu sử dụng 1 bộ lọc kích thước 5 x 5 sẽ cần 5 x 5 x 3 = 75 tham số 2 bộ lọc 3 x 3 vẫn mang lại hiệu quả hơn so với 1 bộ lọc 5 x 5
Mạng VGG-16 sâu hơn so với AlexNet và số lượng tham số của nó lên tới 138 triệu tham số Đây là một trong những mạng mà có số lượng tham số lớn nhất Kết quả của nó hiện đang xếp thứ 2 trên bộ dữ liệu ImageNet validation ở thời điểm public Ngoài ra còn một phiên bản nữa của VGG-16 là VGG-19 tăng cường thêm 3 layers về độ sâu
Bắt đầu từ VGG-16, một hình mẫu chung cho các mạng CNN trong các tác vụ học có giám sát trong xử lý ảnh đã bắt đầu hình thành đó là các mạng trở nên sâu hơn và sử dụng các block dạng [Conv2D*n + Max Pooling]
2.3.3.3 Tính chất mạng nơ ron tích chập (CNN)
Tính kết nối trượt: Khác với các mạng nơ ron thông thường, mạng nơ ron tích chập không kết
nối tới toàn bộ hình ảnh mà chỉ kết nối tới từng vùng địa phương (local region) hoặc vùng nhận thức (receptive field) có kích thước bằng kích thước bộ lọc của hình ảnh đó Các bộ lọc
sẽ trượt theo chiều của ảnh từ trái qua phải và từ trên xuống dưới đồng thời tính toán các giá trị tích chập và điền vào bản đồ kích hoạt (activation map) hoặc bản đồ đặc trưng (feature map)
Trang 26Hình 2.3.3.5 Tính tích chập trên bản đồ kích hoạt
Trang 27Hình 2.3.3.6 Quá trình trượt và tính tích chập của một bộ lọc kích thước 3x3 trên ảnh và kết
nối tới bản đồ kích hoạt
Các khối nơ ron 3D: Không giống như những mạng nơ ron thông thường khi cấu trúc ở mỗi
tầng là một ma trận 2D (batch size x số đơn vị ở mỗi tầng) Các kết quả ở mỗi tầng của một mạng nơ ron là một khối 3D được sắp xếp một cách hợp lý theo 3 chiều rộng (width), cao (height), sâu (depth) Trong đó các chiều rộng và cao được tính toán theo công thức tích chập mục 1.1 Giá trị chiều rộng và cao của một tầng phụ thuộc vào kích thước của bộ lọc, kích thước của tầng trước, kích thước mở rộng (padding) và bước trượt bộ lọc (stride) Tuy nhiên chiều sâu lại hoàn toàn không phụ thuộc vào những tham số này mà nó bằng với số bộ lọc trong tầng đó Quá trình tính bản đồ kích hoạt dựa trên một bộ lọc sẽ tạo ra một ma trận 2D Như vậy khi áp dụng cho bộ lọc khác nhau, mỗi bộ lọc có tác dụng trích suất một dạng đặc trưng trên mạng nơ ron, ta sẽ thu được ma trận 2D có cùng kích thước mà mỗi ma trận là một bản đồ đặc trưng Khi sắp xếp chồng chất các ma trận này theo chiều sâu kết quả đầu ra là một khối nơ ron 3D Thông thường đối với xử lý ảnh thì tầng đầu vào có depth = 3 (số kênh)
Trang 28nếu các bức ảnh đang để ở dạng màu gồm 3 kênh RGB Bên dưới là một cấu trúc mạng nơ ron điển hình có dạng khối
Hình 2.3.3.7 Cấu trúc các khối nơ ron 3D mạng Alexnet
Tính chia sẻ kết nối và kết nối cục bộ: Chúng ta đã biết quá trình biến đổi trong mạng tích
chập sẽ kết nối các khối nơ ron 3D Tuy nhiên các đơn vị sẽ không kết nối tới toàn bộ khối 3D trước đó theo chiều rộng và cao mà chúng sẽ chọn ra các vùng địa phương (hoặc vùng nhận thức) có kích thước bằng với bộ lọc Các vùng địa phương sẽ được chia sẻ chung một
bộ siêu tham số có tác dụng nhận thức đặc trưng của bộ lọc Các kết nối cục bộ không chỉ diễn
ra theo chiều rộng và cao mà kết nối sẽ mở rộng hoàn toàn theo chiều sâu Như vậy số tham
số trong một tầng sẽ là ( lần lượt là kích thước bộ lọc và chiều depth)
Mỗi bộ lọc sẽ có khả năng trích xuất một đặc trưng nào đó như đã giải thích ở mục 1 Do đó khi đi qua toàn bộ các vùng địa phương của khối nơ ron 3D, các đặc trưng được trích xuất sẽ hiển thị trên tầng mới
Trang 29Hình 2.3.3.8 Kết nối cục bộ
Giả sử ta có đầu vào là một bức ảnh 3 chiều kích thước 32x32x3 Khi đó mỗi đơn vị sẽ chỉ kết nối tới một vùng địa phương theo chiều rộng và cao nhưng sẽ mở rộng hoàn toàn kết nối theo chiều sâu Chúng ta có tổng cộng 5 đơn vị (nơ ron) trong tầng cùng nhìn vào một vùng địa phương này và sẽ tạo ra cùng 1 vùng địa phương kích thước 1x1x5 trên khối nơ ron 3D mới
Tính tổng hợp: Ở các tầng tích chập gần cuối số tham số sẽ cực kì lớn do sự gia tăng của chiều
sâu và thông thường sẽ theo cấp số nhân Như vậy nếu không có một cơ chế kiểm soát sự gia tăng tham số, chi phí tính toán sẽ cực kì lớn và vượt quá khả năng của một số máy tính cấu hình yếu Một cách tự nhiên là chúng ta sẽ giảm kích thước các chiều rộng và cao bằng kỹ thuật giảm mẫu (down sampling) mà vẫn giữ nguyên được các đặc trưng của khối Theo đó những bộ lọc được di chuyển trên bản đồ đặc trưng và tính trung bình (average pooling) hoặc giá trị lớn nhất (max pooling) của các phần tử trong vùng nhận thức Trước đây các tính trung bình được áp dụng nhiều nhưng các mô hình hiện đại đã thay thế bằng giá trị lơn nhất do tốc
độ tính max nhanh hơn so với trung bình
Trang 30Hình 2.3.3.9 Quá trình tổng hợp
Chẳng hạn chúng ta có một khối nơ ron 3D kích thước 224x224x64 Sẽ cần 224x224x64 =
3211264 tham số để kết nối tới khối này Chúng ta sẽ giảm kích thước kết nối đến khối 4 lần thông qua giảm chiều rộng và cao 2 lần mỗi chiều Quá trình giảm chiều dữ liệu sẽ thực hiện lần lượt trên các lát cắt theo chiều sâu và không làm thay đổi độ lớn của chiều sâu Khối mới vẫn giữ đặc trưng của khối cũ Để đơn giản, bạn hình dung quá trình này cũng giống như zoom nhỏ bức ảnh lại
Độ phức tạp phát hiện hình ảnh tăng dần: Ở tầng đầu tiên, hình ảnh mà chúng ta có chỉ là những giá trị pixels Sau khi đi qua tầng thứ 2 máy tính sẽ nhận diện được các hình dạng cạnh, rìa và các đường nét đơn giản được gọi là đặc trưng bậc thấp (low level) Càng ở những tầng tích chập về sau càng có khả năng phát hiện các đường nét phức tạp, đã rõ ràng hình thù và
Trang 31Hình 2.3.3.10 Hình ảnh mô phỏng các phát hiện sau mỗi tầng
Trang 322.3.4 Bài toán nhận diện giống thú cưng
2.3.4.1 Bộ dữ liệu
133 class (giống chó)
8,073 hình
- 6506 hình cho việc training
- 741 hình cho việc test model
- 826 hình cho việc validate
Hình 2.3.4.1 Biểu đồ thể hiện sự phân bổ dữ liệu đầu vào tương ứng với từng giống chó
2.3.4.2 Kết quả thực nghiệm
Kiến trúc VGG16
Trang 33Hình 2.3.4.2 Model_VGG.sumary Kích thước Model: 53Mb
Trang 34Hình 2.3.4.3
Trang 35CHƯƠNG 3: MÔ HÌNH USE CASE
Trang 363.3 Danh sách các Use-case
Bảng 3.2 Danh sách các use case
1 Đăng ký Người dùng đăng ký tài khoản
2 Đăng nhập Người dùng đăng nhập vào phần mềm
3 Đăng xuất Người dùng đăng xuất khỏi tài khoản
4 Quên mật khẩu Người dùng đặt lại mật khẩu
5 Chỉnh sửa thông tin cá
nhân
Người dùng thay đổi thông tin cá nhân của tài khoản
6 Thêm thông tin thú cưng Người dùng thêm thú cưng vào danh sách quản lý
7 Sửa thông tin thú cưng Người dùng chỉnh sửa thông tin thú cưng đã có
8 Xóa thông tin thú cưng Người dùng xóa thông tin thú cưng đã có
9 Thêm thông tin tinder Người dùng thêm thông tin vào pet tinder
10 Xóa thông tin tinder Người dùng xóa thông tin đã có trong pet tinder
11 Sửa thông tin tinder Người dùng chỉnh sửa thông tin đã có trong pet tinder
12 Theo dõi người dùng Người dùng theo dõi người dùng khác
13 Xem thông tin tinder của
người dung
Người dùng xem thông tin tinder của người dùng khác
14 Pet tinder Người dùng sử dụng pet tinder để tìm giống thú cưng
15 Quản lý match Hiển thị các match của người dùng
16 Báo cáo người dùng Người dùng báo cáo người dùng khác
17 Nhắn tin Người dùng nhắn tin cho người dùng khác
18 Nhận diện giống chó Người dùng sử dụng hình ảnh có chó để tìm kiếm giống chó
trong hình
Trang 37Trigger Người dùng nhấn vào nút “Đăng ký”
Pre-condition Nhập mã OTP được gửi từ mail
Post-condition Tài khoản mới được tạo
Activities Flow
Trang 39Hình 3.4.1 Activity flow đăng ký
Business Rules
Activity BR Code Description
(2) BR1 Loading Screen Rules:
- Khi người dùng nhấn vào nút đăng ký ở màn hình đăng nhập Hiển thị màn hình đăng ký tài khoản
để kiểm tra dữ liệu Nếu thành công thì sẽ gửi thông tin để lưu vào database, người dùng sẽ nhận được email (Email mẫu) gồm mã OTP và
di chuyển đến màn hình nhập mã OTP Nếu thất bại thì người dùng sẽ ở lại màn hình này và nhận thông báo về các TextBox điền không đúng dữ liệu
Người dùng nhấn “Quay lại” sẽ hủy hết các thông tin đã điền vả trở lại màn hình đăng nhập
Trang 40- [ErrorMsg]=“Ngày sinh không hợp lệ”
(6) BR4 Loading Screen Rules:
- Khi người dùng nhấn “Nhận mã OTP” thành công, hiển thị màn hình nhập mã OTP
(7) BR5 Submitting Rules:
Khi người dùng nhập mã OTP đã được nhận Hệ thống sẽ gửi thông tin
về server để kiểm tra dữ liệu Nếu thành công thì sẽ gửi thông tin để lưu vào database, người dùng sẽ nhận được email (Email mẫu) thông báo