可爱的小猫咪谁不爱呢,我也不例外,但是要我说出什么种类,那就是为难我了,我什么种类都不知道,纯属于喜欢,喜欢看,从未养过,期待养只猫。。。。。。
项目简介:
猫的十二分类大家以前都做过,先在我想快速得到分类模型,只想要结果。。。
PaddleHub可以便捷地获取PaddlePaddle生态下的预训练模型,完成模型的管理和一键预测。配合使用Fine-tune API,可以基于大规模预训练模型快速完成迁移学习,让预训练模型能更好地服务于用户特定场景的应用。。。看到这里何不用PaddleHub呢???
原作采用ResNet101为骨架的深度神经网络的猫咪图像分类模型,对猫咪的图像进行分类和目标识别,图像分类识别准确度最高可以达到94%。 我想试试能不能再进一步。。。
0.环境设置
更改环境为PaddlePaddle2.0 RC1,PaddleHub 2.0.0b2
#导入一些图像处理的包 %cd /home/aistudio import matplotlib.pyplot as plt import numpy as np import pandas as pd import os, shutil, cv2, random %matplotlib inline
/home/aistudio
1.数据处理
!mkdir dataset !unzip data/data10954/cat_12_train.zip -d dataset/ !unzip data/data10954/cat_12_test.zip -d dataset/ !cp data/data10954/train_list.txt dataset/
%cd dataset/
/home/aistudio/dataset
图片数据按目录整理
import pandas as pd import os import shutil def mkdir(): for i in range(12): os.mkdir(str(i)) if __name__ == "__main__": data = pd.read_csv("train_list.txt", sep=" ", header=None) mkdir() for i, r in data.iterrows(): print(os.path.split(r[0])) old_file = r[0] new_file = os.path.join(str(r[1]), os.path.split(r[0])[-1]) shutil.move(old_file, new_file) print("File resort finished!")
#导入需要的包 import os import random import json import cv2 import numpy as np from PIL import Image import paddle import matplotlib.pyplot as plt ## 转换4通道为3通道 def proc_img(src): for root, dirs, files in os.walk(src): if '__MACOSX' in root:continue for file in files: src=os.path.join(root,file) img=Image.open(src) ## 转换4通道为3通道 if img.mode != 'RGB': img = img.convert('RGB') img.save(src) if __name__=='__main__': proc_img("dataset")
!pip install paddlex
%cd ~
/home/aistudio
!rm dataset/train_list.txt !rmdir dataset/cat_12_train/ !mv dataset/cat_12_test/ ~
!paddlex --split_dataset --format ImageNet --dataset_dir dataset/ --val_value 0.2 --test_value 0.1
!pip install imgaug
# 环境变量配置,用于控制是否使用GPU # 说明文档:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html#gpu import os os.environ['CUDA_VISIBLE_DEVICES'] = '0' from paddlex.cls import transforms import paddlex as pdx train_transforms = transforms.Compose([ transforms.ResizeByShort(short_size=224), transforms.RandomCrop(crop_size=64), transforms.RandomHorizontalFlip(), transforms.Normalize() ]) eval_transforms = transforms.Compose([ transforms.ResizeByShort(short_size=224), transforms.CenterCrop(crop_size=64), transforms.Normalize() ]) # 定义训练和验证所用的数据集 # API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/datasets.html#paddlex-datasets-imagenet train_dataset = pdx.datasets.ImageNet( data_dir='/home/aistudio/dataset/', file_list='/home/aistudio/train_list.txt', label_list='/home/aistudio/labels.txt', transforms=train_transforms, shuffle=True) eval_dataset = pdx.datasets.ImageNet( data_dir='/home/aistudio/dataset/', file_list='/home/aistudio/val_list.txt', label_list='/home/aistudio/labels.txt', transforms=eval_transforms) # 初始化模型,并进行训练 # 可使用VisualDL查看训练指标,参考https://paddlex.readthedocs.io/zh_CN/develop/train/visualdl.html # model = pdx.cls.MobileNetV3_small_ssld(num_classes=len(train_dataset.labels)) model = pdx.cls.ResNet101_vd_ssld(num_classes=len(train_dataset.labels)) # API说明:https://paddlex.readthedocs.io/zh_CN/develop/apis/models/classification.html#train # 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html model.train( num_epochs=200, train_dataset=train_dataset, train_batch_size=256, eval_dataset=eval_dataset, lr_decay_epochs=[4, 6, 8], learning_rate=0.05, save_dir='output/ResNet101_vd_ssld')