1. Trang chủ
  2. » Luận Văn - Báo Cáo

PHÂN LOẠI GIỐNG CHÓ BẰNG MÔ HÌNH PHÂN LỚP SVM

60 8 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Phân Loại Giống Chó Bằng Mô Hình Phân Lớp SVM
Tác giả Vũ Đức Quảng - 2020603632, Nguyễn Ngọc Long – 2020601627, Nguyễn Thành Nam – 2020602442
Người hướng dẫn TS. Nguyễn Mạnh Cường
Trường học Trường Đại Học Công Nghiệp
Chuyên ngành Khoa Học Máy Tính
Thể loại Đồ Án Chuyên Ngành
Năm xuất bản 2024
Thành phố Hà Nội
Định dạng
Số trang 60
Dung lượng 1,84 MB

Cấu trúc

  • CHƯƠNG 1: KHẢO SÁT VÀ PHÁT BIỂU BÀI TOÁN (9)
    • 1.1. Nguồn gốc giống chó (11)
    • 1.2. Đặc điểm sinh học (11)
    • 1.3. Phân loại giống chó (12)
    • 1.4. Tầm quan trọng của phân loại giống chó (13)
    • 1.5. Bài toán phân loại giống chó trong trí tuệ nhân tạo (14)
    • 1.6. Ứng dụng mô hình SVM vào bài toán phân loại giống chó (14)
  • CHƯƠNG 2: CÁC KỸ THUẬT GIẢI QUYẾT BÀI TOÁN (9)
    • 2.1 Phương hướng tiếp cận bài toán (16)
    • 2.2 Một số kỹ thuật giải quyết bài toán (16)
      • 2.2.1 Thuật toán CNN-Convolutional Neural Network (16)
      • 2.2.2 Thuật toán Random Forests (19)
      • 2.2.3 Thuật toán Naive Bayes (24)
      • 2.2.4 Thuật toán Transfer Learning (25)
      • 2.2.5. Thuật toán K-Nearest Neighbors (KNN) (27)
      • 2.2.6. Thuật toán SVM (28)
    • 2.3. Đề xuất mô hình SVM để giải quyết bài toán (31)
  • CHƯƠNG 3: THỰC NGHIỆM (10)
    • 3.1 Dữ liệu thực nghiệm (33)
    • 3.2 Huấn luyện mô hình (35)
      • 3.2.1 Môi trường sử dụng (35)
      • 3.2.2 Cách tiến hành huấn luyện mô hình (36)
    • 3.3 Kiểm tra mô hình đã huấn luyện (42)
    • 3.4 Các kết quả thực nghiệm (46)
  • CHƯƠNG 4: XÂY DỰNG SẢN PHẨM DEMO (48)
    • 4.1 Giới thiệu các framework sử dụng (48)
      • 4.1.1 Vue (48)
      • 4.1.2 Flask (49)
    • 4.2 Phân tích thiết kế hệ thống (49)
      • 4.2.1 Biểu đồ use case hệ thống (49)
      • 4.2.2 Mô tả chi tiết use case (50)
    • 4.3 Các bước xây dựng sản phẩm demo (51)
      • 4.3.1 Định nghĩa một endpoint API /api/getall (51)
      • 4.3.2 Định nghĩa endpoint /results (53)
      • 4.3.3 Xây dựng giao diện bằng Vue (53)
    • 4.4 Giao diện hệ thống và cách dùng (56)
  • KẾT LUẬN (58)
  • TÀI LIỆU THAM KHẢO (59)

Nội dung

Trí tuệ nhân tạo (AI) là một lĩnh vực khoa học máy tính tập trung vào việc tạo ra các hệ thống máy tính có thể thực hiện các nhiệm vụ thông minh mà con người thường làm, chẳng hạn như học hỏi, suy luận và giải quyết vấn đề. Trí tuệ nhân tạo đang đi vào cuộc sống của mỗi quốc gia, mỗi con người. Trí tuệ nhân tạo đang biến những điều không tưởng thành hiện thực. Những căn nhà thông minh, những robot chẩn đoán bệnh hay hoạt động trong lĩnh vực quân sự, những chiếc xe không người lái. Được sự ủng hộ và thúc đẩy của các ông lớn công nghệ như thế, chúng ta hiểu rằng tương lai sẽ còn nhiều và trên phạm vi rộng rãi hơn thế nữa. Ưu điểm của việc dùng trí tuệ nhân tạo là mọi thứ đều hoạt động bằng máy tính và kết quả có nhanh chóng, các cấu trúc phân tích, dự đoán, tính toán dữ liệu có thể được học và điều chỉnh tự động hoàn toàn . Sau nhiều thập kỷ đổi mới, Việt Nam đã có bước phát triển mạnh mẽ, trở thành nền kinh tế hội nhập, năng động, hấp dẫn đầu tư trong khu vực. Phát triển thuộc top nhanh trên thế giới. Trong bối cảnh phát triển và hội nhập quốc tế, cùng với sự phát triển mạnh mẽ của cuộc cách mạng công nghiệp 4.0, Việt Nam xác định tập trung phát triển công nghệ trí tuệ nhân tạo (AI) một mũi nhọn, được dự báo trở thành ngành công nghệ đột phá nhất trong 10 năm tới.

KHẢO SÁT VÀ PHÁT BIỂU BÀI TOÁN

Nguồn gốc giống chó

Chó, với tên khoa học là Canis lupus familiaris, là một trong những loài động vật cưng phổ biến nhất trên toàn cầu, được thuần hóa từ sói cách đây hàng ngàn năm.

Chó đã xuất hiện khoảng 15.000 năm trước, trước cả khi nông nghiệp ra đời, và là một trong những loài vật nuôi đầu tiên được thuần hóa Chúng có nguồn gốc từ loài sói cổ, nhưng các nhà khoa học vẫn chưa xác định được nơi thuần hóa, có thể là ở châu Âu hoặc châu Á.

Vấn đề này trở nên phức tạp do các nhà khảo cổ học đã phát hiện dấu vết của loài chó từ hàng ngàn năm trước ở cả hai đầu của lục địa Á Âu Các nghiên cứu gần đây cho thấy chó đã được thuần hóa ít nhất hai lần, ở hai khu vực khác nhau trên thế giới.

Đặc điểm sinh học

Chó có nhiều kích thước, hình dáng, màu lông và tính cách khác nhau tùy thuộc vào từng giống Chúng có khả năng thích nghi và điều chỉnh để phù hợp với môi trường sống cũng như nhu cầu của con người.

Lông chó có đa dạng màu sắc như đen, trắng, nâu, vàng, xám và nhiều biến thể khác, với sự thay đổi màu sắc tùy thuộc vào từng giống chó.

Tính cách và hành vi của chó rất đa dạng, phụ thuộc vào từng giống Một số giống chó nổi bật với tính cách thân thiện, trung thành và hòa đồng, trong khi những giống khác lại có tính cách độc lập, năng động hoặc bảo thủ Di truyền và môi trường chăm sóc cũng đóng vai trò quan trọng trong việc hình thành tính cách và hành vi của chó.

Thời gian sống trung bình của chó thường dao động từ 10 đến 13 năm, nhưng có thể thay đổi tùy thuộc vào giống.

11 kích thước, và điều kiện chăm sóc Một số giống chó nhỏ có thể sống lâu hơn, trong khi các giống lớn thường có thời gian sống ngắn hơn

Chó có khả năng sinh sản và thích nghi với nhiều môi trường khác nhau Thời gian mang thai của chó kéo dài khoảng 9 tuần, và số lượng con trong mỗi lứa có thể từ một vài đến nhiều con, tùy thuộc vào giống Thông thường, chó cái có thể sinh sản một lứa con mỗi 6-12 tháng.

Chó là loài động vật xã hội, có khả năng thiết lập mối quan hệ gần gũi với con người và các thành viên trong gia đình Chúng thường xuyên tương tác với con người và có khả năng học hỏi, hiểu các chỉ dẫn từ con người một cách hiệu quả.

Phân loại giống chó

Giống chó là nhóm chó có những đặc điểm chung về kích thước, hình dáng, màu sắc lông và tính cách Chúng được phát triển qua quá trình lai tạo và chọn lọc để phục vụ cho các mục đích như săn bắn, chăn cừu, canh gác, dẫn đường, cảnh sát, cứu hộ, hoặc chó nuôi gia đình Mỗi giống chó đều có tiêu chuẩn quy định đặc biệt để phân loại và nhận biết.

Phân loại giống chó là quá trình xác định và phân loại các giống chó dựa trên tiêu chuẩn và đặc điểm quy định, giúp nhận biết và phân biệt giữa các giống chó khác nhau Quá trình này hỗ trợ việc chăm sóc, huấn luyện và nuôi dưỡng chó hiệu quả hơn Các tiêu chí phân loại thường dựa vào kích thước, hình dáng, màu sắc lông và cấu trúc cơ thể Tiêu chuẩn phân loại giống chó thường được thiết lập bởi các tổ chức như Fédération Cynologique Internationale (FCI) và American Kennel Club (AKC).

Tầm quan trọng của phân loại giống chó

Phân loại giống chó đóng vai trò quan trọng đối với con người và loài chó trong nhiều lĩnh vực, bao gồm y học, sinh học và chăn nuôi.

Trong lĩnh vực thú y, việc phân loại giống chó không chỉ giúp dự đoán các vấn đề sức khỏe phổ biến mà giống chó đó có thể gặp phải, mà còn hỗ trợ người nuôi chuẩn bị tốt hơn cho việc chăm sóc và điều trị khi cần thiết.

Đa dạng giống chó rất quan trọng để đáp ứng nhu cầu của con người, đồng thời bảo vệ và duy trì những giống chó đặc biệt hoặc có nguy cơ tuyệt chủng Vi

Nghiên cứu và phát triển giống chó đóng vai trò quan trọng trong việc phân loại và lai tạo các giống mới, nhằm nâng cao sức khỏe, tính cách và khả năng của chó Việc này không chỉ giúp cải thiện các đặc điểm của giống chó hiện tại mà còn mở ra cơ hội cho sự phát triển bền vững trong tương lai.

Phát triển chuẩn giống chó là quá trình phân loại giống nhằm xác định các tiêu chuẩn cụ thể về kích thước, hình dáng, màu lông và tính cách Điều này giúp đảm bảo rằng giống chó được nuôi dưỡng theo những tiêu chuẩn đã được thiết lập.

Nghiên cứu và phân loại giống chó có thể dẫn đến việc tạo ra các giống đặc biệt thông qua lai tạo, nhằm đạt được những đặc điểm cụ thể hoặc cải thiện sức khỏe và tính cách của chúng.

Nghiên cứu di truyền về các giống chó rất quan trọng vì chúng cung cấp mô hình lý tưởng để khám phá các đặc điểm di truyền đa dạng Sự phân loại giống chó không chỉ giúp hiểu rõ hơn về di truyền mà còn cảnh báo về các bệnh di truyền có thể ảnh hưởng đến cả chó và con người.

Chó được sử dụng làm thú cưng trợ thính và chó dẫn đường cho người khiếm thính hoặc mù Việc phân loại giống chó giúp lựa chọn những giống có tính cách và khả năng phù hợp cho các mục đích này.

Phân loại giống chó rất quan trọng trong nghiên cứu di truyền, hành vi và tâm lý học động vật Các giống chó cung cấp mô hình thực nghiệm hữu ích, giúp hiểu rõ hơn về nhiều khía cạnh của sinh học và tâm lý học.

Chó đóng vai trò quan trọng trong nhiều nhiệm vụ an ninh, bao gồm công việc canh gác, hỗ trợ cảnh sát, quân đội và an ninh sân bay Việc phân loại giống chó giúp xác định và đào tạo chúng cho các mục tiêu an ninh cụ thể, nâng cao hiệu quả trong công tác bảo vệ.

Bài toán phân loại giống chó trong trí tuệ nhân tạo

Bài toán phân loại giống chó là một nhiệm vụ quan trọng trong lĩnh vực nhận dạng hình ảnh và trí tuệ nhân tạo, nhằm nhận diện và phân loại hình ảnh chó vào các giống tương ứng Để giải quyết bài toán này, các phương pháp máy học và học sâu thường được áp dụng Đầu vào là hình ảnh chó, được biểu diễn dưới dạng ma trận điểm ảnh và có thể được xử lý qua các thư viện phân tích hình ảnh Kết quả đầu ra sẽ là nhãn hoặc tên giống chó tương ứng với hình ảnh, ví dụ như "Golden Retriever" cho hình ảnh của một con chó Golden Retriever.

Bài toán phân loại giống chó đóng vai trò quan trọng trong nhận dạng hình ảnh và trí tuệ nhân tạo Việc phân loại chó theo giống giúp nhận diện và hiểu rõ các đặc điểm, tính chất riêng biệt của từng giống, từ đó nâng cao hiệu quả trong chăm sóc, huấn luyện và nuôi dưỡng chó.

CÁC KỸ THUẬT GIẢI QUYẾT BÀI TOÁN

Phương hướng tiếp cận bài toán

Một số kỹ thuật giải quyết bài toán

2.2.1 Thuật toán CNN-Convolutional Neural Network

Mô hình mạng neural tích chập (CNN) là một trong những công nghệ quan trọng trong việc nhận dạng và phân loại hình ảnh CNN được áp dụng rộng rãi trong các lĩnh vực như xác định đối tượng và nhận dạng khuôn mặt.

CNN phân loại hình ảnh bằng cách lấy 1 hình ảnh đầu vào, xử lý và phân loại nó theo các hạng mục nhất định (Ví dụ: Chó, Mèo, Hổ, ).

Máy tính xử lý hình ảnh đầu vào dưới dạng mảng pixel, với độ phân giải hình ảnh ảnh hưởng trực tiếp đến chất lượng hiển thị Tùy thuộc vào độ phân giải, máy tính sẽ nhận diện hình ảnh với kích thước H x.

W x D (H: Chiều cao, W: Chiều rộng, D: Độ dày) Ví dụ: Hình ảnh là mảng ma trận RGB 6x6x3 (3 ở đây là giá trị RGB) [3].

Hình 2 1 Hình ảnh mảng ma trận RGB 6x6x3

(Nguồn: hình ảnh được trích dẫn từ tài liệu tham khảo [3])

Mô hình CNN sử dụng kỹ thuật training và kiểm tra bằng cách chuyển đổi hình ảnh đầu vào qua nhiều lớp tích chập với các bộ lọc (Kernels) Sau đó, các lớp này được tổng hợp lại qua các lớp kết nối đầy đủ (Fully Connected) và áp dụng hàm Softmax để phân loại đối tượng với giá trị xác suất từ 0 đến 1 Hình dưới đây minh họa toàn bộ quy trình CNN trong việc xử lý hình ảnh và phân loại các đối tượng dựa trên giá trị xác suất.

Lớp tích chập - Convolution Layer

Lớp chính trong mạng nơ-ron tích chập (CNN) thực hiện việc tạo ra các bản đồ đặc trưng từ hình ảnh đầu vào thông qua việc áp dụng các bộ lọc (kernel) bằng phép tích chập Những bản đồ đặc trưng này giúp mạng nơ-ron nhận diện các đặc điểm quan trọng trong hình ảnh như cạnh, góc và kết cấu.

Khi nhắc đến lớp Convolutional Layer, chúng ta cần làm rõ một số khái niệm đó là: Filter Map, Stride, Padding, FeatureMap:

 Filter Map: Những Filter Map này có thể xem là một ma trận 3 chiều, bao gồm những con số và các con số chính là Parameter.

Trong mạng nơ-ron tích chập (CNN), stride được định nghĩa là quá trình dịch chuyển bản đồ bộ lọc (Filter Map) theo từng pixel, từ trái sang phải Stride thể hiện rõ ràng cách mà bộ lọc di chuyển trên hình ảnh đầu vào.

 Padding: Padding chính là những giá trị 0 được thêm vào lớp Input.ư

 Feature Map: Đây là kết quả hiển thị sau mỗi lần Filter Map quét qua Input

Cứ mỗi lần quét như vậy, bạn sẽ thấy sự xuất hiện của quá trình tính toán được xảy ra.

Lớp gộp là một thành phần quan trọng trong mạng nơ-ron, giúp giảm kích thước của bản đồ đặc trưng, từ đó giảm tải tính toán và kiểm soát hiện tượng overfitting Lớp này thường áp dụng các phương pháp tổng hợp như max-pooling hoặc average-pooling để lựa chọn giá trị lớn nhất hoặc trung bình từ một vùng nhỏ trong bản đồ đặc trưng.

Tại lớp Pooling, việc sử dụng Max Pooling giúp giảm số lượng tham số trong mạng nơ-ron tích chập Điều này dẫn đến sự xuất hiện của nhiều lớp Filter Map, mỗi lớp sẽ tạo ra một Max Pooling riêng biệt.

Lớp kết nối đầy đủ - Fully Connected Layer

Sau khi thông tin được trích xuất từ các lớp tích chập và gộp, nó sẽ được chuyển vào lớp kết nối đầy đủ để thực hiện phân loại hoặc dự đoán Đây là lớp cuối cùng trong mạng nơ-ron tích chập (CNN) và thường được áp dụng trong các bài toán phân loại hình ảnh.

Hàm phi tuyến – ReLU ( Rectified Linear Unit)

ReLU là hàm kích hoạt trong mạng CNN, được gọi là activation function

Hàm ReLU là một trong những hàm kích hoạt phổ biến nhất hiện nay, có tác dụng mô phỏng các nơron với tỷ lệ truyền xung qua axon Ngoài ReLU, còn có nhiều hàm kích hoạt khác như Leaky, Sigmoid, và Maxout.

Hàm ReLU được sử dụng trong huấn luyện mạng nơron nhờ vào khả năng tính toán nhanh chóng Khi áp dụng hàm này, việc điều chỉnh learning rate và xử lý dead unit là rất quan trọng Các lớp ReLU thường được sử dụng sau khi tính toán filter map, giúp tối ưu hóa giá trị của filter map.

CNN có khả năng tự động học và trích xuất các đặc trưng quan trọng từ dữ liệu đầu vào, bao gồm cạnh, góc và các đặc điểm cấu trúc khác, mà không cần lập trình tường minh.

CNN tích hợp tính phi tuyến vào mô hình, cho phép nó học các biểu diễn phức tạp của dữ liệu và nhận diện các mối quan hệ không tuyến tính giữa các đặc trưng.

CNN được thiết kế đặc biệt để xử lý dữ liệu lưới như hình ảnh và video, do đó, chúng rất hiệu quả trong các ứng dụng liên quan đến thị giác máy tính.

 Tiền xử lý thấp: CNN thường không đòi hỏi nhiều tiền xử lý dữ liệu so với các mạng nơ-ron truyền thống.

CNN mang lại hiệu năng ấn tượng trong các ứng dụng thị giác máy tính và có khả năng tối ưu hóa để hoạt động hiệu quả trên phần cứng đặc thù như GPU.

Để huấn luyện một mạng nơ-ron tích chập (CNN) hiệu quả, cần phải có một lượng lớn dữ liệu huấn luyện, điều này có thể tạo ra thách thức cho các ứng dụng có nguồn dữ liệu hạn chế.

THỰC NGHIỆM

Dữ liệu thực nghiệm

Quá trình thực nghiệm được được tiến hành trên 2 bộ dữ liệu giống chó là

Bộ dữ liệu “Dog_Breed_Classification” và “archive” đều sử dụng hình ảnh màu RGB Trong đó, bộ “archive” được nghiên cứu và xây dựng bởi nhóm, bao gồm hình ảnh của 14 giống chó khác nhau được thu thập từ nhiều nguồn khác nhau.

“Dog_Breed_Classification” và các hình ảnh ngẫu nhiên được tải về từ internet

Bộ dữ liệu này được sử dụng trong quá trình test của mô hình SVM

Hình 3 1 Một số hình ảnh của bộ "archive"

Bộ dữ liệu "Dog_Breed_Classification" được tải về từ Kaggle, bao gồm 700 hình ảnh mẫu và đã được sử dụng nhiều lần cho bài toán phân loại giống chó Dữ liệu này có 14 lớp ảnh, mỗi lớp chứa 50 hình ảnh của các giống chó tương ứng, và được sử dụng trong quá trình huấn luyện mô hình phân loại.

Hình 3 2 Một số hình ảnh của bộ "Dog_Breed_Classification"

Bảng 3 1 Tổng quát các bộ dữ liệu

Dữ liêu Số loại chó Số mẫu Kích thước (pixel) Dog_Breed_Classification 14 700 100x100x3 archive 14 115 50x50x3

Huấn luyện mô hình

Google Colaboratory, hay còn gọi là Colab, là một môi trường phát triển mã nguồn mở dựa trên trình duyệt, cho phép người dùng chia sẻ và thực thi mã Python mà không cần cài đặt phần mềm trên máy tính cá nhân Colab cung cấp máy ảo Linux trên đám mây, mang lại sự tiện lợi và linh hoạt cho việc lập trình và nghiên cứu.

Colab cung cấp một môi trường phát triển tương tự như Jupyter Notebook, cho phép người dùng viết và thực thi mã Python trong từng ô (cell) riêng biệt Tính năng này giúp tăng cường khả năng tương tác giữa mã và kết quả trong quá trình phát triển.

Colab cung cấp một máy ảo Linux mạnh mẽ cho việc thực thi mã Python, cho phép người dùng truy cập các thư viện và công cụ phổ biến trong cộng đồng Python mà không cần cài đặt Ngoài ra, Colab hỗ trợ GPU và TPU, giúp thực hiện tính toán song song và xử lý dữ liệu lớn một cách nhanh chóng.

Colab là dịch vụ miễn phí từ Google, cho phép người dùng sử dụng mà không tốn chi phí Bên cạnh đó, bạn có thể dễ dàng chia sẻ các notebook Colab với người khác, giúp họ xem và chỉnh sửa mã của bạn hoặc cùng hợp tác trong công việc.

Colab tích hợp liền mạch với Google Drive, cho phép bạn lưu trữ và truy cập các notebook trực tiếp từ tài khoản Google Drive Tính năng này không chỉ giúp dễ dàng sao lưu và chia sẻ notebook mà còn mang lại sự thuận tiện khi làm việc với các tệp tin và dữ liệu lớn.

3.2.2 Cách tiến hành huấn luyện mô hình

To begin, import the essential libraries, including pandas for data manipulation, os for operating system interactions, and various functions from the skimage library for image processing, such as resize, imread, and rgb2gray Additionally, utilize numpy for numerical operations and sklearn for machine learning tasks, including support vector machine (SVM) implementation, hyperparameter tuning with GridSearchCV, and performance evaluation metrics like accuracy score, F1 score, and recall score Finally, employ glob for file path management.

 pandas: dùng để làm việc với dữ liệu dạng bảng

 os: dùng để thao tác với hệ điều hành

 skimage.transform.resize: dùng để thay đổi kích thước ảnh

 skimage.io.imread: dùng để đọc ảnh

 skimage.color.rgb2gray: dùng để chuyển đổi ảnh màu thành ảnh xám

 numpy: dùng để làm việc với mảng

 sklearn: thư viện hỗ trợ các công cụ và thuật toán trong machine learning

 svm từ sklearn: dùng để tạo mô hình Support Vector Machine (SVM)

 GridSearchCV từ sklearn.model_selection: dùng để tìm kiếm siêu tham số tốt nhất cho mô hình SVM

 accuracy_score, f1_score, recall_score từ sklearn.metrics: các hàm để tính toán các độ đo đánh giá mô hình

Cài đặt và tải về tập dữ liệu từ Kaggle

!pip install pyyaml h5py # Required to save models in HDF5 format

'{"username":"lasion","key":"241a4d93286f792dff44b5d a573987ad"}' > kaggle.json

!kaggle datasets download -d abhinavkrjha/dog-breed- classification

!unzip /content/dog-breed-classification.zip -d train

 Cài đặt các package liên quan đến Kaggle

 Tạo file kaggle.json chứa thông tin đăng nhập vào Kaggle

 Đăng nhập vào Kaggle và kiểm tra danh sách các dataset có sẵn

 Tải về dataset dog-breed-classification từ Kaggle

 Giải nén dataset đã tải về vào thư mục train Định nghĩa các biến và in ra danh sách các thư mục huấn luyện (CATEGORIES_TRAIN)

CATEGORIES_TRAIN os.listdir(os.path.join(DATASET_PATH, 'train'))

To define a function for loading and processing images from training directories, we start with the specified dimensions, RESIZED_DIMENSIONS = (50, 50, 3) The function, load_images, takes a path and categories as inputs It initializes two empty arrays: flat_data_arr for image data and target_arr for labels For each category, the function prints a loading message and retrieves all JPEG image files from the corresponding directory using glob It then reads each image file, converts the image to grayscale using rgb2gray, and resizes it accordingly.

The resized images are flattened and appended to a data array, while their corresponding categories are stored in a target array A success message is printed for each loaded category Finally, the flat data and target arrays are converted into NumPy arrays and returned.

To prepare the training dataset, we load images from the 'train' directory within the specified dataset path, categorizing them according to the defined training categories The flattened image data is then organized into a DataFrame, where we assign the target labels to a new column named 'Target' Consequently, we separate the features into 'x_train' and the corresponding labels into 'y_train' for model training.

 Khởi tạo mảng flat_data_arr để lưu trữ các ảnh sau khi được xử lý

 Khởi tạo mảng target_arr để lưu trữ nhãn tương ứng của từng ảnh

 Duyệt qua từng thư mục huấn luyện

 Tìm kiếm tất cả các file ảnh (*.jpg) trong thư mục hiện tại

 Đọc và chuyển đổi ảnh sang ảnh xám (rgb2gray) và thay đổi kích thước (resize) theo RESIZED_DIMENSIONS đã định nghĩa trước đó

 Ghi nhận dữ liệu ảnh đã xử lý và nhãn tương ứng vào mảng flat_data_arr và target_arr

 Cuối cùng, trả về mảng dữ liệu đã xử lý flat_data và mảng nhãn target

Sau khi định nghĩa hàm load_images, đoạn mã tiếp theo gọi hàm này để tải và xử lý hình ảnh từ thư mục huấn luyện, với kết quả được lưu trữ trong dataframe df_train Dữ liệu và nhãn sau đó được trích xuất từ df_train và lưu vào hai biến x_train và y_train.

Lấy danh sách tên các thư mục trong thư mục huấn luyện (train) và phân chia chúng thành các tầng con bằng cách sử dụng thư viện os trong Python Đường dẫn đến thư mục train được xác định là '/content/train'.

# Lấy danh sách tên các thư mục trong thư mục train

The script retrieves a list of subdirectories from the specified training directory, filtering only the directories It then sorts these subdirectories to create an ordered list of categories The total number of categories is calculated, and half of this number is determined to define the subcategories A loop is initiated to process these subcategories, allowing for further operations based on the categorized data.

(num_subcategories - i) subcategory = categories[start:end] subcategories.append(subcategory) start = end

# Hiển thị các tầng con for i, subcategory in enumerate(subcategories): print(f"Tầng con {i+1}: {subcategory}")

 Sắp xếp các thư mục theo thứ tự tăng dần

 Tính toán số tầng con (num_subcategories) là nửa số lượng thư mục

 Duyệt qua các tầng con và chia các thư mục vào từng tầng con

 In ra danh sách các tầng con và các thư mục thuộc tầng đó

To create and train Support Vector Machine (SVM) models for each subcategory, initialize an empty list for models For each layer in the subcategories, filter the training DataFrame to include only the relevant target values Extract the features and target variables for each layer, and define the parameter grid for model tuning.

} svc = svm.SVC(probability=True) model = GridSearchCV(svc, param_grid) print('Training model ') model.fit(x_layer_train, y_layer_train) models.append(model)

 Duyệt qua từng tầng con

 Lấy dữ liệu và nhãn tương ứng từ df_train cho tầng con hiện tại

 Định nghĩa một lưới siêu tham số (param_grid) cho mô hình SVM

 Tạo một mô hình SVM (svc) với khả năng dự đoán xác suất (probability=True)

 Sử dụng GridSearchCV để tìm kiếm siêu tham số tốt nhất cho mô hình SVM

 Huấn luyện mô hình với dữ liệu và nhãn tương ứng từ tầng con hiện tại

 Thêm mô hình vào danh sách models

Tạo một mô hình phân loại kết hợp (Ensemble-based classification)

# Phân loại kết hợp (Ensemble-based classification) from sklearn.ensemble import VotingClassifier ensemble_model = VotingClassifier([(str(i), model) for i, model in enumerate(models)], voting='soft') ensemble_model.fit(x_train, y_train)

Phần này trình bày cách sử dụng VotingClassifier từ sklearn.ensemble để xây dựng mô hình phân loại kết hợp từ danh sách các mô hình đã được huấn luyện Mô hình áp dụng phương pháp bỏ phiếu mềm (voting='soft') và được huấn luyện bằng dữ liệu x_train cùng với nhãn y_train tương ứng.

# Lưu model đã huấn luyện model_path '/content/trained_model_archive14444.pkl' import joblib joblib.dump(ensemble_model, model_path)

Phần này lưu mô hình đã huấn luyện (ensemble_model) vào một file có đường dẫn model_path sử dụng joblib.dump() từ thư viện joblib.

Kiểm tra mô hình đã huấn luyện

To begin, import the essential libraries and modules required for your project, including `os`, `glob`, and `numpy` Utilize `skimage` for image processing by importing `rgb2gray` and `imread` Additionally, leverage `joblib` for efficient data handling and `sklearn.metrics` to assess accuracy with `accuracy_score`.

42 f1_score, recall_score, precision_score from flask_cors import CORS from PIL import Image from io import BytesIO import pandas as pd

Các thư viện và module được sử dụng bao gồm các công cụ để xử lý hình ảnh, đọc và giải mã hình ảnh, tính toán các chỉ số đánh giá, cùng với việc triển khai API Flask.

Khởi tạo ứng dụng Flask và kích hoạt CORS app = Flask( name )

Ứng dụng Flask được khởi tạo với tính năng CORS (Cross-Origin Resource Sharing) để cho phép yêu cầu từ các nguồn khác nhau, đồng thời định nghĩa các thông số và đường dẫn cần thiết cho hoạt động của ứng dụng.

MODEL_PATH = 'model/Dog14_Kaggle.pkl'

Trong ứng dụng, các thông số quan trọng bao gồm kích thước ảnh đã được thay đổi (RESIZED_DIMENSIONS), đường dẫn tới tập dữ liệu (DATASET_PATH), đường dẫn tới mô hình đã huấn luyện (MODEL_PATH), và số lượng danh mục (N_CATEGORIES).

Load danh sách các thư mục test và đọc mô hình huấn luyện

# Load danh sách các thư mục test

CATEGORIES_TEST os.listdir(os.path.join(DATASET_PATH, 'test')) if not isinstance(CATEGORIES_TEST, list):

CATEGORIES_TEST = list(CATEGORIES_TEST)

# Đọc model đã train model = joblib.load(MODEL_PATH)

 Danh sách các thư mục test được lưu vào biến CATEGORIES_TEST Nếu CATEGORIES_TEST không phải là một danh sách, nó sẽ được chuyển đổi thành danh sách

The trained model can be loaded from the MODEL_PATH using joblib.load() To preprocess the test data, the function load_images() is defined, which initializes empty arrays for flat data, targets, and original images It iterates through the CATEGORIES_TEST, retrieving image files using glob.glob() from the specified DATASET_PATH If no images are found for a category, a message is printed For each image file, the image is read, converted to grayscale, and resized for further processing.

RESIZED_DIMENSIONS) flat_data_arr.append(img_resized.flatten()) target_arr.append(CATEGORIES_TEST.index(category))

44 original_images.append(img_array) flat_data = np.array(flat_data_arr) target = np.array(target_arr) return flat_data, target,original_images

Hàm preprocess_test_data() thực hiện tiền xử lý dữ liệu test bằng cách duyệt qua các thư mục test và đọc ảnh từ mỗi thư mục Ảnh được chuyển đổi thành ảnh xám (img_gray), thay đổi kích thước theo kích thước chỉ định (img_resized), và làm phẳng thành mảng 1D (flat_data_arr) Nhãn tương ứng và ảnh gốc cũng được lưu lại Cuối cùng, hàm trả về các mảng dữ liệu bao gồm flat_data, target và original_images.

Load và chuẩn bị dữ liệu test test_flat_data, original_images, test_target load_images(os.path.join(DATASET_PATH, 'test'),

CATEGORIES_TEST) df_test = pd.DataFrame(test_flat_data) df_test['Target'] = test_target

Hàm load_images() được sử dụng để tải dữ liệu hình ảnh từ thư mục test trong đường dẫn DATASET_PATH, dựa trên danh sách các danh mục CATEGORIES_TEST Kết quả trả về bao gồm test_flat_data (dữ liệu hình ảnh đã được làm phẳng), original_images (hình ảnh gốc) và test_target (nhãn tương ứng với mỗi hình ảnh).

 test_flat_data được sử dụng để tạo DataFrame df_test, trong đó mỗi hàng của DataFrame đại diện cho một mẫu hình ảnh đã được làm phẳng

 Cột 'Target' được thêm vào DataFrame df_test và chứa nhãn tương ứng với mỗi mẫu hình ảnh

Dự đoán và tính toán độ đo đánh giá

#Dự đoán x_test = df_test.iloc[:, :-1]

45 y_test = df_test.iloc[:, -1] y_pred = model.predict(x_test)

To evaluate the performance of a model, several key metrics are calculated, including accuracy, F1 score, recall, and precision The accuracy is determined using the accuracy_score function, while the F1 score is calculated with the f1_score function, using a weighted average Similarly, recall and precision are assessed through the recall_score and precision_score functions, respectively, also employing a weighted average The results of these evaluations are then printed, showcasing the accuracy, F1 score, recall, and precision of the model.

 Dữ liệu test được trích xuất từ DataFrame df_test Cột cuối cùng của DataFrame (x_test) chứa dữ liệu đầu vào để thực hiện dự đoán

 Cột 'Target' (y_test) chứa nhãn thực tế tương ứng với mỗi mẫu hình ảnh

 Dùng mô hình đã được đào tạo (model) để dự đoán nhãn cho dữ liệu test Kết quả dự đoán được lưu vào y_pred

Utilize functions from the sklearn.metrics library to calculate evaluation metrics such as accuracy, F1 score, recall, and precision based on the actual labels (y_test) and predicted labels (y_pred) Subsequently, display the evaluation results on the screen.

Các kết quả thực nghiệm

Khi áp dụng mô hình SVM để phân loại giống chó, sử dụng bộ dữ liệu train "Dog_Breed_Classification" và bộ dữ liệu test "archive", chúng tôi đã thu được kết quả đáng chú ý.

Bảng 3 2 Kết quả test với bộ dữ liệu "archive"

Dữ liệu Accuracy F1 Recall Precision archive 0.95147 0.95089 0.95147 0.95289

Mô hình đạt được độ chính xác (accuracy) là 95.15%, cho thấy khả năng phân loại chính xác cao F1 score của mô hình là 95.09%, cũng phản ánh hiệu suất tốt trong việc phân loại Recall đạt 95.15%, cho thấy khả năng phát hiện chính xác các mẫu thuộc lớp dương Cuối cùng, precision là 95.29%, chứng tỏ mô hình có khả năng giảm thiểu các trường hợp false positives.

Mô hình phân loại hình ảnh cho thấy khả năng phân loại chính xác và giảm thiểu false positives, điều này tạo ra kết quả tích cực và ứng dụng tiềm năng trong nhiều lĩnh vực thực tiễn.

XÂY DỰNG SẢN PHẨM DEMO

Giới thiệu các framework sử dụng

VueJS là một framework mã nguồn mở của JavaScript, nổi bật trong việc phát triển giao diện web tương tác Được biết đến với khả năng đơn giản hóa quy trình phát triển web, VueJS tập trung vào lớp view và dễ dàng tích hợp vào các dự án lớn, giúp phát triển front-end một cách hiệu quả và mượt mà.

Cấu trúc cơ bản trong 1 file vue sẽ có 3 phần:

 Template: là nơi chứa các code HTML cho component, ở đây chúng ta có thể thoải mái thực hiện việc binding dữ liệu, các sự kiện,

 Script: là nơi viết các code javascript, ở đây ta có thể import các thư viện, component, nhận các props, xây dựng các method, xử lý các event lifecycel

 Style: phần là để các bạn thực hiện style cho component, có thể sử dụng scss để viết code css gọn gàng hơn

Vue.js là một framework được thiết kế với tính đơn giản và dễ học, sử dụng cú pháp JavaScript quen thuộc cùng với một API nhỏ gọn nhưng mạnh mẽ.

Vue.js là một framework linh hoạt, cho phép phát triển ứng dụng web từ đơn giản đến phức tạp Nó phù hợp cho việc xây dựng các ứng dụng single-page, web components, và thậm chí cả ứng dụng nguyên bản.

Vue.js là một framework nhanh chóng và hiệu quả, nhờ vào việc sử dụng Virtual DOM để cập nhật chỉ những phần cần thiết của giao diện người dùng, từ đó nâng cao hiệu suất tổng thể.

Vue.js có khả năng mở rộng thông qua việc sử dụng các thư viện và plugin của bên thứ ba, giúp các nhà phát triển tạo ra các ứng dụng web tùy chỉnh phù hợp với nhu cầu cụ thể của họ.

Flask là một Web Framework nhẹ của Python, lý tưởng cho người mới bắt đầu tạo website nhỏ Nó dễ dàng mở rộng để xây dựng các ứng dụng web phức tạp và giúp giảm thiểu sự phụ thuộc vào bên thứ ba, từ đó nâng cao bảo mật Các tính năng nổi bật của Flask bao gồm tính linh hoạt và khả năng mở rộng.

 Phát triển trình gỡ lỗi

 Khả năng tương thích công cụ dựa trên ứng dụng Google

 Nhiều tiện ích mở rộng cho các tính năng mong muốn

 Hỗ trợ bảo mật cookie

 Cung cấp xử lý HTTP request

 API độc đáo và mạch lạc, hỗ trợ RESTful API

Với mục tiêu xây dựng một server Backend đơn giản nhưng hiệu quả, tôi đã chọn nghiên cứu và áp dụng framework Flask để xử lý nhanh chóng các yêu cầu của người dùng.

Phân tích thiết kế hệ thống

4.2.1 Biểu đồ use case hệ thống

Hình 4 1 Bảng mô tả use case

4.2.2 Mô tả chi tiết use case

Mô tả use case xem thông tin dữ liệu dự đoán

Bảng 4 1 Mô tả use case xem thông tin dự đoán dữ liệu

Tên use case Xem thông tin dữ liệu dự đoán

Tóm tắt Use case này cho phép xem thông tin dữ liệu để test

Để đảm bảo người dùng có thể truy cập thông tin dữ liệu, thiết bị của họ cần kết nối thành công với trang web Điều này là điều kiện tiên quyết để đảm bảo trải nghiệm người dùng tối ưu.

1 Người dùng truy cập vào trang của web

2 Nhấn nút xem thông tin dữ liệu

Mô tả use case xem kết quả dự đoán

Bảng 4 2 Mô tả use case xem kết quả dự đoán

Tên use case Xem kết quả dự đoán

Tóm tắt Use case này cho phép người dùng có thể thấy được thông tin dự đoán của mô hình

1 Người dùng truy cập vào trang web

2 Nhấn nút xem thông tin kết quả

Các bước xây dựng sản phẩm demo

4.3.1 Định nghĩa một endpoint API /api/getall app.route('/api/getall', methods=['GET']) def get_all():

51 y_pred = model.predict(test_flat_data) predicted_labels = [] for label in y_pred: predicted_labels.append(label)

The code snippet demonstrates how to evaluate the predicted labels against the actual labels from a test dataset It retrieves the true labels from the last column of the test DataFrame and stores them in a list for accuracy assessment Additionally, it iterates through the original images, predicted labels, and true labels, converting each image array into a PIL image format for further processing.

255).astype(np.uint8)) buffered = BytesIO() img_pil.save(buffered, format="JPEG") img_base64 base64.b64encode(buffered.getvalue()).decode("utf- 8") images.append({

The endpoint /api/getall is designed to retrieve all data from the API Within this endpoint, a model is utilized to predict labels (y_pred) for test data (test_flat_data) The predicted labels and actual labels are stored in the lists predicted_labels and true_label_acc Each original image, along with its predicted and actual labels, is converted into base64 format and added to the images list Ultimately, the images list is returned in JSON format.

@app.route('/results', methods=['GET']) def get_results(): result = [accuracy, f1, recall, precision,num_correct,num_fail] return jsonify(result)

4.3.3 Xây dựng giao diện bằng Vue

Ngày đăng: 12/01/2024, 21:22

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w