基于Python的图像分类项⽬实践——图像分类项⽬的指导⽂档第⼀节实践环境和项⽬初识
⼀、采⽤百度aistudio在线环境(基于Notebook的python环境)
实验环境
启动环境后,选择基础版。⾼级版的只需要在迁移训练项⽬时使⽤
启动环境后的notebook
操作参考解说视频和操作指南
第⼆节项⽬总览
第⼀部分 预训练模型⽐较(狗狗图像分类)
描述:根据实践指导,选择paddlepaddle中使⽤Imagenet训练好的预训练模型,对狗狗的类别做分类测试,并⽐较3个预训练模型的各项指标(指导⾥有指标项)
第⼆部分 迁移训练
描述:使⽤第⼀部分选出的模型做finetune迁移训练,并使⽤⾃⼰搜集的50张图⽚作测试,记录模型准确率
第三部分 数据集增强
描述:对数据集每张图⽚做矩阵运算,然后再次重新选择X模型使⽤增强的数据集做训练,再测试⾃⼰搜集的50张图⽚的准确率,和第⼆部分任务做⽐较)
图像分类实践项⽬-第⼀部分狗狗图像分类
有40张⼤部分是狗狗图像⽂件,已经有⼈为其做了类别命名,但是存在错误。我们需要使⽤已经训练好的神经⽹络,对图⽚进⾏识别后,将图⽚进⾏正确的分类。
最终实践⽬标
·通过使⽤Python从计算⽅⾯解决复杂的问题,提⾼编程技能。
·学会使⽤深度学习模型(已经训练好的模型)。
◆除了编程任务之外,还需要同学们画出每个任务的详细流程图
◆合作⽅式:三⼈⼀组,终期汇报(4分钟),合作完成项⽬报告
◆提交⽅式:百度平台(程序内容和项⽬报告,报告模板后期上传)
资源⽂件解释
·主程序名称:classify_dog_project
·需要识别的图像⽂件夹:pet_image(有⼩狗的和⾮⼩狗的)
·调⽤的CNN模型可识别的1000种种类(有⼩狗及其他种类)名称:
imagenet1000_clsid_,共有1000个标签,其中有118个
不同的⼩狗品种标签:151:吉娃娃到268:墨西哥⽆⽑狗
·210种⼩狗品种:。这个⽂件包含了分类器函数和宠物图像标签的所有可能狗品种
第⼀部分的实践项⽬的需要做的六个编程任务:
·任务⼀:计算代码的运⾏时间(在项⽬中标记为TODO1的部分)
·
任务⼆:为宠物图像创建图像标签
·任务三:使⽤CNN模型输出的结果为40张图像分类
·任务四:通过提取的标签识别图像为⼩狗或者⾮⼩狗
·任务五:统计图像情况
·任务六:统计模型分类效果
同时完成任务⼀到任务四的流程图
•任务⼀内容:计算代码运⾏时间
·任务的主体代码在check_images模块⾥,在此模块:添加计算程序运⾏时间的相应代码(也就是标记为TODO1的地⽅)。
编写完毕后,该代码将计算程序的总运⾏时间。后续该代码将衡量三个算法中的每个算法对pet_images⽂件夹中的所有图像进⾏分类所需的时间。
·编写完运⾏时间计算的代码后,通过使⽤sleep()函数测试计算运⾏时间的代码是否运⾏正确。
·时间模块的测试包括以下内容:在sleep()函数中设置不同的值(秒),检查时长和时间格式。
导⼊Time模块
要在python中计算代码运⾏时间,需要从python time模块导⼊time()函数。
为了模拟程序运⾏⼀段特定的时间,我们将使⽤time模块的sleep()函数。它将使程序暂停执⾏⼀定的秒数。
因为我们只需使⽤time()和sleep()函数,我们将仅导⼊这两个函数,⽽不是导⼊整个time模块。
仅从模块中导⼊所需的函数可以节省程序运⾏所需的内存(RAM)。
此类导⼊如下所⽰:from time import time,sleep
使⽤Time和Sleep函数要计算代码运⾏时间,需要:
·⾸先,创建⼀个变量来记录开始时间(start_time),即你要开始记录代码运⾏时间的点
·接着,创建⼀个变量来记录结束时间(end_time),即你要停⽌记录代码运⾏时间的点
·
最后,计算总运⾏时间(tot_time):将end_time减去start_time。tot_time是指代码的总运⾏时间(以秒记)
以下代码演⽰了如何使⽤time()和sleep()。sleep(75)⽤来使程序暂停75秒。要
计算实际代码的运⾏时间,请将sleep(75)替换为要计算运⾏时间的代码。
#Sets start time
start_time = time()
#Replace sleep(75) below with code you want to time
sleep(75)
#Sets end time
end_time = time()
#Computes overall runtime in seconds
tot_time = end_time - start_time
#Prints overall runtime in seconds
print("\nTotal Elapsed Runtime : ", tot_time,"in seconds.")
·计算时间后,还需要将运⾏时间设置成时间格式,例如hh:mm:ss,其中hh表⽰两位数的⼩时数mm表⽰两位数的分钟数ss表⽰两位数的秒数
·确定总运⾏时间(即tot_time)的格式
hours = int( (tot_time / 3600) )
minutes = int( ( (tot_time % 3600)/ 60 ) )
seconds = int ( ( (tot_time % 3600)% 60 ) )
下⾯的代码将以hh:mm:ss格式输出运⾏时间
print("\nTotal Elapsed Runtime:", str( int( (tot_time / 3600)) ) + ":"+
str( int( ( (tot_time % 3600)/ 60 ) ) ) +":"+
str( int(( (tot_time % 3600)% 60 ) ) ) )
注意代码使⽤int()函数并截断秒数的值,⽽不是四舍五⼊到最近的秒数。也就是说,如果总运⾏时间为4.519087974567,则格式变成总运⾏时间:0:0:4。
如果你想四舍五⼊到最近的秒数,在计算上⾯的秒数时,需要将int()函数替换为round()函数。
任务2(TODO2)的主要内容
·需要编写完成模块get_pet_labels。
·在这个函数⾥,需要使⽤pet_images⽂件夹中的宠物图像的⽂件名为宠物图像创建名字标签。这些宠物图像标签是前期标⽰,⽤于展⽰宠物图像中的动物品种;因此,它们代表了“真实结果”的标签。
·编写完毕后,需要函数返回⼀个字典,字典⾥包含了pet_image⽂件夹中的所有40个宠物图像的键值对:键是宠物图像⽂件名,值是宠物图像标签。
·然后回到主程序模块,调⽤get_pet_labels
主程序模块:
# 此处是主程序模块,任务⼀的内容在此模块中编写
# 另外五个任务的内容,需要在这段主程序代码中调⽤不同的任务函数完成
# Python不会像C语⾔⼀样,标⽰出MAIN程序来代表主程序。
# 可以直接理解这段代码是我们分类项⽬的主程序
# classify_dog_project
from time import time, sleep
from os import listdir
# TODO: 1.
#definition,主要是定义宠物图像⽂件夹,模型名称(后⾯要⽐较不同的模型,所以模型名称会被修改),⼩狗名称定义⽂件的名称classify_dir='pet_images/'
arch='vgg'
dogfile=''
#Sets start time
start_time = time()
#Replace sleep(75) below with code you want to time
sleep(2)
#Sets end time
end_time = time()
#Computes overall runtime in seconds
tot_time = end_time - start_time
#Prints overall runtime in seconds
print("\nTotal Elapsed Runtime : ", tot_time,"in seconds.")
hours = int( (tot_time / 3600) )
minutes = int( ( (tot_time % 3600)/ 60 ) )isalpha 函数
seconds = int ( ( (tot_time % 3600)% 60 ) )
print("\nTotal Elapsed Runtime:", str( int( (tot_time / 3600)) ) + ":"+
str( int( ( (tot_time % 3600)/ 60 ) ) ) +":"+
str( int(( (tot_time % 3600)% 60 ) ) ) )
# TODO: 2.
answers_dic = get_pet_labels()
# TODO: 3.
result_dic = classify_images()
# TODO: 4.
adjust_results4_isadog()
# TODO: 5.
results_stats_dic = calculates_results_stats()
# TODO: 6.
print_results()
# TODO: 1. 输出最终运⾏时长格式为 hh:mm:ss
get_pet_labels函数模块:
# 任务2的内容:TODO 2
def get_pet_labels():
"""
这个函数需要最终返回⼀个基于狗狗图像⽂件名字的字典。
需要将宠物图像⽂件名读取后并提取当前宠物图像类别标签。
这个标签最后的作⽤是⽤于和我们⽹络分类结果进⾏⽐较,并确定⽹络分类的正确率。
函数参数Parameters:
image_dir - 完整的⽂件夹路径,⽂件夹内存放的所有的待CNN模型识别的狗狗的图像。
函数返回值Returns:
petlabels_dic - ⼀个存储了图⽚⽂件名作为字典KEY,和宠物当前⽂件名标签作为Value的字典。
"""
pass
如何读取⽂件夹中的⽂件
⽂件夹pet_images/包含40个⽤于测试神经⽹络的图像。pet_images/中的图像
⽂件名标识了每张图像的动物。要为宠物图像创建标签,需要:
1.读取pet_image/⽂件夹中的所有⽂件的名称
2.处理⽂件名以创建宠物图像标签
3.根据分类器函数的标签和中⼩狗的名称,调整宠物图像标签的格式该函数的第⼀个任务是从⽂件夹中读取⽂件名。
要完成此任务,只需从os这个python模块中导⼊listdir⽅法。listdir⽅法会从⽂件夹中的⽂件中检索所有⽂件名,然后将这些⽂件名当做列表返回。以下代码演⽰了如何进⾏此导⼊和检索操作。
#Imports only listdir function from oS module
from os import listdir
# Retrieve the filenames from folder pet_images/
filename_list = listdir("pet_images/")
#Print 10 of the filenames from folder pet_images/
print(" \nPrints 10 filenames from folder pet_images/")
for idx in range(0,10,1):
print("%2d file: %-25s" % (idx + 1, filename_list[idx]))
字典知识回顾
·任务2最终需要构建的是以宠物图像⽂件名(作为键)和相关标签(作为值)的字典数据结构。
·字典的键值对是⼀个逻辑选择,我们后⾯需要使⽤分类器函数处理相同的⽂件名(键),并将返回的标签与宠物图像标签(值)进⾏对⽐。
如果我们使⽤字典,给定输⼊键后,检索相关值⽐从其他数据结构(例如列表)中检索值的速度要快
以下代码演⽰了使⽤python字典可以完成的操作,可以在编写此函数时作为参考
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论