def __init__(self, model_path, with_cuda, yolact_config, fast_nms, threshold, display_cv, top_k): self.top_k = top_k self.threshold = threshold self.display_cv = display_cv print("loading Yolact ...") with torch.no_grad(): set_cfg(yolact_config) print("Configuration: ", yolact_config) if with_cuda: cudnn.benchmark = True cudnn.fastest = True torch.set_default_tensor_type('torch.cuda.FloatTensor') else: torch.set_default_tensor_type('torch.FloatTensor') print("use cuda: ", with_cuda) self.net = Yolact() self.net.load_weights(model_path) print("Model: ", model_path) self.net.eval() if with_cuda: self.net = self.net.cuda() self.net.detect.use_fast_nms = fast_nms print("use fast nms: ", fast_nms) print("Yolact loaded")
def main(): parse_args() rospy.init_node('yolact_ros', anonymous=True) if args.config is not None: set_cfg(args.config) if args.config is None: model_path = SavePath.from_str(args.trained_model) # TODO: Bad practice? Probably want to do a name lookup instead. args.config = model_path.model_name + '_config' print('Config not specified. Parsed %s from the file name.\n' % args.config) set_cfg(args.config) if args.detect: cfg.eval_mask_branch = False if args.dataset is not None: set_dataset(args.dataset) with torch.no_grad(): if not os.path.exists('results'): os.makedirs('results') if args.cuda: cudnn.benchmark = True cudnn.fastest = True torch.set_default_tensor_type('torch.cuda.FloatTensor') else: torch.set_default_tensor_type('torch.FloatTensor') if args.resume and not args.display: with open(args.ap_data_file, 'rb') as f: ap_data = pickle.load(f) calc_map(ap_data) exit() print('Loading model...', end='') net = Yolact() net.load_weights(args.trained_model) net.eval() print(' Done.') if args.cuda: net = net.cuda() net.detect.use_fast_nms = True cfg.mask_proto_debug = False detect_ = DetectImg(net) try: rospy.spin() except KeyboardInterrupt: print("Shutting down") cv2.destroyAllWindows()
#pub = rospy.Publisher('chatter',String,queue_size=10) #rate = rospy.Rate(50) #10hz #str_ += text_str #rospy.loginfo(str_) #pub.publish(str_) #rate.sleep() return img_numpy if __name__ == '__main__': parse_args() if args.config is not None: set_cfg(args.config) if args.trained_model == 'interrupt': args.trained_model = SavePath.get_interrupt('weights/') elif args.trained_model == 'latest': args.trained_model = SavePath.get_latest('weights/', cfg.name) if args.config is None: model_path = SavePath.from_str(args.trained_model) # TODO: Bad practice? Probably want to do a name lookup instead. args.config = model_path.model_name + '_config' print('Config not specified. Parsed %s from the file name.\n' % args.config) set_cfg(args.config) if args.detect:
else: pred_outs['conf'] = F.softmax(pred_outs['conf'], -1) return self.detect(pred_outs, self) # Some testing code if __name__ == '__main__': from yolact.utils.functions import init_console init_console() # Use the first argument to set the config if you want import sys if len(sys.argv) > 1: from yolact.data.config import set_cfg set_cfg(sys.argv[1]) net = Yolact() net.train() net.init_weights(backbone_path='weights/' + cfg.backbone.path) # GPU net = net.cuda() torch.set_default_tensor_type('torch.cuda.FloatTensor') x = torch.zeros((1, 3, cfg.max_size, cfg.max_size)) y = net(x) for p in net.prediction_layers: print(p.last_conv_size)