10.YOLO系列及如何训练自己的数据。

SSD失败之后就挺失望的,而且莫名其妙,于是转向YOLO了,其实object detection领域可选的模型并不多,RCNN系列我是大概看过的,还写过:RCNN系列,但是这种location和classification分开的思路,要达到实时的话我的硬件条件肯定是不可能的。YOLOV3我是在TX2上跑过的:YOLOV3-TX2跑起来,而且YOLO是有简化版本的模型的,对于简单应用应该是够了。 因为以前跑过,整体的流程走下来还算比较顺利,比起SSD来说,训练时要修改的代码也比较少,可能留给犯错的概率就少一些。 我分以下几个部分:

  • 1. YOLO系列简介。
  • 2. 编译环境准备。
  • 3. 训练配置。

1. YOLOV3系列简介。

1.1:简介。

  • 作者:Joseph Redmon
  • YOLO主页:YOLO
  • 作者github: https://github.com/pjreddie
  • 模型简介:You only look once (YOLO) is a state-of-the-art, real-time object detection system. On a Pascal Titan X it processes images at 30 FPS and has a mAP of 57.9% on COCO test-dev.

和其他模型的对比:(总结起来一句话:比它快的准确率没有它高,准确率比它高的没有他快)

Model

Train

Test

mAP

FLOPS

FPS

Cfg

Weights

SSD300

COCO trainval

test-dev

41.2

-

46

link

SSD500

COCO trainval

test-dev

46.5

-

19

link

YOLOv2 608x608

COCO trainval

test-dev

48.1

62.94 Bn

40

cfg

weights

Tiny YOLO

COCO trainval

test-dev

23.7

5.41 Bn

244

cfg

weights

SSD321

COCO trainval

test-dev

45.4

-

16

link

DSSD321

COCO trainval

test-dev

46.1

-

12

link

R-FCN

COCO trainval

test-dev

51.9

-

12

link

SSD513

COCO trainval

test-dev

50.4

-

8

link

DSSD513

COCO trainval

test-dev

53.3

-

6

link

FPN FRCN

COCO trainval

test-dev

59.1

-

6

link

Retinanet-50-500

COCO trainval

test-dev

50.9

-

14

link

Retinanet-101-500

COCO trainval

test-dev

53.1

-

11

link

Retinanet-101-800

COCO trainval

test-dev

57.5

-

5

link

YOLOv3-320

COCO trainval

test-dev

51.5

38.97 Bn

45

cfg

weights

YOLOv3-416

COCO trainval

test-dev

55.3

65.86 Bn

35

cfg

weights

YOLOv3-608

COCO trainval

test-dev

57.9

140.69 Bn

20

cfg

weights

YOLOv3-tiny

COCO trainval

test-dev

33.1

5.56 Bn

220

cfg

weights

YOLOv3-spp

COCO trainval

test-dev

60.6

141.45 Bn

20

cfg

weights

1.2.YOLO原理。


论文我正在看,等我看完了再写这一部分,但是因为这个模型的训练和检测框架都是端到端的,所以即使 不了解中间的细节也是可以训练和检测的。


2. 编译环境准备。

相较于其他模型来说,darknet的编译环境是最简单的。因为他并没有用时下比较流行的深度学习框架来写,而是作者自己用C撸了一个框架:darknet。这个框架是用C和CUDA-C来写的(这代码能力就只有仰望的份了),所以装了ubuntu系统装好以后就可以用了,非常简单。 如果需要(一般肯定是需要的)GPU加速的话,那么需要安装NVIIDA的那一套东西(驱动,CUDA,CUDNN),如果需要测试视频和显示视频或者照片的话,那么需要安装opencv。 所以是不是很简单? 我自己的电脑是win10+ubuntu的双系统。win10下darknet也是可以配置的,但是为了简单和适应linux系统我这次还是选择了ubuntu系统,中间安装opencv的时候空间不够了,我手贱想从win10下面分出来一点空间来给ubuntu的时候,出了岔子,ubunut系统崩掉了,一气之下我把C盘清空了,两个系统都重装了。 装系统的话就不多说了,win10下装ubuntu的话大概以下几个步骤:

  • ①从win的系统盘右键压缩出来50G(有的话可以再多点)的未分配的空间。(可能是绿色或者黑色的,不是很影响)
  • ②制作ubuntu的u盘启动盘,用软碟通就可以,这个很简单。
  • ③重启,进bios,从u盘启动,顺便把电脑的网断了(拔掉网线或者关闭wifi),然后安装,不要选择安装更新,并且自己分配空间,就从刚才从win10上压缩的未分配空间来分配。 然后基本就可以了,如果遇到什么问题,勤百度,这写坑基本上都有。

至于安装NVIDIA的那一套,网上也是有很多教程,我也是踩了很多坑,现在也无法截图写教程了,就不说了,这一套更新挺快的,并不是越新越好(越适合自己的项目),注意各个版本需要匹配。 opencv的编译写一下,因为我正在弄。

  • ①安装一些依赖环境:
sudo apt-get install build-essential 
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev 
sudo apt-get install –assume-yes libopencv-dev libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip 
sudo apt-get install ffmpeg libopencv-dev libgtk-3-dev python-numpy python3-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev libtbb-dev qtbase5-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev 

选择的地方全部选择yes,然后等待安装完成就可以了。

  • ② 下载opencv源码,这个自己想办法吧,网络好的话还是比较快的。然后解压。
  • ③ 配置cmake编译。
cd opencv-3.4.1       #解压的文件
mkdir build           #创建build文件夹
cd build                #进入build文件夹
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_GTK=ON -D WITH_GTK_2_X=ON -D CUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..
#配置cmake
sudo make        #编译

编译还是挺慢的,我跑了步回来还没好,耐心等着就可以了。 然后

sudo make install      #这个sudo是必须的,要不会因为权限问题产生错误

这样就可以了,有的教程写这里需要添加动态连接什么的,我倒没有这么做,就直接可以用了。

  • ④测试。
mkdir opencv_cpp     #建立一个文件夹:
gedit lena.cpp      #建立测试文件
gedit CMakelist.txt  #建立CMakeLists文件
cmake .      #编译头文件和源文件
make   #生成可执行文件

CMakelist.txt 里面写的是:

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( LENA lena.cpp )
target_link_libraries( LENA ${OpenCV_LIBS} )

cpp文件里写的是:

#include <stdio.h>
 #include <opencv2/opencv.hpp> 
using namespace cv; 
int main(int argc, char** argv ) 
{ if ( argc != 2 ) 
{ printf("usage: DisplayImage.out <Image_Path>\n"); 
return -1; } 
Mat image; 
image = imread( argv[1], 1 ); 
if ( !image.data ) 
{ printf("No image data \n"); return -1; }
 namedWindow("Display Image", WINDOW_AUTOSIZE ); 
imshow("Display Image", image); 
waitKey(0); 
return 0; 
}

然后找一张照片命名lena.jpg,放到lena.cpp的同级目录下。 最后执行: ./LENA lena.jpg 看到显示照片的话就说明没有问题了。 c++版本的opencv这里就可以用了,但是没有好用的编辑器,还是不如win下面VS写起来好用。


未完待续……

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏和蔼的张星的图像处理专栏

9.SSD目标检测之三:训练失败记录(我为什么有脸写这个……)

这个大概折腾了三四天,反正我能想到改的地方都改了,笔记本上试过了,宿舍的电脑上也试过了,反正就是不行,我也没什么办法了,后面就转向YoloV3了。尽管失败了,还...

26620
来自专栏AI研习社

Github 项目推荐 | GAN 非平稳纹理合成

该库是论文「Non-stationary texture synthesis using adversarial expansions.」的官方代码。

13030
来自专栏算法+

快速均值模糊算法

前段时间在网上看到一个快速均值模糊算法,性能很不错。 源博客: http://www.lellansin.com/super-fast-blur-%E6%A8%...

37250
来自专栏量化投资与机器学习

【机器学习】支持向量机的概念与运用初探

? ? ? ? ? 下面,使用python模块库sklearn自带的iris标准数据集进行简单测试。 ? 获得的分类图为: ? 此外,尝试在优矿平台上,...

22180
来自专栏CreateAMind

openAi HER 算法运行流程学习

12830
来自专栏AI研习社

Github 项目推荐 | Basel Face Model 2017 完全参数化人脸

本软件可以从 Basel Face Model 2017 里生成完全参数化的人脸,论文链接: https://arxiv.org/abs/1712.01619 ...

79670
来自专栏素质云笔记

SSD+caffe︱Single Shot MultiBox Detector 目标检测+fine-tuning(二)

承接上一篇SSD介绍:SSD+caffe︱Single Shot MultiBox Detector 目标检测(一) 如果自己要训练SSD模型呢,关键...

1.2K100
来自专栏AI研习社

GitHub项目推荐 | ChainerCV:计算机视觉中的深度学习图书馆

ChainerCV是一个使用Chainer训练和运行神经网络以进行计算机视觉任务的工具集合。

24450
来自专栏GAN&CV

使用tensorflow 的slim模块fine-tune resnet/densenet/inception网络,解决batchnorm问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25737169/article/d...

1.2K20
来自专栏ATYUN订阅号

浣熊检测器实例, 如何用TensorFlow的Object Detector API来训练你的物体检测器

这篇文章是“用Tensorflow和OpenCV构建实时对象识别应用”的后续文章。具体来说,我在自己收集和标记的数据集上训练了我的浣熊检测器。完整的数据集可以在...

62070

扫码关注云+社区

领取腾讯云代金券