第一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"

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
使用TensorFlow和Transformer模型API进行预测的过程与训练过程类似,但需要注意一些细节。以下是一个使用TensorFlow和Transformer模型API进行预测的示例代码: ``` import tensorflow as tf # Load model model = tf.keras.models.load_model("transformer_model") # Define tokenizer tokenizer = ... # Define input sequence input_text = "Hello, how are you?" # Encode input sequence input_tokens = tokenizer.encode(input_text) input_tokens = tf.expand_dims(input_tokens, 0) # Define maximum output length max_output_length = 100 # Define start and end tokens start_token = tokenizer.vocab_size end_token = tokenizer.vocab_size + 1 # Define output buffer output_tokens = tf.fill((1, max_output_length), start_token) # Define padding mask padding_mask = tf.math.equal(input_tokens, 0) # Define look-ahead mask look_ahead_mask = tf.ones((output_tokens.shape[1], output_tokens.shape[1])) look_ahead_mask = tf.linalg.band_part(look_ahead_mask, -1, 0) # Define decoder mask decoder_mask = tf.math.logical_and(look_ahead_mask, padding_mask) # Loop over output sequence for i in range(max_output_length - 1): # Define decoder inputs decoder_inputs = output_tokens[:, :i+1] # Generate predictions predictions = model([input_tokens, decoder_inputs], training=False) # Select last prediction last_prediction = predictions[:, -1:, :] # Compute next token next_token = tf.argmax(last_prediction, axis=-1) # Update output buffer output_tokens[:, i+1] = next_token # Check for end token if next_token == end_token: break # Decode output sequence output_text = tokenizer.decode(output_tokens.numpy()[0]) ``` 在上面的代码中,首先加载了预训练的Transformer模型,并定义了输入序列、最大输出长度、开始标记、结束标记和输出缓冲区。然后,将输入序列编码为整数序列,并使用填充掩码和前瞻掩码来生成解码器掩码。接下来,循环生成输出序列:根据输入序列和当前输出序列生成预测,选择最后一个预测的标记作为下一个标记,并更新输出缓冲区。如果下一个标记是结束标记,则停止循环。最后,将输出序列解码为文本字符串。 需要注意的是,在预测时需要将模型的`training`参数设置为`False`,以关闭Dropout等训练时使用的随机性操作。此外,还需要根据具体的Transformer模型架构和数据集定义输入序列、填充掩码、前瞻掩码、解码器掩码等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值