CLRNet论文阅读加项目调试

本文贡献:

1:CLRNet说明高级语意和低级语意对车道线检测都很重要,提出一个跨层细化网络结构。

2:为了解决无视觉的问题,提出了ROIGather模块以捕获更多的全局上下文信息。

3:定义了Line IOU损失,将车道作为一个整体进行回归并显著提高了性能。

网络结构:

 从结构图中可以看出,输入一张图像,经过主干网络resnet进行特征提取,然后resnet的后三个stage输出的图片送到FPN中进行特征融合,分别为L0、L1、L2。然后进行特征细化,也就是将特征图L0和先验P0送到Head中,在Head中会有ROIGather模块进行特征的细化。细化完的P和下一层的L,再送到Head中,以此类推。每一个Head都会输出结果,然后有损失函数进行约束。

每个先验都由四部分组成:1、前景和背景概率。2、车道线的长度。3、车道线的起点坐标和与x轴之间的夹角。4、N个偏移量,即预测与其gt之间的水平距离。这个Lane prior是可学习的,也就是x,y,\O三个参数。

只要起始点和夹角确定,Lane prior就确定了。初始的Lane prior是192个,左右各1/8,中间3/4.左右每个起始点设置两种夹角,中间起始点设置四种夹角。由192个三维向量,生成192个78维向量。

1、首先P0+L0送到Head中,在Head中有ROIgather模块进行ROI特征和全局特征的学习,丰富上下文信息。最后可以得到新的x,y,\O。由这三个参数可以生成192个78维向量,然后进行车道线预测,通过Loss模块进行监督。

2、上面的x,y,\varnothing三个参数和72个点组成新的Lane prior,记为P1(refined P0)。P1和L1送到Head中,重复上面的工作,学习新的参数,进行车道线预测,然后通过Loss监督。

3、P2+L2特征继续送到Head中进行学习,并通过Loss进行监督。推理时,这个结果就是最终的预测。

对于clr_head理解

首先初始化先验,x,y,\varnothing。然后对192个3维向量初始化(左,中,右)。然后从编码中生成先验和初始先验特征图。在forward中,会先获得先验和初始先验特征图(好像就是一个索引)。然后将特征图batch_features和先验特征图送到pool_prior_features中得到真正的先验特征图。接下来会进行roi_gather等操作。

ROIgather介绍

 首先用ROIAlign取每个anchor的36个采样点的特征(作者用grid_sample实现),然后送到roi_gather中,首先对roi特征进行一次卷积,然后进行拼接,又进行一次卷积核全连接,得到

C*1的Xp表达。然后对特征图进行resize和flatten,并将Xf和Xp做注意力权重的计算,获得更丰富的上下文信息。q是卷积处理的Xp,k,v为卷积处理的Xf。计算完权重,经过softmax层,并累成。最后加上Xp。

调试过程中遇到的问题:

创建虚拟环境 
conda create -n clrnet python=3.8 -y

激活虚拟环境
conda activate clrnet

安装cudatoolkit=11.3
conda install pytorch torchvision cudatoolkit=11.3 -c pytorch

切换到clrnet项目下
进行requiremennts.txt安装
pip install --user -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com


安装 :
这是错的
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=10.2 -c pytorch

进行安装
python setup.py build develop


建立数据库软连接
ln -s /home/xiaoxing/GANet/datasets/culane data/CULane


执行命令
python main.py configs/clrnet/clr_resnet18_culane.py --gpus 0


报错:意思是cudnn不能加速
自己尝试解决:conda install cudnn=7.6.5

打开配置文件:
sudo gedit ~/.bashrc

最后加上两句话,建立动态软连接
export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

保存配置文件
source ~/.bashrc


删除之前的软链接
sudo rm -rf /usr/local/cuda
建立新链接                       
sudo ln -s /usr/local/cuda-11.3  /usr/local/cuda 

解除一个文件的权限
sudo chmod -R 777 /usr/local(文件路径)

修改文件权限
r 读  w 写 x 可执行
sudo chmod a+rwx /usr/local/cuda-11.3/include/cudnn.h (文件地址,要修改的地方)
sudo chmod a+rwx /usr/local/cuda-11.3/lib64/libcudnn* (文件地址,要修改的地方)

主要是把cudnn文件中的include 和 lib64 中的文件复制到cuda 11.3中对应的include 和 lib64中
cuda 11.3 放在usr/local/文件中

删除 虚拟环境clrnet 
conda remove -n 需要删除的环境名 --all

conda remove -n clrnet --all

设置延时,否则会自动断调
conda config --set remote_read_timeout_secs 2000.0
 


删除之前的软链接
sudo rm -rf /usr/local/cuda
建立新链接                       
sudo ln -s /usr/local/cuda-11.3  /usr/local/cuda 

解除一个文件的权限
sudo chmod -R 777 /usr/local(文件路径)

修改文件权限
r 读  w 写 x 可执行
sudo chmod a+rwx /usr/local/cuda-11.3/include/cudnn.h (文件地址,要修改的地方)
sudo chmod a+rwx /usr/local/cuda-11.3/lib64/libcudnn* (文件地址,要修改的地方)

主要是把cudnn文件中的include 和 lib64 中的文件复制到cuda 11.3中对应的include 和 lib64中
cuda 11.3 放在usr/local/文件中

删除 虚拟环境clrnet 
conda remove -n 需要删除的环境名 --all

conda remove -n clrnet --all

设置延时,否则会自动断调
conda config --set remote_read_timeout_secs 2000.0

最后安装的环境是
cuda 11.3.1 cudnn   8.2.0   pytorch  1.11+cu113  等等


 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
CLRNet是一个基于深度残差网络的图像增强模型,可以用于超分辨率、去噪、图像增强等任务。NCNN是一个高性能的神经网络前向计算框架,可以在移动设备和嵌入式设备上运行。将CLRNet模型转换为NCNN模型可以在移动设备和嵌入式设备上运行CLRNet模型。 下面是CLRNet模型转换为NCNN模型的示例代码: 1. 安装NCNN ```bash git clone https://github.com/Tencent/ncnn.git cd ncnn mkdir build cd build cmake .. make -j4 sudo make install ``` 2. 安装Python工具包 ```bash pip install numpy pip install pillow pip install scipy pip install scikit-image ``` 3. 下载CLRNet模型 可以从CLRNet的官方GitHub仓库下载模型文件。下载完成后,将模型文件放到工作目录中。 4. 使用ncnn转换模型 使用ncnn自带的工具onnx2ncnn将CLRNet模型转换为NCNN模型。 ```bash # 将CLRNet模型转换为ONNX格式 python convert_to_onnx.py # 将ONNX模型转换为NCNN模型 ./onnx2ncnn model.onnx model.param model.bin ``` 5. 载NCNN模型 使用ncnn载NCNN模型进行推理。 ```c++ #include <stdio.h> #include <stdlib.h> #include <ncnn/net.h> #include <opencv2/opencv.hpp> int main(int argc, char** argv) { // 载NCNN模型 ncnn::Net net; net.load_param("model.param"); net.load_model("model.bin"); // 载图像 cv::Mat img = cv::imread("test.jpg"); // 将图像转换为NCNN的Mat格式 ncnn::Mat in = ncnn::Mat::from_pixels(img.data, ncnn::Mat::PIXEL_BGR2RGB, img.cols, img.rows); // 创建NCNN的Extractor ncnn::Extractor ex = net.create_extractor(); // 设置输入数据 ex.input("input", in); // 运行推理 ncnn::Mat out; ex.extract("output", out); // 将结果转换为OpenCV的Mat格式 cv::Mat result(out.h, out.w, CV_32FC1, out.data); // 显示结果 cv::imshow("Result", result); cv::waitKey(0); return 0; } ``` 在这个示例中,我们使用ncnn载了NCNN格式的CLRNet模型,并使用opencv载了一张测试图像。然后,我们将图像转换为NCNN的Mat格式,并创建了一个NCNN的Extractor。接着,我们设置了输入数据,并运行了推理。最后,我们将结果转换为opencv的Mat格式,并显示了结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值