当前位置: 首页 > news >正文

爬虫+卷积神经网络项目实战解析——对图像狗的识别分类

目录

1.源代码仓库

2.项目前瞻

3.爬虫部分

4.卷积神经网络

4.1模型选择

4.2超参数选择

5.终


1.源代码仓库

programs: 年少曾学登山法 - Gitee.comhttps://gitee.com/zirui-shu/programs/tree/master/%E5%9B%BE%E5%83%8F%E8%AF%86%E5%88%AB%E2%80%94%E2%80%94%E7%8B%97

2.项目前瞻

        本项目分别利用爬虫卷积神经网络,分别实现对狗的图像采集和分类操作。

        爬虫,通过输入搜索的词提取相关图像资料:

        卷积神经网络,微调模型对输入图像进行分类:

3.爬虫部分

        对于图像识别整个项目而言,基本采用神经网络进行分类,那么数据集的来源就成了很大的问题。既然使用了python,不妨考虑使用爬虫获取数据集。

        本文利用的是百度的图片搜索网站。首先对于整个url进行一个分析:

https://image.baidu.com/search/index
tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=&st=-1
&fm=index&fr=&hs=0&xthttps=111110&sf=1&fmq=&pv=
&ic=0&nc=1&z=&se=&showtab=0&fb=0&width=&height=
&face=0&istype=2&ie=utf-8&word=阿拉斯加

        虽然看不懂前面的一系列参数的作用,但是我们能找到与我们搜索相关的信息,也就是最后word参数所对应的【阿拉斯加】。那么,由此我们可以对请求的url做一个改造:

url = f"https://image.baidu.com/search/index
tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=&st=-1
&fm=index&fr=&hs=0&xthttps=111110&sf=1&fmq=&pv=&ic=0
&nc=1&z=&se=&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word={keyword}"

        通过输入keyword,也就是我们想要搜索的内容,将其重构进我们的url之中,实现基本请求地址的建立。然而,在构建之后的请求所得数据之中,并没有出现我们想要的结果:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="utf-8"><title>百度安全验证</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"><meta name="format-detection" content="telephone=no, email=no"><link rel="shortcut icon" href="https://www.baidu.com/favicon.ico" type="image/x-icon"><link rel="icon" sizes="any" mask href="https://www.baidu.com/img/baidu.svg"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"><link rel="stylesheet" href="https://ppui-static-wap.cdn.bcebos.com/static/touch/css/api/mkdjump_aac6df1.css" />
</head>
<body><div class="timeout hide-callback"><div class="timeout-img"></div><div class="timeout-title">网络不给力,请稍后重试</div><button type="button" class="timeout-button">返回首页</button></div><div class="timeout-feedback hide-callback"><div class="timeout-feedback-icon"></div><p class="timeout-feedback-title">问题反馈</p></div><script src="https://ppui-static-wap.cdn.bcebos.com/static/touch/js/mkdjump_v2_21d1ae1.js"></script>
</body>
</html>

        这样看起来,似乎百度对我们的爬虫做了一些【反爬手段】。通过在原页面的检查得知,百度加上了防盗链Cookie验证:(后来看的时候防盗链好像没了?)

        那么在【请求头】之中,我们就需要加上这两个参数:

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36','Referer': 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=&st=-1&fm=index&fr=&hs=0&xthttps=111110&sf=1&fmq=&pv=&ic=0&nc=1&z=&se=&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E9%98%BF%E6%8B%89%E6%96%AF%E5%8A%A0',"Cookie": "BAIDUID=6B3C890885DAA086DB4B8F1D1886B10B:FG=1; BAIDUID_BFESS=6B3C890885DAA086DB4B8F1D1886B10B:FG=1; newlogin=1; BDUSS=lNKV3NnaVlRUk5lcDE1OUJIcHUwUTROV1Jla09-NkpIZi1hd281OWJQU0xKTzlvSVFBQUFBJCQAAAAAAQAAAAEAAABjteUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIuXx2iLl8doW; BDUSS_BFESS=lNKV3NnaVlRUk5lcDE1OUJIcHUwUTROV1Jla09-NkpIZi1hd281OWJQU0xKTzlvSVFBQUFBJCQAAAAAAQAAAAEAAABjteUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIuXx2iLl8doW; BIDUPSID=6B3C890885DAA086DB4B8F1D1886B10B; PSTM=1759137151; H_PS_PSSID=63145_63325_64313_64838_64912_64969_64982_65117_65139_65188_65216_65249_65257_65270_65313_65328_65380_65367_65414_65400_65452_65499_65479_65537; ZFY=esn895iY0L9ylf5adMMLLFOreqqzBz3hz517UwevlMw:C; H_WISE_SIDS=64982_65117_65188_65216_65249_65270_65313_65414_65400_65452_65537_65569_65606_65600_65635_65660; BDRCVFR[-pGxjrCMryR]=mk3SLVN4HKm; arialoadData=false; userFrom=null; ab_sr=1.0.1_MTZiM2Y3NjU5ZGNjZTUyYzk5NTNiOGJkMjI3MDcyODc3NmU2MTViYTg5MWM4YTMzYzliNDQ2OWVmNjQ4NThmZjY5ODNjNDQzN2QzZjBjZTE1ODAwYTVhMjVjYmVlNjgyOWExYzNmNDUxNzIwNmZjODViNzI2MmQ4NjQyNGRiZTgxYjY3ZmJmNGY5NWRmMjY5NDFmZGE4NmU3ZDQ5NDE2Ng=="}

        接下来就得到真实的数据了。对数据进行输出并解析后,锁定图片对应的地址:

        那么,在数据提取时锁定objurl这个参数就可以了:

img_urls = re.findall(r'"objurl":"(.*?)"', html)

        不过,在最终下载之时发现,似乎还有一些网址是【漏网之鱼】。我总结了一下,归结为两个类别:

1.重复url地址,使用集合筛选:

img_urls = list(set(img_urls))

2.链接格式不对,对后缀筛选:

            if not img_url.lower().endswith(('.jpg', '.jpeg', '.png')):continue

        最终,就得到了最终的下载文件,用来作为【训练集】与【验证集】。不过,由于百度图片是【懒加载】,一次提取出来的图片集有限,需要【滑动】才能收集更多的数据集。但是我们爬虫尽管可以模拟滑动功能,但是没有必要(我也不会),收集一二十张图片在【预训练】的基础上也能有效果。那么,数据采集这一部分就告一段落。

4.卷积神经网络

        卷积神经网络的原理我就不过多赘述了。因为代码也基本类似,我就提几个关键的点。

4.1模型选择

        本文在此选择的是经典残差网络模型ResNet,152层的网络架构,下载网络模型后使用【迁移学习】初始化模型,使用【冻结】改造全连接层,再【解冻】微调卷积层,得到最终的模型。

4.2超参数选择

        对于卷积神经网络,或者说本文所构建的卷积神经网络而言,有这么几个超参数:

        batch_size, lr, step_size, gamma

        batch_size,也就是【批量】,决定了一次取多少个图像数据进行训练。一般而言,尽量往上调,不过也很吃配置。我的八核显存跑32就比较慢了,可以设当设置。

        lr,learning_rate,【学习率】,决定模型调整的幅度大小,在我的基础上可以调小或不调。后面两个参数也与之有关,总的来说就是{step_size}个训练周期对学习率乘上{gamma},一般都是对学习率进行下调操作,毕竟登上山顶的路很陡,不能大步流星。同样二者可以适当下调。

5.终

        总结一下,通过本次项目巩固了【爬虫】与【卷积神经网络】的用法,解决了对狗分类的实际问题。那么各位,就让我们以检测结果为尾声吧...

http://www.dtcms.com/a/473666.html

相关文章:

  • golang读写锁
  • 怎么用ftp清空网站大庆seo推广
  • 云南网官方网站博客园和wordpress
  • MyBatis基本工作原理
  • 第16届深圳国际移动电子展AI生活主题将带来哪些新体验?
  • AI智能体赋能战略分析与制订之仿真:“主权AI” —— 是国家安全的“诺亚方舟”,还是创新生态的“孤岛”?
  • 公司手机网站建设wordpress页眉页脚
  • MySQL时间格式转换,时间数据混乱不堪如何彻底重构?
  • Docker 安装 Node.js
  • vscode 怎么运行 c++ 文件
  • 【基础算法】记忆化搜索
  • wordpress yum上海搜索引擎优化公司排名
  • c++类和对象(下)
  • 算法7.0
  • 【异常处理——下】
  • axios请求
  • 109、23种设计模式之迭代器模式(18/23)
  • 餐饮设计公司网站wordpress如何保存
  • 前端页面出现问题ResizeObserver loop completed with undelivered notifications.
  • 有声阅读网站如何建设邵阳学院研究生与学科建设处网站
  • AWS RDS Aurora MySQL高CPU使用率问题诊断与解决实战
  • 【Swift】LeetCode 11. 盛最多水的容器
  • 设计模式之 享元模式 Flyweight
  • 智械觉醒当AI开始思考“我是谁”
  • 商河 网站建设公司网站的具体的建设方案
  • 湖南省网站备案婚纱摄影网站应该如何做优化
  • pytest学习
  • seo网站建设厦门百度广告代理商查询
  • 【全连接神经网络】基本原理
  • Go 异步编程