第一part:手把手教你用tensorflow object-detection API 训练自己的模型
机器和系统的配置
方法一:本人使用系统是Ubuntu16.04 LTS GPU是 GeForce GTX 1050Ti(实验室没钱买更好的GPU了),具体教程到CSDN上或google上搜一下,大概花半天的时间就能全部装好。PS:最好别在windows上跑,真的超级多bug,当时我跑官网上的模型调bug都调了二天,可能自己太笨。。不能翻墙的同学在GitHub上搜索lantern上面有中文教程教你翻墙。https://github.com/getlantern/download, 做学术翻墙我想应该不会被查水表吧hhhhh.
方法二:选择腾讯云或者阿里云或Google的云服务,这样更加方便,直接在服务器上跑,有按使用时间计费的,算起来也不贵。
接下来主要记录跑自己的数据集遇到的困难和解决的方法,适合想做训练自己数据集的同学,比如你想识别柠檬和橘子,但是找不到现成的模型。有其他疑问可以留言或者参考CSDN上的一些人的博客 ,如果有错误的地方,希望大家能在留言处及时指正!!Thx:)
1.原理
这里的原理是迁移学习(transfer learning),维基百科上迁移学习的定义是:(属于机器学习)专注于存储已有问题的解决模型,并将其利用在其他不同但相关的问题上,例如:用来识别汽车的知识,也可以用来识别卡车。
1.1使用迁移学习的好处:
1.在最终结果精度差不多的情况下,迁移学习训练的时间大大的缩短了,能节约大量的时间和硬件资源。(有paper做了对比实验,使用迁移学习后识别的精度比自己从头开始训练的精度结果持平或者更高。)
2.每个人想识别的模型都不会完全一样,如果恰好该模型的数据集很难找到,或者说数据集非常小,原本是无法用深层的神经网络的,因为此网络参数太多,如果数据集小的话,会造成结果过拟合。
3.避免自己造轮子。“造轮子”的含义:明知道你做的不可能比前辈做得更好,却仍然坚持要做。
比如,车轮子是圆形的,这是大家公认的最合适的形状。而自己非要发明另一种形状的轮子,这种行为就叫「重复发明轮子(Reinventing the wheel)」,即“造轮子”。
这样会浪费自己的大量的时间和精力,毕竟得到的结果也会很不理想。
(P.S :在这个part用到的迁移学习的知识后面还会详细再讲)
2. 准备训练自己数据集
2.1 找图片
step1: 在桌面上右键,新建文件夹改名为 object-detection,然后再文件夹下创建images.
step2:在GitHub上下载一个超级火的项目:https://github.com/hardikvasa/google-images-download 下载图片(或者到imagenet dataset里下载,不过需要注册账号,有三种安装方式,我选的是Manually install using CLI:(也是在桌面上)输入:
$ git clone https://github.com/hardikvasa/google-images-download.git
$ cd google-images-download && sudo python setup.py install
安装成功,点开桌面上的google-images-down文件夹,右键点击open in terminal,输入命令 $ googleimagesdownload [Arguments…],例如我准备识别的是螺钉(screw)和螺母(bolt nut),中文也可以搜出来下载,不过感觉英文更准确一点,输入 $ googleimagesdownload -k “kobe” -f jpg -l 5 (意思就是下载关键词“kobe”,类型JPG,数量5张),在download文件夹会出现你下载图片的文件夹,并且已经跟你编好号。如图:
如果想要一次性下载超过100张图片,就需要Installing the chromedriver (with Selenium),不然就会报错。
在Google上面搜索如何安装,就会有以下步骤:
这些命令都可以在桌面进行,下载的文件等等都放在桌面就好。
Step1: Prerequisites
$ sudo apt-get update
$ sudo apt-get install -y unzip xvfb libxi6 libgconf-2-4
Step 2 – Install Google Chrome (有这个浏览器的不用安装)
$ sudo curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add
$ sudo echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list
$ sudo apt-get -y update
$ sudo apt-get -y install google-chrome-stable
Step 3 – Install ChromeDriver (step2跳过的同学需要在https://sites.google.com/a/chromium.org/chromedriver/downloads)找到自己浏览器对应的版本并安装,如果版本太低建议先升级自己的浏览器)
$ wget https://chromedriver.storage.googleapis.com/2.41/chromedriver_linux64.zip
$ unzip chromedriver_linux64.zip
$ sudo mv chromedriver /usr/bin/chromedriver
$ sudo chown root:root /usr/bin/chromedriver
$ sudo chmod +x /usr/bin/chromedriver
Step 4 – Download Required Jar Files
$ wget https://selenium-release.storage.googleapis.com/3.13/selenium-server-standalone-3.13.0.jar
$ wget http://www.java2s.com/Code/JarDownload/testng/testng-6.8.7.jar.zip
$ unzip testng-6.8.7.jar.zip
Step 5 – Start Chrome via Selenium Server
$ xvfb-run java -Dwebdriver.chrome.driver=/usr/bin/chromedriver -jar selenium-server-standalone-3.13.0.jar
$ chromedriver --url-base=/wd/hub
这两个命令输入完后,点开googleimagesdownload文件输入
$ googleimagesdownload -k "kobe" -f jpg -l 200 --chromedriver="usr/bin/chromedriver"