<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Left_control_right的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/Left_control_right</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; Left_control_right]]></copyright><item><title><![CDATA[Makefile]]></title><link>https://blog.csdn.net/Left_control_right/article/details/124819358</link><guid>https://blog.csdn.net/Left_control_right/article/details/124819358</guid><author>Left_control_right</author><pubDate>Tue, 17 May 2022 20:08:33 +0800</pubDate><description><![CDATA[前言

以下内容均来自跟我一起写Makefile，这里表示感谢，侵权删。

关于编译和链接：一般来说，无论是C还是C++，首先要把源文件编译（compile）成中间代码文件，这些中间文件在Windows下是 .obj 文件，UNIX下是 .o 文件，即Object File。然后再把所有的Object File链接（link）成执行文件。

链接时，主要是链接函数和全局变量。所以，我们可以使用这些中间目标文件（ .o 文件或 .obj 文件）来链接我们的应用程序。链接器并不管函数所在的源文件，只管函数的中间]]></description><category></category></item><item><title><![CDATA[ubuntu18.04安装gcc5.4]]></title><link>https://blog.csdn.net/Left_control_right/article/details/120924330</link><guid>https://blog.csdn.net/Left_control_right/article/details/120924330</guid><author>Left_control_right</author><pubDate>Sat, 23 Oct 2021 18:42:14 +0800</pubDate><description><![CDATA[直接使用如下命令会提示找不到gcc5的安装包，那么就需要添加较低版本的源


sudo apt-get install gcc-5

网上搜索得到gcc5对应的Ubuntu版本为16，接下来就对Ubuntu18.04的源文件source.list进行编辑，增加Ubuntu16的源

通过命令用vim编辑器（也选择其他编辑器，如gedit，mousepad等）打开source.list文件，


sudo vim /ect/apt/source.list

在文件尾部增加Ubuntu16的源，我使用的是阿里云]]></description><category></category></item><item><title><![CDATA[Git学习笔记]]></title><link>https://blog.csdn.net/Left_control_right/article/details/118515747</link><guid>https://blog.csdn.net/Left_control_right/article/details/118515747</guid><author>Left_control_right</author><pubDate>Tue, 06 Jul 2021 16:43:52 +0800</pubDate><description><![CDATA[初始化仓库

初始化一个Git仓库，使用git init命令即可将当前目录文件夹变成Git可以管理的仓库。

创建git仓库的本地文件夹即为工作区，创建完毕后其中多了.git文件夹，代表Git的版本库
添加文件

添加文件到Git仓库，分两步：

使用命令git add &lt;file&gt;，注意，可反复多次使用，添加多个文件，实际是添加到暂存区，Git的版本库（.git文件夹）里存了很多东西，其中最重要的就是称为stage（或者叫index）的暂存区，还有Git自动创建的第一个分支master，以及指]]></description><category></category></item><item><title><![CDATA[目标检测之Label Assignment]]></title><link>https://blog.csdn.net/Left_control_right/article/details/111599486</link><guid>https://blog.csdn.net/Left_control_right/article/details/111599486</guid><author>Left_control_right</author><pubDate>Wed, 23 Dec 2020 22:38:15 +0800</pubDate><description><![CDATA[Label Assignment字面意思译作标记分配，目标检测问题一般包括分类和回归两个子任务，那么其Label Assignment就包括下面两个方面：分类任务中正负样本的分配规则和回归任务中回归目标的表示形式。

分类任务中目标类别的判别规则

IoU阈值判别方法：通过 anchor 与 ground truth框之间的 IoU 阈值判定是 positive、negative 还是 ignore。例如RetinaNet中IoU 高于 0.5 为 positive，低于 0.4 为 negative，其.]]></description><category></category></item><item><title><![CDATA[【mmdetection】使用kitti数据集进行训练]]></title><link>https://blog.csdn.net/Left_control_right/article/details/110881893</link><guid>https://blog.csdn.net/Left_control_right/article/details/110881893</guid><author>Left_control_right</author><pubDate>Tue, 08 Dec 2020 21:58:12 +0800</pubDate><description><![CDATA[目录

1 环境配置

2 Kitti数据集转换VOC格式

2.1 标签类别合并

2.2 格式转换

3 仓库中需要修改的文件

4 训练

5 参考

1 环境配置

克隆仓库中的源码，并在目录下创建data文件夹。按照get_started.md文件进行配置，不再赘述。

2 Kitti数据集转换VOC格式

2.1 标签类别合并

mmdetection官方提供的所有代码都默认使用的是coco格式的数据集，本来想要把kitti转换成coco格式，但是无奈时间紧急没有找到合适的转换代码，只找到了VO]]></description><category></category></item><item><title><![CDATA[OpenPCDet在Xavier上的环境配置]]></title><link>https://blog.csdn.net/Left_control_right/article/details/110695274</link><guid>https://blog.csdn.net/Left_control_right/article/details/110695274</guid><author>Left_control_right</author><pubDate>Sat, 05 Dec 2020 16:17:53 +0800</pubDate><description><![CDATA[1.配置cuda10.0和cudNN7.5环境


	库文件加入CUDA路径

	
		jetson xavier默认安装了CUDA10.0，但无法直接运行nvcc -V，需要将CUDA的路径写入环境变量中
		
	
#命令行输入
sudo gedit ~/.bashrc
#在其中最后添加：
export CUBA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH
...]]></description><category></category></item><item><title><![CDATA[ubuntu18.04安装ssh服务]]></title><link>https://blog.csdn.net/Left_control_right/article/details/110685535</link><guid>https://blog.csdn.net/Left_control_right/article/details/110685535</guid><author>Left_control_right</author><pubDate>Sat, 05 Dec 2020 15:07:33 +0800</pubDate><description><![CDATA[写在前面：在配置工控机RCS-9421FR显卡驱动时，禁用nouveau后重启会黑屏，部分主机可能黑屏情况下Ctrl+Alt+F1-F6都无法进入终端界面，比如这台工控机。而不安装ssh服务无法建立远程连接，更无法使用xshell等连接远程主机，当然建立连接的前提是两台机器在同一局域网下。这里为方便在另一台计算机上连接此工控机进行操作，学习了一下，记录备查。

1.安装openssh-service


sudo apt install openssh-server

2.启动ssh服务


sudo se]]></description><category></category></item><item><title><![CDATA[工控机RCS-9421FR安装ubuntu18.04及nvidia显卡驱动踩坑记录]]></title><link>https://blog.csdn.net/Left_control_right/article/details/110679389</link><guid>https://blog.csdn.net/Left_control_right/article/details/110679389</guid><author>Left_control_right</author><pubDate>Sat, 05 Dec 2020 14:41:32 +0800</pubDate><description><![CDATA[1.使用rufus制作ubuntu18.04启动盘。

2.插入启动盘，开机滴滴声响时按Del键进入bios界面，进入Boot选项卡，设置最先启动项为启动盘；进入Save选项卡，选择Save and reboot，保存并重启。

3.重启后安装ubuntu18.04，根据个人需要选择安装过程中的选项即可，安装完成后重启。

4.该工控机重启后遇到的问题是：开机无法进入登录界面，一直是紫色背景，鼠标无法打开终端，这里博主说是GDM出现了兼容性问题，换个其他的界面登录器（LightDM）就可以解决问题。
首先确]]></description><category></category></item><item><title><![CDATA[ubuntu18.04非管理员用户安装cuda以及cudnn]]></title><link>https://blog.csdn.net/Left_control_right/article/details/109498749</link><guid>https://blog.csdn.net/Left_control_right/article/details/109498749</guid><author>Left_control_right</author><pubDate>Wed, 04 Nov 2020 21:17:44 +0800</pubDate><description><![CDATA[服务器电脑上有实验室同门的各种环境，为了不搞崩大家的环境同时避免自己的环境被别人搞崩，在个人用户下再装一下cuda和cudnn。按照下面的步骤执行之前，需要有管理员账户和密码。

CUDA

在官网下载需要的版本，我这里下载的是10.0.版本及其补丁。


chmod +x cuda_10.0.130_410.48_linux.run 
sudo sh ./cuda_10.0.130_410.48_linux.run

然后跟着指示选择


###接受巴拉巴拉协议
Do you accept the ...]]></description><category></category></item><item><title><![CDATA[second.pytorch安装踩坑实录]]></title><link>https://blog.csdn.net/Left_control_right/article/details/109225993</link><guid>https://blog.csdn.net/Left_control_right/article/details/109225993</guid><author>Left_control_right</author><pubDate>Fri, 23 Oct 2020 09:29:14 +0800</pubDate><description><![CDATA[写在前面

下载的时候一定要注意second.pytorch的版本，不然安装完spconv后，尝试Kitti Viewer Web的时候可能会一直报错“cannot import name 'rbbox_intersection'”，附上没有此问题的代码仓库：https://github.com/traveller59/second.pytorch/tree/v1.5.1

安装步骤

安装

克隆代码
	
###如果克隆失败，可以手动进入仓库网址下载，再上传服务器###
git clone https:/]]></description><category></category></item><item><title><![CDATA[ubuntu18.04安装spconv踩坑实录]]></title><link>https://blog.csdn.net/Left_control_right/article/details/109161641</link><guid>https://blog.csdn.net/Left_control_right/article/details/109161641</guid><author>Left_control_right</author><pubDate>Thu, 22 Oct 2020 11:07:07 +0800</pubDate><description><![CDATA[git clone https://github.com/traveller59/spconv spconv_8da6f96 --recursive
cd spconv_8da6f96
git checkout 8da6f967fb9a054d8870c3515b1b44eca2103634
git am 0001-Allow-to-specifiy-CUDA_ROOT-directory-and-pick-corre.patch
{git config --global user.email "you@.]]></description><category></category></item><item><title><![CDATA[torch-sparse安装问题]]></title><link>https://blog.csdn.net/Left_control_right/article/details/107338479</link><guid>https://blog.csdn.net/Left_control_right/article/details/107338479</guid><author>Left_control_right</author><pubDate>Tue, 14 Jul 2020 15:06:34 +0800</pubDate><description><![CDATA[无论怎么修改环境变量就是搞不成，简单粗暴点，直接在终端输入以下命令，使用临时变量，路径即cuda的安装路径


export CUDA_HOME=/usr/local/cuda-10.0

torch-sparse、torch_geometric、torch_scatter、torch_cluster等版本问题参考的这位老哥的博客
...]]></description><category></category></item><item><title><![CDATA[if(!cin) return false；]]></title><link>https://blog.csdn.net/Left_control_right/article/details/107242650</link><guid>https://blog.csdn.net/Left_control_right/article/details/107242650</guid><author>Left_control_right</author><pubDate>Fri, 10 Jul 2020 09:00:23 +0800</pubDate><description><![CDATA[关于c++ PP679页中if(!cin)一行的测试


bool test()
{
    int a;
    cin&gt;&gt;a;
    if(!cin)
        return false;
    return true;
}

编写以上测试函数发现，当输入a为int型值的时候，函数返回值为1；输入非定义类型，如字符或者字符串时，函数返回值为0。

所以这一行的作用应该就是测试输入类型是否合法，防止输入错误数据。
...]]></description><category></category></item><item><title><![CDATA[c++填坑之字符数组]]></title><link>https://blog.csdn.net/Left_control_right/article/details/107072382</link><guid>https://blog.csdn.net/Left_control_right/article/details/107072382</guid><author>Left_control_right</author><pubDate>Wed, 01 Jul 2020 21:37:56 +0800</pubDate><description><![CDATA[先来一个问题，你知道一下字符数组定义的区别嘛？


char ch[5] = "hello";//1
char ch[6] = "hello";//2
char ch[6] = {"hello"};//3
char ch[5] = { 'h','e','l','l','o' };//4
char ch[6] = { 'h','e','l','l','o' };//5

首先第1、2、3种都是以字符串常量初始化字符数组，但是第1种编译器会报错，由于c++的字符串以‘\0’结尾，相当于下面这样，超过数组长度当然]]></description><category></category></item><item><title><![CDATA[join方法]]></title><link>https://blog.csdn.net/Left_control_right/article/details/106994637</link><guid>https://blog.csdn.net/Left_control_right/article/details/106994637</guid><author>Left_control_right</author><pubDate>Sun, 28 Jun 2020 10:59:32 +0800</pubDate><description><![CDATA[a = ['12233','yhyhyhy']
b = ['_'.join(x) for x in a]
print(b)
['1_2_2_3_3', 'y_h_y_h_y_h_y']


a = [['12233'],['yhyhyhy']]
b = ['_'.join(x) for x in a]
print(b)
['12233', 'yhyhyhy']


a = [['12233','yhyhyhy']]
b = ['_'.join(x) for x in a]
print(b)
['12233.]]></description><category></category></item><item><title><![CDATA[服务器ubuntu18.04安装nvidia显卡驱动报错：”The CC version check failed”]]></title><link>https://blog.csdn.net/Left_control_right/article/details/106984925</link><guid>https://blog.csdn.net/Left_control_right/article/details/106984925</guid><author>Left_control_right</author><pubDate>Sat, 27 Jun 2020 17:33:06 +0800</pubDate><description><![CDATA[实验室服务器不知道怎么搞得，显卡驱动被更改了，由于只是显卡驱动更改，只需要卸载重装就可以解决，记录备查。

1.禁用nouveau

打开终端，输入：


sudo vim /etc/modprobe.d/blacklist.conf

在文件末尾加上以下两行并保存：


blacklist nouveau
options nouveau modeset=0

然后执行命令：


sudo update-initramfs -u  //应用更改

重启电脑（若服务器有多个账户，最好提醒大家各自杀掉自己的进程]]></description><category></category></item><item><title><![CDATA[c++实现十种排序算法]]></title><link>https://blog.csdn.net/Left_control_right/article/details/106357210</link><guid>https://blog.csdn.net/Left_control_right/article/details/106357210</guid><author>Left_control_right</author><pubDate>Tue, 26 May 2020 18:16:20 +0800</pubDate><description><![CDATA[基础排序

冒泡排序

每一轮都是从头开始，谁大谁上。效率低。


void bubbleSort(int arr[], int length)
{
	if (arr == NULL || length &lt; 2)
		return;
	for (int i = 0; i &lt; length - 1; i++)
	{
		for (int j = 0; j &lt; length - i - 1; j++)
		{
			if (arr[j] &gt; arr[j + 1])
			{
				sw]]></description><category></category></item><item><title><![CDATA[递归]]></title><link>https://blog.csdn.net/Left_control_right/article/details/105296987</link><guid>https://blog.csdn.net/Left_control_right/article/details/105296987</guid><author>Left_control_right</author><pubDate>Fri, 03 Apr 2020 17:35:00 +0800</pubDate><description><![CDATA[递归设计经验

1.找重复（分析问题，将问题转化成子问题，可以尝试“切蛋糕”的方法。子问题与原问题具有相同的形式，可以由一到多，例如T8汉诺塔，即将原问题化为多个子问题）

2.找重复中的变化量（需要传递到函数中的参数）

3.找出口（递归结束的点，参数变化到何值时可以结束）

注意：如果涉及的递归函数有返回值，函数中调用自身的那一行需要加一个return，不然就算在后一层在出口位置返回了，也无...]]></description><category></category></item><item><title><![CDATA[位运算的奇技淫巧]]></title><link>https://blog.csdn.net/Left_control_right/article/details/105157806</link><guid>https://blog.csdn.net/Left_control_right/article/details/105157806</guid><author>Left_control_right</author><pubDate>Sat, 28 Mar 2020 14:40:35 +0800</pubDate><description><![CDATA[T0给定0-1之间double类型实数，给出他的二进制表示，32位之内无法表示输出ERROR


string s = "0.";
while(n != 0)
{
    n *= 2;
    if(n &gt; 1)
    {
        s.append("1");
        n -= 1;
    }
    else
        s.append("0");
    ...]]></description><category></category></item><item><title><![CDATA[c++中的移位操作……填坑系列]]></title><link>https://blog.csdn.net/Left_control_right/article/details/104844503</link><guid>https://blog.csdn.net/Left_control_right/article/details/104844503</guid><author>Left_control_right</author><pubDate>Fri, 13 Mar 2020 19:25:46 +0800</pubDate><description><![CDATA[首先需要明确一点，计算机中的二进制数都是用其补码表示的，所有的移位运算都是在补码的表示形式上进行操作的，无符号数的补码是其本身，有符号数的补码是符号位不变，其他位求反加1。这里说的很清楚。

无符号数

左移：高位移出，低空位补0。相当于乘以2的n次方

当左移一定位数时，最高位变为1，这时计算机会认为这是一个负数的补码，这时你输出一下计算机就会显示一个负数。如果左移位数超过int类型数值的位数，...]]></description><category></category></item></channel></rss>