python猪脸识别_JD竞赛,猪脸识别

python猪脸识别_JD竞赛,猪脸识别pig_faceThisrepositoryisusedtosavethecodeforacompetition1.运行环境Ubuntu16.04python2.7.12cuda8.0cudnn6.0tensorflow1.3.0GPU4*TITANXP2.从视频中截取出猪:(1)为了排除背景数据对模型的影响,我们使用yolo-9000算法提取出视频中每一…

大家好,又见面了,我是你们的朋友全栈君。

pig_face

This repository is used to save the code for a competition

1. 运行环境

Ubuntu 16.04 python 2.7.12 cuda8.0 cudnn6.0 tensorflow 1.3.0

GPU 4*TITAN XP

2. 从视频中截取出猪:

(1)为了排除背景数据对模型的影响,我们使用yolo-9000算法提取出视频中每一帧的猪,代码来源于https://github.com/philipperemy/yolo-9000. 我们对其代码做了修改,将yolo解压包的代码解压后覆盖 darknet/src下同名文件即可

(2)经观察后发现,虽然yolo-9000对猪的识别不一定会归于hog类,但是基本上所有的框都会以视频中的猪为主体,因此在取框的时候,我们不以hog类的框为输出图像,而是以置信度为参考标准。

(3)我们保留所有置信度大于0.1的窗口

(4)每个视频大约能得到一万多张ROI图片,我们按大小排序,选取大约前4000张图片,并剔除不相关的物体图片以及背景干扰较大的图片(比如没有框到猪身上,或者只框了极小部分的猪),将其作为训练集和验证集。

(5)最后得到94677张图片

3. 预处理以及生成数据集

(1)运行raw_data/image_process.py, 将上一步得到的图片通过padding的方法变为正方形,保证在之后的步骤中resize操作不会扭曲图片

(2)运行raw_data/get_data_txt.py,对数据进行分割,并且将数据分割成50个储存文件,存在txt文件中,方便之后大数据的分步读取

(3)运行raw_data/create_h5_dataset.h5, 将数据生成h5文件,这一步之后会得到50个储存训练集的.h5文件,以及50个储存验证集.h5文件

4. 模型

(1)本模型基于细粒度识别模型bilinear cnn做的改进,参考源码来自于https://github.com/abhaydoke09/Bilinear-CNN-TensorFlow 参考论文 vis-www.cs.umass.edu/bcnn/docs/bcnn_iccv15.pdf Bilinear cnn是一个端到端的网络模型,该模型在CUB200-2011数据集上取得了弱监督细粒度分类模型的最好分类准确度。

(2)bilinear cnn把最后一层卷积核的输出做了外积(实际是做内积),以此达到融合不同特征的目的。

(3)我们队伍受resnet结构的启发,对bilinear cnn算法做了改进,将最后一层卷积核的输出也和前面其他层的卷积核的输出做内积,以此达到融合不同层次的特征的目的。再把得到的vector和原来的bilinear vector 融合。 我们增加了conv4_1、conv5_1对conv5_3的内积(只增加这两层是因为他们的filter numbers数量一致,pooling之后就可以做内积了,不需要加额外的卷积核) 我们的思想是:不同卷积层关注的特征不同,且对应感受视野的大小也不同(即有高低层次之分),在识别类似图像时,单独考虑特征是不够的,还需要考虑他们之间的空间关系。

(5)训练过程中加入实时的数据增强,包括旋转、随机改变对比度、随机改变亮度、随机crop. 训练时全连接层的drop out概率为0.5

4. 结构

(1)train/read_data.py 是读取数据的结构。实现大数据的分次加载。

(2)train/resvgg_model.py定义了网络结构,以及读取保存的权重的方法

(3)train/train_resvgg.py定义了训练的过程

(4)train/predict_resvgg.py 输出预测结果

5. 加载预训练模型,微调

(1)在读取resvgg模型时,令finetune=False,实现只训练最后的全连接层。并且调用load_initial_weights(sess),读取预训练的vgg的卷积层的参数

(2)训练设置 optimizer = tf.train.MomentumOptimizer(learning_rate=0.2, momentum=0.5).minimize(loss),训练次数50次

(3)将过程中得到的最优模型保存下来

6. 全网络训练

(1)在读取resvgg模型时,令finetune=True。 调用load_own_weight(sess , model_path),读取上一步得到的模型

(2)训练设置optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001).minimize(loss), 训练200次

(3)将过程中得到的最优模型保存下来

7. 后期调整

实际训练过程中,只有第一次会在所有数据上训练满200次。在得到保存下来的模型后,之后的调参过程只取大约1/4的数据进行继续训练

8. 预测

(1)运行 predict_resvgg.py 预测结果

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151874.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 记忆化搜索的研究

    记忆化搜索的研究记忆化搜索:算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存。一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多。记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解一个状态,就将它的解保存下来,以后再次遇到这个状态的时候,就不必重新求解了。这种方法综合了搜索和动态规划两方面的优点,因而还是很有实用价值的。上传/更换附件动态规划的另一种实现形式——记忆化搜索的应用

    2022年7月26日
    16
  • 功能测试框架

    功能测试框架测试用例的编写需要按照一定的思路进行,而不是想到哪写到哪,一般测试机制成熟的公司都会有公司自己自定义的测试用例模板,以及一整套的测试流程关注点,当然我们自己在测试生涯中也应当积累一套自己的测试框架,所有功能性的测试都可以依据框架的思路来进行,达到事半功倍的效果。功能测试框架可以包括:界面友好性测试、功能测试、链接测试、容错测试、稳定性测试、常规性能测试、配置测试、算法测试等等。1.1.1界面友好性测试1.风格、样式、颜色是否协调2.界面布局是否整齐、协调(保证全部显示出来的,尽量…

    2022年7月13日
    23
  • lcd1602按键显示不同数字_1602液晶显示屏

    lcd1602按键显示不同数字_1602液晶显示屏1.直接与Arduino相连2.通过转接板利用I2C的方式与Arduino相连1.直接与Arduino相连直接与Arduino相连的好处是不用现另外购买转接板,但这样造成的后果就是要大量占用A

    2022年8月4日
    4
  • python中替换字符串中字符_Python replace()函数:替换字符串中的某个字符「建议收藏」

    python中替换字符串中字符_Python replace()函数:替换字符串中的某个字符「建议收藏」下面我们将通过一组示例,详细给大家说明下关于用python的替换问题,相信大家结合实例一定非常容易理解,一起来看下吧~基础了解——replace()函数语法:str.replace(old,new[,max])参数:old–将被替换的子字符串。new–新字符串,用于替换old子字符串。max–可选字符串,替换不超过max次。返回值:返回字符串中的old(旧字符串)替…

    2022年6月7日
    56
  • 网站在线客服系统源码|在线客服代码下载 (2021最新版)「建议收藏」

    网站在线客服系统源码|在线客服代码下载 (2021最新版)「建议收藏」GOFLY,一套可私有化部署的免费开源客服系统,基于Golang开发,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能网站只需嵌入一段js或跳转直连地址即可快速接入客服,访客端支持电脑、手机页面自适应,这个项目截止到现在已经更新了一年多时间,github提交了720多次修…

    2022年7月19日
    21
  • tcptraceroute与traceroute

    tcptraceroute与traceroute1traceroute功能说明:显示数据包到主机间的路径。它默认发送的数据包大小是40字节。通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。工作原理Traceroute程序的…

    2022年6月20日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号