PaddleHub之《青春有你2》作业:五人识别
其实就是利用已经有的模型训练自己的模型,代码已经写好,主要是数据集的问题。图片的来源我也很无奈,没那么多时间去爬了,这里主要讲怎么准备好数据集,并用在模型上,最终达到识别的效果。
首先在桌面新建文件夹dataset,里面再建两个文件夹,train,test,分别存放训练用的图片和测试用的图片,在建四个文本文件,label_list.txt,test_list.txt,train_list.txt,validate_list.txt。如下图:
test文件夹里面就是工程里本来就有的五张测试图片,train文件夹下面是
再下面就是每个选手的图片了:
这里图片的数量挺少的。没在网上爬了。
label_list.txt文本是要分类的标签,有几样就有就个标签,这里有5个。
test_list.txt已经给出来了。要做的就是train,txt。
这里用python写好文件处理的代码,将图片的信息记录到train.txt中,格式跟test.txt挺像的。
还要validate_list.txt,这里为了快点就直接采用test_list.txt的内容,相当于验证集和测试集用了相同的图片,其实应该用新的图片的。
准备好了数据集,打包上传到notebook上的文件中,解压,把原来的dataset文件夹删掉。
!unzip -o dataset.zip
这样就可以运行代码了,还有注意几个地方:
1.
%set_env CPU_NUM=1
这里采用cpu运行的要运行这句代码,GPU就不用了。
from paddlehub.dataset.base_cv_dataset import BaseCVDataset
class DemoDataset(BaseCVDataset):
def __init__(self):
# 数据集存放位置
self.dataset_dir = "/home/aistudio"
super(DemoDataset, self).__init__(
base_path=self.dataset_dir,
train_list_file="dataset/train_list.txt",
validate_list_file="dataset/validate_list.txt",
test_list_file="dataset/test_list.txt",
label_list_file="dataset/label_list.txt",
)
dataset = DemoDataset()
print(dataset)
这里我是这样写的,应该有别的写法。这里的添加数据集的路径我改了,也许原来的也是对的,但是我运行失败了,所以这里添加数据的路径改了。
这里可以打印datdset 看看数据集加载的对不对。
3.
config = hub.RunConfig(
use_cuda=False, #是否使用GPU训练,默认为False;
num_epoch=10, #Fine-tune的轮数;
checkpoint_dir="cv_finetune_turtorial_demo",#模型checkpoint保存路径, 若用户没有指定,程序会自动生成;
batch_size=3, #训练的批大小,如果使用GPU,请根据实际情况调整batch_size;
eval_interval=10, #模型评估的间隔,默认每100个step评估一次验证集;
strategy=hub.finetune.strategy.DefaultFinetuneStrategy()) #Fine-tune优化策略;
这里如果是cpu运行的话,use_cuda设置为False。这里适当调下参数,这里就修改了训练轮数num_epoch.
其他地方没什么问题,正常运行就可以。最后结果:
[array([[5.94421387e-01, 1.00226685e-01, 7.85720497e-02, 8.43862444e-02,
1.42393559e-01],
[4.36579809e-03, 9.79011714e-01, 1.65066647e-03, 7.21962599e-04,
1.42498752e-02],
[2.87633508e-01, 1.48473755e-01, 2.94090718e-01, 4.57237177e-02,
2.24078342e-01]], dtype=float32)]
[0 1 2]
input 1 is dataset/test/yushuxin.jpg, and the predict result is 虞书欣
input 2 is dataset/test/xujiaqi.jpg, and the predict result is 许佳琪
input 3 is dataset/test/zhaoxiaotang.jpg, and the predict result is 赵小棠
[array([[0.16526589, 0.1818647 , 0.0856045 , 0.42717436, 0.1400906 ],
[0.2454238 , 0.25373325, 0.02422955, 0.16480318, 0.31181023]],
dtype=float32)]
[3 4]
input 4 is dataset/test/anqi.jpg, and the predict result is 安崎
input 5 is dataset/test/wangchengxuan.jpg, and the predict result is 王承渲