CLRNet
CLRNet copied to clipboard
tools/detect.py 不能检测出车道线
已经解决
请问,你是怎么修改的detect.py的
可以看一下这个https://github.com/Turoad/CLRNet/issues/14#issuecomment-1123251260
where is the tools/detect.py? I can only see generate_seg_tusimple.py
where is the tools/detect.py? I can only see generate_seg_tusimple.py
detect.py is in the https://github.com/Turoad/lanedet/tree/main/tools
您好,我已收到您的邮件,我将尽快查阅并给予回复,谢谢!(孟夏的自动回复)
你好,我在运行detect.py时遇到了如下报错:TypeError: get lanes() takes 1 positional argument but 2 were given
请问改如何解决呢?
我的运行命令为:python tools/detect.py configs/clrnet/clr_resnet34_culane.py --img 01.jpg --load_from resa_r34_culane.pth --savedir ./output
以下是detect.py代码: import numpy as np import torch import cv2 import os import os.path as osp import glob import argparse from clrnet.datasets.process import Process from clrnet.models.registry import build_net from clrnet.utils.config import Config from clrnet.utils.visualization import imshow_lanes from clrnet.utils.net_utils import load_network from pathlib import Path from tqdm import tqdm
class Detect(object): def init(self, cfg): self.cfg = cfg self.processes = Process(cfg.val_process, cfg) self.net = build_net(self.cfg) self.net = torch.nn.parallel.DataParallel( self.net, device_ids = range(1)).cuda() self.net.eval() load_network(self.net, self.cfg.load_from)
def preprocess(self, img_path):
ori_img = cv2.imread(img_path)
img = ori_img[self.cfg.cut_height:, :, :].astype(np.float32)
data = {'img': img, 'lanes': []}
data = self.processes(data)
data['img'] = data['img'].unsqueeze(0)
data.update({'img_path':img_path, 'ori_img':ori_img})
return data
def inference(self, data):
with torch.no_grad():
data = self.net(data)
data = self.net.module.get_lanes(data)
return data
def show(self, data):
out_file = self.cfg.savedir
if out_file:
out_file = osp.join(out_file, osp.basename(data['img_path']))
lanes = [lane.to_array(self.cfg) for lane in data['lanes']]
imshow_lanes(data['ori_img'], lanes, show=self.cfg.show, out_file=out_file)
def run(self, data):
data = self.preprocess(data)
data['lanes'] = self.inference(data)[0]
if self.cfg.show or self.cfg.savedir:
self.show(data)
return data
def get_img_paths(path): p = str(Path(path).absolute()) # os-agnostic absolute path if '' in p: paths = sorted(glob.glob(p, recursive=True)) # glob elif os.path.isdir(p): paths = sorted(glob.glob(os.path.join(p, '.*'))) # dir elif os.path.isfile(p): paths = [p] # files else: raise Exception(f'ERROR: {p} does not exist') return paths
def process(args): cfg = Config.fromfile(args.config) cfg.show = args.show cfg.savedir = args.savedir cfg.load_from = args.load_from detect = Detect(cfg) paths = get_img_paths(args.img) for p in tqdm(paths): detect.run(p)
if name == 'main': parser = argparse.ArgumentParser() parser.add_argument('config', help='The path of config file') parser.add_argument('--img', help='The path of the img (img file or img_folder), for example: data/*.png') parser.add_argument('--show', action='store_true', help='Whether to show the image') parser.add_argument('--savedir', type=str, default=None, help='The root of save directory') parser.add_argument('--load_from', type=str, default='best.pth', help='The path of model') args = parser.parse_args() process(args)
您好,我已收到您的邮件,我将尽快查阅并给予回复,谢谢!(孟夏的自动回复)
你好,我在运行detect.py时遇到了如下报错:TypeError: get lanes() takes 1 positional argument but 2 were given
请问改如何解决呢?
我的运行命令为:python tools/detect.py configs/clrnet/clr_resnet34_culane.py --img 01.jpg --load_from resa_r34_culane.pth --savedir ./output
以下是detect.py代码: import numpy as np import torch import cv2 import os import os.path as osp import glob import argparse from clrnet.datasets.process import Process from clrnet.models.registry import build_net from clrnet.utils.config import Config from clrnet.utils.visualization import imshow_lanes from clrnet.utils.net_utils import load_network from pathlib import Path from tqdm import tqdm
class Detect(object): def init(self, cfg): self.cfg = cfg self.processes = Process(cfg.val_process, cfg) self.net = build_net(self.cfg) self.net = torch.nn.parallel.DataParallel( self.net, device_ids = range(1)).cuda() self.net.eval() load_network(self.net, self.cfg.load_from)
def preprocess(self, img_path): ori_img = cv2.imread(img_path) img = ori_img[self.cfg.cut_height:, :, :].astype(np.float32) data = {'img': img, 'lanes': []} data = self.processes(data) data['img'] = data['img'].unsqueeze(0) data.update({'img_path':img_path, 'ori_img':ori_img}) return data def inference(self, data): with torch.no_grad(): data = self.net(data) data = self.net.module.get_lanes(data) return data def show(self, data): out_file = self.cfg.savedir if out_file: out_file = osp.join(out_file, osp.basename(data['img_path'])) lanes = [lane.to_array(self.cfg) for lane in data['lanes']] imshow_lanes(data['ori_img'], lanes, show=self.cfg.show, out_file=out_file) def run(self, data): data = self.preprocess(data) data['lanes'] = self.inference(data)[0] if self.cfg.show or self.cfg.savedir: self.show(data) return data
def get_img_paths(path): p = str(Path(path).absolute()) # os-agnostic absolute path if '' in p: paths = sorted(glob.glob(p, recursive=True)) # glob elif os.path.isdir(p): paths = sorted(glob.glob(os.path.join(p, '.*'))) # dir elif os.path.isfile(p): paths = [p] # files else: raise Exception(f'ERROR: {p} does not exist') return paths
def process(args): cfg = Config.fromfile(args.config) cfg.show = args.show cfg.savedir = args.savedir cfg.load_from = args.load_from detect = Detect(cfg) paths = get_img_paths(args.img) for p in tqdm(paths): detect.run(p)
if name == 'main': parser = argparse.ArgumentParser() parser.add_argument('config', help='The path of config file') parser.add_argument('--img', help='The path of the img (img file or img_folder), for example: data/*.png') parser.add_argument('--show', action='store_true', help='Whether to show the image') parser.add_argument('--savedir', type=str, default=None, help='The root of save directory') parser.add_argument('--load_from', type=str, default='best.pth', help='The path of model') args = parser.parse_args() process(args)
我没有出现这个问题,不知道怎么回事。
你好,我在运行detect.py时遇到了如下报错:TypeError: get lanes() takes 1 positional argument but 2 were given 请问改如何解决呢? 我的运行命令为:python tools/detect.py configs/clrnet/clr_resnet34_culane.py --img 01.jpg --load_from resa_r34_culane.pth --savedir ./output 以下是detect.py代码: import numpy as np import torch import cv2 import os import os.path as osp import glob import argparse from clrnet.datasets.process import Process from clrnet.models.registry import build_net from clrnet.utils.config import Config from clrnet.utils.visualization import imshow_lanes from clrnet.utils.net_utils import load_network from pathlib import Path from tqdm import tqdm class Detect(object): def init(self, cfg): self.cfg = cfg self.processes = Process(cfg.val_process, cfg) self.net = build_net(self.cfg) self.net = torch.nn.parallel.DataParallel( self.net, device_ids = range(1)).cuda() self.net.eval() load_network(self.net, self.cfg.load_from)
def preprocess(self, img_path): ori_img = cv2.imread(img_path) img = ori_img[self.cfg.cut_height:, :, :].astype(np.float32) data = {'img': img, 'lanes': []} data = self.processes(data) data['img'] = data['img'].unsqueeze(0) data.update({'img_path':img_path, 'ori_img':ori_img}) return data def inference(self, data): with torch.no_grad(): data = self.net(data) data = self.net.module.get_lanes(data) return data def show(self, data): out_file = self.cfg.savedir if out_file: out_file = osp.join(out_file, osp.basename(data['img_path'])) lanes = [lane.to_array(self.cfg) for lane in data['lanes']] imshow_lanes(data['ori_img'], lanes, show=self.cfg.show, out_file=out_file) def run(self, data): data = self.preprocess(data) data['lanes'] = self.inference(data)[0] if self.cfg.show or self.cfg.savedir: self.show(data) return data
def get_img_paths(path): p = str(Path(path).absolute()) # os-agnostic absolute path if '' in p: paths = sorted(glob.glob(p, recursive=True)) # glob elif os.path.isdir(p): paths = sorted(glob.glob(os.path.join(p, '.'))) # dir elif os.path.isfile(p): paths = [p] # files else: raise Exception(f'ERROR: {p} does not exist') return paths def process(args): cfg = Config.fromfile(args.config) cfg.show = args.show cfg.savedir = args.savedir cfg.load_from = args.load_from detect = Detect(cfg) paths = get_img_paths(args.img) for p in tqdm(paths): detect.run(p) if name == 'main': parser = argparse.ArgumentParser() parser.add_argument('config', help='The path of config file') parser.add_argument('--img', help='The path of the img (img file or img_folder), for example: data/.png') parser.add_argument('--show', action='store_true', help='Whether to show the image') parser.add_argument('--savedir', type=str, default=None, help='The root of save directory') parser.add_argument('--load_from', type=str, default='best.pth', help='The path of model') args = parser.parse_args() process(args)
我没有出现这个问题,不知道怎么回事。
好像是配置文件和权重文件不一致好像,你可以看一下
Excuse me, is the detect.py configuration out, can you send me a copy, there is a strange problem with the debugging of my code, if you get it out, is it convenient to make a reference? 请问 detect.py配置出来了吗,可以发我一份吗,我这边代码调试出了点奇怪的问题,如果您搞出来了,方便做个参考吗?
Excuse me, is the detect.py configuration out, can you send me a copy, there is a strange problem with the debugging of my code, if you get it out, is it convenient to make a reference? 请问 detect.py配置出来了吗,可以发我一份吗,我这边代码调试出了点奇怪的问题,如果您搞出来了,方便做个参考吗?
你好,我是参考此链接对detect.py做出修改并成功运行,https://github.com/Turoad/CLRNet/issues/14#issuecomment-1123251260,希望对你有用。