YOLO v3 安装并训练自己数据

文章目录

 

  • 1. 安装
  • 1.1 模型安装
  • 1.2 运行Demo
  • 2.训练自己的数据集
  • 2.1数据集准备
  • 2.2修改配置文件
  • 2.2.1修改cfg/voc.data
  • 2.2.2修改data/voc.names
  • 2.2.3修改cfg/yolo-voc.cfg
  • 2.3 训练
  • 3. 测试
  • 3.1 单张图像测试
  • 3.2多张图像测试
  • 3.3 测试数据集测试mAP、recall等参数
  • 命令参数总结
  • 训练模型
  • 单GPU训练
  • 多GPU训练
  • 测试图片
  • Error
  • /bin/sh: 1: nvcc: not found
  • ./darknet: error while loading shared libraries: libcurand.so.10.0: cannot open shared object file: No such file or directory
  • 参考

1. 安装

1.1 模型安装

YOLO v3的安装与YOLO v2的安装方法一样

<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">git</span> clone https://github.com/pjreddie/darknet
</code></span>

直接使用上边的命令下载YOLO安装包。下载完以后,打开进入到安装包路径内

<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">cd</span> darknet
</code></span>

如果机器有使用GPU加速的环境,以及安装OPENCV了,需要做一下修改

<span style="color:#000000"><code class="language-shell">gedit Makefile
</code></span>

使用gedit打开编译文件,将文件前几行中,对应的GPU、CUDNN、OPENCV由0变为1;

<span style="color:#000000"><code class="language-shell">GPU<span style="color:#6272a4">=</span>1
CUDNN<span style="color:#6272a4">=</span>1
OPENCV<span style="color:#6272a4">=</span>1
</code></span>

对Makefile修改结束以后,就可以进行安装。

<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">make</span> -j
</code></span>

下载YOLO v3权重

<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">wget</span> https://pjreddie.com/media/files/yolov3.weights
</code></span>

1.2 运行Demo

运行Demo查看运行是否成功。

<span style="color:#000000"><code class="language-shell">  ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
</code></span>

2.训练自己的数据集

2.1数据集准备

首先将自己的数据集生成为VOC数据集的格式,至少生成如下格式的文件夹

<span style="color:#000000"><code class="language-shell">Annotations
ImageSets--Main--test.txt--train.txt--trainval.txt--val.txt
JPEGImages
</code></span>

接着将上边四个文件夹放在/darknet/scripts/VOCdevkit/VOC2007内,这个文件夹需要自己来创建一个。接着对/darknet/scripts/voc_label.py进行修改。
第一处
修改第7行

<span style="color:#000000"><code class="language-shell"> sets<span style="color:#6272a4">=</span><span style="color:#999999">[</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'2012'</span>, <span style="color:#f1fa8c">'train'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2012'</span>, <span style="color:#f1fa8c">'val'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'train'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'val'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'test'</span><span style="color:#999999">)</span><span style="color:#999999">]</span>
``<span style="color:#ee9900"><span style="color:#ee9900">`</span>shell
将“<span style="color:#999999">(</span><span style="color:#f1fa8c">'2012'</span>, <span style="color:#f1fa8c">'train'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2012'</span>, <span style="color:#f1fa8c">'val'</span><span style="color:#999999">)</span>,”删除掉,改为
<span style="color:#ee9900">`</span></span>``shellsets<span style="color:#6272a4">=</span><span style="color:#999999">[</span><span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'train'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'val'</span><span style="color:#999999">)</span>, <span style="color:#999999">(</span><span style="color:#f1fa8c">'2007'</span>, <span style="color:#f1fa8c">'test'</span><span style="color:#999999">)</span><span style="color:#999999">]</span>
</code></span>

第二处
修改第9行

<span style="color:#000000"><code class="language-shell"> classes <span style="color:#6272a4">=</span> <span style="color:#999999">[</span><span style="color:#f1fa8c">"aeroplane"</span>, <span style="color:#f1fa8c">"bicycle"</span>, <span style="color:#f1fa8c">"bird"</span>, <span style="color:#f1fa8c">"boat"</span>, <span style="color:#f1fa8c">"bottle"</span>, <span style="color:#f1fa8c">"bus"</span>, <span style="color:#f1fa8c">"car"</span>, <span style="color:#f1fa8c">"cat"</span>, <span style="color:#f1fa8c">"chair"</span>, <span style="color:#f1fa8c">"cow"</span>, <span style="color:#f1fa8c">"diningtable"</span>, <span style="color:#f1fa8c">"dog"</span>, <span style="color:#f1fa8c">"horse"</span>, <span style="color:#f1fa8c">"motorbike"</span>, <span style="color:#f1fa8c">"person"</span>, <span style="color:#f1fa8c">"pottedplant"</span>, <span style="color:#f1fa8c">"sheep"</span>, <span style="color:#f1fa8c">"sofa"</span>, <span style="color:#f1fa8c">"train"</span>, <span style="color:#f1fa8c">"tvmonitor"</span><span style="color:#999999">]</span>
</code></span>

修改为自己检测目标类别名称


完成修改以后可运行文件,生成YOLO训练时使用的labels

<span style="color:#000000"><code class="language-shell">python voc_label.py
</code></span>

运行结束以后,可以在/darknet/scripts/VOCdevkit/VOC2007文件夹内看到labels文件夹,并且在/darknet/scripts文件夹内会生成2007_train.txt、2007_test.txt、2007_val.txt三个文件。到此,数据准备完成。

2.2修改配置文件

<span style="color:#000000"><code class="language-shell">./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23
</code></span>

上边是进行训练的命令,可以按照上边的命令对文件进行修改。

2.2.1修改cfg/voc.data

<span style="color:#000000"><code class="language-shell">classes<span style="color:#6272a4">=</span> 3               //修改为训练分类的个数 
train  <span style="color:#6272a4">=</span> /home/ws/darknet/scripts/2007_train.txt          //修改为数据阶段生成的2007_train.txt文件路径
valid  <span style="color:#6272a4">=</span> /home/ws/darknet/scripts/2007_val.txt           //修改为数据阶段生成的2007_val.txt文件路径
names <span style="color:#6272a4">=</span> data/voc.names
backup <span style="color:#6272a4">=</span> backup
</code></span>

2.2.2修改data/voc.names

在上边修改的文件内有一个data/voc.names文件,里边保存目标分类的名称,修改为自己类别的名称即可。

2.2.3修改cfg/yolo-voc.cfg

第一处
文件开头的配置文件可以按照下边的说明进行修改

<span style="color:#000000"><code class="language-cfg"># Testing
#batch=1
#subdivisions=1
# Training
batch=64                //每次迭代要进行训练的图片数量 ,在一定范围内,一般来说Batch_Size越大,其确定的下降方向越准,引起的训练震荡越小。 
subdivisions=8          //源码中的图片数量int imgs = net.batch * net.subdivisions * ngpus,按subdivisions大小分批进行训练 
height=416              //输入图片高度,必须能被32整除
width=416               //输入图片宽度,必须能被32整除
channels=3              //输入图片通道数
momentum=0.9            //冲量
decay=0.0005            //权值衰减
angle=0                 //图片角度变化,单位为度,假如angle=5,就是生成新图片的时候随机旋转-5~5度    
saturation = 1.5        //饱和度变化大小
exposure = 1.5          //曝光变化大小
hue=.1                  //色调变化范围,tiny-yolo-voc.cfg中-0.1~0.1 
learning_rate=0.001     //学习率
burn_in=1000
max_batches = 120200    //训练次数
policy=steps            //调整学习率的策略
steps=40000,80000       //根据batch_num调整学习率,若steps=100,25000,35000,则在迭代100次,25000次,35000次时学习率发生变化,该参数与policy中的steps对应
scales=.1,.1             //相对于当前学习率的变化比率,累计相乘,与steps中的参数个数保持一致;
</code></span>

注意:如果修改max_batches总的训练次数,也需要对应修改steps,适当调整学习率。
具体的含义可以查看YOLO网络中参数的解读
第二处
修改107行最后一个卷积层中filters,按照filter=5*(classes+5)来进行修改。如果类目为3,则为5*(3+5)=40。

<span style="color:#000000"><code class="language-cfg">[convolutional]
size=1
stride=1
pad=1
filters=40      //计算公式为:filter=3*(classes+5) 
activation=linear
</code></span>

第三处
修改类别数,直接搜索关键词“classes”即可,全文就一个。

<span style="color:#000000"><code> classes=3    
</code></span>

2.3 训练

<span style="color:#000000"><code class="language-shell">./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23 <span style="color:#6272a4">>></span> log.txt
</code></span>

输入上边的指令就可以进行训练,在命令最后的命令>> log.txt是将输出的日志保存到log.txt文件内,这样便于后期训练结果的查看。

3. 测试

3.1 单张图像测试

<span style="color:#000000"><code class="language-shell">./darknet detect cfg/yolo-voc.cfg backup/yolo-voc_final.weights data/dog.jpg
</code></span>
<span style="color:#000000"><code class="language-shell">./darknet detect <span style="color:#999999">[</span>训练cfg文件路径<span style="color:#999999">]</span> <span style="color:#999999">[</span>权重文件路径<span style="color:#999999">]</span> <span style="color:#999999">[</span>检测图片的路径<span style="color:#999999">]</span>
</code></span>

按照上边的规整进行填写即可。

3.2多张图像测试

由于博主能力有限,修改YOLO内部文件失败,只能使用shell写命令来进行重复单张测试的命令

<span style="color:#000000"><code class="language-shell">input_data_folder<span style="color:#6272a4">=</span><span style="color:#f1fa8c">"./data/VOCdevkit/VOC2007/JPEGImages/"</span>
output_data_folder<span style="color:#6272a4">=</span><span style="color:#f1fa8c">"./results/CD8"</span> file_name_tmp<span style="color:#6272a4">=</span><span style="color:#ee9900"><span style="color:#ee9900">`</span><span style="color:#8be9fd">ls</span> $input_data_folder<span style="color:#ee9900">`</span></span>file_names<span style="color:#6272a4">=</span><span style="color:#999999">(</span><span style="color:#ee9900"><span style="color:#ee9900">$(</span><span style="color:#ff79c6">echo</span> $file_name_tmp<span style="color:#ee9900">)</span></span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#ff79c6">for</span> filename <span style="color:#ff79c6">in</span> <span style="color:#ee9900">${file_names[@]}</span>
<span style="color:#ff79c6">do</span><span style="color:#ff79c6">echo</span> <span style="color:#f1fa8c">"testing <span style="color:#ee9900">$file</span> ..."</span>./darknet detector <span style="color:#8be9fd">test</span> cfg/inst25.data cfg/yolo-voc.cfg backup/yolo-voc_final.weights <span style="color:#ee9900">$input_data_folder</span><span style="color:#ee9900">$filename</span> -thresh .3 -gpu 0,1 <span style="color:#6272a4">>></span> result.txt<span style="color:#8be9fd">mv</span> predictions.png ./results/CD8_final_thresh_0.3/<span style="color:#ee9900">$filename</span><span style="color:#f1fa8c">'.png'</span><span style="color:#ff79c6">done</span>
</code></span>

修改相应自己存储图片的路径就可以进行测试 。

3.3 测试数据集测试mAP、recall等参数

<span style="color:#000000"><code class="language-shell">./darknet detector valid cfg/voc.data cfg/voc.cfg backup/voc_final.weights -out result_ -gpu 0 -thresh .5
</code></span>
<span style="color:#000000"><code>./darknet detector valid [data路径] [cfg路径] [权重文件路径] -out [生成txt文件前缀] -gpu [GPU的ID号] -thresh [门限的大小]
</code></span>

按照上边的规则对测试数据集进行测试,会在result文件夹内生成相应的相应检测结果的文件。
下边借助Faster R-CNN中voc_eval.py文件进行参数测试。

<span style="color:#000000"><code class="language-shell">from voc_eval <span style="color:#8be9fd">import</span> voc_eval
rec, prec, ap, fp, tp, nobj <span style="color:#6272a4">=</span> voc_eval<span style="color:#999999">(</span><span style="color:#f1fa8c">'/home/app/darknet/results/result_ {}.txt'</span>, <span style="color:#f1fa8c">'/home/app/darknet/scripts/VOCdevkit/VOC2007/Annotations/{}.xml'</span>,<span style="color:#f1fa8c">'/home/app/darknet/scripts/VOCdevkit/VOC2007/ImageSets/Main/test.txt'</span>, <span style="color:#f1fa8c">'Target1'</span>, <span style="color:#f1fa8c">'.'</span><span style="color:#999999">)</span>
print<span style="color:#999999">(</span><span style="color:#f1fa8c">"class name: "</span> + classname<span style="color:#999999">)</span>
print<span style="color:#999999">(</span><span style="color:#f1fa8c">"Average Precision: "</span> + str<span style="color:#999999">(</span>ap<span style="color:#999999">))</span>
print<span style="color:#999999">(</span><span style="color:#f1fa8c">"True Positive: "</span> + str<span style="color:#999999">(</span>tp<span style="color:#999999">))</span>
print<span style="color:#999999">(</span><span style="color:#f1fa8c">"False Positive: "</span> + str<span style="color:#999999">(</span>fp<span style="color:#999999">))</span>
</code></span>

首先将上边的命令新建一个python文件,同时将Faster R-CNN中voc_eval.py文件放在一个文件夹内,这个文件可以能在Github中不能找到,可以去CSDN下载。

命令参数总结

训练模型

单GPU训练

<span style="color:#000000"><code class="language-shell">./darknet -i <span style="color:#6272a4"><</span>gpu_id<span style="color:#6272a4">></span> detector train <span style="color:#6272a4"><</span>data_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>train_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>weights<span style="color:#6272a4">></span>  
</code></span>

举例:

<span style="color:#000000"><code class="language-shell">./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
</code></span>

多GPU训练

格式为:

<span style="color:#000000"><code class="language-shell">./darknet detector train <span style="color:#6272a4"><</span>data_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>model_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>weights<span style="color:#6272a4">></span> -gpus <span style="color:#6272a4"><</span>gpu_list<span style="color:#6272a4">></span> 
</code></span>

举例

<span style="color:#000000"><code class="language-shell">./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpus 0,1,2,3
</code></span>

测试图片

测试单张图片

<span style="color:#000000"><code class="language-shell">./darknet detector <span style="color:#8be9fd">test</span> <span style="color:#6272a4"><</span>data_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>test_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>weights<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>image_file<span style="color:#6272a4">></span>
</code></span>

<test_cfg>文件中batch和subdivisions两项必须为1。
测试时还可以用-thresh和-hier选项指定对应参数。
生成预测结果

<span style="color:#000000"><code>./darknet detector valid <data_cfg> <test_cfg> <weights> <out_file>
</code></span>

<test_cfg>文件中batch和subdivisions两项必须为1。
结果生成在<data_cfg>的results指定的目录下以<out_file>开头的若干文件中,若<data_cfg>没有指定results,那么默认为<darknet_root>/results。
计算recall(执行这个命令需要修改detector.c文件,修改信息请参考“detector.c修改”)

<span style="color:#000000"><code class="language-shell">./darknet detector recall <span style="color:#6272a4"><</span>data_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>test_cfg<span style="color:#6272a4">></span> <span style="color:#6272a4"><</span>weights<span style="color:#6272a4">></span>
</code></span>

<test_cfg>文件中batch和subdivisions两项必须为1。
输出在stderr里,重定向时请注意。
RPs/Img、IOU、Recall都是到当前测试图片的均值。
detector.c中对目录处理有错误,可以参照validate_detector对validate_detector_recall最开始几行的处理进行修改。

Error

/bin/sh: 1: nvcc: not found

在这里插入图片描述
当安装在CUDA10.1的情况下会报下边的错误,这时候需要将Makefile文件中的NVCC

<span style="color:#000000"><code class="language-txt">NVCC=nvcc 
</code></span>

修改为下边的格式:

<span style="color:#000000"><code class="language-txt">NVCC=/usr/local/cuda-10.1/bin/nvcc 
</code></span>

./darknet: error while loading shared libraries: libcurand.so.10.0: cannot open shared object file: No such file or directory

使用下边的命令进行修正

<span style="color:#000000"><code class="language-shell"><span style="color:#8be9fd">sudo</span> <span style="color:#8be9fd">cp</span> /usr/local/cuda-10.0/lib64/libcudart.so.10.0 /usr/local/lib/libcudart.so.10.0 <span style="color:#6272a4">&&</span> <span style="color:#8be9fd">sudo</span> ldconfig
<span style="color:#8be9fd">sudo</span> <span style="color:#8be9fd">cp</span> /usr/local/cuda-10.0/lib64/libcublas.so.10.0 /usr/local/lib/libcublas.so.10.0 <span style="color:#6272a4">&&</span> <span style="color:#8be9fd">sudo</span> ldconfig
<span style="color:#8be9fd">sudo</span> <span style="color:#8be9fd">cp</span> /usr/local/cuda-10.0/lib64/libcurand.so.10.0 /usr/local/lib/libcurand.so.10.0 <span style="color:#6272a4">&&</span> <span style="color:#8be9fd">sudo</span> ldconfig</code></span>

参考

YOLOv3: 训练自己的数据 - CSDN博客

任何程序错误,以及技术疑问或需要解答的,请添加

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chrome浏览器必装的扩展工具

名称作用下载地址Postman模拟各种http请求点击下载JSON Viewer访问json结果自动视图化点击下载Axure RP Extension for Chrome查看Axure原型图点击下载 注意&#xff1a;下载地址都需要FQ。

OpenStack-Mitaka 一键安装测试环境脚本

说明&#xff1a;这个脚本是采用Bash Shell编写&#xff0c;这个版本还只能作为测试环境搭建使用。 此脚本原形的发起人是网友&#xff1a;WuYuLiang.这里有他的博客链接: 第一版的链接: http://blog.csdn.net/wylfengyujiancheng/article/details/51137707 最新版链接: http:…

grunt使用小记之uglify:最全的uglify使用DEMO

grunt-contrib-uglify uglify是一个文件压缩插件&#xff0c;项目地址&#xff1a;https://github.com/gruntjs/grunt-contrib-uglify 本文将以一个DEMO来展示如何使用uglify插件。 DEMO环境 package.json: {"name": "grunt-demo","version": &q…

后台设计中容易被忽略的坑

1.数据关联性删除判断 示例&#xff1a;比如后台发布了一个待抢购的订单&#xff0c;app已经把此单抢购&#xff0c;因为后台没有及时刷新状态&#xff0c;所有如果要删除或下架此笔订单&#xff0c;必须先要验证此订单的状态是否为已经抢购&#xff1b; 2.数据重复录入问题 示…

人生该如何抉择

记得2012年初的时候受公司同事的讲解&#xff0c;我从一个对代码一无所知&#xff0c;了解到了计算机的数据类型、数组在内存中的存储&#xff0c;进而想走进程序员的行业&#xff0c;博客上认识的一个前辈告诉我了一个方向&#xff0c;前辈告诉我&#xff1a;“我建议你学java…

Android优秀参考APP源码

1 仿网易云音乐客户端 仿网易云音乐安卓版客户端&#xff0c;一个月内仍然有更新&#xff0c;接近2000star&#xff0c;相信是一款非常棒的音乐客户端。 涉及技术&#xff1a; Timber Fresco MediaPlayerProxy Android-ObservableScrollView retrofit ImitateNetEasyCloud…

聊聊excel生成图片的几种方式

目录 I&#xff1a;需求。 II&#xff1a;实现思路。 III&#xff1a;实现方式。 IV:优缺点分析。 V&#xff1a;结论。 VI&#xff1a;wps安装与配置。 正文 1.需求&#xff1a;把excel生成等比的图片。 2.实现思路&#xff1a;因为excel不能直接生成图片&#xff0c;所以需…

分类算法之贝叶斯(Bayes)分类器

摘要&#xff1a;旁听了清华大学王建勇老师的 数据挖掘&#xff1a;理论与算法 的课,讲的还是挺细的,好记性不如烂笔头,在此记录自己的学习内容,方便以后复习。 一&#xff1a;贝叶斯分类器简介 1&#xff09;贝叶斯分类器是一种基于统计的分类器,它根据给定样本属于某一个具体…

Ios生产证书申请(含推送证书)

一、Mac机上生成请求文件。 Mac机上点击证书助手 > 从证书颁发机构请求证书 > 得到CertificateSigningRequest.certSigningRequest请求文件&#xff08;此请求证书建议一直保存&#xff0c;因为根证书的生成需要使用此请求文件&#xff0c;根证书多个app可以使用一个&am…

优秀小程序demo 源码

1.Thor UI组件库https://github.com/dingyong0214/ThorUI 2.Booker图书共享借阅小程序开源https://github.com/shiheme/wx-bookerhttps://gitee.com/week7day/wx-booker 优惠券羊毛平台前端&#xff1a;https://github.com/leixiaokou/waimai-uniapp 优惠券羊毛平台后端&#…

算法:阶乘的五种算法

背景 周末温习了一下递归相关的一些概念&#xff0c;本文先给出阶乘的五种算法。 第一种实现&#xff1a;递归 1 private static long RecursiveFac(long n)2 {3 if (n 0)4 {5 return 1;6 }7 …

TortoiseGIT创建及合并分支

一、创建分支 项目右键 > TortoiseGit(T) > 创建分支&#xff0c;然后右键切换到刚刚创建的分支&#xff0c;新增/修改一个文件&#xff0c;提交分支到远端服务器&#xff0c;推送成功之后分支就创建好了。 二、合并分支 分支开发的代码先推送到远端&#xff0c;切换本…

如何画出企业系统架构图

该技术架构图是本人根据多年企业技术架构经验而制定&#xff0c;是企业技术的总架构图&#xff0c;希望对CTO们有所借鉴。 简单说明&#xff1a; 1.中间件基础运行环境是经过统一规划的以WebLogic、JBOSS为主的集群环境 2.企业集成平台是以基础业…

ashx中Response.ContentType的常用类型

ashx中Response.ContentType的常用类型&#xff1a; text/plaintext/htmltext/xmlapplication/jsonimage/GIFapplication/x-cdf

go 语言链接服务器上的mysql数据库

2019独角兽企业重金招聘Python工程师标准>>> 在网上找了一大堆例子&#xff0c;最后简化一下把&#xff0c;一下会从安装mysql开始&#xff0c;与大家分享一下如何用go链接服务器上的mysql 我用的是ubuntu系统 1&#xff0c;安装mysql&#xff1a;sudo apt-get in…

Nginx、LVS、HAProxy 的区别和优缺点

Nginx、LVS、HAProxy 是目前使用最广泛的三种负载均衡软件&#xff0c;本人都在多个项目中实施过&#xff0c;通常会结合Keepalive做健康检查&#xff0c;实现故障转移的高可用功能。 1&#xff09;在四层&#xff08;tcp&#xff09;实现负载均衡的软件&#xff1a; lvs------…

mssql 字增自段怎样重置(重新自增)|清空表已有数据

方法1 -- 清空已有数据&#xff0c;并且将自增自段恢复从1开始计数 truncate table 表名 方法2 -- 不清空已有数据&#xff0c;但将自增自段恢复从1开始计数 dbcc checkident(表名,RESEED,0) 让SQL自动增长的ID号从一个新的位置开始在查询分析器中执行后,该表自动增长列从1开始…

Android 基本测试工具的使用

Android 基本测试工具的使用和无线学习介绍1&#xff0c;日志查看工具1&#xff09;DDMSAndroid测试中&#xff0c;使用最多的日志查看工具就是DDMS了。ddms可以从两个地方打开&#xff0c;1&#xff0c;Eclipse的的ddms插件&#xff08;属于Eclipse 的SDK插件&#xff09;&…

服务端接口中的那些坑

TOP1&#xff1a;版本意识与兼容性问题。 对于一个好的程序员来说&#xff0c;思考的时间>写代码的时间&#xff0c;如果思路不对写的代码越多&#xff0c;错的也越多&#xff0c;任何时候思考是保证高效工作最省事的武器。 对于接口开发&#xff0c;不同于bs项目&#xff…

JS逆向学习笔记

JS逆向学习笔记 寻找深圳爬虫工作&#xff0c;微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理&#xff1a;替换原来的方法. (好像写了句废话)作用&#xff1a; 可以去Hook一些内置的函数, 例如Debugger, setInterval,JSON.stringify等等2.JS…