You are on page 1of 22

CHƯƠNG 1.

PHƯƠNG PHÁP PHÂN TÍCH ẢNH VÀ NHẬN DIỆN QUẢ DỨA

1.1 Mục tiêu và nhiệm vụ của chương


Ở đây chúng ta sẽ có ba nhiệm vụ đó là:
Nhiệm vụ 1: Nhận diện hình dạng trái dứa.
Nhiệm vụ 2: Nhận diện dứa chín, dứa xanh.
Nhiệm vụ 3: Xác định tọa độ của dứa chín, dứa xanh nhận diện được theo 3 trục x, y, z.
Phân tích bài toán:
 Yêu cầu: Nhận diện quả dứa, phân biệt dứa chín, dứa xanh trên ảnh.
 Dữ liệu đầu vào: Một bức ảnh màu (RGB), định dạng jpg hoặc png.
 Dữ liệu đầu ra: Một danh sách các bộ 5 số, mỗi bộ chứa thông tin của một quả dứa:
Toạ độ và kích thước của quả dứa:
- Mỗi quả dứa được bao bởi một hình chữ nhật có các cạnh song song với các cạnh của ảnh.
Có nhiều cách khác nhau để biểu diễn hình chữ nhật này, tuy nhiên, cách nào cũng cần tối thiểu 4
tham số.
Ở đây, ta dùng 4 tham số:
- Hoành độ tâm hình chữ nhật.
- Tung độ tâm hình chữ nhật.
- Một nửa chiều rộng hình chữ nhật.
- Một nửa chiều cao hình chữ nhật.
1.2 Giải quyết bài toán
1.2.1 Phương pháp Machine Learning (học máy)
Machine Learning là một phương pháp để cung cấp cho máy tính khả năng giải quyết vấn đề
mà không cần lập trình cụ thể.
Bài toán với đặc trưng cụ thể: bài toán tìm số lớn nhất trong một dãy số cho trước, ta có thể
chỉ ra phương pháp cụ thể để máy tính thực hiện điều này, đó là duyệt lần lượt tất cả các số trong
dãy, luôn lưu lại giá trị lớn nhất trong các giá trị đã duyệt qua, và cập nhật giá trị này mỗi khi gặp
một số lớn hơn. Giải thuật kết thúc khi đã duyệt toàn bộ các số trong dãy. Có thể thấy, với bài
toán vừa nêu, con người có thể chỉ rõ ra các đặt trưng của vấn đề, nhờ đó mà có thể chỉ cho máy
tính cách giải quyết cụ thể.
Bài toán không có đặc trưng cụ thể: Bài toán nhận diện quả dứa (phần xử lý ảnh mà đồ án kì
trước đã làm). Với bài toán này máy tính khó có thể phân biệt được quả dứa trong một bức ảnh vì
nhiều lý do: trong một ruộng dứa sẽ có cả quả xanh và quả chín, không có màu sắc đặc trưng, màu
của quả dứa, lá dứa, và vương miện tương đồng nhau.
Hình 4.1 Màu sắc của quả dứa rất đa dạng

Hình 4.2 Màu sắc của quả dứa, lá dứa, vương miện tương đồng nhau
Bài toán phân loại trên không có đặc trưng cụ thể vì vậy cần một phương pháp để dạy cho
máy tính hiểu được đâu là quả dứa trong ảnh.
Phương pháp nhận diện mà các bạn kì trước đã làm là dùng thuật toán Haar Cascade. Khi đó
sẽ đẩy hai bộ dữ liệu bao gồm một tập dữ liệu có chứa ảnh quả dứa và một tập dữ liệu là không
chứa ảnh quả dứa để huấn luyện và nhận diện quả dứa.
Kết quả thu được:
Hình 4.3 Kết quả nhận diện quả dứa bằng phương pháp Haar Cascade
Từ kết quả cho ta thấy kết quả đang còn sai lệch nhiều, những quả dứa ở gần camera có thể
nhận diện được, tuy nhiên ở những vị trí không có quả dứa máy tính vẫn cho đó là quả dứa, có
quả dứa được nhận diện hai lần.
1.2.2 Phương pháp Deep Learning
Deep learning là một nhánh của học máy, chủ yếu dựa trên mạng nơ-ron nhân tạo. Mạng nơ-
ron nhân tạo sử dụng trong Deep learning chứa nhiều lớp ẩn, nên được gọi là mạng nơ-ron sâu,
tên gọi Deep learning cũng xuất phát từ đây. Ngoài ra, Deep learning cũng có thể hiểu theo nghĩa
là hiểu sâu vấn đề. Đối với phương pháp Machine learning thông thường, từ dữ liệu đầu vào, ta
cần thực hiện nhiều giải thuật để phân tích ra các đặc trưng (ví dụ đối với ảnh ta cần phân tích đặc
trưng về ánh sáng, màu sắc, độ tương phản,...). Như vậy, trong phương pháp Machine learning
thông thường, con người đang bắt máy tính phải hiểu về vấn đề giống cách con người hiểu. Tuy
nhiên, kiến trúc não bộ và kiến trúc máy tính khác nhau rất nhiều, việc hiểu về một vấn đề theo
cùng một cách, chưa chắc đã giúp cho máy tính suy luận giống với con người, do đó, kết quả mà
các mô hình Machine learning thông thường đưa ra vẫn có khả năng là kết quả của một quá trình
học “vẹt”.
Một mạng nơ-ron nhân tạo đơn giản có cấu trúc như hình dưới:
Hình 4.4 Mạng nơ-ron nhân tạo
 Lớp đầu vào (lớp input): Là lớp nhận kích thích, mọi kích thích vào mạng sẽ đều thông qua
lớp này.
 Lớp ẩn (lớp hidden): Nằm sau lớp đầu vào, nhận tín hiệu từ lớp đầu vào trước khi chuyển
sang lớp tiếp theo.
 Lớp đầu ra (lớp output): Nhận tín hiệu từ lớp ẩn và đưa ra kết quả.
 Ứng với mỗi liên kết sẽ có các trọng số.
 Ứng với mỗi nơ-ron (trong mạng nơ-ron nhân tạo gọi là unit – đơn vị) sẽ có một giá trị
ngưỡng (giá trị mà tại đó nơ-ron phát tín hiệu) và một giá trị tương ứng với xung điện được
phát đi, tất cả được quy định bởi một hàm kích hoạt. Một hàm kích hoạt thường thấy là hàm
ReLU:
 F(x) = max(0, x).
 Hàm này sẽ chỉ cho tín hiệu truyền đi khi giá trị truyền đến nơ-ron ≥ 0
 Khi giá trị truyền đơn nơ-ron ≥ 0, nó sẽ truyền toàn bộ giá trị này đi.

Mạng nơ-ron nhân tạo cơ bản gồm có nhiều lớp, mỗi lớp lại gồm nhiều nơ-ron, các nơ-ron
được liên kết với nhau bởi các liên kết. Ban đầu, mạng nơ-ron được thiết kế để mỗi nơ-ron đều
liên kết với mọi nơ-ron ở lớp liền trước và lớp liền sau, mỗi một liên kết lại mang một trọng số
khác nhau. Mạng nơ-ron nhân tạo như vậy gọi là mạng nơ-ron kết nối đầy đủ (fully-connected
neural network).
Với mạng nơ-ron nhân tạo, các trọng số cần điều chỉnh trong quá trình huấn luyện chính là
các trọng số của các liên kết. Có thể thấy, mạng nơ-ron kết nối đầy đủ, số trọng số cần tối ưu là
rất lớn.
Ta có thể nhận thấy, với một đầu vào cụ thể, sẽ chỉ có một số thuộc tính là có ảnh hưởng lên
nhau. Ví dụ với dữ liệu đầu vào là một bức ảnh, hầu như chỉ có các điểm ảnh gần nhau mới cùng
nhau tạo nên một đối tượng (object). Ngoài ra, đối với ảnh, mỗi quan hệ giữa một cụm điểm ảnh
liên tiếp cũng không thay đổi nếu chúng được đặt ở các vị trí khác nhau trong bức ảnh này. Vì
vậy, một kiến trúc mạng nơ-ron nhân tạo mới đã được đề xuất, cắt bỏ đi các liên kết không gây
nhiều ảnh hưởng và bắt các liên kết có cùng bản chất chia sẻ trọng số với nhau. CNN chính là một
kiến trúc mạng nơ-ron như vậy.
Phương pháp Deep learning tiếp cận vấn đề theo một hướng khác, thay vì phải đưa ra những
đặc trưng tương đối cụ thể như đã kể trên, thì ta chỉ đưa cho mô hình những đặc trưng “thô”, ví dụ
đối với ảnh là một ma trận 3 chiều chứa các giá trị, mỗi giá trị ứng với cường độ một kênh màu (R
– đỏ, G – lục, B – lam) tại một điểm ảnh nào đó. Mô hình sẽ tự phân tích, kết hợp, suy luận và lựa
chọn ra các đặc trưng phù hợp để quyết định đầu ra. Mạng nơ-ron nhân tạo sâu thực hiện việc này
một cách hiệu quả, do càng vào sâu, các tham số càng trở nên khó hiểu (trừu tượng) đối với con
người, nên con người càng khó can thiệp vào, vì vậy, deep learning sẽ hoàn thành nhiệm vụ đầu
tiên: để cho máy tính tự hiểu vấn đề theo cách hiểu của máy. Các đặc trưng trừu tượng này sẽ
được đưa qua một mô hình Machine learning, tương tự như phương pháp Machine learning thông
thường, để tạo ra kết quả cuối cùng. Nếu mô hình Machine learning này là một mạng nơ-ron nhân
tạo, ta có thể nối hai mạng này với nhau, thành một mạng duy nhất. Việc sử dụng một mạng nơ-
ron duy nhất sẽ giúp quá trình học trở nên xuyên suốt, liền mạch, giúp nâng cao hiệu quả của quá
trình huấn luyện cũng như tối ưu cho kết quả.
1.2.3 CNN – mạng nơ-ron tích chập (Convolutional Neural Network)

Hình 4.5 Mạng nơ-ron tích chập CNN


Mạng nơ-ron nhân tạo cơ bản gồm có nhiều lớp, mỗi lớp lại gồm nhiều nơ-ron, các nơ-ron
được liên kết với nhau bởi các liên kết. Ban đầu, mạng nơ-ron được thiết kế để mỗi nơ-ron đều
liên kết với mọi nơ-ron ở lớp liền trước và lớp liền sau, mỗi một liên kết lại mang một trong số
khác nhau. Mạng nơ-ron nhân tạo như vậy gọi là mạng nơ-ron kết nối đầy đủ (fully-connected
neural network).
Với mạng nơ-ron nhân tạo, các trọng số cần điều chỉnh trong quá trình huấn luyện chính là
các trọng số của các liên kết. Có thể thấy, mạng nơ-ron kết nối đầy đủ, số trọng số cần tối ưu là rất
lớn. Ví dụ với một mạng nơ-ron gồm ba lớp có kích thước lần lượt là 784 – 1024 – 10 (mạng
perceptron giải quyết bài toán nhận diện chữ viết tay trên tập MNIST), ta cần tối ưu đến tận
813056 tham số.
Ta có thể nhận thấy, với một đầu vào cụ thể, sẽ chỉ có một số thuộc tính là có ảnh hưởng lên
nhau. Ví dụ với dữ liệu đầu vào là một bức ảnh, hầu như chỉ có các điểm ảnh gần nhau mới cùng
nhau tạo nên một đối tượng (object). Ngoài ra, đối với ảnh, mỗi quan hệ giữa một cụm điểm ảnh
liên tiếp cũng không thay đổi nếu chúng được đặt ở các vị trí khác nhau trong bức ảnh này. Vì
vậy, một kiến trúc mạng nơ-ron nhân tạo mới đã được đề xuất, cắt bỏ đi các liên kết không gây
nhiều ảnh hưởng và bắt các liên kết có cùng bản chất chia sẻ trọng số với nhau. CNN chính là một
kiến trúc mạng nơ-ron như vậy.
Một mạng CNN cơ bản được hình thành từ các lớp Convolution (Conv) và các lớp Pooling.
Kết thúc của mạng CNN thường là một số lớp Fully-connected giúp kết hợp mọi đặc trưng
(features) đã trích rút bởi các lớp trước lại với nhau và đưa ra kết quả.
Đầu vào của lớp conv thường là một ma trận có kích thước CxMxM (với C là số kênh – ví
dụ số kênh màu của ảnh là 3), đầu ra của lớp conv là một ma trận có kích thước C’xM’xM’. Mỗi
lớp Conv gồm C’ ma trận vuông, kích thước CxNxN với N rất nhỏ (thường cỡ 3x3, 5x5, 7x7,...)
có cùng kích thước với nhau, gọi là filter. Mỗi filter sẽ trượt trên toàn bộ output của lớp trước và
sinh ra một ô của output bằng cách tính tổng chập. Có thể điều chỉnh các tham số của lớp conv
như kích thước filter, độ dài bước nhảy, bổ sung viền,... Nhiệm vụ của lớp conv là tìm ra các mối
liên hệ (đặc trưng) giữa các điểm ảnh gần nhau, mỗi filter phụ trách tìm ra một mối liên hệ trong
đó.
Lớp Pooling có nhiệm vụ lựa chọn ra điểm ảnh có đặc trưng tiêu biểu nhất trong các điểm
ảnh nằm gần nhau. Các loại pooling thường gặp là max pooling và average pooling. Ta cũng có
thể thay đổi các tham số kích thước, bước nhảy,... của lớp pooling.
1.3 Bài toán nhận diện vật thể
Trong lớp các bài toán nhận diện ảnh, bài toán nhận diện quả dứa và phân loại dứa chín
được xếp vào nhóm bài toán nhận diện vật thể. Đặc điểm chung của những bài toán nhận diện vật
thể là một bức ảnh chứa nhiều vật thể thuộc nhiều lớp (class) khác nhau. Nhiệm vụ của bài toán là
phải đưa ra danh sách tất cả các vật thể thuộc những lớp được chỉ định trong bức ảnh đó, bao gồm
thông tin về toạ độ, lớp của vật thể. Toạ độ của vật thể thường là thông tin hình chữ nhật bao
quanh vật thể đó, hình chữ nhật này có các cạnh song song với các viền của ảnh.
Có nhiều phương pháp giải quyết bài toán nhận diện vật thể khác nhau. Có thể xếp các
phương pháp này vào hai nhóm:
- Giải quyết theo cơ chế đường ống (pipeline): phát hiện => phân loại. Nhóm bài toán này sẽ
tìm cách phân tách các vật thể trong một bức ảnh thành các bức ảnh độc lập, sau đó phân loại
những bức ảnh đó một cách độc lập. Những giải thuật tiêu biểu là: R-CNN, Fast R-CNN,...
- Giải quyết theo cơ chế end-to-end: sử dụng một mô hình duy nhất để giải quyết đồng thời
cả bài toán phân loại và bài toán xác định vị trí. Thuật toán tiêu biểu có thể kể đến là YOLO,
SSD,...
1.3.1 Thuật toán YOLO
YOLO (You Only Look Once) là thuật toán Object Dection nhằm mục tiêu xử lý thời gian
thực có tốc độ tốt nhất hiện tại.
1.3.1.1. Ý tưởng thuật toán
YOLO chia input image thành SxS grid cell, mỗi grid cell sẽ dự đoán một đối tượng. Ví dụ:
grid cell màu vàng ở Hình 4 .6 dự đoán đối tượng “person” với boundary box có tâm nằm vào
trong grid cell đó.

Hình 4.6 Ý tưởng thuật toán YOLO


Với mỗi grid cell sẽ dự đoán một số lượng boundary box nhất định. Ví dụ grid cell màu
vàng bên dưới tạo ra 2 boundary box để dự đoán vị trí của người trong hình.

Hình 4.7 Grid Cell


Quy tắc một đối tượng cho mỗi grid cell gặp hạn chế khi các đối tượng quá gần nhau. Vì thế
YOLO có một giới hạn nhất định về khoảng cách giữa hai vật thể mà nó có thể nhận diện được.
Với mỗi ô grid cell:
- YOLO dự doán B boundary box với các tham số (x, y, w, h, c). Với x và y là tọa độ góc
trên bên phải của box, w và h là độ lớn chiều ngang và chiều dọc của box, c là box confidence
score.
- YOLO dự đoán một đối tượng bất kể số lượng boundary box B.
- YOLO dự đoán C conditional class probabilities.
Box confidence score phản ánh khả năng hộp chứa đối tượng và độ chính xác của boundary
box. Các tham số x, y, w và h đều được chuẩn hóa do đó có khoảng giá trị là [0,1]. Mỗi grid cell
có C conditional class probability, là xác suất mà đối tượng được phát hiện thuộc về một lớp cụ
thể. Vì thế dự đoán của YOLO có dạng (S,S, Bx5 + C) = (7, 7, 2x5+5) = (7, 7, 15). (C = 5 đối với
bài toán của chúng ta).
Class confidence score cho mỗi box được dự đoán được tính theo công thức:
𝑐𝑙𝑎𝑠𝑠 𝑐𝑜𝑛𝑓𝑖𝑑𝑒𝑛𝑐𝑒 𝑠𝑐𝑜𝑟𝑒 = 𝑏𝑜𝑥 𝑐𝑜𝑛𝑓𝑖𝑑𝑒𝑛𝑐𝑒 𝑠𝑐𝑜𝑟𝑒 × 𝑐𝑜𝑑𝑖𝑡𝑖𝑜𝑛𝑎𝑙 𝑐𝑙𝑎𝑠𝑠 𝑝𝑟𝑜𝑏𝑎𝑏𝑖𝑙𝑖𝑡y
1.3.1.2. Kiến trúc mạng

Hình 4.8 Kiến trúc mạng mô hình YOLO


YOLO có 24 Convalutional Layers theo sau là 2 Fully Conneted Layers (FC).
1.3.1.3. Lost Function
YOLO sử dụng sai số bình phương giữa các preditions (giá trị dự đoán) và ground truth (giá
trị thực) để tính toán tổn thất. Hàm mất bao gồm:
- Classification loss
- Localization loss
- Confidence loss
a) Classification loss
Nếu một đối tượng được phát hiện, classification loss tại mỗi ô là bình phương lỗi của
class conditional probabilities
S2

1 
i 0
obj
i
cclasses
( pi (c)  pˆ i (c)) 2

Where
1iobj  1 if an object appears in cell i, otherwise 0.

pˆ i (c) denotes the conditional class probability for class c in cell i

b) Localization loss
Localization loss đo lỗi của vị ví và kích thước các boundary box được dự đoán. Chúng ta
chỉ tính những box được xác định là có đối tượng.

S2

1 
i 0
obj
i
cclasses
( pi (c)  pˆ i (c))2

Where
1iobj  1 if an object appears in cell i, otherwise 0.

pˆ i (c) denotes the conditional class probability for class c in cell i

c) Confidence loss
Với một đối tượng được phát hiện, confidence loss được tính như sau:
S2 B

1
i0 j 0
obj
ij (Ci  Cˆi ) 2

Where
Cˆ i is the box condifence score of the box j in cell i.

1ijobj  1
if the j th boundary box in cell i is responsible for detecting the object, otherwise 0.

Đối với đối tượng không được phát hiện, confidence loss được tính:
S2 B
noobj 1ijnoobj (Ci  Cˆi ) 2
i 0 j 0

Where
1ijnoobj 1ijobj
is the complement of
Cˆi is the box confidence score of the box j in the cell i.
noobj
weights down the loss when detecting background.

d) Loss

Vì vậy hàm loss của YOLO sẽ có dạng như sau:


S2 B
coord  1ijobj  xi  xˆi    yi  yˆi  
2 2

i 0 j 0
 

  
S2

 
B 2 2
coord 1  obj
ij wi  wˆ i  hi  hˆi
i 0 j 0 
S2 B S2 B
 1 (Ci  Cˆi )  noord 1ijnoobj (Ci  Cˆi ) 2
obj
ij
2

i  0 j 0 i 0 j  0
2
S
  1ijobj   p (c)  pˆ (c) 
2
i i
i 0 cclasses

1.3.1.4. Non-maximal suppression


Vì YOLO có thể phát hiện hai box trùng lặp cho một đối tượng, do đó YOLO sử dụng Non-
maximal suppression để loại bỏ trùng lặp có confidence thấp. Các bước thực hiện của Non-
maximal suppression:
- Bước 1: Sắp xếp các dự đoán theo confidence scores.
- Xuất phát từ những dự đoán có confidence scores cao, loại bỏ mọi dự đoán hiện tại nếu
tìm thấy bất kỳ dự đoán nào trước đó có cùng lớp và IoU > 0,5 với dự đoán hiện tại.
- Lặp lại bước 2 cho cho đến khi tất cả dự đoán đã được kiểm tra.

Hình 4.9 Non-maximal suppression


1.3.2 Kỹ thuật Transfer Learning
Transfer learning là một kỹ thuật quan trọng trong Deep learning.
Như đã trình bày ở mục 1.2.3, đặc điểm nổi bật của Deep learning là khả năng tự “hiểu” các
đặc trưng theo cách của máy. Điều này giúp cho máy tính không chỉ học được cách giải quyết vấn
đề, mà nó còn học được những “kiến thức” nhất định để giải quyết các bài toán tương tự với bài
toán mà nó đã từng giải quyết. “Kiến thức” này được lưu trữ (một cách trừu tượng) trong bộ trọng
số của nó. Để có thể giải quyết bài toán khác, ta chỉ cần lấy bộ trọng số này và tinh chỉnh đôi chút
để nâng cao tính tương thích với bài toán mới.
Hiện nay, có nhiều mạng nơ-ron và bộ trọng số được huấn luyện sẵn như Inception, ResNet,
DarkNet,... Các mạng nơ-ron này đều được tạo ra để có thể áp dụng kỹ thuật transfer learning.
Người tạo ra các mạng này cũng cung cấp miễn phí bộ trọng số đã được họ huấn luyện trên các
tập dữ liệu lớn như ImageNet, COCO,... Ta hoàn toàn có thể sử dụng các bộ trọng số này và tinh
chỉnh lại để phù hợp với bài toán nhận diện quả dứa và phân loại dứa chín.
Tác giả của thuật toán YOLOv3 đã tạo ra kiến trúc mạng Darknet để áp dụng cho giải thuật
của mình. Thông số kiến trúc dark-net-53:
https://github.com/pjreddie/darknet/blob/master/cfg/darknet53.cfg
Đồng thời, tác giả cũng cung cấp bộ trọng số đã được huấn luyện của kiến trúc này:
https://pjreddie.com/media/files/darknet53.conv.74
1.4 Xây dựng cơ sở dữ liệu
1.4.1 Chụp ảnh
 Địa điểm : Cánh đồng dứa tại tỉnh Hòa Bình.
 Thời gian: Từ 9h sáng đến 5h chiều.
 Thiết bị : Máy ảnh Intel RealSence Depth Camera D435.
 Phương pháp chụp ảnh:
+ Sử dụng mô hình mẫu robot cắt dứa hình lập phương, kích thước 2m x 2m x 2m. Gắn
camera ở giữa cạnh trên vuông góc với luống dứa. Góc chụp của camera so với phương nằm
ngang được điều chỉnh với nhiều thông số.
+ Camera được điều khiển và trả về dữ liệu cho máy tính qua cổng kết nối USB type C. Ảnh
trả về bao gồm một ảnh JPEG có độ phân giải 1280 x 720 và một ảnh độ sâu.
- Kết quả: Sau khi chụp ảnh vườn dứa trên Hòa Bình chúng em thu được 12 tập dữ liệu, mỗi tập
70 ảnh chụp ở các điều kiện ánh sáng khác nhau, lúc vườn dứa đang còn xanh, đến khi chín.
Tổng cộng thu được 840 bức ảnh.

Hình 4.10 Dữ liệu ảnh thu thập được


1.4.2 Gán nhãn dữ liệu
 Công cụ: https://github.com/tzutalin/labelImg
 Phương pháp:
+ Crop ảnh để thu được hình ảnh có tối thiểu 4 luống dứa và 4 hàng dứa tương ứng với khu
vực hoạt động của cánh tay robot.
+ Trên từng ảnh thực hiện việc vẽ box bao trọn vẹn từng bộ phận (thân dứa và vương miện)
hoặc toàn bộ quả dứa. Mọi bộ phận được nhận biết bằng mắt thường đều được đánh dấu.
+ Với từng box được đánh dấu sẽ được gán nhãn tương ứng. Có 3 loại dứa: dứa non (baby
pineapple – dứa có kích thước bé, có màu đỏ ở phần gai và vương miện, thân quả màu xanh đậm,
phần vương miện bé), dứa xanh (green pineapple – dứa có kích thước vừa, thân có màu xanh đậm,
phần vương miện lớn nhưng không xòe ra), dứa chín (ripe pineapple – dứa có kích thước lớn, thân
có màu vàng, phần vương miện lớn và xòe ra). Với mỗi quả dứa ta đánh dấu 3 box: thân quả
(body), vương miện (crown) và toàn bộ quả (full). Do đó có 9 nhãn cho các box: full baby
pineapple, full green pineapple, full ripe pineapple, crown baby pineapple, crown green pineapple,
crown ripe pineapple, body baby pineapple, body green pine-apple, body ripe pineapple.
- Các bước gán nhãn dữ liệu:
+ Các loại dứa trong tập dữ liệu được miêu ả trong bảng sau:

Bảng 4-1 Phân loại dứa trong tập dữ liệu

Dứa non:
Tên đánh dấu: baby pineapple
Đặc điểm:
- Vương miện nhỏ
- Vỏ có màu hơi đỏ
- Kích thước nhỏ

Dứa xanh:
Tên đánh dấu: green pineapple
Đặc điểm:
- Vương miện đã to
- Vỏ có màu xanh
- Kích thước lớn
Dứa chín:
Tên đánh dấu: ripe pineapple
Đặc điểm:
- Vương miện đã to, xòe rộng
- Vỏ có màu vàng
- Kích thước lớn

+ Các bộ phận cần đánh dấu bao gồm vương miện, thân, và toàn bộ (bao gồm thân và vương
miện).

Hình 4.11 Dán nhãn


Kết quả: Sau khi gán nhãn xong, ta sẽ thu được một bộ cơ sở dữ liệu gồm ảnh chứa các đối
tượng được đánh nhãn, đi kèm với mỗi một ảnh là một file chứa thông tin của các đối tượng được
đánh nhãn trên cùng một bức ảnh, thông tin bao gồm: đường dẫn đến mục chứa các ảnh sau khi
gán nhãn, kích thước của toàn bộ khung ảnh, tên lớp đã gán tên cho đối tượng, tọa độ 4 điểm của
khung đã khoanh vùng đối tượng.
Hình 4.12 Nội dung file .xml sau khi dán nhãn

Hình 4.13 Mỗi khung ảnh sau khi gán nhãn sẽ gồm một file ảnh và một file.xml
1.5 Cài đặt chương trình
1.5.1 Môi trường cài đặt
- Hệ điều hành: Ubuntu 18.04
- Ngôn ngữ: Python 3
- Framework: Keras trên Tensorflow

1.5.2 Tiền xử lý
- Ảnh được resize về kích thước 416x416 nhưng giữ nguyên tỉ lệ bằng cách thêm viền đen
(zero-fill).
- Anchor boxes: là các kích thước mặc định cho các bounding box. Sử dụng thuật toán k-
means trên tập test để chọn ra 3 anchor boxes. YOLOv3 dự đoán toạ độ tâm và kích thước
hình bao bằng cách dự đoán độ chênh lệch (offset) toạ độ, kích thước so với anchor boxes.

1.5.3 Huấn luyện


- Sử dụng dịch vụ Google Colab của Google để đào tạo mô hình (Google Colab (Google
Colaboratory) là một dịch vụ đám mây miễn phí của Google nhằm hỗ trợ cộng đồng nghiên
cứu AI phát triển các ứng dụng deep learning bằng việc cung cấp GPU và TPU miễn phí).
- Cầu hình sử dụng: GPU Tesla K80, 12 GB RAM
- Môi trường: Python 3, Keras 2.1.5, Tensorflow 1.6.0
- Code được tham khảo: https://github.com/qqwweee/keras-yolo3
Bước 1: Chuẩn bị dữ liệu training dưới dạng file txt được chuyển đổi từ file xml thu được
trong quá trình gán nhãn dữ liệu.

Hình 4.14 Dữ liệu dưới dạng file txt


Bước 2: Tải dữ liệu và code lên Google Drive.
Bước 3: Kết nối Google Colab với Drive.
Bước 4: Chạy code train, trong đó: Đóng băng các lớp đầu vào và huấn luyện hai lớp cuối
qua 300 epochs với learning rate là 1e-3, batch size = 32 để đạt được trạng thái ổn định của hàm
loss.
Hình 4.15 Đồ thị hàm Loss 2 lớp cuối
Bước 5: Huấn luyện toàn mạng qua 60 epoch với learning rate ban đầu là 1e-4, batch size =
8 (sử dụng thuật toán ReduceLROnPlateau để thay đổi learning rate trong quá trình huấn luyện).

Hình 4.16 Đồ thị hàm Loss toàn mạng


Trong quá trình huấn luyện, trước tiên phải kiểm tra xem mô hình có hoạt động hiệu quả hay
không, với lần huấn luyện một, không phân biệt dứa xanh và dứa chín. Chỉ cần nhận biết được
quả dứa. Và lần huấn luyện hai, phân biệt dứa xanh và dứa chín. Kết quả thu được cho thấy mô
hình hoạt động tốt và kết quả huấn luyện được thực hiện ở lần huấn luyện hai.
Bước 6: Sử dụng mô hình vừa huấn luyện được để nhận diện dứa xanh và dứa chín.
1.5.4 Kết quả huấn luyện
Sau khi huấn luyện trên tập dữ liệu 840 ảnh, ta sẽ sử dụng bộ trọng số thu được cuối cùng để
có một mô hình mạng nơ-ron hoàn chỉnh, với đầu vào là ảnh trong tập “Test” (ảnh trong tập
“Test” sẽ có cùng điều kiện ánh sáng, kích thước, địa hình chụp như tập ảnh dùng cho việc
training ). Kết quả thu được khi test trên tập dữ liệu 168 ảnh.
Bảng 4-2 Kết quả huấn luyện

Number of Number of
ground-truth True False Average
Lớp
detected objects Positive Positive Precision
objects
Dứa xanh 554 569 501 68 88.39%
Dứa chín 880 951 853 98 93.26%
mAP 90.82%

Hình 4.17 Kết quả nhận diện


Nhận xét: từ bảng huấn kết quả và hình ảnh chúng ta có thể nhận thấy rằng tỷ lệ nhận dạng
chính xác là khá cao từ 88.4% đến trên 93%. Trên Hình 4 .17 cho ta kết quả mỗi quả dứa sẽ được
bao đóng trong một ô hình chữ nhật gắn nhãn là xanh hoặc chín đồng thời có một chỉ số xuất hiện
bên cạnh đó chính là độ tự tin của thuật toán. Nó cho biết rằng khả năng ô vuông đó bao quả dứa
là bao nhiêu phần trăm giá trị này cũng rất cao dao động từ 0.82 lên đến 0.92 trong dải [0,1].
1.6 Bài toán xác định tọa độ
Các ràng buộc:
- Mặt phẳng ảnh của camera chỉ nghiêng theo một phương duy nhất.
- Các thông số về phạm vi nhìn (FOV) của camera là tương đối cố định (có thể có sai số từ 0
đến 3 độ).
- Chiều cao đặt camera là tương đối cố định so với mặt phẳng lấy ảnh.

Hình 4.18 Hình ảnh minh họa của góc chụp camera và điểm ảnh

Hình 4.19 Hình ảnh chi tiết các điểm dùng để xác định toạ độ hai quả dứa
Cho biết:
- Kích thước ảnh WxH: imgw x imgh
- Phạm vi nhìn ngang của camera: ^P' FQ '=α = 69,4
o

- Phạm vi nhìn dọc của camera: ^M ' FN '=β = 42,5o


- Quang trục FG là phân giác 2 góc ^P' FQ ' và ^
M ' FN '
- Vùng lấy ảnh là phần giao giữa mặt phẳng lấy ảnh và phần phóng to tứ diện có đỉnh là F,
cạnh đi qua mặt phẳng ảnh.
- R là giao điểm của 2 cạnh bên của hình thang. Nếu FG ≡ FO thì R không xác định.
- Vị trí đặt camera so với mặt mặt phẳng lấy ảnh: F ( 0,0 , FO )
- Góc tạo bởi quang trục của camera so với phương thẳng đứng: GFO^ (góc camera)
- Tọa độ của điểm ảnh trên mặt ảnh: ( x 0 , y 0 )
- Khoảng cách từ camera đến vị trí 2 quả dứa tại S và E (giả sử quả dứa tại E cao hơn tại S)
tương ứng với đoạn FS (depth1) và FE (depth2) đã biết.
Cần xác định: tọa độ của 2 điểm tương ứng với vị trí 2 quả dứa là S và E
- Tọa độ của vật trên mặt phẳng thực: ( rx , ry ,rz )
 Tọa độ x: rx
 Tọa độ y: ry
 Tọa độ z: rz
Ban đầu, tọa độ ảnh được đánh số từ ( 0,0 ) đến ( imgw , imgh ). Tuy nhiên để tiện tính toán theo
các tỷ số, ta đưa ảnh về hệ tọa độ có gốc là G ' ( 0,0 ) .

Hình 4.20 Gốc tọa độ cánh tay robot cắt dứa

 x, y    x0  
imgw imgh
,  y0 
Như vậy ta có  2 2 
Tại điểm S
Xác định rx :
rx = SY
Ta có : x = S’Y’
Khoảng cách từ camera đến ảnh tính theo pixel là:
 
 imgw imgh 
FG '  hPixel    /2
 2 tan
  
2 tan
 2 2 
Khoảng cách từ camera đến điểm ảnh tính theo pixel là:

FS '  depthPixel  x 2  y 2   hPixel 


2

Áp dụng định lý Talet cho tam giác SYF ta có:


FS ' S ' Y '

FS SY
FS depth1
 rx  SY  S ' Y '.  x.
FS ' depthPixel
Xác định ry :
ry = YO
Ta có : y = Y’G’
Góc YFO
^:

  Y 'G '  
YFO  Y ' FG '  GFO
  arctan    GFO
 FG ' 
 y  
 arctan    GFO
 hPixel 
Áp dụng định lý Talet cho tam giác SYF ta có:
FS ' FY '

FS FY
FS depth1
 FY  FY .  FY '.
FS ' depthPixel
depth1
 FY  Y ' G '2  FG '2 .
depthPixel

 ry  YO  FY .sin YFO
depth1  y  
ry  . y 2  hPixel 2 .sin  arctan  GFO 
Hay depthPixel  hPixel 
Xác định rz :
rz = 0 do điểm S nằm trên mặt phẳng Oxy (mặt phẳng đất)
Tại điểm E
Xác định rx :
rx = EK
Ta có : x = S’Y’
Khoảng cách từ camera đến ảnh tính theo pixel là:
 
 imgw imgh 
FG '  hPixel    /2
 2 tan       
   2 tan   
 2  2 
Khoảng cách từ camera đến điểm ảnh tính theo pixel là:

FS '  depthPixel  x 2  y 2  hPixel 2


Áp dụng định lý Talet cho tam giác EKF ta có :
FS ' S ' Y '

FE EK
FE depth2
 rx  EK  S ' Y '.  x.
FS ' depthPixel
Xác định ry :
ry=IO=KL
Ta có : y = Y’G’
Góc YFO
^:

  Y 'G '  
YFO  Y ' FG '  GFO
  arctan    GFO
 FG ' 
 y  
 arctan    GFO
 hPixel 
Áp dụng định lý Talet cho tam giác EKF ta có :
FS ' FY '

FE FK
FE depth 2
 FK  FY '.  FY .
FS ' depthPixel
depth2
 FK  Y ' G '2  FG '2 .
depthPixel

 ry  KL  FK .sin YFO
depth2  y  
ry  . y 2  hPixel 2 .sin  arctan  GFO 
Hay depthPixel  hPixel 
Xác định rz :
r z = EH = LO

 rz  FO  FL  FO  FE 2  EL2  FO  FE 2  EK 2  KL2
 rz  FO  depth 2  rx 2  ry 2

Nhận xét :
Từ việc tính tọa độ của 2 điểm S và E, ta suy ra công thức tổng quát:
depth
 rx  x.
depthPixel
depth2  y  
 ry  . y 2  hPixel 2 .sin  arctan  GFO 
depthPixel  hPixel 
 rx  FO  depth 2  rx 2  ry 2
Tuy 2 quả dứa tại 2 điểm S và E có cùng vị trí pixel trên khung ảnh, nhưng với công thức
trên ta xác định được chính xác tọa độ thật của 2 quả dứa có chiều cao và vị trí khác nhau bằng
cách tính thông số chiều sâu của camera đến đối tượng thật. Đây cũng là bước cải tiến mới so với
cách tính thông thường là dựa vào chiều cao của camera so với mặt đất (FO). Cách tính này cho ra
kết quả tọa độ chính xác hơn, đơn giản hơn.

You might also like