.22 So sánh các Dataset

Một phần của tài liệu Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin (Trang 47)

Chú thích:

- #Img.: Số lượng hình ảnh

- #Obj./img.: Trung bình số lượng dối tượng trên một hình - #Cls.: Số loại đối tượng

- #Cls./img.: Trung bình số loại đối tượng trên từng hình - Dense.: Các đối tượng có nằm sát nhau, dày đặc khơng?

- Idnt.: Các hình ảnh có chứa nhiều đối tượng giống nhau hoặc khoá để phân biệt được vùng ngăn cách giữa hai đối tượng khơng?

- BB: Bouding box có bao gồm độ chính xác khơng?

Qua bảng so sánh, nhận thấy được bộ dữ liệu SKU-110K thật quý giá và rất phù hợp cho bài toán cần giải quyết là các vật thể nằm dày đặt nhau.

3.2.3. Sử dụng phương pháp trong luận văn

Để sử dụng được những phương pháp từ hai bài báo SKU-110K CVPR và Keras RetinaNet đòi hỏi nhóm cần có khả năng đọc hiểu được những mắt xích và tham số quan trọng trong soucre code của tác giả, nắm được những kiến thức cơ bản về Python và một số thư viện cốt lõi để có thể thực hiện train, test và predict. 3.2.3.1. Chuẩn bị bộ dataset

Nhóm đã tự đánh nhãn thủ cơng hơn 10 bộ dataset với hơn 100 hình và 2000 bounding box mỗi bộ.

Việc chuẩn bị dataset tốn rất nhiều thời gian, nhóm đã tìm hiểu và xác định những vật thể dễ tiếp cận trước để thu thập dữ liệu và đánh nhãn.

Việc đánh nhãn được sử dụng bằng công cụ LabelImg và format của annotation là .XML, nhóm đã tìm hiểu và viết function để convert từ dạng

.XML sang CSV cho đúng chuẩn annotation format của bài báo để thuận tiện trong quá trình train.

3.2.3.2. Cách train

Vì thời điểm ra đời của bài 2019, nên nhóm đã gặp rất nhiều khó khăn trong việc sử dụng ở hiện tại, địi hỏi nhóm phải đọc kĩ và sửa đổi source code của tác giả cho phù hợp với môi trường Google Colab và các package hiện tại. Cụ thể các phiên bản quan trọng:

- tensorflow 1.13.1 - tensorflow-gpu 1.13.1 - keras 2.2.4

- h5py 2.10.0 - keras_resnet 0.2.0

Việc train cho model diễn ra hai lần.

Lần thứ nhất là cho model base bằng pretrained model và phương pháp của Keras RetinaNet.

Lần thứ hai là sử dụng weight file (.h5) vừa có được để train cho IoU layer của bài SKU-110K CVPR, sẽ train cho một layer mới để tính được điểm số của từng bounding box.

3.2.3.3. Cách kiểm tra và sử dụng kết quả

Việc sử dụng kết quả dựa trên sự kết hợp Keras RetinaNet và SKU-110K CVPR. Sử dụng phương pháp Keras RetinaNet để chuyển đổi từ training model được sang interface model để giảm dung lượng và tăng tốc độ load model vào RAM và predict.

Sau đó dùng phương pháp cảu SKU-110K CVPR để biến đổi và lọc lại kết quả đã được predict (MoG và EM-Merger). Cụ thể:

Chương 3: PHƯƠNG PHÁP ĐẾM VẬT THỂ TRONG HÌNH ẢNH

Hình 3.23 Code minh hoạ predict bằng phương pháp học máy

Model sẽ predict và đưa ra 4 giá trị và boxes (bounding box), hard_scores (điểm số hard của Jaccard) , labels (tên của box, cụ thể trong luận văn chỉ có 1 loại mỗi model), soft_scores (điểm số soft của Jaccard).

Sử dụng threshhold là 0.5 và EM-Merger để lọc lại những bounding box bị đè lên nhau và có kết quả ở filtered_data là danh sách các bounding box đúng vị trí.

Sử dụng kết quả:

Kết quả số lượng vật thể trong hình ảnh bằng số lượng filtered_boxes, các giá trị x, y, height, width là lần lượt là toạ độ điểm gốc và chiều cao/chiều ngang của hình chữ nhật, score là độ tin cậy của box đó.

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Chương 4

4. MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

4.1. Bộ dữ liệu đã thu thập, đánh nhãn trong đề tài

Drive folder:

https://drive.google.com/drive/folders/18oIQsmRKV5mvKcdYS4cDxNiU5yM mwMgK?usp=sharing

4.1.1. Dataset trứng

Hình 4.1 Dataset trứng

Định dạng dataset: RetinaNet Keras CSV Số lượng hình ảnh: 67 hình

Train set: 50 hình Validation set: 17 hình Số lượng vật thể: 580 vật thể

Số lượng vật thể trung bình trên ảnh: 11 vật thể/hình

Hình 4.2 Dataset gỗ

Định dạng dataset: RetinaNet Keras CSV Số lượng hình ảnh: 18

Train set: 13 hình Validation set: 5 hình

Số lượng vật thể: 1084 vật thể

Số lượng vật thể trung bình trên ảnh: 60 vật thể/hình

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.3 Dataset ống thép hình trịn

Định dạng dataset: RetinaNet Keras CSV Số lượng hình ảnh: 16

Train set: 12 hình Validation set: 4 hình

Số lượng vật thể: 1000 vật thể

Số lượng vật thể trung bình trên ảnh: 63 vật thể/hình

Hình 4.4 Dataset đồng xu

Định dạng dataset: RetinaNet Keras CSV Số lượng hình ảnh: 33

Train set: 27 hình Validation set: 8 hình

Số lượng vật thể: 1146 vật thể

Số lượng vật thể trung bình trên ảnh: 35 vật thể/hình

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.5 Dataset nắp chai

Định dạng dataset: RetinaNet Keras CSV Số lượng hình ảnh: 46

Train set: 35 hình Validation set: 11 hình

Số lượng vật thể: 1334 vật thể

Số lượng vật thể trung bình trên ảnh: 29 vật thể/hình

4.1.6. Dataset thùng giấy

Hình 4.6 Dataset thùng giấy

Định dạng dataset: RetinaNet Keras CSV Số lượng hình ảnh: 41

Train set: 35 hình Validation set: 11 hình Số lượng vật thể: 882 vật thể

Số lượng vật thể trung bình trên ảnh: 29 vật thể/hình

Hình 4.7 Dataset ống thép hình chữ nhật

Định dạng dataset: RetinaNet Keras CSV Số lượng hình ảnh: 28 hình

Train set: 21 hình Validation set: 7 hình

Số lượng vật thể: 1548 vật thể

Số lượng vật thể trung bình trên ảnh: 55 vật thể/hình

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.8 Dataset viên bi

Định dạng dataset: RetinaNet Keras CSV Số lượng hình ảnh: 46 hình

Train set: 38 hình Validation set: 8 hình

Số lượng vật thể: 1835 vật thể

Số lượng vật thể trung bình trên ảnh: 40 vật thể/hình

Hình 4.9 Dataset hộp iPhone

Định dạng dataset: RetinaNet Keras CSV Số lượng hình ảnh: 37 hình

Train set: 33 hình Validation set: 4 hình

Số lượng vật thể: 1271 vật thể

Số lượng vật thể trung bình trên ảnh: 34 vật thể/hình

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.10 Dataset bàn phím

Định dạng dataset: RetinaNet Keras CSV Số lượng hình ảnh: 15 hình

Train set: 12 hình Validation set: 3 hình

Số lượng vật thể: 1328 vật thể

Số lượng vật thể trung bình trên ảnh: 89 vật thể/hình

4.2. Model học máy đã huấn luyện được trong đề tài

Drive folder:

https://drive.google.com/drive/folders/1nb7oK5SY0g6DCNkactUporMnb4IFQj Fu?usp=sharing

4.2.1. Trứng

Quá trình train gồm 100 epoch và 250 step per epoch, tại Google Colab. Ghi chú biểu đồ:

- Trục hoành: Số step - Trục tung: Giá trị

4.2.1.1. Train model base detector - Classification_loss:

- Loss:

Hình 4.12 Biểu đồ loss model trứng

- Regression_loss:

Hình 4.13 Biểu đồ regression_loss model trứng

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.14 Biểu đồ val_classification_loss model trứng

- Val_regression_loss:

Hình 4.15 Biểu đồ val_regression_loss model trứng

4.2.1.2. Train cho IoU Layer - Loss:

Hình 4.16 Biểu đồ loss train IoU layer model trứng

- Val_regression_loss:

Hình 4.17 Biểu đồ val_regression_loss train IoU layer model trứng 4.2.2. Bi 4.2.2. Bi

Quá trình train gồm 100 epoch và 250 step per epoch, tại Google Colab. Cụ thể kết quả:

4.2.2.1. Train model base detector - Classification_loss:

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.18 Biểu đồ classification_loss model viên bi

- Loss:

Hình 4.19 Biểu đồ loss model viên bi

Hình 4.20 Biểu đồ regression_loss model viên bi

- Val_classification_loss

Hình 4.21 Biểu đồ val_classification_loss model viên bi

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.22 Biểu đồ val_regression_loss model viên bi

4.2.2.2. Train IoU Layer: - Loss:

Hình 4.23 Biểu đồ loss train IoU layer model viên bi 4.2.3. Ống thép hình chữ nhật 4.2.3. Ống thép hình chữ nhật

Quá trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab. Cụ thể kết quả:

4.2.3.1. Training model base detector - Classification_loss:

Hình 4.24 Biểu đồ classification_loss model ống thép hình chữ nhật

- Loss:

Hình 4.25 Biểu đồ loss model ống thép hình chữ nhật

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.26 Biểu đồ regression_loss model ống thép hình chữ nhật

- Val_resgression_loss

Hình 4.27 Biểu đồ val_regression_loss model ống thép hình chữ nhật

4.2.3.2. Training cho IoU layer - Loss:

Hình 4.28 Biểu đồ loss train IoU layer model ống thép hình chữ nhật 4.2.4. Ống thép hình trịn 4.2.4. Ống thép hình trịn

Quá trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab. Cụ thể kết quả:

4.2.4.1. Train model base detector: - Classification_loss:

Hình 4.29 Biểu đồ classification_loss model ống thép hình trịn

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.30 Biểu đồ classification_loss model ống thép hình trịn

- Regression_loss:

Hình 4.31 Biểu đồ regression_loss model ống thép hình trịn

Hình 4.32 Biểu đồ val_regression_loss model ống thép hình trịn

4.2.4.2. Train IoU layer:

Hình 4.33 Biểu đồ loss train IoU layer model ống thép hình trịn 4.2.5. Thùng giấy 4.2.5. Thùng giấy

Quá trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab. Cụ thể kết quả:

4.2.5.1. Train model base detector - Classification_loss:

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.34 Biểu đồ classification loss model thùng giấy

- Loss:

Hình 4.35 Biểu đồ loss model thùng giấy

Hình 4.36 Biểu đồ Regression loss model thùng giấy

- Val_regression_loss:

Hình 4.37 Biểu đồ Val_regression_loss model thùng giấy

4.2.5.2. Train IoU layer: - Loss:

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.38 Biểu đồ loss train IoU layer model thùng giấy 4.2.6. Hộp điện thoại iPhone 4.2.6. Hộp điện thoại iPhone

Quá trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab. Cụ thể kết quả:

4.2.6.1. Training model base detector - Classification_loss:

Hình 4.39 Biểu đồ classification_loss model hộp điện thoại iPhone

Hình 4.40 Biểu đồ loss model hộp điện thoại iPhone

- Regression_loss:

Hình 4.41 Biểu đồ regression_loss model hộp điện thoại iPhone

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.42 Biểu đồ val_regression_loss model hộp điện thoại iPhone

4.2.6.2. Training cho IoU layer: - Loss:

Hình 4.43 Biểu đồ loss train IoU layer model hộp điện thoại iPhone 4.2.7. Bàn phím 4.2.7. Bàn phím

Q trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab. Cụ thể kết quả:

4.2.7.1. Training model base detector - Classification_loss:

Hình 4.44 Biểu đồ classification_loss model bàn phím

- Loss:

Hình 4.45 Biểu đồ loss model bàn phím

- Regression_loss:

Hình 4.46 Biểu đồ regression_loss model bàn phím

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.47 Biểu đồ val_regression_loss model bàn phím

4.2.7.2. Training cho IoU layer: - Loss:

Hình 4.48 Biểu đồ loss train IoU layer model bàn phím 4.2.8. Khúc gỗ hình trịn 4.2.8. Khúc gỗ hình trịn

Q trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab. Cụ thể kết quả:

4.2.8.1. Training model base detector - Classification_loss:

Hình 4.49 Biểu đồ classification_loss model khúc gỗ hình trịn

- Loss:

Hình 4.50 Biểu đồ loss model khúc gỗ hình trịn

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.51 Biểu đồ regression_loss model khúc gỗ hình trịn

- Val_resgression_loss:

Hình 4.52 Biểu đồ val_regression_loss model khúc gỗ hình trịn

4.2.8.2. Training cho IoU layer: - Loss:

Hình 4.53 Biểu đồ loss train IoU layer model khúc gỗ hình trịn 4.2.9. Đồng xu

4.2.9.1. Train cho model base detector - Classification_loss:

Hình 4.54 Biểu đồ classification_loss model đồng xu

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.55 Biểu đồ regression_loss model đồng xu

- Val_classification_loss:

Hình 4.56 Biểu đồ val_classification_loss model đồng xu

Hình 4.57 Biểu đồ val_regression_loss model đồng xu

- Val_loss:

Hình 4.58 Biểu đồ val_loss model đồng xu

4.2.9.2. Train cho IoU layer - Loss:

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

Hình 4.59 Biểu đồ loss train IoU layer model đồng xu

- Val_loss:

Hình 4.60 Biểu đồ val_loss train IoU layer model đồng xu 4.2.10. Nắp chai 4.2.10. Nắp chai

Quá trình train gồm 100 epoch và 250 step per epoch, train tại Google Colab. Cụ thể kết quả:

4.2.10.1. Training model base detector - Classification_loss:

Hình 4.61 Biểu đồ classification_loss model nắp chai

- Loss:

Hình 4.62 Biểu đồ loss model nắp chai

- Regression_loss:

Chương 4: MƠ HÌNH HỌC MÁY VÀ BỘ DỮ LIỆU

- Val_resgression_loss:

Hình 4.64 Biểu đồ val_regression_loss model nắp chai

4.2.10.2. Training cho IoU layer: - Loss:

Chương 5

5. PYTHON SERVER

GitHub source code: https://github.com/hosituan/kounter-server

5.1. Flask, Gunicorn, Flask-SocketIO và SocketIO 5.1.1. Giới thiệu 5.1.1. Giới thiệu

5.1.1.1. Flask

- Là một micro web framework để phát triển Web bằng ngôn ngữ Python ra mắt vào năm 2010 bởi nhà phát triển Amin Ronacher

- Kích thước rất nhỏ nhẹ, khơng u cầu bất kì thư viện hoặc cơng cụ nào khi cài đặt. Khơng có database abstraction layer, form validation hay bất kì component nào khơng thực sự cần thiết

- Dễ dàng để một người mới về Python phát triển được một Web Server hoặc website nhỏ

- Dễ dàng nâng cấp, mở rộng trong ứng dụng phức tạp - Sử dụng trong luận văn: Dùng để phát triển web server

- Theo khảo sát của Stack Overflow về độ phổ biến của các web framework cho thấy mức độ phổ biến của Flask tương đối cao:

Hình 5.1 Biểu đồ sử dụng web framework

Chương 5: PYTHON SERVER

o Tốc độ

o Hỗ trợ NoQuery

o Tốt giản tuyệt đối, độ phức tạp tối thiểu o Dễ dàng kết nối tiện ích mở rộng

o Cung cấp xử lý HTTP request o API độc đáo và mạch lạc o Hỗ trợ bảo mật cookie

o Trình gỡ lỗi được nhúng trong trình duyệt o Document rõ ràng và dễ sử dụng

- Nhược điểm: Vì sự đơn giản và nhỏ nhẹ của Flask nên khi sử dụng đơi khi chúng ta phải tự cài đặt những gói phần mềm khác, những gói tiện ích mở rộng hoặc là phải tự làm rất nhiều việc khác.

5.1.1.2. Gunicorn

- Gunicorn là một trong những python web server theo chuẩn WSGI (Web Server Gatewate Interface), ổn định và được triển khai nhiều trong các môi trường sản phẩm thực tế. (Vimentor, 2018)

- Gunicorn dễ sử dụng và hỗ trợ nhiều web framework khác nhau như Django, Flask,... (Vimentor, 2018)

- Hỗ trợ SSL Certificate

- Sử dụng trong luận văn: Dùng để triển khai server 5.1.1.3. Flask-SocketIo và SocketIO

- Flask-SocketIO và SocketIO là công cụ cho phép ứng dụng Flask giao tiếp 2 chiều có độ trễ thấp giữa client và server.

- Ứng dụng phía client có thể sử dụng bất kỳ ngơn ngữ nào trong JavaScript, Python, C++, Java và Swift.

- Sử dụng trong luận văn: Dùng để client theo dõi tiến độ đếm của server

5.1.2. Cài đặt và sử dụng

5.1.2.1. Flask

- Cài đặt: pip install flask - Sử dụng:

Ví dụ cài đặt hai function chính ở file server.py: app = Flask(__name__)

if __name__ == "__main__":

socketio.run(app,host='0.0.0.0',port=80,debug=False, use_reloader=False)

@app.route('/', methods=['GET', 'POST']) def welcome():

return "Hello from My Kounter"

Việc cài đặt và sử dụng Flask rất dễ dàng, chỉ với 2 function trên đã tạo được một web server có đường dẫn chính trả về 1 dòng chữ đơn giản. 5.1.2.2. Gunicorn

- Cài đặt: pip install gunicorn - Sử dụng:

Cấu hình file wsgi.py để import và sử dụng file server.py from server import app

if __name__ == "__main__": app.run()

Sau đó chạy lệnh: gunicorn --bind 0.0.0.0:8080 wsgi:app Server sẽ được khởi động với WSGI Entry Point

5.1.2.3. Flask-SocketIO và SocketIO - Cài đặt: pip install flask-socketio - Sử dụng:

Import packet vào project from flask_socketio import SocketIO, emit

Ở vị trí muốn phát kết quả về client, sử dụng hàm emit(), ở phía client sẽ

Một phần của tài liệu Xây dựng ứng dụng iOS đếm vật thể mật độ cao trong hình ảnh dựa vào học máy và xử lý ảnh đồ án tốt nghiệp khoa đào tạo chất lượng cao ngành công nghệ thông tin (Trang 47)

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

(185 trang)