2.3.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 bao gồm lợn ở rất nhiều tư thế như: đứng, nằm, ăn, đi.
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 2.34. Một số hỉnh ảnh của dataset cho tập training
2.3.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,..
Hình 2.35. 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.
Hình 2.36. Tạo dataset mới trên Roboflow
Hình 2.38. Chia tập ảnh Train/Test
Tiếp đến ta tiến hành gán nhãn cho mỗi ảnh trong dataset:
Hình 2.41. Ảnh trước khi gán nhãn
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 2.43. 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 2.44. Nội dung file _darknet.labels
Trong đó:
: id của class
: tọa độ x tâm O của bouding box : tọa độ y tâm O của bouding 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 2.45. Nội dung file .txt của một ảnh trong dataset
Ví dụ với dòng 1 có nội dung:
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, width và height của bounding box.
2.4. Tiến hành Training trên Google Colab2.4.1. Chuẩn bị dữ liệu 2.4.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
Tham số steps = 4800, 5400 (lấy lần lượt 80%, 90 của max_batches) 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
2.4.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ể - Tensoflow
Hình 2.46. 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')
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 đó.
Hình 2.48. Pull mã nguồn YOLOv4 từ git của tác giả
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:
Hình 2.50. Thư mục Darknet
Upload file data.zip vào ttrong 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 2.51. Giải nén file data.zip
Bước 6. Tạo file yolo.names chứa tên các class
Hình 2.52. 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
File train.txt: chứa danh sách các file sẽ dùng để huấn luyện 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')
Bước 8. Tạo file yolo.data chứa tham số huấn luyện mô hình
Hình 2.53. Tạo file yolo.data
Bước 9. Biên dịch mã nguồn Darknet
Hình 2.54. 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 2.55. Tải pretrain weight
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ỉ 6 tiếng.
Hình 2.56. 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.weigths 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.
CHƯƠNG III. HỆ THỐNG TỰ ĐỘNG NHẬN DIỆN VÀ GIÁM SÁT LỢN QUA CAMERA SỬ DỤNG YOLOV4
3.1. PHÂN TÍCH THIẾT KẾ HỆ THỐNG
Chức năng chính mà em muốn giới thiệu của hệ thống là tự động nhận diện và giám sát lợn qua video(camera) từ chuồng nuôi. Bên cạnh đó, hệ thống có tích hợp các chức năng nghiệp vụ để giúp người nông dân quản lý chuồng và các thể thể lợn trong chuồng chuyên nghiệp hơn.
Trước đây, người nông dân luôn phải ghi chép thông tin nhập, xuất lợn bằng tay, lưu trữ bởi những quyển sổ cái. Mang đến rất nhiều rủi ro và sai sót trong quá trình quản lý trang trại lợn. Hệ thống sẽ cả thiện sự bất tiện đó bằng việc giúp người quản lý trang trại có thể quản lý trực tiếp trên website từ: kiểm soát nhiều trang trại, quản lý nhiều chuồng, theo dõi số lượng lợn, sự kiện nhập xuất của lợn,.. Mọi thông tin đều được được bảo mật giúp người nông dân hoàn toàn yên tâm trong việc phát triển và mở rộng kinh doanh của mình.
Hầu hết các trang trại ngày nay đều được trang bị camera ở mỗi chuồng nuôi lợn. Nhưng việc kiểm soát số lượng lợn và theo dõi lợn đều là thủ công. Hệ thống cung cấp tính năng streaming trực tiếp video từ camera của trang trại chuyển tới hệ thống xử lý tích hợp trí tuệ nhân tạo để đưa ra video đầu ra cho người dùng có nhiều thông tin về lợn của mình trong chuồng nuôi hơn. Hệ thống giúp đỡ người nông dân tự động hóa cho mỗi quy trình quản lý trong trang trại nuôi lợn một cách hiệu quả.
3.1.1. Đặc tả yêu cầu hệ thống 3.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:
Người quản lý trang trại
3.1.1.2. Sơ đồ UseCase tổng quát của hệ thống
3.1.1.3. Xây dựng các kịch bản
3.1.1.3.1. Chức năng quản lý danh sách trang trại
Hình 3.60. Usecase chức năng quản lý danh sách 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 Quản lý trang trại -> Hệ thống hiển thị danh sách trang trại, các tùy chọn (Xem thông tin, Thêm, Sửa, Xóa trang trại) -> Người quản lý trang trại chọn mục tùy ý (ví dụ Thêm trang trại)
Kịch bản Xem danh sách trang trại: Usecase Xem danh sách 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
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 trang trại trên giao diện trang chủ
3. Giao diện Danh sách trang trại hiện lên gồm: - Danh sách trang trại đang hoạt động
- Nút thêm trang trại
- Mỗi trang trại có nút Xem thông tin, sửa, xóa trang trại
Ngoại lệ 4. Tài khoản chưa có Trang trại nào trong hệ thống
4.1. Hiển thị danh sách trống, thông báo cần tạo trang trại
Bảng 3.1. Kịch bản xem danh sách trang trại
Kịch bản Thêm trang trại Usecase Thêm 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 thêm trang trạ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 trang trại
3. Giao diện Danh sách trang trại hiện lên gồm: - Danh sách trang trại đang hoạt động
- Nút thêm trang trại
- Mỗi trang trại có nút Xem thông tin, sửa, xóa trang trại 4. Người quản lý trang trại chọn Thêm trạng trại
5. Giao diện Form thêm trang trại hiển thị bao gồm: - Input tên trang trại
- Input địa chỉ trang trại - Nút Hủy bỏ
- Nút Lưu
6. Người quản lý trang trại chọn Lưu sau khi điền đầy đủ thông tin
Ngoại lệ 7. Tài khoản chưa có Trang trại nào trong hệ thống
7.1. Hiển thị danh sách trống, thông báo cần tạo trang trại 8. Người quản lý trang trại chọn Hủy bỏ
8.1. Quay lại bước 3
Bảng 3.2. Kịch bản thêm trang trại
Kịch bản Sửa thông tin trang trại Usecase Sửa thông tin 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
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 trang trại
3. Giao diện Danh sách trang trại hiện lên gồm: - Danh sách trang trại đang hoạt động
- Nút thêm trang trại
- Mỗi trang trại có nút Xem thông tin, sửa, xóa trang trại
4. Người quản lý trang trại chọn trang trại muốn sửa và chọn nút Sửa thông tin trang trại
5. Giao diện Form sửa thông tin trang trại hiển thị bao gồm: - Input tên trang trại
- Input địa chỉ trang trại
- Input chủ sở hữu (mặc định là tài khoản đang đăng nhập) - Nút Cập nhật
- Nút Hủy bỏ
6. Người quản lý trang trại chọn Cập nhật sau khi sửa các thông tin.
Ngoại lệ 7. Tài khoản chưa có Trang trại nào trong hệ thống
7.1. Hiển thị danh sách trống, thông báo cần tạo trang trại 8. Người dùng chọn Hủy bỏ
8.1. Quay lại bước 3
Bảng 3.3. Kịch bản sửa thông tin trang trại
Kịch bản Xóa trang trại Usecase Xóa trang trại
Actor Người quản lý trang trại
Hậu điều kiện Người quản lý trang trại xóa trang trạ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 trang trại
3. Giao diện Danh sách trang trại hiện lên gồm: - Danh sách trang trại đang hoạt động
- Nút thêm trang trại
- Mỗi trang trại có nút Xem thông tin, sửa, xóa trang trại
4. Người quản lý trang trại chọn trang trại muốn xóa và chọn nút Xóa trang trại
5. Giao diện Xác nhận xóa thông tin trang trại hiển thị bao gồm: - Thông báo: “Bạn có chắc chắn muốn xóa trang trại không?” - Nút Hủy bỏ
- Nút Đồng ý
6. Người quản lý trang trại chọn Đồng ý để thực hiện xóa trang trại
Ngoại lệ 7. Tài khoản chưa có Trang trại nào trong hệ thống
7.1. Hiển thị danh sách trống, thông báo cần tạo trang trại 8. Người quản lý trang trại chọn Hủy bỏ
8.1. Quay lại bước 3
3.1.1.3.2. Chức năng Quản lý danh sách chuồng nuôi
Hình 3.61. Usecase chức năng quản lý danh sách chuồng nuô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 Quản lý danh sách chuồng nuôi -> Hệ thống hiển thị danh sách chuồng nuôi, các tùy chọn (Xem thông tin, 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ụ Thêm chuồng nuôi)
Kịch bản Xem danh sách chuồng nuôi: Usecase Xem danh sách chuồng nuô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
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 Xem thông tin, sửa, xóa chuồng nuôi - Xem camera tại chuồng nuôi
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