LaneNet代码总结
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的解决办法
- 添加环境变量
vim .bashrc
export PYTHONPATH=/root/NEW/:/root/NEW/lanenet-lane-detection-master:$PYTHONPATH
source .bashrc
- 添加所需路径
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')
- 最新版这么解决
修改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
"""