Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 69 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
69
Dung lượng
9,16 MB
Nội dung
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM Đồ án Báo cáo đồ án cuối kỳ Pandora - cơng cụ tìm kiếm hình ảnh dành cho ngành thời trang Giảng viên hướng dẫn: Sinh viên thực hiện: ThS Mai Trọng Khang Lê Thành Luân - 19520702 Đỗ Thị Thanh Nhã - 18520116 THÀNH PHỐ HỒ CHÍ MINH, THÁNG 2023 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm Danh sách thành viên & Phân công công việc Báo cáo đồ án cuối kỳ No Họ tên Mã số sinh viên Phần trăm công việc Lê Thành Luân 19520702 50% Đỗ Thị Thanh Nhã 18529116 50% Trang 2/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm Mục lục Giới thiệu 1.1 Giới thiệu đề tài lý chọn đề tài 1.2 Mục tiêu đề Các khái niệm 2.1 Nhận dạng vật thể 2.2 Học sâu 2.3 Mạng thần kinh (Neural Network) 2.4 Lớp tích chập (Convolutional Layer) 11 2.5 Lớp gộp (Pooling Layer): 17 2.6 Intersection Over Union (IOU) 17 2.7 YOLO (You Only Look Once) 19 2.8 2.7.1 Mạng YOLO gì? 19 2.7.2 Kiến trúc mạng YOLO 19 2.7.3 Anchor box (hộp neo) 21 2.7.4 Non-max suppression 21 VGG16 22 Các công nghệ sử dụng 24 3.1 PyTorch 24 3.2 YOLOv5 25 3.3 Flask 25 3.4 VGG16 26 3.5 React Native 26 Quá trình thực 28 4.1 Tìm kiếm tài liệu tham khảo 28 4.2 Kiến trúc Pandora 29 4.3 4.4 4.2.1 Cắt ảnh 29 4.2.2 Chuyển đổi hình ảnh thành vector (vector hóa hình ảnh) 31 4.2.3 Tìm kiếm độ tương đồng 32 Thu thập xử lý liệu 32 4.3.1 Thu thập liệu 32 4.3.2 Xử lý liệu 34 Tạo mơ hình học sâu trích xuất bounding box quần áo từ ảnh 38 4.4.1 Xử lý liệu phù hợp với mơ hình YOLOv5 38 4.4.2 Huấn luyện mơ hình YOLOv5 Google Colab 42 4.5 Tạo mơ hình học sâu trích xuất đặc trưng quần áo 44 4.6 Tạo sở liệu ảo máy 53 4.7 Tạo Pandora API Flask 56 4.8 Cài đặt API xây dựng ứng dụng Epimetheus cho thiết bị di động 61 Báo cáo đồ án cuối kỳ Trang 3/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm Hướng dẫn cài đặt sử dụng 5.1 62 Hướng dẫn cài đặt khởi chạy Pandora API 62 5.1.1 Cấu hình yêu cầu 62 5.1.2 Cài đặt khởi chạy 62 Phân tích ưu, nhược điểm kế hoạch phát triển tương lai 64 6.1 Ưu điểm 64 6.2 Nhược điểm 64 6.3 Kế hoạch phát triển 65 Kết luận Báo cáo đồ án cuối kỳ 68 Trang 4/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm Giới thiệu 1.1 Giới thiệu đề tài lý chọn đề tài Cuộc sống chịu ảnh hưởng mạnh mẽ internet, tiêu biểu lĩnh vực giáo dục, an ninh, thương mại, Trong số đó, mua sắm trực tuyến tiến công gnheej lớn làm cho sống dễ dàng thoải mái Hiện nay, hầu hết website thương mại điện tử hỗ trợ tìm kiếm dựa văn Điều chất cơng cụ tìm kiếm cũ cần tên mục mơ tả thích hợp kết tìm kiếm xác Tuy nhiên, với phát triển mạnh mẽ lĩnh vực trí tuệ nhân tạo, đặc biệt máy học, học sâu thị giác máy tính, nguồn liệu hình ảnh ngày gia tăng theo cấp số nhân, số công cụ tìm kiếm hình ảnh tích hợp trang web thương mại điện tử Giờ đây, người dùng gửi hình ảnh mặt hàng mà họ muốn tìm lên trang web, trang web trả kết sản phẩm tương ứng với hình ảnh Điều làm tăng mức độ hài lòng người dùng giúp họ tiết kiệm nhiều thời gian duyệt web để tìm kiếm sản phẩm mà họ thấy mà tên hay mô tả Tuy nhiên, lĩnh vực chưa khai phá nhiều, việc cơng ty thương mại điện tử hồn tồn khơng cơng bố mã nguồn họ cho hệ thống tìm kiếm hình ảnh lý bảo mật, nên việc hiểu hệ thống hoạt động khó khăn Dựa thực tiễn này, sau nhiều nỗ lực nghiên cứu, nhóm đưa đề xuất giải pháp tìm kiếm hình ảnh dựa thị giác máy tính, tập trung vào ngành thời trang 1.2 Mục tiêu đề Với phạm vi đồ án mơn học thảo luận đưa định khó để đạt kết tốt cơng cụ tìm kiếm hình ảnh mà sàn thương mại điện tử áp dụng vấn đề thời gian thực hiện, liệu gán nhãn cịn ít, vấn đề sở vật chất, nhân lực, Vì vậy, nhóm đạt mục tiêu độ xác model học sâu đạt ngưỡng 75% Cịn cơng cụ tìm kiếm phụ thuộc vào trải nghiệm người dùng sở liệu nên khó đánh giá, nhóm định so sánh với số nghiên cứu khoa học khác làm cơng cụ tìm kiếm hình ảnh sử dụng chung liệu mà nhóm sử dụng Báo cáo đồ án cuối kỳ Trang 5/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm Các khái niệm 2.1 Nhận dạng vật thể Nhận dạng vật thể kỹ thuật thị giác máy tính để xác định vật thể hình ảnh video Nhận dạng vật thể đầu thuật tốn học sâu học máy Khi người nhìn vào ảnh xem đoạn video, dễ dàng phát người, đồ vật, cảnh chi tiết trực quan khác Mục đích nhận dạng vật thể dạy máy tính làm coi người: đạt đến mức độ hiểu nội dung hình ảnh Hình 1: Ứng dụng nhận dạng đối tượng để xác định phân loại đối tượng (ở chó mèo) Nhận dạng vật thể công nghệ quan trọng, ứng dụng nhiều lĩnh vực Trong kể đến bật xe không người lái Nhận dạng vật thể cho phép xe không người lái nhận biển báo dừng để phân biệt người với cột đèn Ngồi ra, ứng dụng để xác định bệnh y học, kiểm tra công nghiệp thị giác robot (giúp robot nhận diện vật thể) Báo cáo đồ án cuối kỳ Trang 6/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm Hình 2: Nhận diện vật thể đường phố, ứng dụng xe tự hành Bài toán nhận dạng vật thể sản sinh toán khác, toán nhận quan tâm sâu sắc giới nghiên cứu khoa học Trong số kể đến như: • Gán thẻ hình ảnh: Là trình thêm thẻ văn vào hình ảnh dựa có hình ảnh Mỗi hình ảnh gán nhiều thẻ – Đầu vào: Hình ảnh thẻ gán cho hình ảnh – Đầu ra: Các thẻ phù hợp để gán cho hình ảnh • Phân loại hình ảnh: Dự đốn loại lớp đối tượng hình ảnh – Đầu vào: Một hình ảnh với đối tượng – Đầu ra: Nhãn phân loại đối tượng • Định vị đối tượng: Định vị diện đối tượng hình ảnh vị trí chúng hộp giới hạn – Đầu vào: Một hình ảnh có nhiều đối tượng – Đầu ra: Một nhiều hộp giới hạn (xác định tọa độ điểm tâm giữa, chiều rộng chiều cao) • Phát đối tượng: Định vị diện đối tượng hộp giới hạn loại lớp đối tượng định vị hình ảnh – Đầu vào: Một hình ảnh có nhiều đối tượng – Đầu ra: Một nhiều hộp giới hạn nhãn phân loại cho hộp giới hạn Báo cáo đồ án cuối kỳ Trang 7/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Cơng nghệ phần mềm • Phân đoạn đối tượng: Các đối tượng hình ảnh nhận dạng cách đánh dấu pixel cụ thể đối tượng thay hộp giới hạn – Đầu vào: Một hình ảnh có nhiều đối tượng – Đầu ra: Mảng pixel đánh dấu tương ứng với loại đối tượng Trong số toán này, toán biết đến nhiều phát đối tượng Nó phổ biến đến mức mà người nhắc đến nhận diện vật thể, ý họ đến việc phát đối tượng hộp giới hạn 2.2 Học sâu Việc sử dụng học sâu vào giải toán nhận diện vật thể phương pháp phổ biến mà nhà nghiên cứu khoa học sử dụng Các mơ hình học sâu mạng thần kinh tích chập (Convolutional Neural Network - CNN) sử dụng để tự động tìm kiếm đặc điểm đối tượng hữu hình ảnh nhằm xác định đối tượng Ví dụ: CNN học cách xác định khác biệt mèo chso cách phân tích hàng nghìn hình ảnh tìm hiều đặc điểm khiến chó mèo khác Học sâu tập hợp học máy, khác biệt số khía cạnh quan trọng so với học máy truyền thống, cho phép máy tính giải loạt vấn đề phức tạp không giải Một ví dụ vấn đề phức tạp toán nhận dạng chữ số viết tay Để giải tốn này, máy tính cần phải có khả đối phó với đa dạng cách thức trình bày liệu Mỗi chữ số từ đến viết theo vơ số cách: kích thước hình dạng xác chữ số viết tay khác tùy thuộc vào người viết viết hoàn cảnh Để đối phó với đa dạng này, việc sử dụng phương trình tính tốn bình thường có độ phức tạp thấp bất thi, mà đòi hỏi phải sử dụng phương trình tính tốn với độ phức tạp cao Những phương trình máy tính học phương pháp học sâu, mà cụ thể mạng lưới thần kinh Báo cáo đồ án cuối kỳ Trang 8/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Cơng nghệ phần mềm Hình 3: Ví dụ 100 cách viết tay chữ số khác trích từ liệu MNIST tiếng 2.3 Mạng thần kinh (Neural Network) Mạng lưới thần kinh (tên tiếng Anh neural network) mơ hình tính tốn có cấu trúc lấy cảm hứng từ cấu trúc mạng lưới thần kinh người Mỗi neural mạng thần kinh hàm toán học lấy liệu thông qua đầu vào, biến đổi liệu thành dạng dễ điều chỉnh sau đưa đầu để tiếp tục truyền vào đầu vào lớp tiếp theo, tính tốn để đưa đầu cuối Tất mạng thần kinh có lớp đầu vào, liệu ban đầu đưa vào, lớp đầu dự đốn cuối Nhưng khơng thế, thứ làm nên sức mạnh mạng thần kinh lớp ẩn nằm lớp đầu vào đầu Các lớp kết nối với cách đầu lớp đứng trước đầu vào lớp đứng sau Do đó, thuật ngữ học sâu có liên quan đến số lượng lớn lớp ẩn nằm đầu vào đầu mạng thần kinh Báo cáo đồ án cuối kỳ Trang 9/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Cơng nghệ phần mềm Hình 4: Cấu trúc mạng thần kinh đơn giản, với lớp đầu vào, lớp đầu hai lớp ẩn Sơ đồ đơn giản hóa hy vọng giúp cung cấp ý tưởng cấu trúc mạng thần kinh đơn giản Trong sơ đồ trên, nốt tròn đại diện cho neural mạng, với neural tổ chức thành lớp thẳng đứng Như thấy, neural liên kết với neural lớp trước nó, thể neural tạo giá trị đầu vào cho neural lớp Các mũi tên liên kết neural có ý nghĩa quan trọng, chúng mang giá trị khác thể tầm quan trọng khác liên kết neural Những liêu kết có ý nghĩa lớn khuếch đại giá trị neural truyền qua lớp Đổi lại, khuếch đại giá trị giúp kích hoạt tế bào neural mà giá trị đưa vào Có thể hiểu rằng, kết nối hai nốt mạng thần kinh hệ số phương trình tính tốn giá trị nốt Một neural kích hoạt tổng giá trị đưa vào neural vượt qua ngưỡng định Ngưỡng thường xác định hàm kích hoạt lớp Sự kích hoạt có ý nghĩa khác qua lớp mạng thần kinh Ví dụ mạng thần kinh xây dựng để giải toán nhận dạng chữ số viết tay, lớp đầu vào pixel hình ảnh chữ viết tay Lớp ẩn phát đường thẳng đường xiên theo hướng khác Lớp ẩn thứ hai phát thêm đường gấp khúc, nét cong, nét chồng, Neural kích hoạt lớp đầu mạng thần kinh trường hợp tương ứng với số lượng nhãn mà toán muốn phân loại, 10 nhãn tương ứng theo thứ tự từ đến Từ đó, ta đúc kết giá trị nốt tính cơng thức sau: (l) (l−1) zi = Σlj=1 aj (l) (l) (l) ∗ wji + bi (1) (l) (2) = σ(zi ) Trong đó: (l) • zi : giá trị nốt thứ i lớp thứ l Báo cáo đồ án cuối kỳ Trang 10/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Cơng nghệ phần mềm Hình 41: File vectorized.csv, nơi chứa thơng tin vector đặc trưng hình ảnh Để tạo sở liệu này, nhóm tiến hành chạy đoạn mã sau Google Colab, sau tải thư mục database máy # create csv files and add images to database folder data = pd.read_csv('/content/test/test.csv', nrows=1000) file_list = data['dir_img'].values x0=data['x0'].values x1=data['x1'].values y0=data['y0'].values y1=data['y1'].values # 10 transformer = transforms.Compose([transforms.Resize(256), transforms.ToTensor()]) 11 vectors=[] 12 for i in range(file_list.size): 13 img = Image.open(f"/content/test/images/{file_list[i]}") 14 w, h = img.size 15 img = img.crop((x0[i], y0[i], x1[i], y1[i])) 16 predict_result = predict_image(img, vectorize_model, 17 transformer).cpu().detach().numpy() vectors.append(predict_result) 18 headers =[] #vectors header 19 for i in range(4096): 20 headers.append(f'v{i}') 21 data.to_csv('/content/drive/MyDrive/database/db_data.csv') 22 vectors=pd.DataFrame(vectors) Báo cáo đồ án cuối kỳ Trang 55/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm 23 vectors.to_csv('/content/drive/MyDrive/database/vectorized.csv', header=headers) 24 import shutil 25 26 #copy imgs from test folder to db folder 27 for i in range(file_list.size): 28 print(file_list) 29 shutil.copy2( f"/content/test/images/{file_list[i]}", f"/content/drive/MyDrive/database/images/{file_list[i]}") 30 31 4.7 Tạo Pandora API Flask Sau hoàn tất việc huấn luyện mơ hình cần thiết, nhóm tiến hành xây dựng API cho Pandora Đồng thời, việc sử dụng khoảng cách cosine để so sánh vector thực bước Việc cần phải định API nhận đầu vào trả kết đầu Đối với đầu vào đơn giản, cần hình người dùng gửi lên Tuy nhiên, đầu phức tạp chút, Pandora trả nhiều hình ảnh (nhóm để mặc định hình ảnh) phải trả danh sách hình Hơn nữa, ảnh người dùng gửi có nhiều sản phẩm nhận diện, nên sản phẩm phải trả hình tương ứng Các sản phẩm nhận diện lại cịn trùng nhãn, nên khơng thể dùng nhãn để phân biệt chúng Để giải điều này, nhóm đưa giải pháp chuyển đổi ảnh sang dạng byte, sau chuyển đổi byte thành chuỗi mã hóa base64 để tiện cho việc truyền liệu tổ chức liệu gửi Mỗi sản phẩm nhận diện hình mà người dùng tải lên đánh số thứ tự, gọi ID Đối với sản phẩm trả nhãn sản phẩm danh sách sản phẩm tương đồng với Tất tạo thành phần JSON body phản hồi danh sách object phân biệt khóa ID Cụ thể yêu cầu phản hồi có phần body file JSON dạng sau Phần JSON body request người dùng gửi lên { "image": } Phần JSON body respond gửi cho người dùng { : { "category": , "list_b64_str": [] } } Sau thống định dạng đầu vào đầu API, khó khăn mà nhóm gặp phải mã nguồn YOLOv5 không hỗ trợ cho việc xuất đầu thông tin nhãn bounding box Hiện đội Báo cáo đồ án cuối kỳ Trang 56/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm ngũ phát triển mơ hình YOLOv5 tạo hàm cho phép khởi chạy từ terminal xuất đầu ảnh vẽ thêm bounding box Vì vậy, cơng việc mà nhóm cần làm tham khảo mã nguồn YOLOv5 viết lại hàm detect Hàm detect viết lại def detect_image( weights=ROOT / 'yolov5s.pt', # model path or triton URL source=ROOT / 'data/images', # file/dir/URL/glob/screen/0(webcam) data=ROOT / 'data/coco128.yaml', imgsz=(640, 640), # dataset.yaml path # inference size (height, width) conf_thres=0.25, # confidence threshold iou_thres=0.45, # NMS IOU threshold max_det=1000, device='', # maximum detections per image # cuda device, i.e or 0,1,2,3 or cpu 10 save_txt=False, 11 classes=None, 12 agnostic_nms=False, 13 augment=False, 14 visualize=False, 15 project=ROOT / 'runs/detect', 16 name='exp', 17 exist_ok=False, 18 half=False, 19 dnn=False, 20 # save results to *.txt # filter by class: class 0, or class # class-agnostic NMS # augmented inference # visualize features # save results to project/name # save results to project/name # existing project/name ok, not increment # use FP16 half-precision inference # use OpenCV DNN for ONNX inference ): 21 source = str(source) 22 save_dir = increment_path(Path(project) / name, exist_ok=exist_ok) 23 (save_dir / 'labels' if save_txt else save_dir).mkdir(parents=True, exist_ok=True) 24 25 device = select_device(device) 26 model = DetectMultiBackend(weights=weights, device=device, dnn=dnn, data=data, fp16=half) 27 stride, names, pt = model.stride, model.names, model.pt 28 imgsz = check_img_size(imgsz, s=stride) 29 30 bs = 31 dataset = LoadImages(source, img_size=imgsz, stride=stride, auto=pt) 32 33 model.warmup(imgsz=(1 if pt or model.triton else bs, 3, *imgsz)) 34 seen, windows, dt = 0, [], (Profile(), Profile(), Profile()) 35 path, im, im0s, vid_cap, s = next(iter(dataset)) 36 with dt[0]: 37 im = torch.from_numpy(im).to(model.device) 38 im = im.half() if model.fp16 else im.float() Báo cáo đồ án cuối kỳ Trang 57/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm 39 im /= 255 40 if len(im.shape) == 3: 41 im = im[None] 42 43 44 with dt[1]: visualize = increment_path(save_dir / Path(path).stem, mkdir=True) if visualize else False 45 pred = model(im, augment, visualize) 46 47 48 with dt[2]: pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_det) 49 50 for i, det in enumerate(pred): 51 seen += 52 p, im0, frame = path, im0s.copy(), getattr(dataset, 'frame', 0) 53 p = Path(p) 54 gn = torch.Tensor(im0.shape)[[1, 0, 1, 0]] 55 if len(det): 56 det[:, :4] = scale_boxes(im.shape[2:], det[:, :4], im0.shape).round() 57 for c in det[:, 5].unique(): 58 59 n = (det[:, 5] == c).sum() s += f"{n} {names[int(c)]}{'s' * (n > 1)}" 60 return_result = [] 61 for *xyxy, conf, cls in reversed(det): 62 xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist() 63 # line = (cls, *xywh, conf) 64 return_result.append({'class': cls.tolist(), 'xywh': xywh}) 65 66 return return_result return [] Cuối cùng, khâu chuẩn bị hoàn tất cho việc triển khai Pandora API Hầu hết hàm Pandora triển khai xử lý liệu đầu vào đưa hình ảnh vào mơ hình để nhận diện bounding box vector đặc trưng hình ảnh, nên khơng khác biệt với đoạn mã mà nhóm thực Google Colab Chỉ có cơng đoạn so sánh vector khoảng cách cosine lấy hình ảnh có vector đặc trưng tương đồng nhóm phải cài đặt lại Hàm lấy top sản phẩm có độ tương đồng cao from scipy import spatial import pandas as pd def get_top(top, vector, label): return_array = [] Báo cáo đồ án cuối kỳ Trang 58/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm list_cos_dist = [] candidate_indexes = [] for index, row in database.iterrows(): if int(row['category_num']) == label: 10 11 vec = vectorize_db.iloc[index, 1:].to_numpy() 12 cosine_distance = spatial.distance.cosine(vector, vec) 13 list_cos_dist.append(cosine_distance) 15 candidate_indexes.append(index) ranked_dist_indexes = np.argsort(list_cos_dist) 16 for index in range(0, top): 14 17 id = candidate_indexes[ranked_dist_indexes[index]] 18 return_array.append({'dir_img': database['dir_img'][id], 'label': database['category'][id]}) 19 return return_array Sau hồn thành cài đặt hàm phụ trợ, nhóm tiến hành viết hàm xử lý yêu cầu người dùng Flask Đối với cơng cụ Pandora, nhóm định nghĩa phương thức POST để nhận yêu cầu từ người dùng Triển khai Pandora API Flask from detect import detect_image import torch from torchvision import transforms import pandas as pd from PIL import Image import numpy as np from scipy import spatial from flask import Flask, flash, request, redirect import base64 10 11 12 app = Flask( name ) 13 device = 'cuda' if torch.cuda.is_available else 'cpu' 14 use_gpu = device == 'cuda' 15 database = pd.read_csv("database/db_data.csv") 16 vectorize_db = pd.read_csv("database/vectorized.csv") 17 vectorize_model = torch.load("weight/vectorize_model.pth", 18 map_location=torch.device('cpu')) transformer = transforms.Compose([transforms.Resize(256), transforms.ToTensor()]) 19 dict_cate_num, dict_num_cate = createDicts() 20 21 22 @app.route('/', methods=['POST']) 23 def get_top_similar_images(): Báo cáo đồ án cuối kỳ Trang 59/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm 24 body = request.json 25 if 'image' not in body: 26 27 28 29 30 31 32 33 flash('No image found') return redirect(request.url) elif not body['image']: flash('Image can not be null') else: image_data = base64.b64decode(body['image']) with open("images/test.jpg", 'wb') as f: f.write(image_data) 34 35 result_yolo = detect_image(weights="./weight/best.pt", source="./images", data="./custom_data/yolo_deepfashion_data.yaml", conf_thres=0.2) 36 image = Image.open("images/test.jpg") 37 respond_result = {} 38 for index, result in enumerate(result_yolo): 39 label = int(result['class']) 40 xywh = result['xywh'] 41 x0, y0, x1, y1 = turn_xywh_to_coordination(image.size, xywh) 42 crop_img = image.crop((x0, y0, x1, y1)) 43 vector = vectorize_image(crop_img, vectorize_model, transformer) 44 top_similar = get_top(3, vector, label) 45 list_b64_string = [] 46 for obj in top_similar: with open(f"database/images/{obj['dir_img']}", 'rb') as f: 47 48 b64_str = base64.b64encode(f.read()) 49 list_b64_string.append(str(b64_str.decode('utf-8'))) 50 respond_result[index] = {'category': dict_num_cate[label], 'list_b64_str': list_b64_string} 51 return respond_result 52 53 54 55 if name == " main ": app.run() Báo cáo đồ án cuối kỳ Trang 60/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm Hình 42: Kết trả Pandora API, thử nghiệm Postman 4.8 Cài đặt API xây dựng ứng dụng Epimetheus cho thiết bị di động Sau API xây dựng, nhóm bắt đầu q trình xây dựng front-end application: Epimetheus - mobile app chạy hệ điều hành android ios Ở đây, framework lựa chọn sử dụng cho Epimetheus React Native Epimetheus có hình chính: • Camera: Màn hình cho phép người dùng chụp ảnh chọn ảnh từ thư viện media local để dùng làm input đầu vào cho model Pandora • ImageList: Màn hình trả danh sách ảnh lấy từ Pandora API Báo cáo đồ án cuối kỳ Trang 61/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm Hướng dẫn cài đặt sử dụng 5.1 5.1.1 Hướng dẫn cài đặt khởi chạy Pandora API Cấu hình yêu cầu Để cài đặt khởi chạy Pandora API, cần có máy tính cá nhân đáp ứng đủ u cầu sau: • Có kết nối internet • Đã cài đặt Python phiên 3.8 • Đã cài đặt PIP • Đã cài đặt cơng cụ virtual environment Python • Đã cài đặt Git • Đã cài đặt Postman 5.1.2 Cài đặt khởi chạy Đầu tiên, tiến hành tải mã nguồn Pandora máy thông qua Git git clone https://github.com/luanle13/Pandora.git Tiếp theo, tiến hành tải mơ hình trích xuất vector đặc trưng hình ảnh link sau Google Drive bỏ vào thư mục weight Pandora Sở dĩ phải làm file nặng dung lượng cho phép để push lên GitHub (hơn 500MB) Sau tiến hành tạo môi trường ảo cho project Pandora, mở thư mục chưa Pandora terminal gõ lệnh sau: python -m venv pandora_venv Sau đó, kích hoạt mơi trường ảo: python -m venv pandora_venv Việc nhằm tránh xung đột package Python Sau kích hoạt môi trường ảo, ta cần cài đặt package cần thiết: pip install -r requirements.txt Đợi lúc để package cần thiết cài đặt, sau chạy lệnh sau để khởi động Pandora: python main.py Pandora API khởi chạy cổng 5000 máy Bây mở Postman lên để kiểm tra API, qua đường dẫn http://localhost:5000 Báo cáo đồ án cuối kỳ Trang 62/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Cơng nghệ phần mềm Hình 43: Khởi chạy Pandora API thành công Báo cáo đồ án cuối kỳ Trang 63/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Cơng nghệ phần mềm Phân tích ưu, nhược điểm kế hoạch phát triển tương lai 6.1 Ưu điểm Qua q trình phát triển đồ án, nhóm đánh giá đúc kết ưu điểm trội Pandora Thứ nhất, cơng cụ có tham gia mạnh mẽ trí tuệ nhân tạo – xu hướng cơng nghệ làm mưa làm gió hứa hẹn mang lại thay đổi tích cực cho giới Đặc biệt vận dụng kết hợp nhiều kiến trúc mơ hình học sâu mang lại hiệu tốt, mở đường cho nhóm xây dựng cơng cụ trí tuệ nhân tạo khác có kết hợp kiến trúc mạng neural đại (hay cách nói cộng đồng khoa học state-of-the-art) Đây điều ý nghĩa kiến trúc mạng neural có ưu nhược điểm riêng, việc kết hợp chúng bù đắp cho khuyết điểm chúng, từ cải thiện đáng kể độ xác công cụ Kỹ thuật áp dụng để giải nhiều tốn sử dụng trí tuệ nhân tạo giới mang lại nhiều thành cơng đáng kể Thứ hai, cơng cụ nhận diện so sánh tương đồng quần áo có ảnh mà khơng bị ảnh hưởng nhiều phông người mẫu Đạt điều nhờ vận dụng khả nhận diện bounding box mơ hình YOLO Điểm sáng giúp khắc phục nhược điểm mà công cụ ViSeR – cơng cụ mà nhóm tham khảo Ý tưởng kỹ thuật xem lạ tốn tìm kiếm hình ảnh, nhiên sử dụng nhiều tốn nhận diện gương mặt Cách mà nhóm suy diễn đưa ý tưởng xuất phát từ toán nhận diện gương mặt, người ta cắt gương mặt khỏi hình ảnh để huấn luyện mơ hình học sâu nhận diện gương mặt người có sở liệu hay khơng Cuối cùng, hình ảnh Pandora xử lý trích xuất đặc trưng cách chi tiết, cụ thể chuyển đổi thành ma trận chiều có hạng 4096 Nếu ta coi phần tử ma trận biểu thị cho đặc trưng hình ảnh số đặc trưng nhận diện 4096 Điều khiến cho mơ hình học cách chi tiết đặc trưng hình ảnh cho kết xác Hơn nữa, vector cịn lưu trữ sẵn sở liệu tương ứng với hình ảnh, khiến cho việc xử lý người dùng upload ảnh lên trở nên nhanh 6.2 Nhược điểm Bên cạnh ưu điểm bật, Pandora cịn có nhược điểm cần phải cải thiện Điểm nằm việc mơ hình nhận diện bounding box xung quanh quần áo tách chúng khỏi ảnh, chưa thật tách quần áo khỏi ảnh Cho dù tách bouding box, bị dính ảnh hình tách Có thể thấy cách giải chưa thật tối ưu mặt độ xác Có kỹ thuật giúp tách vật thể khỏi hình ảnh, image segmentation (phân vùng ảnh) Khi đó, hình ảnh phân vùng nhờ vào việc phân loại nhóm pixel, gán cho chúng nhãn khác Để áp dụng vào toán tách quần áo khỏi hình ảnh gán cho pixel nhãn 1, thể pixel khơng thuộc khu vực quần áo, cịn thể pixel có khu vực quần áo Sau nhận diện phân vùng, ta tiến hành giữ lại pixel có nhãn xóa pixel có nhãn 0, có kết đầu hình ảnh quần áo tách Khi kết hợp với kỹ thuật tách bouding box YOLO ta tách nhiều loại quần áo ảnh Tuy nhiên, toán phân vùng ảnh yêu cầu liệu đầu vào phải gán nhãn chi tiết, thứ mà có liệu thời trang Báo cáo đồ án cuối kỳ Trang 64/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm đáp ứng Các kiến trúc thường sử dụng để giải toán phân vùng ảnh phức tạp, kể đến Mask-CNN, FCN, Unet Khơng vậy, YOLO cịn mang lại vấn đề không kiến trúc phân loại khác, YOLO không kiến trúc nhận diện nên khơng có nhãn UNKNOW, YOLO có nhãn UNKNOW lại khơng xuất kết Nhãn UNKNOW nhãn đặc biệt tốn phân loại, xuất mơ hình khơng thể phân loại hình ảnh nằm nhãn số nhãn Có thể hiểu thơng qua ví dụ sau: giả sử huấn luyện mơ hình phân loại hình ảnh chó mèo, hình ảnh khơng chó hay mèo mơ hình phân loại chúng vào đâu? Do đó, nhãn UNKNOW quan trọng bước phân loại hình ảnh Vấn đề thứ nằm kiến trúc trích xuất đặc trưng hình ảnh Như đề cập trên, kiến trúc xuất kết vector 4096 chiều, cách loại bỏ layer cuối kiến trúc VGG-16, sau huấn luyện mơ hình phân loại hình ảnh Thế ta lại khơng thể kiểm sốt liệu có chắn vector 4096 chiều chứa đặc trưng quan trọng để so sánh độ tương đồng hình ảnh hay khơng, mơ hình huấn luyện để phân loại khơng phải để so sánh Nói ngắn gọn ăn gian việc huấn luyện mơ hình trích xuất đặc trưng hình ảnh, lầm tưởng mơ hình học để đưa vector có thê sử dụng để so sánh độ tương đồng hình ảnh Nhược điểm cuối mà nhóm nhận thấy hiệu mơ hình phải thơng qua mơ hình học sâu để nhận diện bounding box trích xuất đặc trưng Tốc độ xử lý mơ hình chậm, địi hỏi phải có can thiệp mặt kiến trúc phần mềm triển khai API, thay đổi giải thuật áp dụng Để cải thiện vấn đề này, nhóm nghĩ đến việc sử dụng tính tốn đa luồng tính tốn phân tán để tối ưu hóa việc thực thi Pandora Do việc so sánh tính khoảng cách cosine vector diễn độc lập cặp vector, nên việc chia nhỏ liệu để tính tốn độc lập luồng khác phương án tốt để cải thiện hiệu Pandora Không vậy, việc thực xếp khoảng cách theo thứ tự tăng dần để lấy top vector có khoảng cách nhỏ đến vector đầu vào thực độc lập, tạo thành kiến trúc streaming 6.3 Kế hoạch phát triển Như đề cập trên, Pandora hạn chế cần phải khắc phục Tuy nhiên, giới hạn thời gian hoàn thành đồ án mơn học nên nhóm chưa thể khắc phục Trong số hạn chế Pandora, có hạn chế mà phải nhiều thời gian để khắc phục Vì nên nhóm đưa hướng tiếp cận nhằm giải cải thiện điểm hạn chế đó, đồng thời đưa tiến, ý tưởng để phát triển Pandora Đầu tiên, cần giải trường hợp YOLO không nhận diện quần áo hình Trường hợp không ảnh hưởng đến cách hệ thống vận hành lại ảnh hưởng nhiều đến trải nghiệm người dùng Nhóm đề xuất ý tưởng tách riêng phần nhận diện bounding box phần phân loại quần áo, huấn luyện hai mơ hình để hồn thành hai cơng việc Điều đồng nghĩa với việc Pandora, YOLO có vai trị nhận diện bounding box, việc phân loại bounding box mơ hình khác đảm nhiệm Mơ hình mà nhóm nghĩ đến phù hợp với việc phân loại bounding box VGG-16 VGG-19 kiến trúc tiếng nhờ hiệu tốt việc phân loại hình ảnh Cụ thể, nhóm dự định sử dụng YOLO kết hợp với VGG sau: đưa hình ảnh vào cho YOLO nhận diện bounding box cắt bounding box để đưa vào VGG cho phân loại, bounding box với độ tự Báo cáo đồ án cuối kỳ Trang 65/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm tin vượt ngưỡng thresh hold resize kích thước hình ảnh đưa tồn hình vào VGG để phân loại VGG có nhãn UNKNOW nên khơng nhận diện loại quần áo phân loại hình ảnh UNKNOW tiến hành so sánh hình ảnh với tất hình ảnh sở liệu Tuy việc làm giảm đáng kể hiệu công cụ bù lại đảm bảo khả cho kết dù người dùng có đưa vào hình ảnh gì, đem lại trải nghiệm người dùng tốt Cũng phương pháp cải tiến này, nhóm dự định triển khai cài đặt lại VGG-16, không sử dụng kiến trúc sẵn có thư viện TorchVision Vì kiến trúc VGG-16 TorchVision huấn luyện mơ hình xong, xuất file mơ hình nặng (hơn 500MB), nên việc tự triển khai VGG-16 nhằm giảm dung lượng file mơ hình, đồng thời kiểm soát tốt tham số mơ hình để phù hợp với tốn Kiến trúc VGG-16 dễ dàng để tự triển khai, tài liệu tham khảo thư viện hỗ trợ xây dựng kiến trúc mạng học sâu PyTorch trở nên phổ biến Vấn đề cần phải giải việc thực lại phần trích xuất vector đặc trưng so sánh vector đặc trưng Ý tưởng sử dụng kiến trúc VGG-16 với layer cuối lược bỏ để thu vector 4096 chiều khiến cho khơng thể kiểm sốt liệu mơ hình có học để so sánh độ tương đồng hình hay khơng Vì cần phải thực lại phần kỹ thuật khác Nhóm dự định sử dụng kiến trúc Siamese (mạng song sinh) để thực so sánh độ tương đồng hình ảnh mà không thông qua vector đặc trưng Kiến trúc nhận đầu vào hình ảnh, vector, văn bản, sau cho kết độ tương đồng liệu đầu vào Siamese vốn sử dụng nhiều toán nhận diện gương mặt, ứng dụng cho công việc mở khóa khn mặt, chấm cơng, nhận diện tội phạm, Thật nhóm có ý định sử dụng Siamese từ đầu kiến trúc khó để triển khai, cộng thêm việc liệu dùng để huấn luyện Siamese yêu cầu phải có nhiều cặp hình ảnh tương đồng nên nhóm tạm gác lại ý tưởng Vậy nên để triển khai Siamese, nhóm cần thu thập hình ảnh quần áo tương đồng gán nhãn lại chúng, công đoạn tốn nhiều thời gian Một điều may mắn Deep Fashion có hỗ trợ liệu gồm hình ảnh tương đồng quần áo, nhóm cần sàng lọc gán nhãn lại Hình 44: Kiến trúc Siamese sử dụng toán nhận diện gương mặt Nếu sử dụng phương pháp này, ta loại bỏ phần so sánh vector đặc trưng dựa vào khoảng cách cosine Siamese đảm nhận ln việc so sánh cho Về việc giải vấn đề tối ưu hóa hiệu cho Pandora, nhóm đưa giải pháp sử dụng tính tốn đa luồng tính tốn phân tán, chia nhỏ liệu để tính toán so sánh độ tương đồng ảnh Phương pháp vốn phổ biến lập trình hệ thống, đặc biệt việc xây dựng API xử lý đa luồng Báo cáo đồ án cuối kỳ Trang 66/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm với request yêu cầu xử lý sở liệu lớn nhằm tối ưu hóa thời gian thực thi hệ thống Khơng dừng lại đó, kiến trúc streaming kết hợp với xử lý đa luồng hứa hẹn đem lại hiệu tốt cho Pandora Về kiến trúc streaming, nhóm tham khảo “Grokking Streaming Systems” Josh Fischer Ning Wang, sau đưa kiến trúc sau: Hình 45: Kiến trúc streaming kết hợp xử lý đa luồng Pandora Trong đó, block tiến hành song song với nhờ xử lý đa luồng Nếu trình cải thiện thành cơng, nhóm dự định mở rộng Pandora để ứng dụng lĩnh vực khác, tiêu biểu lĩnh vực chống đạo nhái thiết kế thời trang Hiện nay, việc công ty thời trang kiện cáo việc đạo nhái thiết kế khơng cịn xa lạ cộng đồng mạng Thế khơng vụ kiện cáo khơng đến hồi kết nguyên nhân nhà thiết kế đơi có chung ý tưởng cho thiết kế tương đồng Ngành thời trang ngành thiên sáng tạo, sáng tạo tuân theo nguyên tắc bản, dễ dẫn đến khả trùng ý tưởng không tham khảo kỹ thiết kế trước Nhưng cần dùng Pandora, nhà thiết kế chụp mẫu thiết kế gửi lên server để phân tích xử lý cho kết mẫu thiết kế tương tự, từ có chứng thuyết phục liệu ý tưởng có vơ tình trùng với ý tưởng nhà thiết kế khác khơng, từ tránh vụ kiện cáo đáng tiếc Ý tưởng xuất phát từ phần mềm chống đạo văn phổ biến trường đại học để phòng chống việc sinh viên gian lận, tham khảo không ghi nguồn không tôn trọng quyền tác giả Ngồi ra, việc ứng dụng kiến trúc streaming cịn mở cho nhóm hướng để phát triển cơng cụ tìm kiếm video, thứ mà chưa có ứng dụng thương mại điện tử làm Báo cáo đồ án cuối kỳ Trang 67/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm Kết luận Pandora chưa thật hoàn hảo đáp ứng kỳ vọng nhóm đặt mang lại cho nhóm nhiều học hướng Đặc biệt, việc phát triển Pandora đem lại cho chúng em nhiều kinh nghiệm làm việc với trí tuệ nhân tạo nói chúng học sâu nói riêng Chúng em tin kinh nghiệm vô quý giá giúp chúng em tiến bước đường nghiệp, đặc biệt thời đại mà trí tuệ nhân tạo sốt công nghệ hứa hẹn mở kỷ nguyên mới, máy móc hỗ trợ lồi người phụ tá đắc lực Mặc dù đồ án chúng em chưa đủ để gọi tạo bước tiến lĩnh vực trí tuệ nhân tạo, chúng em tin khởi đầu tốt để chúng em có động lực tìm hiểu sâu hơn, rộng lĩnh vực Báo cáo đồ án cuối kỳ Trang 68/69 Đại học Công nghệ thông tin, ĐHQGTPHCM Khoa Công nghệ phần mềm Tài liệu [1] Avadh Boriya, Sai Supraja Malla, Rikitha Manjunath, Vineela Velicheti, and Magdalini Eirinaki Viser: A visual search engine for e-retail In 2019 First International Conference on Transdisciplinary AI (TransAI), pages 76–83, 2019 [2] Josh Fischer and Ning Wang Grokking Streaming Systems Manning Publications, 2022 [3] Gregory Koch, Richard Zemel, and Ruslan Salakhutdinov Siamese neural networks for one-shot image recognition 2015 [4] Shuying Liu and Weihong Deng Very deep convolutional neural network based image classification using small training sample size In 2015 3rd IAPR Asian Conference on Pattern Recognition (ACPR), pages 730–734, 2015 [5] Joseph Redmon, Santosh Divvala, Ross Girshick, and Ali Farhadi You only look once: Unified, real-time object detection In 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pages 779–788, 2016 Báo cáo đồ án cuối kỳ Trang 69/69 ... – Đầu vào: Hình ảnh thẻ gán cho hình ảnh – Đầu ra: Các thẻ phù hợp để gán cho hình ảnh • Phân loại hình ảnh: Dự đoán loại lớp đối tượng hình ảnh – Đầu vào: Một hình ảnh với đối tượng – Đầu ra:... toán nhận quan tâm sâu sắc giới nghiên cứu khoa học Trong số kể đến như: • Gán thẻ hình ảnh: Là q trình thêm thẻ văn vào hình ảnh dựa có hình ảnh Mỗi hình ảnh gán nhiều thẻ – Đầu vào: Hình ảnh. .. liệu hình ảnh ngày gia tăng theo cấp số nhân, số cơng cụ tìm kiếm hình ảnh tích hợp trang web thương mại điện tử Giờ đây, người dùng gửi hình ảnh mặt hàng mà họ muốn tìm lên trang web, trang