Python小白逆袭大神:Day4-《青春有你2》选手识别

今天第开始深度学习的第四天了,今天就真正走进深度学习了,算了体验深度学习了吧。paddlehub真的是一个非常好用的与训练模型库,能让对深度学习一无所知的我们体验到什么是深度学习。
首先我们来看看经典的深度学习劝退 步骤。从模型选择、调参训练到预测部署,包含的那么多东西,0基础的同学一看就晕。
在这里插入图片描述
然后我们再来看看paddlehub,似乎里面有很多别人训练好的模型,我们下载下来用自己的数据稍微修改一下就可以应用了的,好简单的样子。 主要其所涵盖的领域还挺多的,文本、语音、图像、视频等等。
在这里插入图片描述
在这里插入图片描述

1.学习笔记

那么我们今天主要讲了图像分类这个领域,以两个女训练生的图片作为一个二分类问题。那么一下三部曲就是利用paddlehub的预训练模型进行这个二分类问题啦。
第一步:数据获取。利用我们第一天爬取的图片来作为我们的训练数据,这里不再细说爬虫。
在这里插入图片描述
第二步:数据集的制作。根据paddlehub的要求把自己的数据分成训练集测试集和验证集,并做几个txt文件,里面写清楚哪些是训练集、验证集、测试集。建好文件并用相应代码加到项目里。
在这里插入图片描述
在这里插入图片描述

第三步:使用paddleHub实现分类。进度好看有木有

  • 首先是加载模型,这里我们选用resnet_v2_50_imagenet这个模型,别问为什么。

在这里插入图片描述

  • 然后读取我们自己刚刚建立好的数据。
    在这里插入图片描述
  • 还需要一点点配置,别紧张,这几行代码记住就好。

在这里插入图片描述

  • 然后就可以对resnet_v2_50_imagenet这个现成模型做一些小小的训练,来让它更适应我们自己的数据啦。其实真正用的的训练过程就是红框里的那一句,是不是很震惊。
    在这里插入图片描述

**好啦,到这里我们就已经有了一个很棒的模型了,这个模型可以很好的处理我们的数据。那么接下来就用它来预测一下吧。**完美的预测,激动都搓手手。
在这里插入图片描述

2.作业心得

今天的作业其实和课堂的小demo差不多,只不过课堂demo是两个人在那分类,作业是要对5个人进行分类。主要的步骤还是这三部,获取数据,制作数据集和paddleHub实现分类。主要的难点就是数据获取和制作数据集这块啦。
第一步数据获取:这个还是通过爬虫来进行获取,这边我参考了一个同学的笔记,写的非常认真。https://blog.csdn.net/weixin_45623093/article/details/105578578

import requests
from bs4 import BeautifulSoup
import os

kv = {
    
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 '
                   'Safari/537.36'}
#请求
def GetHtmlHTML(url, kv):
    try:
        r = requests.get(url, headers = kv)
        r.raise_for_status()  # 不是200报错
        r.encoding = r.apparent_encoding
        return r.text
    except:
        print('请求错误')

#分析
def fillPhotList(soup):
    phot_list = []
    tag_mass = BeautifulSoup.find_all(soup, {
    
    'img'})
    #print(tag_mass)
    for i in range(len(tag_mass)):
        phot_site = (tag_mass[i].attrs['src'])
        #print(phot_site)
        phot_list.append(phot_site)
    print(phot_list)
    return phot_list

#查看是否存在文件夹
def file_confirm(matter):
    if not os.path.exists(matter):
        os.makedirs(matter)
        print(f'{matter}创建成功')

#下载保存
def havePhot(photlist, kv, matter, counts):
        for i in range(len(photlist)):
            phot = requests.get(photlist[i], headers = kv)
            with open(f'./{matter}/{matter}+{counts}+{i}.jpg','wb')as f:
                f.write(phot.content)
            # thread_lock.release()
            print(f'{matter}+{counts}+{i}.jpg下载完成')

#主函数
def main():
    matter = input('图片内容')
    counts = int(input('大致需要图片数量')) // 35
    file_confirm(matter)
    for count in range(counts+5):
        url = f"https://cn.bing.com/images/async?q={matter}&first={count*50}&relp=35&scenario=ImageBasicHover&datsrc=N_I&layout=RowBased_Landscape" \
              "&mmasync=1&dgState=x*0_y*0_h*0_c*7_i*71_r*9&IG=3ABC8EDB67A0437FBDC8BF88BA9B2DCA&SFX=3&iid=images.5602"  
           #爬取选手数据的时候只需把这里的q={matter}改成q='选手名'就好啦
        html = GetHtmlHTML(url, kv)
        soup = BeautifulSoup(html, 'lxml')
        photList = fillPhotList(soup)
        havePhot(photList, kv, matter,count)



main()


第二步:数据集的制作。 这里算是这个作业最难的地方了,踩了好多坑,带大家来排一下。
1.路径问题。这里的train_list、valide_list和test_list里的文件路径不能有dataset/,具体原因不详。
在这里插入图片描述
2.报错说’dataset/'是一个路径。。。。。这不就应该是一个路径嘛。后来经高人指点,这些txt文件里不能有空行,具体原因不详,可能空行也会被当作数据吧,玄学玄学。
在这里插入图片描述
3.我的jpg文件为啥末尾有了\n这个换行符了望天。这个文件默认的换行也太可怕了吧,最后我加了一个空格算是解决了,原因不详。
在这里插入图片描述
在这里插入图片描述
4.还有个问题test_list里去点dataset/后能训练了,但是预测又有路径问题了。这里我新建了个test.txt的文件,里面的路径加上dataset/,这么一折腾,代码总算能全部运行了。准确率虽然算不上高,但总算完成作业了,我已经没有精力了。
在这里插入图片描述

那么接下来就是大佬们该考虑的数据增强来提高准确率的事情了。
我带个听过有什么图像翻转啊,加入噪声啊,尺寸变化啊等等,这里就智能讲这么多了,再多我也讲不出来了。
好啦,今天就是这么多内容了,觉得写的不错的朋友可以点个赞或者关注一下,明天见。

猜你喜欢

转载自blog.csdn.net/qq_39748940/article/details/105777899
今日推荐