Супер простая классификация кошек и собак на основе Paddlex

искусственный интеллект глубокое обучение задняя часть

Соси кошек вместе с кодом! Эта статья участвует【Эссе "Мяу Звезды"】.

Супер простая классификация кошек и собак на основе Paddlex

Кто не любит милых котят, я не исключение, но если вы хотите, чтобы я сказал, какие, то мне неловко, я не знаю, какие, мне просто нравится, я люблю смотреть, я никогда не выращивал его, и я с нетерпением жду возможности вырастить одного кота. . . . . .

Описание Проекта:

Все уже делали двенадцать классификаций кошек прежде всего, я хочу быстро получить классификационную модель, мне нужны только результаты. . .

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')