Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 105 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
105
Dung lượng
5,76 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HCM ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU ỨNG DỤNG TRÍ TUỆ NHÂN TẠO TRONG THIẾT KẾ 3D TỪ HÌNH ẢNH 2D NGÀNH: KĨ THUẬT CƠ KHÍ GIẢNG VIÊN HƯỚNG DẪN: Th.S PHẠM BÁ KHIỂN Sinh viên thực hiện: MSSV : Lớp: NGUYỄN THÁI DUY 1711040208 17DCKA2 NGUYỄN QUỐC HUY 1711040179 17DCKA1 LƯU PHÁT HUY 17 11040324 17DCKA2 TP Hồ Chí Minh, tháng năm 2021 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HCM ĐỒ ÁN TỐT NGHIỆP NGHIÊN CỨU ỨNG DỤNG TRÍ TUỆ NHÂN TẠO TRONG THIẾT KẾ 3D TỪ HÌNH ẢNH 2D NGÀNH: KĨ THUẬT CƠ KHÍ GIẢNG VIÊN HƯỚNG DẪN: Th.S PHẠM BÁ KHIỂN Sinh viên thực hiện: MSSV : Lớp: NGUYỄN THÁI DUY 1711040208 17DCKA2 NGUYỄN QUỐC HUY 1711040179 17DCKA1 LƯU PHÁT HUY 17 11040324 17DCKA2 TP Hồ Chí Minh, tháng năm 2021 BM01/QT05/ĐT-KT VIỆN KỸ THUẬT HUTECH PHIẾU ĐĂNG KÝ ĐỀ TÀI ĐỒ ÁN/KHÓA LUẬN TỐT NGHIỆP Hệ: ………………………… (CQ, LT, B2, VLVH) Họ tên sinh viên/ nhóm sinh viên đăng ký đề tài (sĩ số nhóm 3): Nguyễn Thái Duy MSSV:1711040208 Lớp: 17DCKA2 Điện thoại :0797600611 Email: duynguyen.theone96@gmail.com Nguyễn Quốc Huy MSSV: 1711040179 Lớp: 17DCKA2 Điện thoại: 0379254241 Email: huy081099@gmail.com Lưu Phát Huy MSSV: 1711040324 Lớp: 17DCKA2 Điện thoại: 0327406838 Email: Luuphathuy1999@gmail.com Ngành : Cơ khí Chuyên ngành: Cơ khí Tên đề tài đăng ký: Nghiên cứu, ứng dụng trí tuệ nhân tạo thiết kế 3D từ hình ảnh 2D Sinh viên hiểu rõ yêu cầu đề tài cam kết thực đề tài theo tiến độ hoàn thành thời hạn TP HCM, ngày 20 tháng5 năm 2021 Sinh viên đăng ký (Ký ghi rõ họ tên) MÃ ĐỀ TÀI: 24 Viện Kỹ thuật Hutech PHIẾU GIAO NHIỆM VỤ THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP (Mỗi sinh viên phiếu, GVHD ghi rõ tên đề tài nhiệm vụ sinh viên GVHD chuyển cho SV để nộp VP Viện.) Sinh viên thực đề tài Họ tên: Lưu Phát Huy MSSV: 1711040324 Lớp: 17DCKA2 Điện thoại: 0327406838 Email: Luuphathuy1999@gmail.com Ngành: Kỹ thuật khí Tên đề tài: Nghiên cứu, ứng dụng trí tuệ nhân tạo thiết kế 3D từ hình ảnh 2D Nhiệm vụ thực đề tài: - Nghiên cứu ứng dụng xử lý ảnh - Ứng dụng kỹ thuật xử lý ảnh vào chuyển đổi mơ hình ảnh - Phụ trách hồn chỉnh code chương trình ứng dụng TP HCM, ngày 20 tháng năm 2021 Sinh viên thực (Ký ghi rõ họ tên) LƯU PHÁT HUY Giảng viên hướng dẫn Ký ghi rõ họ tên MÃ ĐỀ TÀI: 24 Viện Kỹ thuật Hutech PHIẾU GIAO NHIỆM VỤ THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP (Mỗi sinh viên phiếu, GVHD ghi rõ tên đề tài nhiệm vụ sinh viên GVHD chuyển cho SV để nộp VP Viện.) Sinh viên thực đề tài Họ tên: Nguyễn Quốc Huy Điện thoại: 0379254241 Ngành: MSSV: 1711040179 Lớp: 17DCKA1 Email: huy081099@gmail.com Kỹ thuật khí Tên đề tài: Nghiên cứu, ứng dụng trí tuệ nhân tạo thiết kế 3D từ hình ảnh 2D Nhiệm vụ thực đề tài: - Thuật toán Linear Regression, Gradient Descent - Xử lý ảnh - Các vấn đề liên quan đến thuật toán học, câu hỏi vấn Xử lý ứng dụng yêu cầu kỹ thuật thuật tốn chuyển đổi hình sang hình ảnh 3D Sinh viên thực (Ký ghi rõ họ tên) NGUYỄN QUỐC HUY TP HCM, ngày 20 tháng năm 2021 Giảng viên hướng dẫn Ký ghi rõ họ tên MÃ ĐỀ TÀI: 24 Viện Kỹ thuật Hutech PHIẾU GIAO NHIỆM VỤ THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP (Mỗi sinh viên phiếu, GVHD ghi rõ tên đề tài nhiệm vụ sinh viên GVHD chuyển cho SV để nộp VP Viện.) Sinh viên thực đề tài Họ tên : Nguyễn Thái Duy Điện thoại Ngành MSSV: 1711040208 Lớp: 17DCKA2 :0797600611 Email: Duynguyen.theone96@gmail.com : Kỹ thuật khí Tên đề tài: Nghiên cứu, ứng dụng trí tuệ nhân tạo thiết kế 3D từ hình ảnh 2D Nhiệm vụ thực đề tài: Tìm hiểu tốn bản, giải tích nhiều biến, đại số tuyến tính, tốn logic - Làm việc với ma trận python - Thuật toán KNN, Kmeans - Trình thuyết minh trình nghiên cứu TP HCM, ngày 20 tháng năm 2021 Sinh viên thực (Ký ghi rõ họ tên) NGUYỄN THÁI DUY Giảng viên hướng dẫn Ký ghi rõ họ tên LỜI CAM ĐOAN Chúng em xin cam đoan báo cáo nghiên cứu cá nhân chúng em, thực hướng dẫn Thầy Phạm Bá Khiển Các số liệu, kết luận nghiên cứu trình bày báo cáo hồn tồn trung thực Ngồi ra, báo cáo có sử dụng số nguồn tài liệu tham khảo trích dẫn nguồn thích rõ ràng Chúng em xin hoàn toàn chịu trách nhiệm lời cam đoan TP.HCM, ngày tháng năm 2021 Sinh viên thực NGUYỄN THÁI DUY NGUYỄN QUÓC HUY LƯU PHÁT HUY LỜI CẢM ƠN Chúng em xin gửi lời cảm ơn sâu sắc tới quý thầy cô, anh chị bạn bè hướng dẫn, giúp đỡ, góp ý cho chúng em từ bước đầu chọn đề tài làm khóa luận tới thực đề tài Trước hết chúng em xin chân thành cảm ơn thầy – Phạm Bá Khiển, người hướng dẫn chúng em thực khóa luận Thầy ln quan tâm, giúp đỡ tạo điều kiện tốt để em hoàn thành cách trọn vẹn Chúng em xin chúc sức khoẻ thầy gia đình, chúc thầy gặt hái thành cơng cơng việc có nhiều niềm vui sống Chúng em xin gửi lời cảm ơn tới quý thầy cô Khoa Công nghệ Thơng Tin ln tận tình giảng dạy, giúp chúng em có kiến thức từ nhờ chúng em phát triển hồn thành khóa luận Sau cùng, chúng em xin cảm ơn anh chị, bạn bè, người thân quen bên cạnh giúp đỡ, hỗ trợ, để chúng em tiếp cận với đề tài cách trực quan học hỏi nhiều kiến thức bổ ích Tuy nhiên, với điều kiện kinh nghiệm, kiến thức hạn hẹp thời gian hạn chế, q trình làm khóa luận khơng thể tránh khỏi thiếu xót chúng em mong nhận đánh giá, góp ý q thầy giúp em hồn thiện làm cách tốt nâng cao kiến thức, phục vụ cho công việc sau này, Chúng em xin chân thành cảm ơn! MỤC LỤC LỜI MỞ ĐẦU CHƯƠNG 1: GIỚI THIỆU - 1.1 Mục tiêu đề tài - 1.2 Lý chọn đề tài - CHƯƠNG 2: TỔNG QUAN ĐỀ TÀI 2.1 Tổng quan đề tài 2.2 Tình hình nước - 2.3 Tình hình giới 2.4 Phương pháp nghiên cứu 10 CHƯƠNG 3: 3.1 PHƯƠNG PHÁP GIẢI QUYẾT - 11 AI - 11 3.1.1 Công nghệ AI chia làm loại chính: - 12 3.1.2 AI ứng dụng sống tương lai - 15 3.2 Machine Learning 17 3.3 Deep Learning - 19 3.3.1 Những tiềm đặc biệt Deep Learning 20 3.3.2 Cách thức hoạt động Deep Learning - 22 3.3.3 Các ưu điểm bật Deep Learning - 24 3.3.4 Deep Learning ứng dụng - 25 3.3.5 Một vài ứng dụng thực tế - 27 3.4 Multimedia Deep Learning 30 3.1 Computer Vision - 34 3.2 PyTorch - 35 3.3 OpenCV - 38 3.4 Scikit-image 41 3.5 Convolutional Neural Network 42 3.9.1 Khái niệm 42 3.9.2 Convolutional - 42 3.9.3 Cấu trúc mạng CNN - 44 CHƯƠNG 4: 4.1 QUY TRÌNH THIẾT KẾ 46 Phân tích phương pháp - 46 4.1.1 Dạng gắn chặt (Voxel network) - 47 4.1.2 Dạng hình học 48 4.2 Tiếp cận - 49 4.2.1 Máy tạo cấu trúc 2D - 49 4.2.2 Point Cloud Fusion dung hợp - 50 4.2.3 Pseudo-Renderer - 51 4.2.4 Đào tạo động - 52 4.3 Kết 52 4.4 Phương pháp PifuHD - 53 4.4.1 Giới thiệu 54 4.4.2 Quy trình thực 55 4.4.3 Phương pháp 56 4.4.4 Kết nghiên cứu 62 CHƯƠNG 5: 5.1 THI CÔNG - 64 Chuẩn bị môi trường 64 Hình 5-14 Import thư viện cần thiết Ngồi ra, cần import thêm file thư mục lib để hỗ trợ xử lý liệu Hình 5-15 Import file khác 5.4.2 Các hàm đoạn code xử lý ảnh Chương trình có phần chính: hàm main hàm Hình 5-16 Các hàm 76 Các hàm ta có sau: - Hàm main: gọi phương thức hàm file chạy Hình 5-17 Code hàm main hàm reconWrapper - Hàm reconWrapper(): Hàm chứa hàm recon (hàm lồng nhau), gọi đến hàm recon() hàm main gọi - Hàm recon(): hàm xử lý chương trình Hình 5-18 Code hàm recon 77 - Trong hàm recon, khối lệnh dùng để test gọi đến hàm gen_mesh để xử lý hình ảnh nhiều cơng đoạn phức tạp Hình 5-19 Khối lệnh test - Hàm gen_mesh(): Xử lý tham số từ hàm recon truyền qua cho hàm xử lý 78 Hình 5-20 Hàm gen_mesh Tuy nhiên, file recon chưa phải nơi để xử lý tồn q trình render hình 3D Nó gọi đến file nằm thư mục lib, nơi chứa cá file thực chức độc lập Việc chia chương trình thành nhiều file nhầm dễ quản lý code dễ bảo trì muốn sửa đổi code dễ dàng hiểu chức chúng thông qua tên thư mục tên file 79 Hình 5-21 Thư mục lib chứa file code để thực thi chức khác 80 CHƯƠNG 6: ĐÁNH GIÁ KẾT QUẢ, KẾT UẬN 6.1 Tổng quan mục tiêu đánh giá Qua thời gian nghiên cứu thực đề tài tụi em thực mơ hình 3D tương đối sắc nét, tái lại khớp xương, nếp nhăn quần áo, khuôn mặt gần giống với ảnh mẫu Tuy nhiên, độ xác cơng trình nghiên cứu chưa cao nên mơ hình 3D cịn đơn sơ chưa chi tiết Để có ảnh 3D siêu thực hay có độ xác tối đa, cần cải tiến thêm nhiều thuật toán công nghệ sử dụng Đề tài với mục tiêu kết xuất ảnh 3D từ ảnh 2D đầu vào dùng công nghệ Deep Learning, cụ thể lĩnh vực Multimedia Deep Learning Từ ảnh 2D có độ phân giải vừa đủ cho ảnh 3D tái trực quan Mặc dù phương pháp Multimedia Deep Learning gần đạt số kết đáng ý, lĩnh vực deep learning cịn nhiều khó khăn, đặc biệt khó khăn việc phải tìm kiếm, thu thập, lưu trữ, xử lý, quản lý lượng liệu khổng lồ đa dạng thật hiệu Do thách thức khó khăn này, lĩnh vực trở thành đề tài nghiên cứu đòi hỏi cao thu hút ý đáng kể chất lượng giá trị mà đề tài mang lại 6.2 Kết đạt Sau làm đồ án, em tích lũy nhiều kiến thức tư nghiên cứu tư logic Có hội tiếp xúc tìm hiểu cơng nghệ AI Machine Learning Đó vừa lợi vừa thử thách hữu ích cho chúng em sau Thêm vào đó, chúng em lượng kiến thức lập trình nói chung Python nói riêng hữu ích đa ngơn ngữ mang lại Cịn đồ án, kết đạt ảnh 3D tương đối gần với thực tế từ ảnh 2D đầu vào, ảnh 3D tái đươc chi tiết người khớp xương, nếp gấp quần áo, chi tiết khn mặt, 81 Hình 6-1 mơ hình 3D hồn thiện 6.3 Khó khăn trở ngại Bên cạnh đó, thời gian có hạn, đặc biệt dề tài thử thách sinh viên chưa biết lĩnh vực công nghệ thông tin chúng em, chúng em chưa hoàn thành đồ án cách tối đa Việc tự tìm hiểu nghiên cứu giúp chúng em đúc kết nhiều kinh nghiệm cho thân để làm việc cố gắng hồn thiện đề tài Ngồi ra, cịn vài khó khăn ngành công nghệ AI tại, lĩnh vực Multimedia Deep Learning nên ảnh 3D đạt cịn nhiều hạn chế độ phân giải, tính xác so với thực tế chưa tái ảnh 3D hồn thiện 6.4 Hướng phát triển Vì lý thời gian hạn chế nên đề tài đạt hình ảnh 3D người mức độ bản, chưa xử lý hình ảnh vật Trong thời gian tới, chúng em cố gắng 82 hoàn thành đề tài mức tối đa từ hiểu nhiều cách ứng dụng AI vào ngành Hướng phát triển đề tài: Hoàn thiện mức độ xử lý ảnh cao để nâng độ xác kết lên Bên cạnh phát triển thêm ảnh vật thể khác, cụ thể bàn ghế, vật Hình 6-2 Mơ hình 3D với độ phân giải cao (nguồn internet) 83 TÀI LIỆU THAM KHẢO [1] PIFuHD: Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitization (CVPR 2020); https://shunsukesaito.github.io/PIFuHD [2] Create 3D model from a single 2D image in PyTorch – Phuc Le; https://medium.com/vitalify-asia/create-3d-model-from-a-single-2d-imagein-pytorch-917aca00bb07 [3] Paper PifuHD: https://arxiv.org/pdf/2004.00452.pdf [4] Deep Learning With Pytorch, https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html [5] OpenCV, https://learnopencv.com/ [6] Python Learning, https://www.learnpython.org/ [7] Convolutional Neural Network, https://towardsdatascience.com/acomprehensive-guide-to-convolutional-neural-networks-the-eli5-way3bd2b1164a53 [8] Machine Learning, https://machinelearningcoban.com/2016/12/26/introduce/ [9] Computer Vision https://viblo.asia/p/thi-giac-may-tinh-la-gi-cac-van-de-lien-quan-toi-thi-giacmay-tinh-Az45b4M6ZxY [10] Scikit-image; http://gialaipc.com.vn/python-scikit-image-xu-ly-hinh-anhbang-scikit-image/ [11] Scikit-image; https://en.wikipedia.org/wiki/Scikit-image 84 PHỤ LỤC CODE LẬP TRÌNH PYTHON CỦA DỰ ÁN PIFUHD File simple_test.py from recon import reconWrapper import argparse ############################################################## Setting ############################################################## parser = argparse.ArgumentParser() parser.add_argument('-i', ' input_path', type=str, default='./sample_images')#Ảnh đầu vào parser.add_argument('-o', ' out_path', type=str, default='./results')#Ảnh đầu parser.add_argument('-c', '-ckpt_path', type=str, default='./checkpoints/pifuhd.pt')#Model train sẵn parser.add_argument('-r', ' resolution', type=int, default=512)#Độ phân giải parser.add_argument(' use_rect', action='store_true', help='use rectangle for cropping') args = parser.parse_args() ################################################################################ ############### ## Upper PIFu ################################################################################ ############### resolution = str(args.resolution) start_id = -1 end_id = -1 cmd = [' dataroot', args.input_path, ' results_path', args.out_path,\ ' loadSize', '1024', ' resolution', resolution, ' load_netMR_checkpoint_path', \ args.ckpt_path,\ ' start_id', '%d' % start_id, ' end_id', '%d' % end_id] reconWrapper(cmd, args.use_rect) File recon.py import sys import os sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname( file ), ' '))) ROOT_PATH = os.path.dirname(os.path.dirname(os.path.abspath( file ))) 85 import time import json import numpy as np import cv2 import random import torch import torch.nn as nn from tqdm import tqdm from torch.utils.data import DataLoader import matplotlib.pyplot as plt import matplotlib.cm as cm import matplotlib from numpy.linalg import inv from lib.options import BaseOptions from lib.mesh_util import save_obj_mesh_with_color, reconstruction from lib.data import EvalWPoseDataset, EvalDataset from lib.model import HGPIFuNetwNML, HGPIFuMRNet from lib.geometry import index from PIL import Image parser = BaseOptions() def gen_mesh(res, net, cuda, data, save_path, thresh=0.5, use_octree=True, components=False): image_tensor_global = data['img_512'].to(device=cuda) image_tensor = data['img'].to(device=cuda) calib_tensor = data['calib'].to(device=cuda) net.filter_global(image_tensor_global) net.filter_local(image_tensor[:,None]) try: if net.netG.netF is not None: image_tensor_global = torch.cat([image_tensor_global, net.netG.nmlF], 0) if net.netG.netB is not None: image_tensor_global = torch.cat([image_tensor_global, net.netG.nmlB], 0) except: pass b_min = data['b_min'] b_max = data['b_max'] try: save_img_path = save_path[:-4] + '.png' save_img_list = [] 86 for v in range(image_tensor_global.shape[0]): save_img = (np.transpose(image_tensor_global[v].detach().cpu().numpy(), (1, 2, 0)) * 0.5 + 0.5)[:, :, ::-1] * 255.0 save_img_list.append(save_img) save_img = np.concatenate(save_img_list, axis=1) cv2.imwrite(save_img_path, save_img) verts, faces, _, _ = reconstruction( net, cuda, calib_tensor, res, b_min, b_max, thresh, use_octree=use_octree, num_samples=5 0000) verts_tensor = torch.from_numpy(verts.T).unsqueeze(0).to(device=cuda).float() # if 'calib_world' in data: # calib_world = data['calib_world'].numpy()[0] # verts = np.matmul(np.concatenate([verts, np.ones_like(verts[:,:1])],1), inv(calib_world).T)[ :,:3] color = np.zeros(verts.shape) interval = 50000 for i in range(len(color) // interval + 1): left = i * interval if i == len(color) // interval: right = -1 else: right = (i + 1) * interval net.calc_normal(verts_tensor[:, None, :, left:right], calib_tensor[:,None], calib_tensor) nml = net.nmls.detach().cpu().numpy()[0] * 0.5 + 0.5 color[left:right] = nml.T save_obj_mesh_with_color(save_path, verts, faces, color) except Exception as e: print(e) def gen_mesh_imgColor(res, net, cuda, data, save_path, thresh=0.5, use_octree=True, component s=False): image_tensor_global = data['img_512'].to(device=cuda) image_tensor = data['img'].to(device=cuda) calib_tensor = data['calib'].to(device=cuda) net.filter_global(image_tensor_global) net.filter_local(image_tensor[:,None]) try: if net.netG.netF is not None: image_tensor_global = torch.cat([image_tensor_global, net.netG.nmlF], 0) if net.netG.netB is not None: 87 image_tensor_global = torch.cat([image_tensor_global, net.netG.nmlB], 0) except: pass b_min = data['b_min'] b_max = data['b_max'] try: save_img_path = save_path[:-4] + '.png' save_img_list = [] for v in range(image_tensor_global.shape[0]): save_img = (np.transpose(image_tensor_global[v].detach().cpu().numpy(), (1, 2, 0)) * 0.5 + 0.5)[:, :, ::-1] * 255.0 save_img_list.append(save_img) save_img = np.concatenate(save_img_list, axis=1) cv2.imwrite(save_img_path, save_img) verts, faces, _, _ = reconstruction( net, cuda, calib_tensor, res, b_min, b_max, thresh, use_octree=use_octree, num_samples=1 00000) verts_tensor = torch.from_numpy(verts.T).unsqueeze(0).to(device=cuda).float() # if this returns error, projection must be defined somewhere else xyz_tensor = net.projection(verts_tensor, calib_tensor[:1]) uv = xyz_tensor[:, :2, :] color = index(image_tensor[:1], uv).detach().cpu().numpy()[0].T color = color * 0.5 + 0.5 if 'calib_world' in data: calib_world = data['calib_world'].numpy()[0] verts = np.matmul(np.concatenate([verts, np.ones_like(verts[:,:1])],1), inv(calib_world).T)[:,: 3] save_obj_mesh_with_color(save_path, verts, faces, color) except Exception as e: print(e) def recon(opt, use_rect=False): # load checkpoints state_dict_path = None if opt.load_netMR_checkpoint_path is not None: state_dict_path = opt.load_netMR_checkpoint_path elif opt.resume_epoch < 0: state_dict_path = '%s/%s_train_latest' % (opt.checkpoints_path, opt.name) opt.resume_epoch = 88 else: state_dict_path = '%s/%s_train_epoch_%d' % (opt.checkpoints_path, opt.name, opt.resume_ epoch) start_id = opt.start_id end_id = opt.end_id cuda = torch.device('cuda:%d' % opt.gpu_id if torch.cuda.is_available() else 'cpu') state_dict = None if state_dict_path is not None and os.path.exists(state_dict_path): print('Resuming from ', state_dict_path) state_dict = torch.load(state_dict_path, map_location=cuda) print('Warning: opt is overwritten.') dataroot = opt.dataroot resolution = opt.resolution results_path = opt.results_path loadSize = opt.loadSize opt = state_dict['opt'] opt.dataroot = dataroot opt.resolution = resolution opt.results_path = results_path opt.loadSize = loadSize else: raise Exception('failed loading state dict!', state_dict_path) # parser.print_options(opt) if use_rect: test_dataset = EvalDataset(opt) else: test_dataset = EvalWPoseDataset(opt) print('test data size: ', len(test_dataset)) projection_mode = test_dataset.projection_mode opt_netG = state_dict['opt_netG'] netG = HGPIFuNetwNML(opt_netG, projection_mode).to(device=cuda) netMR = HGPIFuMRNet(opt, netG, projection_mode).to(device=cuda) def set_eval(): netG.eval() # load checkpoints netMR.load_state_dict(state_dict['model_state_dict']) 89 os.makedirs(opt.checkpoints_path, exist_ok=True) os.makedirs(opt.results_path, exist_ok=True) os.makedirs('%s/%s/recon' % (opt.results_path, opt.name), exist_ok=True) if start_id < 0: start_id = if end_id < 0: end_id = len(test_dataset) ## test with torch.no_grad(): set_eval() print('generate mesh (test) ') for i in tqdm(range(start_id, end_id)): if i >= len(test_dataset): break # for multi-person processing, set it to False if True: test_data = test_dataset[i] save_path = '%s/%s/recon/result_%s_%d.obj' % (opt.results_path, opt.name, test_data['n ame'], opt.resolution) print(save_path) gen_mesh(opt.resolution, netMR, cuda, test_data, save_path, components=opt.use_com pose) else: for j in range(test_dataset.get_n_person(i)): test_dataset.person_id = j test_data = test_dataset[i] save_path = '%s/%s/recon/result_%s_%d.obj' % (opt.results_path, opt.name, test_data ['name'], j) gen_mesh(opt.resolution, netMR, cuda, test_data, save_path, components=opt.use_co mpose) def reconWrapper(args=None, use_rect=False): opt = parser.parse(args) recon(opt, use_rect) if name == ' main ': reconWrapper() 90