Coder Social home page Coder Social logo

turoad / clrnet Goto Github PK

View Code? Open in Web Editor NEW
479.0 479.0 104.0 328 KB

Pytorch implementation of our paper "CLRNet: Cross Layer Refinement Network for Lane Detection" (CVPR2022 Acceptance).

License: Apache License 2.0

Python 96.37% C++ 0.96% Cuda 2.67%

clrnet's People

Contributors

mysupersoul avatar turoad avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

clrnet's Issues

Config param for custom image size.

Hello,

Really thanks a lot for much useful contribution. Currently with sample culane test dataset detection working fine.
Previously I have tested lanedet with custom image size modifying config params as below.

configs/condlane/resnet101_culane.py


net = dict(
    type='Detector',
)

backbone = dict(
    type='ResNetWrapper',
    resnet='resnet101',
    pretrained=True,
    replace_stride_with_dilation=[False, False, False],
    out_conv=False,
    in_channels=[64, 128, 256, 512]
)

ori_img_h = 2048
ori_img_w = 2448
bbox_h_start = 1024
crop_bbox = [0, bbox_h_start, ori_img_w, ori_img_h]
sample_y = range(ori_img_h, bbox_h_start, -8)

batch_size = 1

aggregator = dict(
    type='TransConvEncoderModule',
    in_dim=2048,
    attn_in_dims=[2048, 256],
    attn_out_dims=[256, 256],
    strides=[1, 1],
    ratios=[4, 4],
    pos_shape=(batch_size, 10, 25),
)

neck=dict(
    type='FPN',
    in_channels=[256, 512, 1024, 256],
    out_channels=64,
    num_outs=4,
    #trans_idx=-1,
)

loss_weights=dict(
        hm_weight=1,
        kps_weight=0.4,
        row_weight=1.,
        range_weight=1.,
    )

num_lane_classes=1
heads=dict(
    type='CondLaneHead',
    heads=dict(hm=num_lane_classes),
    in_channels=(64, ),
    num_classes=num_lane_classes,
    head_channels=64,
    head_layers=1,
    disable_coords=False,
    branch_in_channels=64,
    branch_channels=64,
    branch_out_channels=64,
    reg_branch_channels=64,
    branch_num_conv=1,
    hm_idx=2,
    mask_idx=0,
    compute_locations_pre=True,
    location_configs=dict(size=(batch_size, 1, 80, 200), device='cuda:0')
)

optimizer = dict(type='AdamW', lr=3e-4, betas=(0.9, 0.999), eps=1e-8)

epochs = 16
total_iter = (88880 // batch_size) * epochs
import math
scheduler = dict(
    type = 'MultiStepLR',
    milestones=[8, 14],
    gamma=0.1
)

seg_loss_weight = 1.0
eval_ep = 1
save_ep = 1

img_norm = dict(
    mean=[75.3, 76.6, 77.6],
    std=[50.5, 53.8, 54.3]
)

img_height = 320
img_width = 800
cut_height = 0

mask_down_scale = 4
hm_down_scale = 16
num_lane_classes = 1
line_width = 3
radius = 6
nms_thr = 4
img_scale = (800, 320)
mask_size = (1, 80, 200)

train_process = [
    dict(type='Alaug',
    transforms=[dict(type='Compose', params=dict(bboxes=False, keypoints=True, masks=False)),
    dict(
        type='Crop',
        x_min=crop_bbox[0],
        x_max=crop_bbox[2],
        y_min=crop_bbox[1],
        y_max=crop_bbox[3],
        p=1),
    dict(type='Resize', height=img_scale[1], width=img_scale[0], p=1),
    dict(
        type='OneOf',
        transforms=[
            dict(
                type='RGBShift',
                r_shift_limit=10,
                g_shift_limit=10,
                b_shift_limit=10,
                p=1.0),
            dict(
                type='HueSaturationValue',
                hue_shift_limit=(-10, 10),
                sat_shift_limit=(-15, 15),
                val_shift_limit=(-10, 10),
                p=1.0),
        ],
        p=0.7),
    dict(type='JpegCompression', quality_lower=85, quality_upper=95, p=0.2),
    dict(
        type='OneOf',
        transforms=[
            dict(type='Blur', blur_limit=3, p=1.0),
            dict(type='MedianBlur', blur_limit=3, p=1.0)
        ],
        p=0.2),
    dict(type='RandomBrightness', limit=0.2, p=0.6),
    dict(
        type='ShiftScaleRotate',
        shift_limit=0.1,
        scale_limit=(-0.2, 0.2),
        rotate_limit=10,
        border_mode=0,
        p=0.6),
    dict(
        type='RandomResizedCrop',
        height=img_scale[1],
        width=img_scale[0],
        scale=(0.8, 1.2),
        ratio=(1.7, 2.7),
        p=0.6),
    dict(type='Resize', height=img_scale[1], width=img_scale[0], p=1),]

    ),
    dict(type='CollectLane',
        down_scale=mask_down_scale,
        hm_down_scale=hm_down_scale,
        max_mask_sample=5,
        line_width=line_width,
        radius=radius,
        keys=['img', 'gt_hm'],
        meta_keys=[
            'gt_masks', 'mask_shape', 'hm_shape',
            'down_scale', 'hm_down_scale', 'gt_points'
        ]
    ),
    #dict(type='Resize', size=(img_width, img_height)),
    dict(type='Normalize', img_norm=img_norm),
    dict(type='ToTensor', keys=['img', 'gt_hm'], collect_keys=['img_metas']),
]


val_process = [
    dict(type='Alaug',
        transforms=[dict(type='Compose', params=dict(bboxes=False, keypoints=True, masks=False)),
        dict(type='Resize', height=img_scale[1], width=img_scale[0], p=1)]
    ),
    #dict(type='Resize', size=(img_width, img_height)),
    dict(type='Normalize', img_norm=img_norm),
    dict(type='ToTensor', keys=['img']),
]

dataset_path = './data/CULane'
dataset = dict(
    train=dict(
        type='CULane',
        data_root=dataset_path,
        split='train',
        processes=train_process,
    ),
    val=dict(
        type='CULane',
        data_root=dataset_path,
        split='test',
        processes=val_process,
    ),
    test=dict(
        type='CULane',
        data_root=dataset_path,
        split='test',
        processes=val_process,
    )
)


workers = 12
log_interval = 1000
lr_update_by_epoch=True

Similarly, I am trying to modify configs/clrnet/clr_resnet101_culane.py but unable to get output.

net = dict(type='Detector', )

backbone = dict(
    type='ResNetWrapper',
    resnet='resnet101',
    pretrained=True,
    replace_stride_with_dilation=[False, False, False],
    out_conv=False,
)

num_points = 72
max_lanes = 4
# sample_y = range(589, 230, -20)

ori_img_h = 2048
ori_img_w = 2448
bbox_h_start = 1024
crop_bbox = [0, bbox_h_start, ori_img_w, ori_img_h]
sample_y = range(ori_img_h, bbox_h_start, -8)

batch_size = 12

heads = dict(type='CLRHead',
             num_priors=192,
             refine_layers=3,
             fc_hidden_dim=64,
             sample_points=36)

iou_loss_weight = 2.
cls_loss_weight = 2.
xyt_loss_weight = 0.2
seg_loss_weight = 1.0

work_dirs = "work_dirs/clr/r101_culane"

neck = dict(type='FPN',
            in_channels=[512, 1024, 2048],
            out_channels=64,
            num_outs=3,
            attention=False)

test_parameters = dict(conf_threshold=0.4, nms_thres=50, nms_topk=max_lanes)

epochs = 20 
# batch_size = 1

optimizer = dict(type='AdamW', lr=0.3e-3)  # 3e-4 for batchsize 8
total_iter = (88880 // batch_size) * epochs
scheduler = dict(type='CosineAnnealingLR', T_max=total_iter)

eval_ep = 3
save_ep = 10

img_norm = dict(mean=[103.939, 116.779, 123.68], std=[1., 1., 1.])
img_w = 800
img_h = 320
cut_height = 270

train_process = [
    dict(
        type='GenerateLaneLine',
        transforms=[
            dict(
                type='Crop',
                x_min=crop_bbox[0],
                x_max=crop_bbox[2],
                y_min=crop_bbox[1],
                y_max=crop_bbox[3],
                p=1),
                
            dict(name='Resize',
                 parameters=dict(size=dict(height=img_h, width=img_w)),
                 p=1.0),
            
            dict(name='HorizontalFlip', parameters=dict(p=1.0), p=0.5),
            dict(name='ChannelShuffle', parameters=dict(p=1.0), p=0.1),
            dict(name='MultiplyAndAddToBrightness',
                 parameters=dict(mul=(0.85, 1.15), add=(-10, 10)),
                 p=0.6),
            dict(name='AddToHueAndSaturation',
                 parameters=dict(value=(-10, 10)),
                 p=0.7),
            dict(name='OneOf',
                 transforms=[
                     dict(name='MotionBlur', parameters=dict(k=(3, 5))),
                     dict(name='MedianBlur', parameters=dict(k=(3, 5)))
                 ],
                 p=0.2),
            dict(name='Affine',
                 parameters=dict(translate_percent=dict(x=(-0.1, 0.1),
                                                        y=(-0.1, 0.1)),
                                 rotate=(-10, 10),
                                 scale=(0.8, 1.2)),
                 p=0.7),
            dict(name='Resize',
                 parameters=dict(size=dict(height=img_h, width=img_w)),
                 p=1.0),
        ],
    ),
    dict(type='ToTensor', keys=['img', 'lane_line', 'seg']),
]

val_process = [
    dict(type='GenerateLaneLine',
         transforms=[

             dict(name='Resize',
                  parameters=dict(size=dict(height=img_h, width=img_w)),
                  p=1.0),
         ],
         training=False),
    dict(type='ToTensor', keys=['img']),
]

dataset_path = './data/CULane'
dataset_type = 'CULane'
dataset = dict(train=dict(
    type=dataset_type,
    data_root=dataset_path,
    split='train',
    processes=train_process,
),
val=dict(
    type=dataset_type,
    data_root=dataset_path,
    split='test',
    processes=val_process,
),
test=dict(
    type=dataset_type,
    data_root=dataset_path,
    split='test',
    processes=val_process,
))

workers = 10
log_interval = 500
# seed = 0
num_classes = 4 + 1
ignore_label = 255
bg_weight = 0.4
lr_update_by_epoch = False

Any response much appreciated.

Input Image:
left0000

Regards,
Ajay

How to train by a single gpu cuda:1 怎样只用cuda:1单gpu训练

I have changed the code to "self.net = MMDataParallel(self.net,device_ids=[self.cfg.gpus]).cuda(self.cfg.gpus)", but there is a mistake

Validate: 0%| | 0/70 [05:49<?, ?it/s]
Traceback (most recent call last):
File "/media/SSD/user1/SR/CLR/CLRNet-main/clrnet/engine/runner.py", line 143, in validate
output = self.net.module.heads.get_lanes(output)
File "/media/SSD/user1/SR/CLR/CLRNet-main/clrnet/models/heads/clr_head.py", line 500, in get_lanes
keep = keep[:num_to_keep]
RuntimeError: CUDA error: an illegal memory access was encountered
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

expecing for your answer

questions about details

Thanks for your great work! Some questions confused me:

  1. Does the method predict fixed number of lanes with anchor-like lane prior(x,y,theta)? And what's the number of the lane pirors in your experiment? Or it's just an anchor-based method like Line-CNN and LaneATT?

2.In section "Refinement structure", "Pt is the parameter of lane prior (start point coordinate x, y and angle θ)", does it mean you only refine (x,y,theta) and only use (x,y,theta) to extract lane features, and use ROIalign to extract 1x1xC feature at Np sampled positions?

  1. In section "Refinement structure", "The refinement Rt takes the Pt as input to get the ROI lane features and then performs two FC layers to get the refined parameter Pt", does it mean you only use the ROI lane features to predict x,y,theta? and which feature do you use to predict confidence, length, and N offsets? and what's the shape of the output(multi head output or just use FC layers to get M x (2+1+3+N))?

  2. in section "ROIGather structure", "For ROI features of L1, L2, we concatenate the ROI features of previous layers to enhance feature representations. Convolutions are performed on the extracted ROI features to gather nearby features for each lane pixel.", along which dimension do you concatenate the features and what's the shape of the convolution kernel.

  3. in section "Inference", "Our method can also be nms-free if we use the one-to-one assignment, i.e., set the top-k = 1.", does it mean assign the top-1 predicted lane when training or just select one predicted lane by classification score when inference?

hope the code coming soon

question about Tensorrt.

Excuse me, I have another question about Tensorrt.
Do you export the pytorch model to onnx model and then use tensorrt to speed up? If so, which opset of onnx do you use, and as I know ROIAlign is not supported in tensorrt for now no matter what the version of onnx opset is.

Hope for your answer.

Originally posted by @ChenzrMax in #4 (comment)

The test result for test7_cross is 0

Thank you very much for your great work!
However, I found that the test result of test7_cross was always 0 in the process of reproduction. I don't know if it is my configuration or the model itself that is not good for the cross scene.I would appreciate it if you could give me some advice, thanks again.
image

Inference code show no results.

Hi, I write the inference code by myself, but it does not show any results. Is it because of pre-processing of the image?
Appreciate any help?

import torch
import cv2
from clrnet.engine.runner import Runner
from clrnet.utils.config import Config

cfg = Config.fromfile("configs/clrnet/clr_resnet18_tusimple.py")
cfg.gpus = 1
cfg.load_from = 'tusimple_r18.pth'
cfg.resume_from = ''
cfg.finetune_from = ''
cfg.seed = 1234

def pre_process_image(path):
    img_w = 800
    img_h = 320
    cut_height = 160 
    image = cv2.imread(path)
    image = image[cut_height:, :, :]
    image = cv2.resize(image, (img_w, img_h))
    image = torch.Tensor([image])
    image = image.permute(0, 3, 1, 2)
    return image

runner = Runner(cfg)
runner.net.eval()

image = pre_process_image("data/tusimple/clips/0531/1492626477558988952/8.jpg")
data = image.cuda()
with torch.no_grad():
    output = runner.net(data)
    lanes = runner.net.module.heads.get_lanes(output)

lanes returns a empty list.

python setup.py build develop

您好,感谢分享code。我在安装你的环境是出现了以下错误,如有时间希望你能提供帮助,万分感谢。
我的环境是:Python 3.8.13
pip 包:
Package Version


brotlipy 0.7.0
certifi 2022.5.18.1
cffi 1.15.0
charset-normalizer 2.0.4
cryptography 37.0.1
idna 3.3
mkl-fft 1.3.1
mkl-random 1.2.2
mkl-service 2.4.0
numpy 1.22.3
Pillow 9.0.1
pip 21.2.4
pycparser 2.21
pyOpenSSL 22.0.0
PySocks 1.7.1
requests 2.27.1
setuptools 61.2.0
six 1.16.0
terminaltables 3.1.0
torch 1.8.0
torchvision 0.9.0
typing_extensions 4.1.1
urllib3 1.26.9
wheel 0.37.1

nvcc -V;
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Apr_24_19:10:27_PDT_2019
Cuda compilation tools, release 10.1, V10.1.168

/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/setuptools/installer.py:27: SetuptoolsDeprecationWarning: setuptools.installer is deprecated. Requirements should be satisfied by a PEP 517 installer.
warnings.warn(
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.8
creating build/lib.linux-x86_64-3.8/clrnet
copying clrnet/init.py -> build/lib.linux-x86_64-3.8/clrnet
creating build/lib.linux-x86_64-3.8/clrnet/utils
copying clrnet/utils/tusimple_metric.py -> build/lib.linux-x86_64-3.8/clrnet/utils
copying clrnet/utils/init.py -> build/lib.linux-x86_64-3.8/clrnet/utils
copying clrnet/utils/config.py -> build/lib.linux-x86_64-3.8/clrnet/utils
copying clrnet/utils/net_utils.py -> build/lib.linux-x86_64-3.8/clrnet/utils
copying clrnet/utils/logger.py -> build/lib.linux-x86_64-3.8/clrnet/utils
copying clrnet/utils/recorder.py -> build/lib.linux-x86_64-3.8/clrnet/utils
copying clrnet/utils/visualization.py -> build/lib.linux-x86_64-3.8/clrnet/utils
copying clrnet/utils/lane.py -> build/lib.linux-x86_64-3.8/clrnet/utils
copying clrnet/utils/registry.py -> build/lib.linux-x86_64-3.8/clrnet/utils
copying clrnet/utils/llamas_metric.py -> build/lib.linux-x86_64-3.8/clrnet/utils
copying clrnet/utils/llamas_utils.py -> build/lib.linux-x86_64-3.8/clrnet/utils
copying clrnet/utils/culane_metric.py -> build/lib.linux-x86_64-3.8/clrnet/utils
creating build/lib.linux-x86_64-3.8/clrnet/models
copying clrnet/models/init.py -> build/lib.linux-x86_64-3.8/clrnet/models
copying clrnet/models/registry.py -> build/lib.linux-x86_64-3.8/clrnet/models
creating build/lib.linux-x86_64-3.8/clrnet/datasets
copying clrnet/datasets/tusimple.py -> build/lib.linux-x86_64-3.8/clrnet/datasets
copying clrnet/datasets/init.py -> build/lib.linux-x86_64-3.8/clrnet/datasets
copying clrnet/datasets/llamas.py -> build/lib.linux-x86_64-3.8/clrnet/datasets
copying clrnet/datasets/culane.py -> build/lib.linux-x86_64-3.8/clrnet/datasets
copying clrnet/datasets/registry.py -> build/lib.linux-x86_64-3.8/clrnet/datasets
copying clrnet/datasets/base_dataset.py -> build/lib.linux-x86_64-3.8/clrnet/datasets
creating build/lib.linux-x86_64-3.8/clrnet/engine
copying clrnet/engine/scheduler.py -> build/lib.linux-x86_64-3.8/clrnet/engine
copying clrnet/engine/init.py -> build/lib.linux-x86_64-3.8/clrnet/engine
copying clrnet/engine/optimizer.py -> build/lib.linux-x86_64-3.8/clrnet/engine
copying clrnet/engine/runner.py -> build/lib.linux-x86_64-3.8/clrnet/engine
copying clrnet/engine/registry.py -> build/lib.linux-x86_64-3.8/clrnet/engine
creating build/lib.linux-x86_64-3.8/clrnet/ops
copying clrnet/ops/init.py -> build/lib.linux-x86_64-3.8/clrnet/ops
copying clrnet/ops/nms.py -> build/lib.linux-x86_64-3.8/clrnet/ops
creating build/lib.linux-x86_64-3.8/clrnet/models/necks
copying clrnet/models/necks/init.py -> build/lib.linux-x86_64-3.8/clrnet/models/necks
copying clrnet/models/necks/fpn.py -> build/lib.linux-x86_64-3.8/clrnet/models/necks
copying clrnet/models/necks/pafpn.py -> build/lib.linux-x86_64-3.8/clrnet/models/necks
creating build/lib.linux-x86_64-3.8/clrnet/models/utils
copying clrnet/models/utils/init.py -> build/lib.linux-x86_64-3.8/clrnet/models/utils
copying clrnet/models/utils/roi_gather.py -> build/lib.linux-x86_64-3.8/clrnet/models/utils
copying clrnet/models/utils/dynamic_assign.py -> build/lib.linux-x86_64-3.8/clrnet/models/utils
copying clrnet/models/utils/seg_decoder.py -> build/lib.linux-x86_64-3.8/clrnet/models/utils
creating build/lib.linux-x86_64-3.8/clrnet/models/nets
copying clrnet/models/nets/init.py -> build/lib.linux-x86_64-3.8/clrnet/models/nets
copying clrnet/models/nets/detector.py -> build/lib.linux-x86_64-3.8/clrnet/models/nets
creating build/lib.linux-x86_64-3.8/clrnet/models/backbones
copying clrnet/models/backbones/resnet.py -> build/lib.linux-x86_64-3.8/clrnet/models/backbones
copying clrnet/models/backbones/init.py -> build/lib.linux-x86_64-3.8/clrnet/models/backbones
copying clrnet/models/backbones/dla34.py -> build/lib.linux-x86_64-3.8/clrnet/models/backbones
creating build/lib.linux-x86_64-3.8/clrnet/models/heads
copying clrnet/models/heads/init.py -> build/lib.linux-x86_64-3.8/clrnet/models/heads
copying clrnet/models/heads/clr_head.py -> build/lib.linux-x86_64-3.8/clrnet/models/heads
creating build/lib.linux-x86_64-3.8/clrnet/models/losses
copying clrnet/models/losses/init.py -> build/lib.linux-x86_64-3.8/clrnet/models/losses
copying clrnet/models/losses/accuracy.py -> build/lib.linux-x86_64-3.8/clrnet/models/losses
copying clrnet/models/losses/lineiou_loss.py -> build/lib.linux-x86_64-3.8/clrnet/models/losses
copying clrnet/models/losses/focal_loss.py -> build/lib.linux-x86_64-3.8/clrnet/models/losses
creating build/lib.linux-x86_64-3.8/clrnet/datasets/process
copying clrnet/datasets/process/init.py -> build/lib.linux-x86_64-3.8/clrnet/datasets/process
copying clrnet/datasets/process/generate_lane_line.py -> build/lib.linux-x86_64-3.8/clrnet/datasets/process
copying clrnet/datasets/process/process.py -> build/lib.linux-x86_64-3.8/clrnet/datasets/process
copying clrnet/datasets/process/transforms.py -> build/lib.linux-x86_64-3.8/clrnet/datasets/process
running egg_info
creating clrnet.egg-info
writing clrnet.egg-info/PKG-INFO
writing dependency_links to clrnet.egg-info/dependency_links.txt
writing requirements to clrnet.egg-info/requires.txt
writing top-level names to clrnet.egg-info/top_level.txt
writing manifest file 'clrnet.egg-info/SOURCES.txt'
/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/utils/cpp_extension.py:369: UserWarning: Attempted to use ninja as the BuildExtension backend but we could not find ninja.. Falling back to using the slow distutils backend.
warnings.warn(msg.format('we could not find ninja.'))
reading manifest file 'clrnet.egg-info/SOURCES.txt'
adding license file 'LICENSE'
writing manifest file 'clrnet.egg-info/SOURCES.txt'
running build_ext
building 'clrnet.ops.nms_impl' extension
creating build/temp.linux-x86_64-3.8
creating build/temp.linux-x86_64-3.8/clrnet
creating build/temp.linux-x86_64-3.8/clrnet/ops
creating build/temp.linux-x86_64-3.8/clrnet/ops/csrc
gcc -pthread -B /home/qzy/anaconda3/envs/clrnet/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include -I/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include -I/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/TH -I/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/THC -I/home/qzy/anaconda3/envs/clrnet/include/python3.8 -c ./clrnet/ops/csrc/nms.cpp -o build/temp.linux-x86_64-3.8/./clrnet/ops/csrc/nms.o -DTORCH_API_INCLUDE_EXTENSION_H -DPYBIND11_COMPILER_TYPE="gcc" -DPYBIND11_STDLIB="libstdcpp" -DPYBIND11_BUILD_ABI="cxxabi1011" -DTORCH_EXTENSION_NAME=nms_impl -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++14
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
In file included from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/ATen/Parallel.h:140:0,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/utils.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/nn/cloneable.h:5,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/nn.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/all.h:13,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/extension.h:4,
from ./clrnet/ops/csrc/nms.cpp:30:
/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/ATen/ParallelOpenMP.h:83:0: warning: ignoring #pragma omp parallel [-Wunknown-pragmas]
#pragma omp parallel for if ((end - begin) >= grain_size)
^
In file included from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/c10/core/Device.h:5:0,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/c10/core/Allocator.h:6,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/ATen/ATen.h:7,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/types.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader_options.h:4,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader/base.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader/stateful.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/all.h:8,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/extension.h:4,
from ./clrnet/ops/csrc/nms.cpp:30:
./clrnet/ops/csrc/nms.cpp: In function ‘std::vectorat::Tensor nms_forward(at::Tensor, at::Tensor, float, long unsigned int)’:
./clrnet/ops/csrc/nms.cpp:40:41: warning: ‘at::DeprecatedTypeProperties& at::Tensor::type() const’ is deprecated: Tensor.type() is deprecated. Instead use Tensor.options(), which in many cases (e.g. in a constructor) is a drop-in replacement. If you were using data from type(), that is now available from Tensor itself, so instead of tensor.type().scalar_type(), use tensor.scalar_type() instead and instead of tensor.type().backend() use tensor.device(). [-Wdeprecated-declarations]
#define CHECK_CUDA(x) AT_ASSERTM(x.type().is_cuda(), #x " must be a CUDA tensor")
^
/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/c10/util/Exception.h:225:39: note: in definition of macro ‘C10_EXPAND_MSVC_WORKAROUND’
#define C10_EXPAND_MSVC_WORKAROUND(x) x
^
/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/c10/util/Exception.h:244:34: note: in expansion of macro ‘C10_UNLIKELY’
#define C10_UNLIKELY_OR_CONST(e) C10_UNLIKELY(e)
^
/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/c10/util/Exception.h:291:7: note: in expansion of macro ‘C10_UNLIKELY_OR_CONST’
if (C10_UNLIKELY_OR_CONST(!(cond))) {
^
/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/c10/util/Exception.h:484:32: note: in expansion of macro ‘TORCH_INTERNAL_ASSERT’
C10_EXPAND_MSVC_WORKAROUND(TORCH_INTERNAL_ASSERT(cond, VA_ARGS));
^
./clrnet/ops/csrc/nms.cpp:40:23: note: in expansion of macro ‘AT_ASSERTM’
#define CHECK_CUDA(x) AT_ASSERTM(x.type().is_cuda(), #x " must be a CUDA tensor")
^
./clrnet/ops/csrc/nms.cpp:42:24: note: in expansion of macro ‘CHECK_CUDA’
#define CHECK_INPUT(x) CHECK_CUDA(x); CHECK_CONTIGUOUS(x)
^
./clrnet/ops/csrc/nms.cpp:53:5: note: in expansion of macro ‘CHECK_INPUT’
CHECK_INPUT(boxes);
^
In file included from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/ATen/Tensor.h:3:0,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/ATen/Context.h:4,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/ATen/ATen.h:9,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/types.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader_options.h:4,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader/base.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader/stateful.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/all.h:8,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/extension.h:4,
from ./clrnet/ops/csrc/nms.cpp:30:
/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/ATen/core/TensorBody.h:303:30: note: declared here
DeprecatedTypeProperties & type() const {
^
In file included from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/c10/core/Device.h:5:0,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/c10/core/Allocator.h:6,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/ATen/ATen.h:7,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/types.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader_options.h:4,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader/base.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader/stateful.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/all.h:8,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/extension.h:4,
from ./clrnet/ops/csrc/nms.cpp:30:
./clrnet/ops/csrc/nms.cpp:40:41: warning: ‘at::DeprecatedTypeProperties& at::Tensor::type() const’ is deprecated: Tensor.type() is deprecated. Instead use Tensor.options(), which in many cases (e.g. in a constructor) is a drop-in replacement. If you were using data from type(), that is now available from Tensor itself, so instead of tensor.type().scalar_type(), use tensor.scalar_type() instead and instead of tensor.type().backend() use tensor.device(). [-Wdeprecated-declarations]
#define CHECK_CUDA(x) AT_ASSERTM(x.type().is_cuda(), #x " must be a CUDA tensor")
^
/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/c10/util/Exception.h:225:39: note: in definition of macro ‘C10_EXPAND_MSVC_WORKAROUND’
#define C10_EXPAND_MSVC_WORKAROUND(x) x
^
/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/c10/util/Exception.h:244:34: note: in expansion of macro ‘C10_UNLIKELY’
#define C10_UNLIKELY_OR_CONST(e) C10_UNLIKELY(e)
^
/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/c10/util/Exception.h:291:7: note: in expansion of macro ‘C10_UNLIKELY_OR_CONST’
if (C10_UNLIKELY_OR_CONST(!(cond))) {
^
/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/c10/util/Exception.h:484:32: note: in expansion of macro ‘TORCH_INTERNAL_ASSERT’
C10_EXPAND_MSVC_WORKAROUND(TORCH_INTERNAL_ASSERT(cond, VA_ARGS));
^
./clrnet/ops/csrc/nms.cpp:40:23: note: in expansion of macro ‘AT_ASSERTM’
#define CHECK_CUDA(x) AT_ASSERTM(x.type().is_cuda(), #x " must be a CUDA tensor")
^
./clrnet/ops/csrc/nms.cpp:42:24: note: in expansion of macro ‘CHECK_CUDA’
#define CHECK_INPUT(x) CHECK_CUDA(x); CHECK_CONTIGUOUS(x)
^
./clrnet/ops/csrc/nms.cpp:54:5: note: in expansion of macro ‘CHECK_INPUT’
CHECK_INPUT(idx);
^
In file included from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/ATen/Tensor.h:3:0,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/ATen/Context.h:4,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/ATen/ATen.h:9,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/types.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader_options.h:4,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader/base.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader/stateful.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data/dataloader.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/data.h:3,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/torch/all.h:8,
from /home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/extension.h:4,
from ./clrnet/ops/csrc/nms.cpp:30:
/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/ATen/core/TensorBody.h:303:30: note: declared here
DeprecatedTypeProperties & type() const {
^
/usr/bin/nvcc -I/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include -I/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/torch/csrc/api/include -I/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/TH -I/home/qzy/anaconda3/envs/clrnet/lib/python3.8/site-packages/torch/include/THC -I/home/qzy/anaconda3/envs/clrnet/include/python3.8 -c ./clrnet/ops/csrc/nms_kernel.cu -o build/temp.linux-x86_64-3.8/./clrnet/ops/csrc/nms_kernel.o -D__CUDA_NO_HALF_OPERATORS
-D__CUDA_NO_HALF_CONVERSIONS
_ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr --compiler-options '-fPIC' -DTORCH_API_INCLUDE_EXTENSION_H -DPYBIND11_COMPILER_TYPE="_gcc" -DPYBIND11_STDLIB="_libstdcpp" -DPYBIND11_BUILD_ABI="_cxxabi1011" -DTORCH_EXTENSION_NAME=nms_impl -D_GLIBCXX_USE_CXX11_ABI=0 -gencode=arch=compute_70,code=compute_70 -gencode=arch=compute_70,code=sm_70 -std=c++14
nvcc fatal : Path to libdevice library not specified
error: command '/usr/bin/nvcc' failed with exit code 1
我把setup.py中的: ext_modules=get_extensions(),注释掉不会报错。

The number of detected lane lines is only one (has figure)

Thank you very much for your excellent work.
I used your network to train and test on my own data set, but found that the effect was not very good. In many cases, only one line was detected in a graph, as shown in the figure. We are sure that we have changed max_LANES to be large enough.
image
image
I don't think it should be like this. This is different from the conclusion in the paper. Could you give me some suggestions?

Multi-GPUs trainning Problem

I have trained the CLRNet with single gpu and multi gpus.
The performance of multi gpus is badly.
I don't know why

DLA FPS

I have run the DLA version validate code on culane dataset, however the FPS is about 8.3 it/s, my inference machine is V100.

测试中的预测数据如何获得

您好,冒昧打扰一下,我配好环境跑测试时,clrnet/utils/culane_metric.py文件中eval_predictions函数 predictions = load_culane_data(pred_dir, list_path) 这里会报错找不到文件,我想了解的是,pred_dir应该是我们临时创建的那个工作文件夹work_dir,里面这些文件都是还不存在的,我们的预测数据是从该函数获取嘛

关于在自己视频上效果差(有图)

作者您好,很感谢你们的杰出工作。
我利用lanedet上的detect.py对自己的数据(已进行resize为culane数据集的大小)进行测试(使用的是您已经训练好的模型culane_resnet18),发现效果不是很好。
图1中弯曲的曲线并没有被识别出来。图2中只识别出来中间的两条线(应该要是4条)且在远端时未能模拟到弯曲的部分。
我觉得不应该是这样的效果,之前也做过condlanenet的culane_resnet18的测试,目前来看condlanenet要好于本次的效果,这与paper中的结论有出入。
0
461
当然,我觉得应该是我还有什么地方没注意到才出现上述现象,希望您能指出我可能存在的问题。
这里补充我测试视频的来源,下面是哔哩哔哩的一个视频网站,我截取的是前2分钟的视频,将其分为一张张图片同时resize为(1640,590)即culane的数据图片大小,然后使用detect.py(backbone为culane_res18)对图片生成结果。
如果您能够在忙碌的科研生活中抽空测试一下,我将不胜感激。同时,希望能够看到您的测试结果,以及希望您能够指出您在该视频测试过程中可能遇到的跟我一样的问题。若能够得到您的回答,我感激不尽。
https://www.bilibili.com/video/BV1eF411x75u?spm_id_from=333.999.0.0

clr_head.py 389 line meaning?

hi, It's a great work. But when I understand the source code, I'm confused with the meaning of "target_yxtl[:, -1] -= (predictions_starts - target_starts)" in clr_head.py 389 line. Can you help me?

Training time

Hello, thanks for your solid work.
I am wondering how long it takes to train the CLRNet model, and what type of GPU it needs.

false detection and ghost points

Hello,

Thanks for the very useful repository, am able to test run code with the custom dataset.
But observed a few issues as shown in the following result images.

image

  1. 1 Failed to detect lines in the turing
  2. 2 and 3 Partially detected lines in turning
  3. 4 Road arrow marks are also detected as lane
  4. 5 Though there are no lanes, the detection algorithm outputs the detected line

Any suggestion, much appreciated.

Regards,
Ajay

Config question

Hello, thank you for your very valuable work. I would like to ask whether the sample_point parameter in CLRhead in config is used to control the number of sample points for ground truth input?

about nms for several categories

Dear author, if i changed the predictions[:3] for 3 categories classisfication which the third label is background, how can i change the nms code in clr_head/get_lanes? Do i need to change the nms_kernel.cu such as prop size?

Error in training with Tusimple

I am not really sure how this occurred but this really happened. When iterating the tusimple dataset, it failed and raised expections as below(both on this repo and lanedet repo):
image
I also have a question about the description of Tusimple dataset in both this repo and lanedet:
image
but there are just three such labels in Tusimple, I am not sure whether I downloaded Tusimple completely or not.

Many Thanks if you respond to my questions!

I'm having some problems of Error :python setup.py build develop

"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\bin\nvcc" -c ./clrnet/ops/csrc\nms_kernel.cu -o build\temp.win-amd64-3.9\Release./clrnet/ops/csrc\nms_kernel.obj -IH:\ana\envs\swinunet\lib\site-packages\torch\include -IH:\ana\envs\swinunet\lib\site-packages\torch\include\torch\csrc\api\include -IH:\ana\envs\swinunet\lib\site-packages\torch\include\TH -IH:\ana\envs\swinunet\lib\site-packages\torch\include\THC "-IC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\include" -IH:\ana\envs\swinunet\include -IH:\ana\envs\swinunet\Include "-IH:\Microsoft\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.32.31326\ATLMFC\include" "-IH:\Microsoft\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.32.31326\include" "-IH:\Windows Kits\10\include\10.0.19041.0\ucrt" "-IH:\Windows Kits\10\include\10.0.19041.0\shared" "-IH:\Windows Kits\10\include\10.0.19041.0\um" "-IH:\Windows Kits\10\include\10.0.19041.0\winrt" "-IH:\Windows Kits\10\include\10.0.19041.0\cppwinrt" -Xcudafe --diag_suppress=dll_interface_conflict_dllexport_assumed -Xcudafe --diag_suppress=dll_interface_conflict_none_assumed -Xcudafe --diag_suppress=field_without_dll_interface -Xcudafe --diag_suppress=base_class_has_different_dll_interface -Xcompiler /EHsc -Xcompiler /wd4190 -Xcompiler /wd4018 -Xcompiler /wd4275 -Xcompiler /wd4267 -Xcompiler /wd4244 -Xcompiler /wd4251 -Xcompiler /wd4819 -Xcompiler /MD -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr -DTORCH_API_INCLUDE_EXTENSION_H -DTORCH_EXTENSION_NAME=nms_impl -D_GLIBCXX_USE_CXX11_ABI=0 -gencode=arch=compute_52,code=compute_52 -gencode=arch=compute_52,code=sm_52 --use-local-env
nms_kernel.cu
H:/ana/envs/swinunet/lib/site-packages/torch/include\ATen/core/builtin_function.h(110): warning #20236-D: pragma "diag_suppress" is deprecated, use "nv_diag_suppress" instead

H:/ana/envs/swinunet/lib/site-packages/torch/include\ATen/core/builtin_function.h(117): warning #20236-D: pragma "diag_default" is deprecated, use "nv_diag_default" instead

H:/ana/envs/swinunet/lib/site-packages/torch/include\ATen/core/builtin_function.h(110): warning #20236-D: pragma "diag_suppress" is deprecated, use "nv_diag_suppress" instead

H:/ana/envs/swinunet/lib/site-packages/torch/include\ATen/core/builtin_function.h(117): warning #20236-D: pragma "diag_default" is deprecated, use "nv_diag_default" instead

H:\ana\envs\swinunet\lib\site-packages\torch\include\pybind11\cast.h(1429): error: too few arguments for template template parameter "Tuple"
detected during instantiation of class "pybind11::detail::tuple_caster<Tuple, Ts...> [with Tuple=std::pair, Ts=<T1, T2>]"
(1507): here

H:\ana\envs\swinunet\lib\site-packages\torch\include\pybind11\cast.h(1503): error: too few arguments for template template parameter "Tuple"
detected during instantiation of class "pybind11::detail::tuple_caster<Tuple, Ts...> [with Tuple=std::pair, Ts=<T1, T2>]"
(1507): here

2 errors detected in the compilation of "./clrnet/ops/csrc/nms_kernel.cu".
error: command 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.6\bin\nvcc.exe' failed with exit code 1

URL for pretrained weights

Hi,

thank you for uploading the code!
Unfortunately, the URLs for the pretrained weights are not correct... Could you update the links?

"list index out of range" while running `setup.py`

I tried these steps in google colab to run the model, but I got an error while running setup.py

git clone https://github.com/Turoad/clrnet
cd clrnet/
pip install -r requirements.txt
apt install -y ninja-build
python setup.py build develop

and the error is:

No CUDA runtime is found, using CUDA_HOME='/usr/local/cuda'
running build
running build_py
running egg_info
writing clrnet.egg-info/PKG-INFO
writing dependency_links to clrnet.egg-info/dependency_links.txt
writing requirements to clrnet.egg-info/requires.txt
writing top-level names to clrnet.egg-info/top_level.txt
adding license file 'LICENSE'
writing manifest file 'clrnet.egg-info/SOURCES.txt'
running build_ext
building 'clrnet.ops.nms_impl' extension
Traceback (most recent call last):
  File "setup.py", line 116, in <module>
    zip_safe=False)
  File "/usr/local/lib/python3.7/dist-packages/setuptools/__init__.py", line 153, in setup
    return distutils.core.setup(**attrs)
  File "/usr/lib/python3.7/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/usr/lib/python3.7/distutils/dist.py", line 966, in run_commands
    self.run_command(cmd)
  File "/usr/lib/python3.7/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "/usr/lib/python3.7/distutils/command/build.py", line 135, in run
    self.run_command(cmd_name)
  File "/usr/lib/python3.7/distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/usr/lib/python3.7/distutils/dist.py", line 985, in run_command
    cmd_obj.run()
  File "/usr/local/lib/python3.7/dist-packages/setuptools/command/build_ext.py", line 79, in run
    _build_ext.run(self)
  File "/usr/local/lib/python3.7/dist-packages/Cython/Distutils/old_build_ext.py", line 186, in run
    _build_ext.build_ext.run(self)
  File "/usr/lib/python3.7/distutils/command/build_ext.py", line 340, in run
    self.build_extensions()
  File "/usr/local/lib/python3.7/dist-packages/torch/utils/cpp_extension.py", line 708, in build_extensions
    build_ext.build_extensions(self)
  File "/usr/local/lib/python3.7/dist-packages/Cython/Distutils/old_build_ext.py", line 195, in build_extensions
    _build_ext.build_ext.build_extensions(self)
  File "/usr/lib/python3.7/distutils/command/build_ext.py", line 449, in build_extensions
    self._build_extensions_serial()
  File "/usr/lib/python3.7/distutils/command/build_ext.py", line 474, in _build_extensions_serial
    self.build_extension(ext)
  File "/usr/local/lib/python3.7/dist-packages/setuptools/command/build_ext.py", line 202, in build_extension
    _build_ext.build_extension(self, ext)
  File "/usr/lib/python3.7/distutils/command/build_ext.py", line 534, in build_extension
    depends=ext.depends)
  File "/usr/local/lib/python3.7/dist-packages/torch/utils/cpp_extension.py", line 524, in unix_wrap_ninja_compile
    cuda_post_cflags = unix_cuda_flags(cuda_post_cflags)
  File "/usr/local/lib/python3.7/dist-packages/torch/utils/cpp_extension.py", line 423, in unix_cuda_flags
    cflags + _get_cuda_arch_flags(cflags))
  File "/usr/local/lib/python3.7/dist-packages/torch/utils/cpp_extension.py", line 1561, in _get_cuda_arch_flags
    arch_list[-1] += '+PTX'
IndexError: list index out of range

Aboat compiling Culane evaluation tools

I always get the following error when I want to compile the evaluation tools using "make" command
#############################
CXX src/counter.cpp
In file included from include/lane_compare.hpp:4,
from include/counter.hpp:4,
from src/counter.cpp:8:
include/spline.hpp:6:10: fatal error: opencv2/core.hpp: No such file or directory
6 | #include <opencv2/core.hpp>
| ^~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:40: build/src/counter.o] Error 1
#################################

Although the Opencv C++ requirements are reinstalled, the mentioned error has always been raised.

Is there any solution to this error?

Generalization problem

Description of trained model: 10 epoch on tusimple dataset, accuracy 95.5%
I did some experiments on this trained model with my own images and images of CULane, it performed badly:
my own image:
bccc0ecccc278f00c4e0e672f6df40e

image in CULane
a6c9f125072f14efc9c54bc7650d759
I am wondering why it's performing like this. Is increasing the number of epoch useful to solve this?

关于Cross Layer Refinement

您好,我想请教一个问题。
image
我看论文后面“The refinement Rt takes the Pt as input to get the ROI lane features and then performs two FC layers to get the refined parameter Pt.”,好像Rt只把Pt当成输入?那公式里的Lt是什么用的?(额,我整个公式都没看懂)
希望能够获得您的解答,谢谢。

标签分配相关

您好,非常棒的工作!想请教一下,你们有只使用 topk=1策略(或者说匈牙利匹配)时候的准确率结果吗,tusimple和culane两个数据集的,(希望回复的时候可以标上所用的backbone),点赞,谢谢

关于自己训练集训练的问题

我们在您代码的基础上做了一些小改动,总的大体没变。但检测出来的线总是存在一定偏差,我们认为可能是数据处理部分出现了差错。或者这块您有什么想法吗?
Data_20220227_143145_L_220
但是,在数据处理部分generate_lane_line.py,我们发现找不到您配置选项中如'HorizontalFlip'、'MultiplyAndAddToBrightness'对应的代码,这块是如何调用的?接口在哪里?能麻烦您给予一定指导吗?
图片

Code for custom ops for conversion to onnx and trt.

Hello @Turoad . Thanks for sharing your code and for the great work you have accomplished. In another issue, you mentioned that you have written custom operators for roialign, possibly grid_sample, etc to convert the torch model to onnx. Could you please share your code for the same? Thanks in advance!

python setup.py build develop

image
当我运行setup.py安装nms_impl等包时,一直报错:
/usr/include/c++/7/bits/basic_string.tcc:1067:16: error: cannot call member function ‘void std::basic_string<_CharT, _Traits, _Alloc>::_Rep::_M_set_sharable() [with _CharT = char16_t; _Traits = std::char_traits<char16_t>; _Alloc = std::allocator<char16_t>]’ without object
__p->_M_set_sharable();
~~~~~~~~~^~
网上说是因为CUDA10.1的问题,但因为是公用服务器没有权限修改CUDA版本,也无法安装nvcc,请问有其他解决方法吗?

question about cls_modules

Hi! Thank you so much for this valuable work for the community. I would like to ask, in line 73 of clrnet/model/head/clrhead.py, is the role of self.cls_modules to judge whether the priority contains lane line samples?

how to cache ?

Thank you for releasing your code. How to cache the culane dataset in datasets/culane.py?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.