视觉学习笔记4——学习研究ORB-SLAM3
文章目录
- 一、ORB-SLAM3是什么?
- 二、配置安装ORB-SLAM3
- 1.运行环境
- 2.配置Pangolin环境
- 3.配置opencv 环境
- 4.配置Eigen3环境
- 4.配置boost环境
- 4.配置DBoW2 和 g2o环境
- 5.安装编译OBR-SLAM3 1.0版本
- 6.安装编译ROS
- 三、OBR-SLAM3与ROS调试
- 1.使用ROS usb_cam调用USB摄像头
- 2.初试ORB-SLAM3 1.0版本
- 3.转战OBR-SLAM3 0.3版本
- 4.ORB-SLAM3 0.3版本运行单目USB摄像头
- 5.再战ORB-SLAM3 1.0版本
- 6.ORB-SLAM3 1.0版本运行单目USB摄像头
- 7.ORB-SLAM3 1.0版本运行双目摄像头
- 8.双目参数标定
一、ORB-SLAM3是什么?
ORB-SLAM3是第一个能够让单目、立体和RGB-D相机和针孔和鱼眼镜头模型解耦进行视觉、视觉惯性和多地图SLAM的系统。第一个主要的创新是一个基于特征的紧密集成视觉惯性SLAM系统,它完全依赖于最大后验概率(MAP)估计,甚至在IMU初始化阶段也是如此。第二个主要的创新是一个多地图系统,它依赖于一种新的位置识别方法和改进的召回。多亏了它,ORB-SLAM3能够在长时间的不良视觉信息下生存:当它丢失时,它会启动一个新的地图,当重新访问地图区域时,它将与以前的地图无缝地合并。与只使用最后几秒信息的视觉里程计系统相比,ORB-SLAM3也是第一个能够在所有算法阶段重用所有先前信息的系统。这允许在BA优化中使用历史的共视关键帧,即使这些关键帧来自很久以前的地图或者不同子图。该系统在小型和大型,室内和室外环境中都能稳定地运行,并且比以前的方法精确2到5倍。
开源地址
论文地址
二、配置安装ORB-SLAM3
1.运行环境
- i7
- GTX 1660 TI
- ubuntu18.04
2.配置Pangolin环境
查看ORB-SLAM3的项目要求,要求安装Pangolin
1. 安装Pangolin所需要的依赖
查了一下其他大佬的方法
终端逐条运行以下命令:
sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev CMake
sudo apt install cmake
sudo apt install libpython2.7-dev
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
sudo apt-get install cmake libeigen3-dev libsuitesparse-dev qtdeclarative5-dev qt5-qmake libqglviewer-dev
sudo apt-get install libboost-dev
2. 编译安装Pangolin
终端逐条运行以下命令:
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
但是编译出现以下问题
大概意思是有的包配置文件没找到,或者干脆没安装,于是按照Pangolin的sh配置文件再安装一次。
终端cd到Pangolin文件夹下,执行以下命令:
./scripts/install_prerequisites.sh recommended
然后重复之前的命令:
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
sudo make install
最终编译成功,会默认安装在/usr/local/include/pangolin
3.配置opencv 环境
OBR官方提示OpenCV(要求>3.0)
关于怎么安装可以参考我这篇博客。
4.配置Eigen3环境
基于很多博客说建议源码安装,决定跟着大队走
其实前面已经有安装了,但是以防万一
sudo apt-get install libeigen3-dev
sudo updatedb #创建或更新 slocate/locate 命令所必需的数据库文件
locate eigen3 #查看位置,我的是安装在了/usr/include
4.配置boost环境
ubuntu18.04 下默认boost版本 1.65.0,就算不进行到命令行安装ros也会自动安装,随意吧。
sudo apt-get install libboost-system-dev
更新:手动源码安装无法嵌入ros中,安装ros时还会再次命令行安装boost1.65版本,所以不需要手动安装,而且多版本boost存在有时会导致冲突。以下boost1.70步骤不需要进行,只做记录。
(1)下载boost库,我使用的是1.7.0 版本
(2)进入到该目录,解压到自己想放的位置
(3)之后通过终端进入boost目录执行命令
cd boost
sudo ./bootstrap.sh
bootstrap.sh会产生bjam和b2两个工具,继续执行
sudo ./b2 install
这个时候你的/usr/local/include下会产生boost的头文件,/usr/local/lib下面会产生boost库
(4)切换到profile.d目录下,使用超级用户创建文件boost.sh
cd /etc/profile.d
sudo touch boost.sh
sudo vim boost.sh
在里面添加如下内容
#!/bin/sh
BOOST_ROOT=(boost的解压路径)
BOOST_INCLUDE=/usr/local/include/boost
BOOST_LIB=/usr/local/lib
export BOOST_INCLUDE BOOST_LIB BOOST_ROOT
修改boost.sh的权限 ,执行 boost.sh
sudo chmod +x boost.sh
source /etc/profile.d/boost.sh
卸载源码安装boost:
sudo rm -rf /usr/local/include/boost
sudo rm -rf /usr/local/lib/libboost*
sudo rm -rf /usr/local/lib/cmake/*1.70.0*
卸载命令行安装boost:
要注意会同时把ros一起卸载掉
sudo apt-get autoremove libboost1.65-dev
查询版本
dpkg -l | grep boost1.XX
4.配置DBoW2 和 g2o环境
按照OBR官方提示:
我们使用DBoW2库的修改版本来执行地点识别和g2o库来执行非线性优化。两个修改后的库(BSD)都包含在第三方文件夹中。
意思应该是OBR包里包含了,不需要另外安装。
不过需要安装依赖:
sudo apt-get install libcanberra-gtk-module
sudo apt-get install libssl-dev
5.安装编译OBR-SLAM3 1.0版本
进入SLAM文件夹,运行以下命令:
cd ORB-SLAM3/
chmod +x build.sh
sudo ./build.sh
建议把build.sh中的指令逐条进行,这样就可以具体知道是哪个部分出问题了。
build.sh中的内容如下:
echo "Configuring and building Thirdparty/DBoW2 ..."cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -jcd ../../g2oecho "Configuring and building Thirdparty/g2o ..."mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -jcd ../../../echo "Uncompress vocabulary ..."cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..echo "Configuring and building ORB_SLAM3 ..."mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
出现报错:
找了很多资料,借鉴这个博客
确定是boost的问题,具体解决可以看上面的方法。
解决后删掉ORB-SLAM3下的bulid文件夹,重新编译,建议把build.sh中的指令逐条进行,这样就可以具体知道是哪个部分出问题了。
6.安装编译ROS
不同的Unbutn安装的Ros版本不同。Ubuntu18.04对应的ros版本为ROS Melodic
因为ROS挺多教程的,我参考这篇 博客。我遇到的所有问题他都给出解决方案实在良心,所以我就不专门写出具体的过程 ,直接套娃。
三、OBR-SLAM3与ROS调试
1.使用ROS usb_cam调用USB摄像头
先创建文件夹,具体位置可以自己选择
mkdir -p catkin_ws/src
cd catkin_ws/src
然后下载usb_cam文件,可以终端下载也可以手动github或gitee下载
git clone https://github.com/ros-drivers/usb_cam.git
但是要注意先确定你的usb摄像头的编号和修改launch文件,不然要么会调用到默认摄像头要么报错。
查看接入的USB摄像头的设备号
ls /dev/video*
修改catkin_ws/src/usb_cam/launch/usb_cam-test.launch里面的参数,默认是/dev/video0
param name=“video_device” value=“/dev/video0”
修改后,终端回退到catkin_ws,编译usb_cam文件,
cd ../../../
catkin_make
编译失败1:
ERROR: cannot launch node of type [usb_cam/usb_cam_node]: usb_cam
解决1:
需要在终端./catkin_ws中打开以下目录 并键入以下命令
source devel/setup.bash
安装依赖
sudo apt install ros-melodic-uvc-camera
sudo apt install ros-melodic-image-view
sudo apt install ros-melodic-usb-cam
进入catkin_ws/src/usb_cam/launch文件夹打开终端,运行命令:
roslaunch usb_cam-test.launch
记得去对自己的USB相机进行标定,有关资料不在此列出!!!!
2.初试ORB-SLAM3 1.0版本
方法一、直接安装.sh命令:
cd ORB-SLAM3/
chmod +x build.sh sudo ./build.sh方法二、 进入build.sh间接安装:
echo "Configuring and building Thirdparty/DBoW2 ..."cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -jcd ../../g2oecho "Configuring and building Thirdparty/g2o ..."mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -jcd ../../../echo "Uncompress vocabulary ..."cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..echo "Configuring and building ORB_SLAM3 ..."mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j编译ros环境:
cd ..
./build_ros.sh
报错1:
No module named ‘rospkg’
解决方法:
虚拟环境 (虚拟环境名)
conda activate 虚拟环境名 #进入虚拟环境
conda install pip # 这里是让conda用虚拟环境里的 pip 确保 rospkg 装在该环境
pip install rospkg非虚拟环境下 (base)
pip install rospkg
报错2:
解决方法:
尝试了各种修改路径的方法,仍然是提示报错,但是gedit ~/.bashrc路径明明是添加进去了…
gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/xxx/Guide_blind/ORB_SLAM3/Examples/ROS
source ~/.bashrc
后来发现是Examples和Examples_old文件问题
首先感谢这篇博客的博主,特别是这几天github有进不去了,以及感谢github问题区的解决者
其实解决这个问题需要先进行另一个步骤:
因为我现在编译的是ORB_SLAM1.0版本,这个版本有一个不同,就是区分Examples和Examples_old文件,我们需要的一些文件是在Examples_old文件中,需要先建立软链接:
1、在Examples中新建文件夹ROS,进入ROS文件夹终端
2、sudo ln -s /home/xxx/Guide_blind/ORB_SLAM3/Examples_old/ROS/ORB_SLAM3 /home/xxx/Guide_blind/ORB_SLAM3/Examples/ROS
3、./build.sh
不间断运行 ./build_ros.sh
,会持续出现以下问题:
问题1:
提示找不到sophus库,修改Examples/ROS/ORB_SLAM3下的CMAKELISTS中添加修改为 {PROJECT_SOURCE_DIR}/…/…/…/Thirdparty/Sophus
问题2:
解决 cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec()); 报错
#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
引入上述两个头文件,然后删除ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc第151行,由下面内容替换
cv::Mat Tcw;
Sophus::SE3f Tcw_SE3f = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());
Eigen::Matrix4f Tcw_Matrix = Tcw_SE3f.matrix();
cv::eigen2cv(Tcw_Matrix, Tcw);
问题3:
解决 cv::Mat Xw = pMP->GetWorldPos();报错
引入上述两个头文件,然后删除ROS/ORB_SLAM3/src/AR/ViewerAR.cc第530行,由以下内容替换
cv::Mat Xw;
cv::eigen2cv(pMP->GetWorldPos(), Xw);
问题4:
cv中的eigen2cv问题,建议在每个修改文件的顶部包含以下文件头文件:
#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
再编译,没有其他问题的话正常编译通过。
报错3:
解决方法:
没有解决的头绪,借鉴了挺多博客,总结了一下可能存在的问题:
- EIGEN版本问题
- Pangolin的版本问题
- CMAKELISTS中-march=native矩阵问题
- cv_bridge版本问题
- ROS的opencv3.2与本机opencv4.4冲突问题
尝试了近一个星期,这些问题解决方法并没有给我解决问题的根源。
后来迫不得已去更换orb-slam3 Tags中的v0.3版本重新编译。
3.转战OBR-SLAM3 0.3版本
与前面的1.0的步骤差不多,细节看前面:
echo "Configuring and building Thirdparty/DBoW2 ..."cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -jcd ../../g2oecho "Configuring and building Thirdparty/g2o ..."mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -jcd ../../../echo "Uncompress vocabulary ..."cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..echo "Configuring and building ORB_SLAM3 ..."mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -jcd ..
./build_ros.sh
到这里和上面的安装编译是大同小异,如果只是这样直接尝试启动单目的话依然是失败的
#第一个窗口启动ROS服务
roscore
#第二个窗口启动usb摄像头节点
roslaunch usb_cam-test.launch
#第三个窗口启动SLAM3
rosrun ORB_SLAM3 Mono /home/xxx/Guide_blind/ORB_SLAM3/Vocabulary/ORBvoc.txt /home/xxx/Guide_blind/ORB_SLAM3/Examples/ROS/ORB_SLAM3/Asus.yaml
报错1:
Map Viewer空白, Current Frame没有图像画面。
解决方法:
以下方法有一些可能有用,有一些没有用,请根据自己请况进行修改:
1、cv_bridge编译修改opencv版本(不一定有用),因为在编译./builde_ros时出现警告,提示我opencv版本不对应问题,主要是两种方法,已修改现有的和下载新版本,建议没得办法时尝试,有关资料不在这里列出。
2、先到/opt/ros/melodic/share目录下,删除原来的ORB_SLAM3软连接(如果有的话)
sudo rm -r ORB_SLAM3
在/opt/ros/melodic/share目录下建立软链接
sudo ln -s /home/xxx/Guide_blind/ORB_SLAM3/Examples/ROS/ORB_SLAM3 /opt/ros/melodic/share/ORB_SLAM3
重新编译./builde_ros
此外在/opt/ros/melodic/share目录下建立ORB_SLAM3软链接,我在1.0版本没有尝试过,有兴趣可以自己调试一下。
这时就成功运行单目USB摄像头了
4.ORB-SLAM3 0.3版本运行单目USB摄像头
roscore
roslaunch usb_cam-test.launch
rosrun ORB_SLAM3 Mono /home/xxx/Guide_blind/ORB_SLAM3/Vocabulary/ORBvoc.txt /home/xxx/Guide_blind/ORB_SLAM3/Examples/ROS/ORB_SLAM3/Asus.yaml
5.再战ORB-SLAM3 1.0版本
首先复原初试的步骤,至少那里的步骤大致是没有什么错误的,接下来就是当时的错误“段错误”:
之前也思考过错误来源,经过大量试错,判断应该是opencv的版本冲突问题:
ROS的opencv3.2与本机opencv4.4冲突问题
本来想尝试修改CMakeLists.txt和cv_bridge使用本机opencv4,参考的是这位博主。
可是过程繁琐,且修改或依然无法使用(主要是和个人配置使用的某些环境出现冲突),导致失败。
那么就只能使用ROS的opencv3.2,参考的是这位博主。
找到ORB_SLAM3的CMakeLists.txt文件打开,找个这个位置修改4.4这个值,改为(OpenCV 3 REQUIRED),如图所示:
//find_package(OpenCV 4.4)
find_package(OpenCV 3 REQUIRED)if(NOT OpenCV_FOUND)message(FATAL_ERROR "OpenCV > 4.4 not found.")endif()。
然后把ORB-SLAM3重新编译:
sudo ./build.sh
sudo ./build_ros.sh
报错1:
Map Viewer空白, Current Frame没有图像画面,并在左下角提示WAITING FOR IMAGES 。
解决方法:
1、按理来说,如果没有画面显示waiting for images时,就需要检查一下摄像头订阅。打开.cc文件发现"/camera/image_raw"没有修改成"/usb_cam/image_raw",所以需要修改。
参考这位博主
2、修改之后记得更新ORB_SLAM3软连接,在/opt/ros/melodic/share目录下,删除原来的ORB_SLAM3软连接(如果有的话)
sudo rm -r ORB_SLAM3
在/opt/ros/melodic/share目录下建立软链接
sudo ln -s /home/xxx/Guide_blind/ORB_SLAM3-1.0/Examples_old/ROS/ORB_SLAM3 /opt/ros/melodic/share/ORB_SLAM3
3、修改后需要重新编译ros:
sudo ./build_ros.sh
6.ORB-SLAM3 1.0版本运行单目USB摄像头
第1个终端:
roscore
第2个终端:
roslaunch usb_cam-test.launch
第3个终端:
rosrun ORB_SLAM3 Mono /home/xxx/Guide_blind/ORB_SLAM3-1.0/Vocabulary/ORBvoc.txt /home/xxx/Guide_blind/ORB_SLAM3-1.0/Examples_old/ROS/ORB_SLAM3/Asus.yaml
第4个终端:
rqt_graph
7.ORB-SLAM3 1.0版本运行双目摄像头
这个摄像头是合成图像的双目摄像头,意思就是使用的双目摄像头在计算机上是一个设备,即将两个摄像头的图像合成为了一副图像,此时需要先将一幅图分割为左右两幅,再分别作为一个ros_node发布。
ls /dev/video*
它的编号也只有一个能打开
- 直接打开双目的代码,用以测试
# -*- coding: utf-8 -*-
import cv2
import timeAUTO = False # 自动拍照,或手动按s键拍照
INTERVAL = 2 # 自动拍照间隔
cv2.namedWindow("left")
cv2.namedWindow("right")
cap = cv2.VideoCapture(2)
# 设置分辨率左右摄像机同一频率,同一设备ID;左右摄像机总分辨率3840x1080;分割为两个1920x1080
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
counter = 0
utc = time.time()
folder = "./SaveImage/" # 拍照文件目录def shot(pos, frame):global counterpath = folder + pos + "_" + str(counter) + ".jpg"cv2.imwrite(path, frame)print("snapshot saved into: " + path)
while True:ret, frame = cap.read()print("ret:", ret)# 裁剪坐标为[y0:y1, x0:x1] HEIGHT * WIDTH,#双目相机是两个在一起的,通过剪切坐标位置可以单独分开相机left_frame = frame[0:480, 0:640]right_frame = frame[0:480, 640:1280]cv2.imshow("left", left_frame)cv2.imshow("right", right_frame)now = time.time()if AUTO and now - utc >= INTERVAL:shot("left", left_frame)shot("right", right_frame)counter += 1utc = nowkey = cv2.waitKey(1)if key == ord("q"):breakelif key == ord("s"):shot("left", left_frame)shot("right", right_frame)counter += 1
cap.release()
cv2.destroyWindow("left")
cv2.destroyWindow("right")
- 测试完毕进行后,使用ROS打开双目
复制一份单目的launch文件更名为usb_cam-stereo
修改usb_cam-stereo的video_device和pixel_format,其中pixel_format的类型有mjpeg、yuyv等,根据自己的双目而定。
<launch><node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" ><param name="video_device" value="/dev/video2" /><param name="image_width" value="1280" /><param name="image_height" value="480" /><param name="pixel_format" value="mjpeg" /><param name="camera_frame_id" value="usb_cam" /><param name="io_method" value="mmap"/></node><node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen"><remap from="image" to="/usb_cam/image_raw"/><param name="autosize" value="true" /></node>
</launch>
- 根据修改单目ros_mono.cc的经验去修改ros_stereo.cc文件,和单目一样修改后需要更新软链接和重新编译。
- 在ROS调用双目
在usb_cam文件夹打开终端运行
roslaunch usb_cam-stereo.launch
- 成功后尝试在通过ROS双目调用ORBSLAM3
第1个终端:
roscore
第2个终端:
roslaunch usb_cam-stereo.launch
第3个终端:
rosrun ORB_SLAM3 Mono /home/xxx/Guide_blind/ORB_SLAM3-1.0/Vocabulary/ORBvoc.txt /home/xxx/Guide_blind/ORB_SLAM3-1.0/Examples_old/Stereo/EuRoC.yaml
也可以尝试Stereo文件夹下各个.yaml文件
对比单目而言,双目比较稳定,可以进行适当的运动以及失联后的有效恢复,更快更稳。
8.双目参数标定
在测试中发现Stereo文件夹下各个.yaml文件运行效果都有所差异,尝试制作自己的.yaml文件
- 获取标定数据
打印 一张标定图(盗的图)
制作自己的标定图集,注意摄像头编号、路径、角点和像素
# -*- coding: utf-8 -*-
import cv2
import timeAUTO = True # 自动拍照,或手动按s键拍照
INTERVAL = 6 # 自动拍照间隔
cv2.namedWindow("left")
cv2.namedWindow("right")
cap = cv2.VideoCapture(0)
# 设置分辨率左右摄像机同一频率,同一设备ID;左右摄像机总分辨率3840x1080;分割为两个1920x1080
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
counter = 0
utc = time.time()
folder = "/home/nh666/llw/ORB_FAR/标定图片/" # 拍照文件目录def shot(pos, frame):global counterpath = folder + pos + "_" + str(counter) + ".jpg"cv2.imwrite(path, frame)print("snapshot saved into: " + path)
while True:ret, frame = cap.read()print("ret:", ret)# 裁剪坐标为[y0:y1, x0:x1] HEIGHT * WIDTH,#双目相机是两个在一起的,通过剪切坐标位置可以单独分开相机left_frame = frame[0:480, 0:640]right_frame = frame[0:480, 640:1280]cv2.imshow("left", left_frame)cv2.imshow("right", right_frame)now = time.time()if AUTO and now - utc >= INTERVAL:shot("left", left_frame)shot("right", right_frame)counter += 1utc = nowkey = cv2.waitKey(1)if key == ord("q"):breakelif key == ord("s"):shot("left", left_frame)shot("right", right_frame)counter += 1
cap.release()
cv2.destroyWindow("left")
cv2.destroyWindow("right")
- 得到图集后自己分好类,用MATLAB进行标定
(本来用opencv做的,但是做出来的数据不太对)
按顺序点击
导入图集
开始标注
根据1、2来观察,通过4去删除偏差过大的图片,5用来观察极线,6是导出数据
根据以下数据来修改自己的.yaml文件
建议复制一份新的来修改,怎么修改可以参考这篇博客
- 使用修改过的.yaml文件后,感觉差别不太大,可能需要再去研究一下。
接下来需要进行地图测试了
未完待续。。。
视觉学习笔记4——学习研究ORB-SLAM3相关推荐
- oracle rac 仲裁盘_【学习笔记】深入研究Oracle RAC节点驱逐的条件和案例
天萃荷净 Oracle研究中心学习笔记:分享一篇关于Oracle数据库RAC环境中节点间管理的文章,详细介绍了RAC节点驱逐条件和管理方法. 本站文章除注明转载外,均为本站原创: 转载自loveOra ...
- SilverLight学习笔记--进一步学习Isolated Storage独立存储一(理论篇)
在"silverlight如何在客户端读取文件"以及"silverlight如何在客户端写入文件"两篇文章中我们初步接触了Isolated Storage概念. ...
- Python3学习笔记之-学习基础(第三篇)
Python3学习笔记之-学习基础(第三篇) 文章目录 目录 Python3学习笔记之-学习基础(第三篇) 文章目录 一.循环 1.for循环 2.while循环 3.break,continue 二 ...
- 强化学习笔记-强化学习概述
强化学习笔记-强化学习概述 机器学习分类 强化学习与监督学习的异同点 强化学习基本原理 强化学习解决的是什么样的问题 强化学习分类 请分别解释随机性策略和确定性策略 回报.值函数.行为值函数三个指标的 ...
- OpenCV4学习笔记(41)——ORB特征提取描述算法
今天要整理记录的笔记内容是特征算法中比较常用的一种--ORB特征提取描述算法,顾名思义,ORB算法包含了对特征点的提取和描述这两个部分.而在上次的博文<OpenCV4学习笔记(39)>中, ...
- 学习笔记 mysql_MySQL 学习笔记
MySQL 学习笔记 1 定义 数据库中的表:一行叫一条记录.每一列叫一个属性,或一个字段. 主键:表中的某个特殊字段,具有唯一的确定的值,可以根据该字段唯一的确定一条记录 外键:表中的某个字段的值为 ...
- cocos2d学习笔记2——学习资源
1. 视频 找了好几个视频,有一些讲得好的文件资源没有,后来终于找到一个讲得不错还有文件资源的,还有高清下载地址,虽然是2.2版本的,但是确实能学到不少东西,对用cocos2d做游戏有了基本的印象,对 ...
- lucene学习笔记_学习Lucene
lucene学习笔记 我目前正在与一个团队合作,开始一个基于Lucene的新项目. 虽然大多数时候我会争论使用Solr还是Elasticsearch而不是简单的Lucene,但这是一个有意识的决定. ...
- 大数据业务学习笔记_学习业务成为一名出色的数据科学家
大数据业务学习笔记 意见 (Opinion) A lot of aspiring Data Scientists think what they need to become a Data Scien ...
- Linux学习笔记------java学习
前言 学习笔记仅供参考 该笔记是作者根据b站狂神说视频以及自己翻阅的一些资料而写 视频连接:狂神Linux视频链接 如果有兴趣的小伙伴可以前去观看 如果购买过服务器的话,可以直接使用宝塔进行傻瓜式安装 ...
最新文章
- 阿里巴巴P9大佬雷卷与中间件小哥重新定义:高段位程序员的学习之道
- 构建二叉堆时间复杂度的证明
- 机器学习实战-贝叶斯算法-24
- WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件
- 电脑开机后,就会自动运行chkdsk,我想取消chkdsk,怎么取消
- 学术大数据在企业专家对接中的应用
- python----动态规划
- linux cp通同时新建目录_Linux 新手应该知道的 26 个命令
- 网络协议和Netty
- Spring @AutoWired实现原理
- MWeb Pro for Mac(静态博客生成软件)
- 下载anaconda后配置环境变量
- 财务数据图表分析,这些财务预算表模板免费用
- 利用Python脚本计算基因组测序数据Nx0
- SPA单页面首屏加载慢怎么解决???
- dz3 php post 登录,如何在调用discuz接口中传递登录状态
- Docker-核心篇(1)-CentOS7安装Docker社区版
- Visual Studio中C++部分的官方文档链接【微软(Microsoft)所有产品的官方文档链接】
- 基于模板的云服务视频自动生成解决方案
- [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素-CSDN.NET
热门文章
- python安装需要什么电脑配置_自学python用什么配置电脑?
- mac系统如何进入系统偏好设置_技巧:5 种迅速定位 Mac「系统偏好设置」选项的方法...
- PDF转换成word免费
- 购买您的工作从家庭企业经营使用这些技巧
- flash特效原理:图片切换滚动
- linux磁盘检测工具
- UE4 SceneCapture2D显示人物模型时过滤背景颜色或天空盒
- 灵境(元宇宙)金融投资及监管的探讨
- java 打开笔记本摄像头_如何使用java启用电脑的摄像头摄相拍照
- 山东大学软件学院计算机组成原理课程设计整机实验(2)