CLRNet icon indicating copy to clipboard operation
CLRNet copied to clipboard

tools/detect.py 不能检测出车道线

Open farhuaa opened this issue 2 years ago • 11 comments

已经解决

farhuaa avatar Sep 05 '22 06:09 farhuaa

请问,你是怎么修改的detect.py的

xqh5201314 avatar Sep 16 '22 12:09 xqh5201314

可以看一下这个https://github.com/Turoad/CLRNet/issues/14#issuecomment-1123251260

farhuaa avatar Sep 16 '22 12:09 farhuaa

where is the tools/detect.py? I can only see generate_seg_tusimple.py

mengxia1994 avatar Sep 20 '22 07:09 mengxia1994

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

xqh5201314 avatar Sep 20 '22 07:09 xqh5201314

您好,我已收到您的邮件,我将尽快查阅并给予回复,谢谢!(孟夏的自动回复)

mengxia1994 avatar Sep 20 '22 07:09 mengxia1994

你好,我在运行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)

CrazyMustard-404 avatar Feb 13 '23 09:02 CrazyMustard-404

您好,我已收到您的邮件,我将尽快查阅并给予回复,谢谢!(孟夏的自动回复)

mengxia1994 avatar Feb 13 '23 09:02 mengxia1994

你好,我在运行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)

我没有出现这个问题,不知道怎么回事。

xqh5201314 avatar Feb 13 '23 09:02 xqh5201314

你好,我在运行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)

我没有出现这个问题,不知道怎么回事。

好像是配置文件和权重文件不一致好像,你可以看一下

xqh5201314 avatar Feb 13 '23 09:02 xqh5201314

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配置出来了吗,可以发我一份吗,我这边代码调试出了点奇怪的问题,如果您搞出来了,方便做个参考吗?

Miaonika avatar Mar 26 '23 02:03 Miaonika

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,希望对你有用。

CrazyMustard-404 avatar Mar 27 '23 00:03 CrazyMustard-404