LaneNet-Towards End-to-End Lane Detection: an Instance Segmentation Approach代码复现(车道线检测)

1. 数据集准备

下载tusimple训练集、测试集后解压缩到一个目录下
在这里插入图片描述
还要下载好vgg16.npy ,对应下边的路径

    pretrained_weights = np.load(
        './data/vgg16.npy', encoding='latin1', allow_pickle=True).item()

训练好的的模型 New_Tusimple_Lanenet_Model_Weights

2. 先测试一下作者给的样例以及训练好的模型

python tools/test_lanenet.py --weights_path model/New_Tusimple_Lanenet_Model_Weights/tusimple_lanenet_vgg.ckpt  --image_path data/tusimple_test_image/0.jpg

在这里插入图片描述

3. 用 generate_tusimple_dataset.py 产生 binary mask 和 instance mask

 python  tools/generate_tusimple_dataset.py --src_dir=/home/stone/lane/TuSimple

在这里插入图片描述
在这里插入图片描述
这个命令生成了train.txt

4. 生成tfrecords

python data_provider/lanenet_data_feed_pipline.py --dataset_dir /home/stone/lane/TuSimple/training --tfrecords_dir ./tfrecords

Generate training example index file, split source file into 0.85, 0.1, 0.05 for training,
testing and validation. Each image folder are processed separately

stepsize=1000
在这里插入图片描述

5.初次训练

--dataset_dir 是tfrecords所在路径
self._tfrecords_dir = ops.join(dataset_dir, 'tfrecords')
 python tools/train_lanenet.py --dataset_dir ./  --multi_gpus False --net_flag vgg

在这里插入图片描述
tensorboard查看

 cd tboard/tusimple_lanenet_vgg/
  tensorboard --logdir=.

checkpoint训练

 python tools/train_lanenet.py --dataset_dir ./ --multi_gpus False --net_flag vgg --weights_path ./model/tusimple_lanenet_vgg/tusimple_lanenet_vgg_2021-03-29-13-28-58.ckpt-2001

自己的模型测试

python tools/test_lanenet.py --weights_path model/tusimple_lanenet_vgg/tusimple_lanenet_vgg_2021-03-29-14-56-59.ckpt-2002  --image_path data/tusimple_test_image/1.jpg

代码结构

来源:https://www.cnblogs.com/xuanyuyt/p/11523192.html

lanenet-lane-detection
    ├── config //配置文件
    ├── data //一些样例图片和曲线拟合参数文件
    ├── data_provider // 用于加载数据以及制作 tfrecords
    ├── lanenet_model 
    │   ├── lanenet.py //网络布局 inference/compute_loss/compute_acc
    │   ├── lanenet_front_end.py // backbone 布局
    │   ├── lanenet_back_end.py // 网络任务和Loss计算 inference/compute_loss
    │   ├── lanenet_discriminative_loss.py //discriminative_loss实现
    │   ├── lanenet_postprocess.py // 后处理操作,包括聚类和曲线拟合
    ├── model //保存模型的目录semantic_segmentation_zoo
    ├── semantic_segmentation_zoo // backbone 网络定义
    │   ├── __init__.py
    │   ├── vgg16_based_fcn.py //VGG backbone
    │   └─+ mobilenet_v2_based_fcn.py //mobilenet_v2 backbone
    │   └── cnn_basenet.py // 基础 block
    ├── tools //训练、测试主函数
    │   ├── train_lanenet.py //训练
    │   ├── test_lanenet.py //测试
    │   └──+ evaluate_dataset.py // 数据集评测 accuracy
    │   └── evaluate_lanenet_on_tusimple.py // 数据集检测结果保存
    │   └── evaluate_model_utils.py // 评测相关函数 calculate_model_precision/calculate_model_fp/calculate_model_fn
    │   └── generate_tusimple_dataset.py // 原始数据转换格式
    ├─+ showname.py //模型变量名查看
    ├─+ change_name.py //模型变量名修改
    ├─+ freeze_graph.py//生成pb文件
    ├─+ convert_weights.py//对权重进行转换,为了模型的预训练
    └─+ convert_pb.py //生成pb文

缺少moudle的解决办法

  1. 添加环境变量
vim .bashrc
export PYTHONPATH=/root/NEW/:/root/NEW/lanenet-lane-detection-master:$PYTHONPATH
source .bashrc
  1. 添加所需路径
    test_lanenet.py
import sys 
sys.path.append('/home/stone/lane/')
sys.path.append('/home/stone/lane/config')
sys.path.append('/home/stone/lane/data_provider')
sys.path.append('/home/stone/lane/lanenet_model')
sys.path.append('/home/stone/lane/tools')
  1. 最新版这么解决
修改tusimple_lanenet.yaml
    DATA_DIR: '/media/stone/.新加卷/desk/lanedetection/lanelinux/lanenet-lane-detection/data/TuSimple/training'
    IMAGE_TYPE: 'rgb'  # choice rgb or rgba
    NUM_CLASSES: 2
    TEST_FILE_LIST: '/media/stone/新加卷/desk/lanedetection/lanelinux/lanenet-lane-detection/data/TuSimple/training/test.txt'
    TRAIN_FILE_LIST: '/media/stone/新加卷/desk/lanedetection/lanelinux/lanenet-lane-detection/data/TuSimple/training/train.txt'
    VAL_FILE_LIST: '/media/stone/新加卷/desk/lanedetection/lanelinux/lanenet-lane-detection/data/TuSimple/training/val.txt'

参考来源

https://adamshan.blog.csdn.net/article/details/90578382
https://blog.csdn.net/Hellow_RMB/article/details/107201309
https://github.com/MaybeShewill-CV/lanenet-lane-detection

记录

generate_tusimple_dataset.py ------------最终生成train.txt 和原始的 training 三个文件夹
def init_args                           --src_dir    得到数据集路径   
def process_json_file
    """
    :param json_file_path:
    :param src_dir: origin clip file path
    :param ori_dst_dir:
    :param binary_dst_dir:
    :param instance_dst_dir:
    :return:
    """

def gen_train_sample()               制造train.txt
def process_tusimple_dataset(src_dir):                 #创建文件处理数据等等
    """
    :param src_dir:
    :return:
    """
    traing_folder_path = ops.join(src_dir, 'training')
    testing_folder_path = ops.join(src_dir, 'testing')  
   
glob用法
比如:
glob.glob(r’c:*.txt’)
我这里就是获得C盘下的所有txt文件

    
        for json_label_path in glob.glob('{:s}/label*.json'.format(src_dir)):
        json_label_name = ops.split(json_label_path)[1]
        shutil.copyfile(json_label_path, ops.join(traing_folder_path, json_label_name))
        
shutil.copyfile(src, dst, *, follow_symlinks=True)
 shutil.copyfile 将名为 src 的文件的内容(不包括元数据)拷贝到名为 dst 的文件并以尽可能高效的方式返回 dst。 src 和 dst 均为路径类对象或以字符串形式给出的路径名。


if __name__ == '__main__':
    args = init_args()

    process_tusimple_dataset(args.src_dir)

lanenet_data_feed_pipline.py
def init_args():
    """

    :return:
    """
    parser = argparse.ArgumentParser()
    parser.add_argument('--dataset_dir', type=str, help='The source nsfw data dir path')
    parser.add_argument('--tfrecords_dir', type=str, help='The dir path to save converted tfrecords')

    return parser.parse_args()

class LaneNetDataProducer(object):
    """
    Convert raw image file into tfrecords
    """
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值