THEO DÕI ĐỐI TƯỢNG: OBJECT TRACKING – DEEPSORT

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 38)

2.4.1. Tổng quan Object Tracking

2.4.1.1. Khái niệm

Object Tracking là bài toán theo dõi một hoặc nhiều đối tượng chuyển động theo thời gian thực trong một video. Hiểu một cách đơn giản, nó là bài toán ở mức độ cao hơn nhận dạng vật thể, khi đối tượng được xử lý không đơn giản là một hình ảnh mà là một chuỗi các hình ảnh, video.

Khác với việc nhận dạng vật thể, việc theo dõi bên cạnh xác định các bounding box, còn quan tâm đến khá nhiều yếu tố hoặc nhiễu khác nhau:

 ID của mỗi đối tượng cần được đảm bảo luôn không đổi qua các khung hình(frame)

 Khi đối tượng bị che khuất hoặc biến mất sau 1 vài khung hình (frame), hệ thống vẫn cần đảm bảo nhận diện lại được đúng ID khi đối tượng xuất hiện.  Các vấn đề liên quan đến tốc độ xử lý để đảm bảo hiệu năng theo thời gian

thực và tính ứng dụng cao.

2.4.1.2. Phân loại

Object Tracking có thể chia thành 2 cách tiếp cận chính:  Single Object Tracking

Tập trung vào việc theo dõi một đối tượng duy nhất trong toán bộ video. Để biết cần theo dõi đối tượng nào, việc cung cấp một bounding box từ ban đầu là việc bắt buộc phải có.

Đỗ Đình Nam – D17HTTT1 25 Hướng tới các ứng dụng có tính mở rộng cao hơn. Bài toán cố gắng phát hiện đồng thời theo dõi tất cả các đối tượng trong tầm nhìn, kể cả các đối tượng mới xuất hiện trong video. Nên Multiple Object Tracking (theo dõi nhiều vật thể) sẽ khó hơn Single Object Tracking (theo dõi một vật thể).

2.4.2. Các vấn đề đáng quan tâm trong Theo dõi đối tượng (Object Tracking)

2.4.2.1. Multiple Object Tracking

Phương pháp Multiple Object Tracking cố gắng hướng đến việc theo dõi tất cả các đối tượng xuất hiện trong khung hình bằng việc phát hiện và gắn định danh cho từng đối tượng. Bên cạnh đó, các mã định danh đã gán cho 1 đối tượng cần đảm bảo nhất quán qua từng frame. Những vấn đề mà ta cần quan tâm:

 Phát hiện tất cả các đối tượng: Đây vẫn luôn là vấn đề được quan tâm nhất trong object detection và có rất nhiều nghiên cứu hướng đến để cải thiện vấn đề này. Ngay từ ban đầu, việc đảm bảo độ chính xác của quá trình nhận dạng rất quan trọng.

 Đối tượng bị che khuất 1 phần hoặc toàn bộ: Khi một ID được gán cho 1 đối tượng, ID cần được đảm bảo nhất quán trong suốt video, tuy nhiên, khi một đối tượng bị che khuất, ID gán cho vật sẽ biến mất và rất có thể khi nhận dạng lại ID của vật không còn giống với lúc đầu.

 Đối tượng ra khỏi phạm vi của khung hình và xuất hiện lại: khi ấy chỉ số ID của đối tượng sẽ bị thay đổi. Cần giải quyết tốt vấn đề ReID (nhận dạng lại đối tượng) kể cả việc che khuất hay biến mất để giảm sai số khi thay đổi ID vật thể.

2.4.2.2. Realtime Object Tracking

Realtime Object Tracking (nhận dạng đối tượng theo thời gian thực) lại quan tâm nhiều hơn đến tốc độ xử lý. Khi realtime cần đảm bảo tốc độ đưa ra output là nhanh hơn hoạc ít nhất là bằng tốc độ đưa vào input.

Đỗ Đình Nam – D17HTTT1 26 Trong thực tế, nếu việc xử lý từng frame chỉ khiến video có độ trễ 1s so với tốc độ bình thường của nó, việc xử lý này cũng có thể chấp nhận rằng đó là realtime. Tuy nhiên, ngay khi chấp nhận việc có độ trễ, việc đảm bảo tính realtime vẫn luôn là một vấn đề nan giải. Chúng ta cũng có thể bỏ qua một vài frame không xử lý cho đến khi frame hiện tại xử lý xong, sau đó tiếp tục xử lý các frame sau – pha xử lý này vẫn sẽ đem lại cảm giác video đang chạy realtime. Nhưng đánh đổi là tính chính xác lại giảm xuống. Hiện nay, rất nhiều nhà nghiên cứu vẫn luôn tìm kiếm những phương pháp đủ nhanh để hướng tới realtime trong xử lý.

2.4.3. Deep SORT

Deep SORT được nhóm tác giả phát triển để khắc phục vấn đề ID của vật thể bị thay đổi quá lớn qua các khung hình. Hướng giải quyết của Deep SORT dựa trên việc sử dụng deep learning để trích rút đặc trưng của đối tượng nhằm cải thiện độ chính xác, sử dụng bộ lọc Kalman để dự đoán trạng thái của đối tượng hiện tại dựa vào các track trong quá khứ và update lại các detection sau khi đã được liên kết với các track trước đó. Ngoài ra, chiến lược mới có tên Matching Cascade giúp việc liên kết các đối tượng sau khi đã biến mất một thời gian được hiệu quả hơn.

2.4.3.1. Ý tưởng

Trong multiple object tracking, có 2 yếu tố ảnh hưởng trực tiếp đến performance của việc theo dõi:

 Data Association: Quan tâm đến vấn đề liên kết dữ liệu, cụ thể là tiêu chí để đánh giá nhằm liên kết một nhận dạng mới với các track đã được lưu từ trước.

 Track Life Cycle Management: quan tâm đến việc quản lý vòng đời của một track đã được lưu trữ. Khi nào thì khởi tạo track, khi nào thì ngưng theo dõi và xóa track ra khỏi bộ nhớ, ..

Trong deep SORT, nhóm tác giả giải quyết vấn đề data association dựa trên IOU, khoảng cách của detection và track (xét tính tương quan trong không gian vector) và

Đỗ Đình Nam – D17HTTT1 27 khoảng cách cosine giữa 2 vector đặc trưng được trích xuất từ detection và track. Khi mà 2 vector đặc trưng của cùng một đối tượng sẽ giống nhau hơn là đặc trưng của 2 đối tượng khác nhau.

2.4.3.2. Bộ trích xuất đặc trưng

Nhằm phát triển một bộ trích xuất đặc trưng cho mỗi detection (bounding box), tác giả đã phát triển một kiến trúc mạng có tên Wide Residual Network, huấn luyện riêng trên các bộ dữ liệu lớn về định danh người như: Market 1501, MARS, ..

2.4.3.2.1. Wide Residual Network (WRN)

Các mạng nơ-ron thông thường, để đạt được hiệu năng cao, thường cố gắng phát triển theo hướng tăng độ sâu của mạng. Đây là hướng đi chung để có thể tạo ra một bộ trích xuất đặc trưng hiệu quả. Tuy nhiên đó cũng mang đến nhược điểm đó là thời gian huấn luyện và thời gian xử lý lớn, đây là điều đi hoàn toàn ngược lại với mục tiêu của deep SORT. Do đó, thay vì sử dụng các mạng học sâu (Deep Neural Network), nhóm tác giả lựa chọn các mạng nông (Shallow Neural Network), ở đây là Wide Residual Network (WRN).

Kiến trúc của WRN được giới thiệu với số lớp rất nhỏ (16 lớp) nhưng đạt được hiệu năng vượt trội hơn các kiến trúc nhiều lớp khác. Đặc biệt thời gian huấn luyện và xử lý cũng tăng hơn rất nhiều.

Đỗ Đình Nam – D17HTTT1 28

2.4.3.2.2. Cosine softmax classifier

Nhóm tác giả đã sử dụng một classifier mới bằng việc tham số hóa lại softmax classifier tiêu chuẩn

𝑝(𝑦 = 𝑘 | 𝑟) = exp (𝑤𝑘 𝑇𝑟 + 𝑏𝑘) ∑𝐶𝑛=1exp(𝑤𝑛𝑇𝑟 + 𝑏𝑛) 𝑝(𝑦 = 𝑘 | 𝑟) = exp (𝐾. 𝑤̃𝑘 𝑇𝑟) ∑𝐶𝑛=1exp (𝐾. 𝑤̃𝑛𝑇𝑟)

So với standard softmax classifier, Cosine softmax classifier sử dụng hệ số K và đồng thời bỏ đi giá trị bias 𝑏𝑘. Ba hàm mất mát thử nghiệm với kiến trúc này lần lượt là Sparse Softmax Cross Entropy Loss, Magnet Loss và Triplet Loss. Và Cross Entropy Loss cho kết quả khả quan nhất.

2.4.3.3. Các độ đo

Deep SORT lựa chọn độ đo nhằm đảm bảo việc liên kết chính xác dù đối tượng đã biến mất và sau đó xuất hiện trở lại trong khung hình. Xuất phát từ các đặc trưng học được từ cosine metric learning đã được trình bày ở trên. Với mỗi detection, đặc trưng sẽ được trích xuất với ||𝑟𝑗|| = 1. Với mỗi track, một danh sách với độ dài khoảng 100 được sử dụng để lưu trữ đặc trưng của 100 track gần nhất:

𝑅𝑘 = {𝑟𝑘(𝑖)}𝑘=1𝐿𝑘 , 𝐿𝑘 = 100

Khi đó, độ đo mới giữa track và detection được tính bằng khoảng cách cosine: 𝑑(𝑖, 𝑗) = min{1 − 𝑟𝑗𝑇𝑟𝑘(𝑖)| 𝑟𝑘(𝑖) ∈ 𝑅𝑖}

2.4.3.4. Chiến lược đối sánh theo tầng

Chiến lược đối sánh theo tần hay Matching Cascade được Deep SORT sử dụng nhằm cải thiện độ chính xác của liên kết, chủ yếu là vì khi đối tượng biến mất trong thời gian dài, độ không chắc chắn của bộ lọc Kalman sẽ tăng lên rất nhiều và sẽ dẫn đến phân tán xác suất dự đoán liên tục. Vì vậy, nếu dự đoán liên tục không được cập nhật, phương sai của phân phối chuẩn sẽ ngày càng lớn.

Đỗ Đình Nam – D17HTTT1 29 Chiến lược đối sánh theo tần tiến hành lấy lần lượt từng track ở các frame trước đó, để tiến hành xây dựng ma trận chi phí và giải bài toán phân công theo từng tầng.

Hình 2.19. Mã giả chiến lược Matching Cascade

2.4.3.5. Quản lý vòng đời của một track

Deep SORT quản lý vòng đời của một track dựa trên 1 biến trạng thái với 3 giá trị (tentative, confirmed, deleted)

 Các trạng thái này lúc mới khởi tạo sẽ được gán 1 giá trị mang tính thăm dò (tentative)

 Giá trị này nếu vẫn đảm bảo duy trì được trong 3 frame tiếp theo, trạng thái sẽ chuyển từ thăm dò sang xác nhận (confirmed)

 Các track có trạng thái confirmed sẽ cố gắng được duy trì theo dõi, dù bị biến mất thì Deep SORT vẫn sẽ duy trì theo dõi trong 30 frame tiếp theo.  Ngược lại, nếu mất dấu khi chưa đủ 3 frame, trạng thái sẽ bị xóa khỏi trình

Đỗ Đình Nam – D17HTTT1 30

Hình 2.20. Vòng đời của một track

2.4.3.6. Luồng xử lý của Deep SORT kết hợp với YOLOv4

Luồng xử lý của Deep SORT được thực hiện tuần tự qua các bước dưới đây:  Bước 1: Sử dụng YOLOv4 để phát hiện đối tượng trong khung hình hiện tại  Bước 2: Deep SORT sử dụng bộ lọc Kalman để dự đoán các trạng thái track mới dựa trên các track trong quá khứ. Các trạng thái này lúc mới khởi tạo sẽ được gán 1 giá trị mang tính thăm dò (tentative). Giá trị này nếu vẫn được duy trì trong 3 frame tiếp theo, trạng thái sẽ chuyển từ thăm dò sang xác nhận (confirmed), và sẽ cố gắng được duy trì theo dõi trong 30 frame tiếp theo. Ngược lại, nếu mất dấu khi chưa đủ 3 frame, trạng thái sẽ bị xóa khỏi trình theo dõi.

 Bước 3: Sử dụng những track đã được xác nhận, tiến hành đưa vào chiến lược đối sánh phân tầng (matching cascade) nhằm liên kết với các detection phát hiện được dựa trên độ đo về khoảng cách và đặc trưng.

 Bước 4: Các track và các detection chưa được liên kết sẽ được đưa đến một lớp học tiếp theo.

 Bước 5: Xử lý, phân loại các detection và các track

 Bước 6: Sử dụng Kalman filter để hiệu chỉnh lại giá trị của track từ những detection đã được liên kết với track và khởi tạo các track mới.

Đỗ Đình Nam – D17HTTT1 31

CHƯƠNG III. NHẬN DẠNG LỢN SỬ DỤNG MẠNG HỌC SÂU YOLOv4

3.1. TRIỂN KHAI MẠNG YOLOv4 SỬ DỤNG THƯ VIỆN TENSORFLOW

Với việc sử dụng thư viện Tensorflow chúng ta có 2 option chạy bằng GPU hoặc CPU. Xử lý và tính toán dữ liệu hình ảnh ở YOLOv4 được tối ưu cực kỳ tốt khi chạy với GPU. Để triển khai kiến trúc của mạng YOLOv4, theo như mã nguồn của tác giả [6], ta có file yolov4.cfg để miêu tả các lớp của mạng theo từng khối. Có tất cả 5 loại layer được sử dụng trong cấu trúc của YOLOv4.

Lớp tích chập (Convolutional)

Lớp sử dụng tích chập để tìm đặc trưng của ảnh, hoặc co không gian ảnh với tham số stride = 2. Trong config của lớp tích chập có các tham số:

 filter: số lượng bộ lọc  stride: bước trượt

 pad: số lượng padding không ta thêm vào xung quanh viền, pad = 1 để đảm bảo kích thước đầu ra sau tích chập.

 activation: hàm kích hoạt. Ở đây YOLOv4 sử dụng hàm Mish Ví dụ 1 config của lớp tích chập: [convolutional] batch_normalize=1 filters=32 size=3 stride=1 pad=1 activation=mish

Lớp tăng kích thước (Upsampling)

Lớp này có chức năng tăng kích thước lên n lần theo tham số stride, tham số này cho biết khoảng cách dịch chuyển của ô tích chập ở mỗi bước chuyển pixel trên ảnh

Đỗ Đình Nam – D17HTTT1 32 stride=2

Lớp nối tắt (Shortcut)

Là điểm nối tắt như được sử dụng trong mạng hồi quy Resnet. Tham số from = - n để chỉ đầu ra của lớp nối tắt có được cộng thêm đặc tính trừu tượng của lớp thứ n tước đó tính từ lớp nối tắt.

[shortcut] from=-3

activation=linear

Lớp đường dẫn (Route)

Lớp này tham số layer có thể có 1 giá trị hoặc nhiều giá trị. Khi layer có một giá trị, nó xuất ra đặc tính trừu tượng của lớp được chỉ định bởi giá trị. Ví dụ, ta có tham số layer = -4, có nghĩa là lớp này sẽ xuất ra kết quả đặc tính đặc trưng từ lớp thứ 4 năm ở trước đó, kể từ lớp đường dẫn.

Ví dụ lớp đường dẫn có 1 giá trị:

[route] layers = -2

Khi layer có nhiều hơn hoặc bẳng 2 giá trị, nó sẽ trả về giá trị ghép nối từ các lớp được chỉ định bởi giá trị. Ví dụ, layer = -1, -7 sẽ trả về giá trị ghép nối từ lớp trước đó (-1) và lớp (-7) trước đó tính từ lớp đường dẫn.

Ví dụ lớp đường dẫn có 2 giá trị:

[route]

layers = -1,-7

Lớp nhận dạng (YOLO)

Đây chính là lớp nhận dạng đối tượng. Tham số anchors miêu tả 9 hộp giới hạn định trước, nhưng chỉ các hộp được chỉ định bởi mask thì mới được sử dụng.

Ví dụ về lớp nhận dạng:

[yolo]

Đỗ Đình Nam – D17HTTT1 33 anchors = 12, 16, 19, 36, 40, 28, 36, 75, 76, 55, 72, 146, 142, 110, 192, 243, 459, 401 classes=80 num=9 ignore_thresh = .7 truth_thresh = 1 iou_thresh=0.213 iou_loss=ciou

3.1.1. Xây dựng mô hình YOLOv4 trong Tensorflow

Bắt đầu từ lớp tích chập, ta phải xác định được kích thước của kernel mà lớp tích cập sử dụng. Chiều rộng và chiều cao của kernel được cung cấp bởi tệp cfg, độ sâu của kernel chính xác là số lượng bộ lọc (hoặc độ sâu của bản đồ đặc trưng trừu tượng) có trong lớp trước. Điều này có nghĩa là cần theo dõi số lượng bộ lọc trong lớp mà lớp chập đang được áp dụng.

Hàm tính tích chập

def convolutional(input_layer, filters_shape, downsample=False, activate=True, bn=True, activate_type='leaky'):

if downsample:

input_layer = tf.keras.layers.ZeroPadding2D(((1, 0), (1, 0)))(input_layer) padding = 'valid' strides = 2 else: strides = 1 padding = 'same'

conv = tf.keras.layers.Conv2D(filters=filters_shape[-1], kernel_size = filters_shape[0], strides=strides, padding=padding,

use_bias=not bn, kernel_regularizer=tf.keras.regularizers.l2(0.0005),

kernel_initializer=tf.random_normal_ initializer(stddev=0.01),

bias_initializer=tf.constant_initial izer(0.))(input_layer)

if bn: conv = BatchNormalization()(conv) if activate == True:

if activate_type == "leaky":

conv = tf.nn.leaky_relu(conv, alpha=0.1) elif activate_type == "mish":

Đỗ Đình Nam – D17HTTT1 34 conv = mish(conv)

return conv

Hàm kích hoạt mish

def mish(x):

return x * tf.math.tanh(tf.math.softplus(x))

Hàm tính khối kết nối dư (residual_block)

def residual_block(input_layer, input_channel, filter_num1, filter_num2, activate_type='leaky'):

short_cut = input_layer

conv = convolutional(input_layer, filters_shape=(1, 1, input_channel, filter_num1), activate_type=activate_type)

conv = convolutional(conv , filters_shape=(3, 3, filter_num1, filter_num2), activate_type=activate_type)

residual_output = short_cut + conv

return residual_output

Hàm tính khối đường dẫn

def route_group(input_layer, groups, group_id):

convs = tf.split(input_layer, num_or_size_splits=groups, axis=-1)

return convs[group_id]

Hàm Upsample

def upsample(input_layer):

return tf.image.resize(input_layer, (input_layer.shape[1] * 2, input_layer.shape[2] * 2), method='bilinear')

3.2. CHUẨN BỊ TẬP DỮ LIỆU HUẤN LUYỆN VÀ GÁN NHÃN 3.2.1. Chuẩn bị tập dữ liệu 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

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 38)

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

(91 trang)