Mô hình huấn luyện

Một phần của tài liệu Nhận dạng và ước lượng calo trong thực phẩm luận văn thạc sĩ công nghệ thông tin (Trang 48)

3.2.1. Bộ dữ liệu

Bộ dữ liệu là thông tin đầu vào gồm các hình ảnh thực phẩm được chụp từ thực tế và các hình ảnh được tìm kiếm trên Internet sau đó được sắp xếp theo từng loại thực phẩm, phục vụ cho việc huấn luyện. Các loại thực phẩm được thể hiện như Hình 3.3.

Hình 3.3. Các loại thực phẩm trong bộ huấn luyện

Mỗi loại thực phẩm gồm 1000 mẫu được chia thành 2 thư mục phục vụ cho nhận dạng

+ Thư mục training data gồm 800 hình mỗi loại; + Thư mục validation gồm 200 hình mỗi loại.

Hình 3.4. Hình ảnh dữ liệu huấn luyện

Các hình ảnh sau đó được nhân bản nhờ ImageDatagenerator trong Keras để tạo ra các tập ảnh mới. Các hình ảnh mới được tạo ra có hình dạng biến đổi như xoay, kéo dãn, thay đổi chiều cao, chiều rộng của ảnh, hình ảnh bên dưới là phép biến đổi sau khi đã thực hiện phép biến đổi

Hình 3.5. Hình ảnh dữ liệu bài toán sử dụng ImageDatagenerator

3.3.2. Mô hình nhận dạng thực phẩm

Hình ảnh được tạo ra lưu trong bộ dữ liệu được huấn luyện để nhận dạng dựa trên mạng nơron tích chập CNN.

Luận văn đã sử dụng Framework của Tensorflow kết hợp thư viện Keras để huấn luyện nhận dạng thực phẩm.

Hình 3.6. Hình ảnh Model summary

Mô hình huấn luyện bao gồm 3 lớp tích chập và 3 lớp lấy mẫu max_pooling, ngoài ra còn sử dụng các hàm dropout, flatten và dense để lấy mẫu.

Ảnh đầu vào với kích thước 224 x 224 x 3 = 150K (3 tương ứng với 3 màu đỏ, xanh lục, xanh lam trong hệ màu RGB thông thường).

Tổng số tham số là 6.447.530.

Tổng số tham số được huấn luyện 6.447.530.

Mô hình huấn luyện trên được cài đặt các thông số như sau Batch_size = 16

Image_size = 224, 224

Mô hình được huấn luyện qua 50 lần.

Quy trình huấn luyện dữ liệu

Quá trình huấn luyện được thực hiện sau khi hoàn tất các bước trên Tốc độ huấn luyện nhanh hay chậm phụ thuộc vào Batch size, số Epoch, lượng dữ liệu.

Đồ thị Accuracy và Loss

Đồ thị 3.1. Train accuracy và loss accuracy

3.3. Mô hình xử lý ảnh ước lượng calo

Trong phép tính toán ước lượng calo trong luận văn sử dụng chính kích thước đĩa thực tế như Hình 3.7.

Kích thước của đĩa sau đó, được sử dụng làm tham chiếu cho việc đo tính toán kích thước thực của thực phẩm.

Hình 3.10. Kích thước đĩa tiêu chuẩn

Việc tính toán calo được thực hiện qua các bước như sau

- Thực hiện xử lý ảnh để lấy diện tích của đĩa và thực phẩm bằng pixel sau đó dựa vào kích thước thực tế của đĩa để tính kích thước thực của phần thực phẩm;

- Tính khối lượng thực tế của thực phẩm qua các thông số, thể tích của thực phẩm sau khi quy về hình dạng như hình cầu, hình trụ, hình khối chữ nhật;

- Từ khối lượng thực tế của thực phẩm suy ra lượng calo của thực phẩm dựa vào dữ liệu calo trên 100g thực phẩm đã được kiểm chứng từ Bộ Nông nghiệp Hoa Kỳ [18].

3.3.1. Xác định kích thước đĩa và kích thước thực phẩm

Để xác định kích thước của đĩa và kích thước thực phẩm từ ảnh chụp, luận văn sử dụng thư viện OpenCV thông qua xử lý ảnh.

Xác định kích thước đĩa được thể hiện qua các bước sau trong OpenCV trên Python

Bước 1 Đọc ảnh đầu vào Bước 2 Chuyển sang ảnh xám Bước 3 Khử nhiễu

Bước 4 Phân ngưỡng ảnh Bước 5 Vẽ các contour

Bước 6 Xác định biên dạng đĩa

Tiến trình xử lý biên dạng đĩa được mô tả như Hình 3.11

Hình 3.11. Quy trình thực hiện lấy biên dạng đĩa

Sau khi biên dạng đĩa được xác định quá trình xử lý ảnh được tiếp tục để xác định biên dạng thực phẩm. Hình ảnh đầu vào của bước tiếp theo là hình ảnh sau khi được xóa nền chỉ còn đĩa và thực phẩm.

Biên dạng thực phẩm được xác định qua các bước sau Bước 1 Đọc ảnh đầu

Bước 2 Chuyển ảnh sang hệ màu HSV (Hue, Saturation, Value) Bước 3 Tách rời thực phẩm

Bước 4 Chuyển sang ảnh xám Bước 5 Làm mịn ảnh

Bước 6 Phân ngưỡng ảnh Bước 7 Vẽ các contour

Bước 8 Xác định kích thước thực phẩm

Hình 3.12. Quy trình xác định kích thước thực phẩm

3.3.2. Tính toán ước lượng calo

Kết quả của quá trình xử lý ảnh là lấy được diện tích bề mặt của đĩa và diện tích bề mặt của thực phẩm được tính bằng pixel.

Tỷ lệ giữa pixel thực phẩm và tỷ lệ pixel đĩa là hệ số để tính ra diện tích thực phẩm thực tế từ đó quy ra thể tích để tính toán khối lượng của thực phẩm.

- Thể tích của thực phẩm.

- Khối lượng riêng của thực phẩm.

3.3.2.1. Tính thể tích thực phẩm

Việc tính thể tích của vật thể cần các yếu tố sau - Diện tích bề mặt của thực phẩm;

- Độ dày của thực phẩm.

a) Tính diện tích của bề mặt thực phẩm * Trong quá trình xử lý hình ảnh sẽ lấy được

- Diện tích của đĩa tính bằng pixel (được ký hiệu trong quá trình tính là “area”).

- Diện tích của thực phẩm bằng pixel (được ký hiệu trong quá trình tính là “area 1”)

Gọi

Sdis diện tích thực tế của đĩa

Sfood diện tích thực tế của thực phẩm

Tỷ lệ diện tích thực tế và diện tích tính bằng pixel của đĩa được ký hiệu là “a”

A = Sdis /area

Diện tích thực phẩm tính theo công thức sau S food = a * area1

* Đề tài nhận dạng 9 loại thực phẩm và được giả sử quy về các hình dạng khác nhau gồm

- Hình cầu (quả táo, hành tây, cam, cà chua); - Hình trụ (quả chuối, khoai lang, cà rốt); - Hình tròn biết độ dày (trứng chiên); - Hình hộp chữ nhật (bánh mì)

b) Thể tích của mỗi loại được tính như sau - Tính thể tích hình cầu

r=√ Sfood

π

Trong đó Sfood là diện tích của thực phẩm

Thể tích ước lượng thực phẩm theo hình cầu

V= 4

3 ∗ π ∗ r 3

- Tính thể tích hình trụ

Gọi h là chiều cao của thực phẩm sau khi tách biên

h = hpix a∗ Trong đó

a là tỉ lệ pix và cm

hpix là chiều cao lớn nhất của hình bao thực phẩm tính bằng pixel Bánh kính của đáy trụ

r= Sfoodh

π∗ Thể tích của hình trụ được tính như sau

V = h r∗ π ∗ 2

Thể tích của thực phẩm trứng cũng được tính theo thể tích của hình trụ với giả thiết chiều dày của trứng là 0.3 cm

- Thể tích hình hộp

Thể tích của hình hộp được tính bằng cách lấy diện tích của thực phẩm nhân cho chiều dày thực phẩm (giả sử mỗi lát cắt bánh mì có độ dày bằng 1.5cm)

Thể tích khối hộp được tính như sau

V = 1.5 Sfood∗

3.3.2.2. Tính khối lượng của thực phẩm

Khối lượng của thực phẩm được tính theo công thức sau

Trong đó

m là khối lượng của thực phẩm

V là thể tích ước lượng của thực phẩm d là khối lượng riêng của thực phẩm

3.3.2.3. Quy đổi calo

Lượng Calo được quy đổi theo công thức sau

Calo = m Calo100∗100

Trong đó

m là khối lượng của thực phẩm

Calo100 Lượng Calo của thực phẩm quy đổi trên 100g thực phẩm Lượng calo trên 100g được lấy từ nguồn dữ liệu được công bố và kiểm chứng bởi Bộ Nông nghiệp Hoa Kỳ [18]

Các thực phẩm được gắn nhãn như Bảng 3.1 dưới đây

Bảng 3.1. Khối lượng riêng và lượng calo trên 100g thực phẩm

Loại thực phẩm

Khối lượng riêng (g/cm3)

Calo trên 100

gram (kcal) Label

Hình dạng quy đổi Apple 0.609 53 1 Hình cầu Banana 0.94 89 2 Hình trụ Bread 0.23 26.6 3 Hình khối hộp Carrot 1.04 41 4 Hình trụ Egg 1.03 155 5 Hình tròn Onion 0.96 40 6 Hình cầu Orange 1.03 47 7 Hình cầu Sweetpotato 1.03 85.8 8 Hình trụ Tomato 0.47 18 9 Hình cầu

3.4. Ứng dụng Android

- Giao diện người dùng (UI User Interface)

- Giao diện ứng dụng được thiết kế một cách thân thiện với người sử dụng, dễ sử dụng và được xây dựng trên nền tảng Android Google flatform.

- Giao diện được thiết kế như sau (Hình 3.13) - Màn hình giao diện 1 (Main Activity) gồm + Tên phần mềm (Calories counter),

+ Ngày giờ tự động; + Khu vực hiển thị;

+ Nút nhấn chụp hình và lựa chọn hình từ calo; + Tổng số calo nhận được.

- Màn hình giao diện 2 (Hiển thị kết quả)

Sau khi tính toán calo từ ảnh chụp dữ liệu được trả về và hiển thị kết quả như Hình 3.14 sau

Hình 3.14. Hình ảnh giao diện ứng dụng khi nhận kết quả tính toán

Mỗi lần chụp ảnh, tính toán lượng calo sẽ được lưu lại trên khu vực hiển thị. Đối với mỗi ngày người dùng nạp calo từ khẩu phần thực phẩm vào, sau khi chụp sẽ được hệ thống lưu lại theo ngày. Với số calo nhận được người dùng có thể kiểm soát được khẩu phần ăn của mình sao cho phù hợp.

Sau khi ứng dụng được cài đặt, để sử dụng được ứng dụng người dùng cần thực hiện theo các bước sau

Bước 1 Bấm vào biểu tượng App

Bước 3 Lựa chọn chụp ảnh hoặc chọn hình từ thư viện Bước 4 Xác nhận gửi hình hoặc chụp hình

Kết quả sau khi thực hiện các bước trên thì người dùng sẽ thấy - Kết quả tên thực phẩm và lượng calo;

- Tổng lượng calo sau các lần chụp.

3.5. Kết quả thực nghiệm3.5.1. Mô hình nhận dạng 3.5.1. Mô hình nhận dạng

Với mô hình nhận dạng trên kiến trúc của Tensorflow và thư viện Keras kết quả nhận được với độ chính xác trên 98% được thể hiện qua Đồ thị 3.1 Train accuracy và validation accuracy.

Các hình ảnh trước khi đưa vào nhận dạng được resize theo kích thước đã được cài đặt trong model. Hình ảnh sẽ được resize với kích cỡ chiều dài 224px, chiều rộng 224px. Kết quả nhận dạng.

3.5.2. Mô hình tính toán ước lượng calo

Các hình ảnh được chụp trên điện thoại Samsung Galaxy J8, với độ phân giải 13 Mega pixel.

Các ảnh sau đó được tính toán trên mô hình tính toán ước lượng calo trên ngôn ngữ Python. Kết quả được ước lượng thể hiện trong Bảng 3.2.

Thực phẩm được chụp cũng được ghi lại khối lượng thực tế, khối lượng của mỗi loại được cân và ghi lại trên cân điện tử WH-B05, 5 kg và sai số 1g.

Hình 3.16. Hình ảnh kết quả cân thực phẩm để lấy khối lượng thực tế.

Sau khi cân nặng thực tế quả và chụp hình quả để ước lượng, quy đổi ra lượng calo thu được một số kết quả thể hiện trong Bảng 3.3.

Bảng 3.3. Bảng kết quả thực nghiệm

3.5.3. Ứng dụng Android

Các kết quả nhận dạng và tính toán ước lượng Calo được thực hiện trên Server, cho ra kết quả như sau

Loại thực phẩm Khối lượng thực tế (gram) Calo thực tế (Kcal)

Calo ước lượng (Kcal) Apple 202 107,1 115.6 Banana 38 33.8 32.3 Bread 22 5.8 4.0 Carrot 73 29.9 32.3 Egg 32 49.6 46.1 Onion 110 44 47.6 Orange 407 199.4 246.1 Sweetpotato 73 62.6 61.6 Tomato 62 11.2 9.4

Chương 4. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 4.1. Kết quả đạt được

4.1.1. Nhận dạng

- Trình bày được các kiến thức về Mạng nơ ron tích chập, Tensorflow và thư viện Keras, trong nhận dạng hình ảnh thực phẩm;

- Tạo ra bộ dữ liệu huấn luyện với mỗi loại 1000 ảnh;

- Tạo mô hình huấn luyện và huấn luyện bộ dữ liệu bằng mạng nơ ron tích chập (CNN) được viết bằng ngôn ngữ Python, trên cơ sở Framework của Tensorflow và thư viện học sâu của Keras.

4.1.2. Ước lượng calo

- Trình bày được một số thuật toán trong xử lý ảnh thuật toán Otsu, thuật toán Canny để tính toán ước lượng calo trong thực phẩm;

- Sử dụng thuật toán xử lý ảnh trên Python và OpenCV, xây dựng mô hình tính calo dựa trên cơ sở tách biên dạng của thực phẩm và đĩa từ ảnh chụp. Từ đó tính toán diện tích của thực phẩm qua ảnh chụp và ước lượng calo dựa vào thể tích và khối lượng riêng của từng thực phẩm.

4.1.3. Xây dựng ứng dụng Android cho nhận dạng và tính toán Calo

- Trình bày được phương thức trao đổi dữ liệu trên HTTP giữa nền tảng Android và Server tạo REST API thông qua công cụ có tên gọi là Postman;

- Xây dựng ứng dụng trên hệ điều hành Android giao tiếp với Server để liên kết dữ liệu;

- Đưa ra được kết quả Tên thực phẩm và lượng calo trong thực phẩm.

4.2. Hạn chế

Tuy luận văn đã đạt được một số kết quả khả quan nhưng vẫn còn một số vấn đề tồn tại như

- Về nhận dạng Bộ dữ liệu tạo ra chưa đủ lớn, số loại hình dạng trong một loại quả chưa nhiều.

- Về tính toán lượng calo Lượng tính toán được khác nhau từ các hình ảnh chụp khác nhau, phụ thuộc vào khoảng cách chụp hình, độ tương phản, độ sáng tối, đồng thời chất lượng hình ảnh cũng ảnh hưởng tới kết quả của mô hình. Do quy thể tích về các loại hình học cơ bản nên việc ước lượng calo còn sai số.

- Về ứng dụng Sử dụng Server miễn phí từ Amazon nên khi truy cập thường gặp tình trạng quá tải dẫn đến không trả kết quả về Android được.

4.3. Hướng phát triển đề tài

Nghiên cứu để khắc phục các hạn chế trên và tìm hiểu các phương pháp tiếp cận để đạt được một số kết quả sau

- Tạo bộ dữ liệu với nhiều loại hình dạng khác nhau của một loại thực phẩm - Cải tiến, ứng dụng các kỹ thuật xử lý ảnh để cho kết quả chính xác hơn; - Sử dụng Server có tốc độ truyền tải tốt hơn để trả về kết quả tốt.

[1] Kawano, Y., & Yanai, K. (2014), Food image recognition with deep convolutional features, Ubicom '14 Adjunct, September 13 - 17, 2014, <https //dl.acm.org/doi/abs/10.1145/2638728.2641339>;

[2] Nguyễn Đắc Thành (2017), Nhận dạng và phân loại hoa quả trong ảnh màu,

<https //repository.vnu.edu.vn/flowpaper/simple_document.php?subfolder=84/29/61/&doc= 84296108320357570872919792519741173320&bitsid=b16d4a14-87e3-4d0e-8e4d-

d337014a296a&uid=>;

[3] Lê Thị Tuyết, Dương Thị Anh Đào, Bùi Thị Nhung, Nguyễn Thị Hồng Hạnh, Trần

Quang Bình (2017), Hội chứng chuyển hóa ở trẻ bình thường và trẻ béo phì 6-10 tuổi, Tạp

chí Khoa học ĐHQGHN Khoa học Tự nhiên và Công nghệ, Tập 33, Số 2, tr.81-88;

[4] Trần Hữu Dàng, Nguyễn Hải Thủy (2008), Béo phì - Giáo trình sau đại học chuyên

ngành Nội tiết và Chuyển hóa, NXB Đại học Huế;

[5] Cục Y tế dự phòng (2018), K ế t qu ả hội ngh ị dinh dưỡ ng m ở r ộng TP H ồ Chi Minh lầ n 7 ch ủ đề “Dinh dưỡng và Lão hóa”, Cụ c y t ế dự phòng, ngày 16 tháng 8 năm 2018,

<http //vncdc.gov.vn/vi/phong-chong-benh-khong-lay-nhiem/2351/ket-qua-hoi-nghi-dinh- duong-tp-ho-chi-minh-mo-rong-lan-thu-7-voi-chu-de-%E2%80%9Cdinh-duong-va-lao- hoa%E2%80%9D>;

[6] Trần Thừa Nguyên (2012), Nghiên cứu kháng insulin ở người cao tuổi thừa

cân béo phì, Đại học Huế-Trường Đại học y dược, ngày 27 tháng 2 năm 2019,

<https //luanvanyhoc.com/nghien-cuu-khang-insulin-o-nguoi-cao-tuoi-thua-can-beo-phi>;

[7] N. Yao et al (2007), A video processing approach to the study of obesity, IEEE Int.

Conf. Multimedia Expo, 08 August 2007 ,

<https //ieeexplore.ieee.org/abstract/document/4285003>;

[8] Gianluigi Ciocca et al, Recognizing food in the wild using Deep Learning, IEEE

Int. Conf. Multimedia Expo, 17 December 2018,

<https //ieeexplore.ieee.org/document/8576207>;

[9] Taichi Joutou, Keiji Yanai (2009), A food image recognition system with Multiple

Kernel Learning, IEEE Int. Conf. Multimedia Expo, 17 February 2010 <https //ieeexplore.ieee.org/document/5413400>;

[10] Yuji Matsuda, Hajime Hoashi, Keiji Yanai (2012), Recognition of Multiple-Food

Images by Detecting Candidate Regions, IEEE Int. Conf. Multimedia Expo, 13 September 2012, <https //ieeexplore.ieee.org/document/6298369>;

Một phần của tài liệu Nhận dạng và ước lượng calo trong thực phẩm luận văn thạc sĩ công nghệ thông tin (Trang 48)