CHUẨN BỊ TẬP DỮ LIỆU HUẤN LUYỆN VÀ GÁN NHÃN

Một phần của tài liệu Đồ án tốt nghiệp Đại học Nghiên cứu phát triển hệ thống tự động Nhận diện và Giám sát lợn qua Camera với Yolov4 DeepSORT (Trang 48)

3.2.1. Chuẩn bị tập dữ liệu

Dữ liệu huấn luyện cho YOLOv4 là các ảnh từ các trang trại chăn nuôi lợn, và ảnh bao gồm ảnh chụp trực tiếp và ảnh cắt từ video camera:

 Số lượng ảnh: 1000 ảnh  Nhãn: “pig”

Đỗ Đình Nam – D17HTTT1 35

 Gán nhãn toàn bộ thân của lợn và không gán nhãn lợn bị che khuất quá 60%. Một số dữ liệu cho tập training

Hình 3.1. Một số hỉnh ảnh của dataset cho tập training

3.2.2. Gán nhãn

Hiện nay có một vài công cụ phổ biến cho việc gán nhãn cho mạng YOLOv4 như LabelImg tool. Nhưng nhận thấy LabelImg chỉ cho ra output của một định dạng duy nhất với YOLOv4 mà không thể trả về các định dạng cho tập file huấn luyện khác: XML cho Pascal VOC, TXT cho YOLO Darknet hay Tensorflow TFRecord,..

Đỗ Đình Nam – D17HTTT1 36

Hình 3.2. Các định dạng tập training cho mỗi mạng Roboflow cho phép

Đầu tiên chúng ta thêm dataset vào project tương ứng trên Roboflow. Giới hạn của Roboflow là tối đa 1000 ảnh cho mỗi project với bản không tính phí. Với mỗi ảnh ở dataset ta tiến hành gán nhãn.

Mỗi project ta có thể tạo nhiều bộ dataset đa dạng với mục đích chia nhỏ những bộ dataset có chung thuộc tính với nhau. Tạo mới dataset với các option chọn ảnh đưa vào dataset, chia dataset thành 3 bộ Training Set, Validation Set, Testing Set. Roboflow cho phép tiền xử lý ảnh với các thao tác: Auto-Orient hay Resize ảnh và rất nhiều lựa chọn Augmentation cho ảnh để tăng sự phong phú trong bộ dataset huấn luyện mà không cần dùng đến phần mềm thứ 3 nào khác.

Đỗ Đình Nam – D17HTTT1 37

Hình 3.3. Tạo dataset mới trên Roboflow

Đỗ Đình Nam – D17HTTT1 38

Hình 3.5. Chia tập ảnh Train/Test

Hình 3.6. Lựa chọn tiền xử lý ảnh và Augmentation cho ảnh

Tiếp đến ta tiến hành gán nhãn cho mỗi ảnh trong dataset:

Đỗ Đình Nam – D17HTTT1 39 Với bộ dataset với các ảnh đã được gán nhãn, chọn Export để download bộ dataset với Format tương ứng với mạng huấn luyện đã chọn. Ở đây em chọn mạng YOLOv4 với backbone Darknet nên format sẽ là YOLO Darknet dạng file TXT.

Hình 3.8. Exported Dataset được gán nhãn theo YOLO Darknet format

Output cho định dạng YOLO Darknet bao gồm:  1 file .labels chứa các class được gán nhãn

 Ảnh và file txt tương ứng trùng tên và chỉ khác đuôi file File _darknet.labels chứa các class đã được gán nhãn:

Hình 3.9. Nội dung file _darknet.labels

Mỗi dòng trong file .txt là thông tin của mỗi bounding box sẽ có dạng:

𝑐𝑙𝑎𝑠𝑠𝐼𝑑𝑖 𝑥𝐶𝑒𝑛𝑡𝑒𝑟𝑖 𝑦𝐶𝑒𝑛𝑡𝑒𝑟𝑖 𝑤𝑖𝑑𝑡ℎ𝑖 ℎ𝑒𝑖𝑔ℎ𝑡𝑖 Trong đó:

Đỗ Đình Nam – D17HTTT1 40

 𝑐𝑙𝑎𝑠𝑠𝐼𝑑𝑖 : id của class

 𝑥𝐶𝑒𝑛𝑡𝑒𝑟𝑖 : tọa độ x tâm O của bounding box  𝑦𝐶𝑒𝑛𝑡𝑒𝑟𝑖 : tọa độ y tâm O của bounding box  𝑤𝑖𝑑𝑡ℎ𝑖 : độ rộng của bounding box

 ℎ𝑒𝑖𝑔ℎ𝑡𝑖 : chiều cao của bounding box Tất cả thông số đều chia tỉ lệ tương ứng với ảnh.

Hình 3.10. Nội dung file .txt của một ảnh trong dataset

Ví dụ với dòng 1 có nội dung:

0 0.6225961538461539 0.33413461538461536 0.16826923076923078 0.1622596153846154 0 : class có id là 0, ở đây em sử dụng 1 class duy nhất là pig nên classId của nó = 0

4 số tiếp theo lần lượt là xCenter, yCenter, widthheight của bounding box.

3.3. Tiến hành Training trên Google Colab 3.3.1. Chuẩn bị dữ liệu 3.3.1. Chuẩn bị dữ liệu

Ta nén bộ dữ liệu Export về từ Roboflow thành file zip có dạng tên: data.zip Tiếp theo ta tải file yolov4-custom.cfg từ source của tác giả về máy tại đây. Mở và sửa cho thích hợp với bài toán của mình (chỉ có 1 class “pig”).

 Cập nhật các tham số trong file config:

 Tham số class = 1: do chỉ cần huấn luyện detection duy nhất một đối tượng “pig”.

 Tham số max_batches = 6000

Đỗ Đình Nam – D17HTTT1 41

 Tham số filters = 18, thay toàn bộ các dòng có “filters=255” thành “filters=<(số class+5)*3>”. Ví dụ với bài này số class = 1 thì sẽ sửa thành (1+5)*3 = 18, có nghĩa là filters=18

 Chuẩn bị MakeFile  Tải Makefile về tại đây

 Sửa các tham số sau:  GPU = 1

CUDNN = 1

OPENCV = 1

 Lưu lại và save Makefile cùng chỗ với data.zip

3.3.2. Bắt đầu train mô hình YOLOv4 với dataset nhãn lợn với Google Colab

Bước 1. Tạo notebook trên Google Colab

Truy cập địa chỉ chức thức của colab https://colab.research.google.com/ và chọn New Notebook.

Chọn Runtime cho Notebook, có 3 lựa Runtime Type cho Notebook, ở đây chúng ta chọn option GPU để huấn luyện:

 None: Không sử dụng hardware accelerator, chỉ dùng CPU

 GPU(Graphic Processing Unit): Sử dụng bộ xử lý đồ họa, giúp tăng tốc huấn luyện

 TPU: bộ xử lý được tùy chỉnh mạnh mẽ để chạy trên một khuôn cụ thể - Tensorflow

Đỗ Đình Nam – D17HTTT1 42

Hình 3.11. Lựa chọn RuntimeType trên Google Colab

Bước 2. Kết nối Google Drive

Lưu ý với mỗi Notebook Colab sau 10 tiếng sẽ bị xóa nên không nên để file trên Notebook. Giải pháp là chúng ta sẽ liên kết tới tài khoản Google Drive.

# Step 1. Kết nối với GoogleDrive

from google.colab import drive drive.mount('/content/gdrive')

Hình 3.12. Kết nối với Google Drive

Bước 3. Tải mã nguồn YOLOv4 về Drive

Mã nguồn YOLOv4 được public tại github của tác giá AlexeyAB. Ta sẽ tải mã nguồn về Drive mà Notebook đã được kết nối trước đó.

Đỗ Đình Nam – D17HTTT1 43

Hình 3.13. Pull mã nguồn YOLOv4 từ git của tác giả

Hình 3.14. Mã nguồn được thêm thành công vào GDrive

Bước 4. Upload dữ liệu training lên Google Drive

Ta up load 3 file: data.zip, Makefile và yolov4-custom.cfg. Tìm đến thư mục darknet của Google Drive và thực hiện:

Đỗ Đình Nam – D17HTTT1 44

Hình 3.15. Thư mục Darknet

 Upload file data.zip vào trong thư mục data  Upload file yolov4-custom.cfg vào thư mục cfg  Upload file Makefile vào thư mục darknet

Bước 5. Giải nén file data.zip để lấy dữ liệu train

Tạo một code block mới trên Notebook và chạy lệnh dưới đây:

Hình 3.16. Giải nén file data.zip

Bước 6. Tạo file yolo.names chứa tên các class

Tạo file yolo.names với class pig:

Hình 3.17. Chuỗi lệnh tạo file yolo.names

Bước 7. Tạo hai file train.txt và val.txt chứa danh sách các file ảnh

Đỗ Đình Nam – D17HTTT1 45

 File val.txt: danh sách file dùng để validate (kiểm chứng)

 Danh sách cần chọn ngẫu nhiên để đảm bảo tính phân phối dữ liệu # Step 6. Tạo file train.txt và val.txt

%cd /content/gdrive/My\ Drive/darknet import glob2 import math import os import numpy as np files = []

for ext in ["*.png", "*.jpeg", "*.jpg"]:

image_files = glob2.glob(os.path.join("data/data/", ext)) files += image_files

nb_val = math.floor(len(files)*0.2)

rand_idx = np.random.randint(0, len(files), nb_val)

# Tạo file train.txt

with open("train.txt", "w") as f: for idx in np.arange(len(files)):

if (os.path.exists(files[idx][:-3] + "txt")): f.write(files[idx]+'\n')

# Tạo file vali.txt

with open("val.txt", "w") as f: for idx in np.arange(len(files)):

if (idx in rand_idx) and (os.path.exists(files[idx][:- 3] + "txt")):

f.write(files[idx]+'\n')

Chạy xong sẽ thấy trong thư mục darknet xuất hiện 2 file train.txt và val.txt.

Bước 8. Tạo file yolo.data chứa tham số huấn luyện mô hình

Đỗ Đình Nam – D17HTTT1 46

Bước 9. Biên dịch mã nguồn Darknet

Hình 3.19. Biên dịch mã nguồn Darknet bằng lệnh

Bước 10. Tải pretrain weight

Pretrain weight là file weight đã được huấn luyện trước đó bởi một bộ dataset của tác giả.

Hình 3.20. Tải pretrain weight

Bước 11. Thực hiện huấn luyện mô hình

Quá trình thực hiện huấn luyện mất rất nhiều thời gian. Với tốc độ của GPU tốt thời gian huấn luyện với khoảng 1000 ảnh là xấp xỉ 8 tiếng.

Đỗ Đình Nam – D17HTTT1 47

Hình 3.21. Thực hiện train YOLOv4

Sau khi huấn luyện mô hình thành công, tại thư mục darknet/backup các file weight được tạo bao gồm:

 yolov4-custom_1000.weights  yolov4-custom_last.weights

Với yolov4-custom_1000.weights hay yolov4-custom_2000.weights là các file weights được tạo ở vòng thứ 1000, 2000, ..

Các file yolov4-custom_last.weights là file weights cuối cùng sau khi huấn luyện.

Đỗ Đình Nam – D17HTTT1 48

Đỗ Đình Nam – D17HTTT1 49

CHƯƠNG IV. HỆ THỐNG TỰ ĐỘNG NHẬN DIỆN VÀ GIÁM SÁT LỢN QUA CAMERA SỬ DỤNG YOLOV4, DEEPSORT

4.1. PHÂN TÍCH THIẾT KẾ HỆ THỐNG

Như đã đề cập ở phần Giới thiệu bài toán, hệ thống tập trung giải quyết vấn đề quản lý tự động các thao tác nghiệp vụ liên quan đến trang trại và chuồng nuôi lợn, quan sát và theo dõi lợn bằng camera từ chuồng.

4.1.1. Đặc tả yêu cầu hệ thống

4.1.1.1. Xác định tác nhân nghiệp vụ

Hệ thống cung cấp các chức năng tiện lợi sát với nhu cầu thực tế của các trang trại chăn nuôi lợn, nơi người nông dân tốn nhiều công sức để theo dõi và kiểm soát các cá thể lợn trong chuồng. Người chủ trang trại cũng là người dùng trực tiếp sẽ có tất cả các hành động sau:

 Đăng ký  Đăng nhập

 Quản lý danh sách trang trại (Farm)  Quản lý danh sách các chuồng nuôi (Pen)  Quản lý thông tin các thể thể lợn (Pig)

 Quản lý các sự kiện liên quan đến mỗi chuồng nuôi

 Xem trực tiếp video từ camera của chuồng tích hợp nhận diện và theo dõi  Xem thông tin lợn qua thao tác với video trực tiếp

Các tác nhân tham gia:

Đỗ Đình Nam – D17HTTT1 50

4.1.1.2. Sơ đồ Use case tổng quát của hệ thống

Hình 4.1. Use case tổng quan

4.1.1.3. Xây dựng các kịch bản

4.1.1.3.1. Chức năng Xem video từ camera tích hợp nhận diện lợn

Đỗ Đình Nam – D17HTTT1 51

 Mô tả: Người quản lý trang trại đăng nhập vào hệ thống -> Chọn chức năng Quản lý danh sách chuồng nuôi-> Hệ thống hiển thị danh sách các chuồng nuôi, các tùy chọn (thêm, sửa, xóa chuồng nuôi, xem camera tại chuồng nuôi) -> Người quản lý trang trại chọn mục tùy ý (ví dụ xem camera tại chuồng nuôi)  Kịch bản Xem video từ camera tích hợp nhận diện lợn tại chuồng nuôi:

Use case Xem video từ camera tích hợp nhận diện lợn

Actor Người quản lý trang trại

Tiền điều kiện Người quản lý trang trại đăng nhập thành công

Hậu điều kiện Người quản lý trang trại xem camera tại chuồng nuôi thành công

Kịch bản chính 1. Người quản lý trang trại vào trang chủ hệ thống

2. Người quản lý trang trại chọn chức năng Quản lý danh sách chuồng nuôi trên giao diện trang chủ

3. Giao diện Danh sách chuồng nuôi hiện lên gồm: - Danh sách chuồng nuôi

- Nút thêm chuồng nuôi

- Mỗi chuồng nuôi có nút sửa, xóa chuồng nuôi

- Mỗi chuồng có nút xem video từ camera của mỗi chuồng 4. Người quản lý trang trại chọn xem video từ camera của một chuồng nuôi

5. Giao diện Xem video từ camera của chuồng nuôi bao gồm: - Một video từ chuồng nuôi đó

- Video đã tích hợp nhận dạng và theo dõi lợn

Ngoại lệ 4. Tài khoản chưa có chuồng nuôi nào trong hệ thống 4.1. Hiển thị danh sách trống

Đỗ Đình Nam – D17HTTT1 52

 Kịch bản Xem thông tin của lợn bằng cách chọn trực tiếp trên video: Use case Xem thông tin của lợn bằng cách chọn trực tiếp trên video

Actor Người quản lý trang trại

Tiền điều kiện Người quản lý trang trại đăng nhập thành công

Hậu điều kiện Người quản lý trang trại xem thông tin của lợn bằng cách chọn trực tiếp trên video thành công

Kịch bản chính 1. Người quản lý trang trại vào trang chủ hệ thống

2. Người quản lý trang trại chọn chức năng Quản lý danh sách chuồng nuôi trên giao diện trang chủ

3. Giao diện Danh sách chuồng nuôi hiện lên gồm: - Danh sách chuồng nuôi

- Nút thêm chuồng nuôi

- Mỗi chuồng nuôi có nút sửa, xóa chuồng nuôi

- Mỗi chuồng có nút xem video từ camera của mỗi chuồng 4. Người quản lý trang trại chọn xem video từ camera của một chuồng nuôi

5. Giao diện Xem video từ camera của chuồng nuôi bao gồm: - Một video từ chuồng nuôi đó

- Video đã tích hợp nhận dạng và theo dõi lợn

6. Người quản lý trang trại chọn lợn muốn xem thông tin trực tiếp trên video.

7. Giao diện hiển thị gồm:

- Thông báo “Xem thông tin Pig-Id” - Nút Xem

- Nút Hủy

8. Người quản lý trang trại chọn nút Xem

Đỗ Đình Nam – D17HTTT1 53 Ngoại lệ 3. Tài khoản chưa có chuồng nuôi nào trong hệ thống

3.1. Hiển thị danh sách trống

8. Người quản lý trang trại chọn nút Hủy 8.1. Quay lại bước 3

Bảng 4.2. Kịch bản xem thông tin lợn bằng cách chọn trực tiếp trên video

4.1.1.3.2. Chức năng Xem toàn bộ camera trong trang trại

Hình 4.3. Use case chức năng xem toàn bộ camera trong trang trại

 Mô tả: Người quản lý trang trại đăng nhập vào hệ thống -> Chọn chức năng xem toàn bộ camera trong trang trại-> Hệ thống hiển thị toàn bộ các camera trong trang trại.

 Kịch bản Xem toàn bộ camera trong trang trại: Use case Xem toàn bộ camera trong trang trại

Actor Người quản lý trang trại

Tiền điều kiện Người quản lý trang trại đăng nhập thành công

Hậu điều kiện Người quản lý trang trại xem xem toàn bộ camera trong trang trại thành công

Đỗ Đình Nam – D17HTTT1 54 Kịch bản chính 1. Người quản lý trang trại vào trang chủ hệ thống

2. Người quản lý trang trại chọn chức năng Xem video từ trang trại

3. Giao diện Xem toàn bộ camera trong trang trại hiện lên gồm: - Tất cả video của các trang trại

- Các video đều được tích hợp AI nhận dạng và theo dõi

Ngoại lệ 4. Tài khoản chưa có thông tin camera cho trang trại 4.1. Hiển thị danh sách trống

Bảng 4.3. Kịch bản xem toàn bộ camera trong trang trại

4.1.1.4. Sơ đồ tuần tự

Chức năng Xem video từ camera tích hợp nhận diện lợn:

Đỗ Đình Nam – D17HTTT1 55 Chức năng Xem toàn bộ camera trong trang trại:

Hình 4.5. Sơ đồ tuần tự chức năng Xem toàn bộ camera trong trang trại

4.1.2. Phân tích hệ thống

4.1.2.1. Xây dựng biểu đồ lớp thực thể (pha phân tích)

Dựa vào phần mô tả hệ thống, ta xây dựng lớp thực thể với mối quan hệ như sau:

Hình 4.6. Sơ đồ lớp thực thể

Phân tích mối quan hệ giữa các lớp thực thể để bổ sung các lớp thực thể còn thiếu và xác định thuộc tính của các thực thể:

Đỗ Đình Nam – D17HTTT1 56

 Lớp User chứa thông tin cá nhân của người dùng: tên, số điện thoại, email, địa chỉ, ngày sinh. Có mối quan hệ 1-1 với thực thể Account.

 Lớp Account chứa thông tin tài khoản hệ thống: username, password, active, activeCode, ngày tạo, ngày cập nhật. Account có mối quan hệ 1-1 với User và Role.

 Lớp Roles chứa thông tin về quyền của Account bao gồm trường: tên của quyền. Quan hệ của Role và Account là 1-1.

 Lớp Farms chứa thông tin về các trang trại gồm các trường: tên trang trại, địa chỉ trang trại, chủ trang trại. Quan hệ giữa lớp Account với lớp Farms là 1-n. Quan hệ giữa lớp Farms với Pens là 1-n.

 Lớp Pens chứa thông tin về chuồng nuôi gồm các trường: tên chuồng, sức chứa, ghi chú. Quan hệ giữa lớp Pens và lớp Pigs là 1-n. Quan hệ giữa lớp Pens với lớp Events là 1-n.

 Lớp Pigs chứa thông tin về lợn bao gồm các trường: mã theo dõi, ngày sinh, tình trạng sức khỏe, cân nặng, ngày nhập chuồng. Quan hệ giữa lớp Pigs với WeightType là n-1.

 Lớp Events chứa thông tin về sự kiện chuồng nuôi bao gồm các trường: tên sự kiện, mô tả, ngày bắt đầu, ngày kết thúc, loại sự kiện. Quan hệ giữa lớp Events với EventType là n-1.

 Lớp WeightType chứa thông tin về loại cân nặng của lợn bao gồm các trường: tên loại cân nặng, ghi chú. Quan hệ giữa lớp WeightType và Pigs là

Một phần của tài liệu Đồ án tốt nghiệp Đại học Nghiên cứu phát triển hệ thống tự động Nhận diện và Giám sát lợn qua Camera với Yolov4 DeepSORT (Trang 48)

Tải bản đầy đủ (PDF)

(91 trang)