中国一级保护动物识别

P粉084495128
发布: 2025-07-22 13:36:34
原创
573人浏览过
本文围绕20种国家一级保护动物展开,先介绍相关背景、保护意义及刑法规定,再详述数据处理(解压、读取存储、划分、预处理)、数据集类构建、基于MobileNetV2的网络搭建与训练过程,最后展示模型加载及预测结果,旨在通过分类模型相关操作助力保护工作。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

中国一级保护动物识别 - php中文网

中国一级保护动物分类

背景

国家一级保护动物是根据《野生动物保护法》划分的。《野生动物保护法》第九条将国家重点保护野生动物划分为国家一级保护动物和国家二级保护动物两种,并对其保护措施作出相关规定,但它们的法律地位是相同的。

1989年,经国务院批准并颁布的《国家重点保护野生动物名录》中,收录包括了大熊猫、金丝猴、长臂猿、雪豹、东北虎、梅花鹿、亚洲象等在内的97种国家一级保护动物。

2020年6月,为进一步加大对穿山甲的保护力度,我国将穿山甲属所有种由国家二级保护野生动物提升至一级。

2021年2月,调整后的国家重点保护野生动物名录正式公布。豺、长江江豚等65种野生动物由国家二级保护野生动物升为国家一级。

中国一级保护动物识别 - php中文网        

(图源网络,请勿商用)

项目意义

不要让我们的孩子只能在博物馆里才见到今天的动物。

保护动物就是在保护生物的多样性,就等于保护了人类生存和社会发展的基石。就等于保护了人类文化多样性的基础,就是保护了人类自身。

学习长颈鹿的高瞻远瞩
学习大熊猫的憨厚可爱
学习小松鼠的动作敏捷
学习金丝猴的聪明灵活
学习牧羊犬的尽职尽责
学习北极熊的坚毅性格
动物是人类的朋友
也是人类学习的楷模
让我们爱自然,爱生活,爱护动物人人有责!
       

刑法规定

《中华人民共和国刑法》第三百四十一条 【非法猎捕、杀害珍贵、濒危野生动物罪;非法收购、运输、出售珍贵濒危野生动物、珍贵、濒危野生动物制品罪】非法猎捕、杀害国家重点保护的珍贵、濒危野生动物的,或者非法收购、运输、出售国家重点保护的珍贵、濒危野生动物及其制品的,处五年以下有期徒刑或者拘役,并处罚金;情节严重的,处五年以上十年以下有期徒刑,并处罚金;情节特别严重的,处十年以上有期徒刑,并处罚金或者没收财产。

【非法狩猎罪】违反狩猎法规,在禁猎区、禁猎期或者使用禁用的工具、方法进行狩猎,破坏野生动物资源,情节严重的,处三年以下有期徒刑、拘役、管制或者罚金。

数据集介绍

本项目包含了20种国家一级保护动物,文件夹内容如下:

中国一级保护动物识别 - php中文网        

每个文件夹当中的图片数量都在50-70左右。

一、数据处理

这一步没什么好说的,就是将数据解压,然后再讲数据进行打标签。

1.1 数据解压

这里我将数据解压到work目录下,如下:

work/动物1-20/XX

Trae国内版
Trae国内版

国内首款AI原生IDE,专为中国开发者打造

Trae国内版 815
查看详情 Trae国内版
In [ ]
!unzip -oq /home/aistudio/data/data63087/动物1-20.zip -d work/
登录后复制
   

1.2 数据读取与存储

这一步是将数据进行读取,当然我还是习惯性的将数据做一个记录,存入txt,同时我这个txt是符合paddleclas的使用的

有兴趣的可以直接使用我这个all_list.txt去进行paddleclas的分类实现。

In [2]
import os

dirpath = "work/动物1-20"# 先得到总的txt后续再进行划分,因为要划分出验证集,所以要先打乱,因为原本是有序的def get_all_txt():
    all_list = []    # 存储数据---图片路径
    data = []    # 存储标签---数字0-20
    label = []    # 记录编号对应的物种
    label_list = []
    i = 0
    j = -1
    for root,dirs,files in os.walk(dirpath): # 分别代表根目录、文件夹、文件
        category_name = ''
        for file in files:
            i = i + 1
            # 文件中每行格式: 图像相对路径      图像的label_id(注意:中间有空格)。              
            # work/动物1-20/蜂猴/b3c393be266ba8182ee2abead6c4bdf6.jpg 0
            imgpath = os.path.join(root,file)
            category_name = imgpath.split("/")[-2]
            all_list.append(imgpath+" "+str(j)+"\n")
            data.append(imgpath)
            label.append(j)
        label_list.append([category_name,j])
        j = j + 1

    allstr = ''.join(all_list)
    f = open('all_list.txt','w',encoding='utf-8')
    f.write(allstr)    return all_list , i , data , label, label_list
all_list,all_lenth,data,label,label_list = get_all_txt()print(data[0])print(label[0])print(label_list)
登录后复制
       
work/动物1-20/蜂猴/ff35702dd8171f9f5ef7577f757293f5.jpg
0
[['', -1], ['蜂猴', 0], ['紫貂', 1], ['金丝猴', 2], ['豚尾猴', 3], ['儒艮', 4], ['熊猴', 5], ['云豹', 6], ['中华白海豚', 7], ['大熊猫', 8], ['熊狸', 9], ['马来熊', 10], ['长臂猿', 11], ['亚洲象', 12], ['白鱀豚', 13], ['台湾猴', 14], ['豹', 15], ['雪豹', 16], ['叶猴', 17], ['虎', 18], ['貂熊', 19]]
登录后复制
       
In [3]
# 图片总数量查看print(all_lenth)print(len(data))print(len(label))
登录后复制
       
1099
1099
1099
登录后复制
       

1.3 数据划分

划分训练集和验证集数据,这里采用8:2

这里采用sklearn.model_selection下的划分功能,我们就不需要去打乱这个标签了,会自动将数据进行合理的划分。

中国一级保护动物识别 - php中文网        

这玩意真的是方便又好用!

In [4]
from sklearn.model_selection import train_test_split

train_img, val_img, train_label, val_label = train_test_split(data, label, test_size=0.2)
登录后复制
   
In [5]
print(train_img[0])print(train_label[0])print(val_img[0])print(val_label[0])
登录后复制
       
work/动物1-20/虎/虎3.jpg
18
work/动物1-20/虎/虎_48.jpg
18
登录后复制
       

到这里为止,我们就拿到我们后续训练所需要的训练集和验证集的data和label!

继续,进行数据预处理

1.4 数据预处理

就采用官方提供的方法完成数据的预处理即可。

In [6]
import paddle.vision.transforms as T

train_transforms = T.Compose([
    T.Resize((512,512)),#随机选取目标尺寸调整图像大小
    T.RandomCrop((500,500)),#随机裁剪图像
    T.RandomHorizontalFlip(prob=0.7),
    T.RandomVerticalFlip(prob=0.7),
    T.RandomRotation(90),
    T.Transpose(),    # HWC -> CHW
    T.Normalize(
        to_rgb=True)])#对图像进行标准化eval_transforms = T.Compose([
    T.Resize((500,500)),#以一定的概率对图像进行随机像素内容变换,可包括亮度、对比度、饱和度、色相角度、通道顺序的调整
    T.Transpose(),    # HWC -> CHW
    T.Normalize(
        to_rgb=True)#对图像进行标准化])
登录后复制
   

二、dataset类构建

使用paddle.io下的Dataset来编写此类

In [7]
## 构建dataset类import paddlefrom paddle.io import Datasetfrom PIL import Imageimport numpy as npclass MyDataset(Dataset):
    def __init__(self, mode = 'train'):
        # 训练样本数量
        self.training_data, self.training_label, self.test_data, self.test_label = train_img, train_label, val_img, val_label        if mode  == 'train':
            self.num_samples = len(train_img)        else:
            self.num_samples = len(val_img)
        self.mode = mode    def __getitem__(self, idx):
        if self.mode == 'train':
            image = self.training_data[idx]
            label = self.training_label[idx]
            img = Image.open(image).convert('RGB')
            img = train_transforms(img).astype("float32")        else:
            image = self.test_data[idx]
            label = self.test_label[idx]
            img = Image.open(image).convert('RGB')
            img = eval_transforms(img).astype("float32")        
        return img, np.array(label, dtype='int64')    def __len__(self):
        # 返回样本总数量
        return self.num_samples
登录后复制
   
In [8]
# 训练的数据提供器train_dataset = MyDataset(mode='train')# 测试的数据提供器eval_dataset = MyDataset(mode='val')# 查看训练和测试数据的大小print('train大小:', len(train_dataset))print('eval大小:', len(eval_dataset))# 查看图片数据、大小及标签for data, label in train_dataset:    print(np.array(data).shape)    print(label)    break
登录后复制
       
train大小: 879
eval大小: 220
(3, 500, 500)
18
登录后复制
       

三、网络搭建

考虑到后续可能会去部署到硬件上,所以我们这里不再自己手动搭建网络,采用官方提供的shuffleNet系列的网络模型即可。

因为现在的移动端或者硬件部署追求效率多一些,就需要相对而言轻量级的模型,和比较主流的模型,这样方便去适配硬件。

推荐使用Mobilenet_V1、V2和shuffleNetV1、V2和Resnet50

我这里就使用MobileNetV2吧

In [9]
import paddlefrom paddle.vision.models import MobileNetV2

model = MobileNetV2(num_classes=20)
登录后复制
       
W0808 17:27:01.903826  3656 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
W0808 17:27:01.908238  3656 gpu_resources.cc:91] device: 0, cuDNN Version: 7.6.
登录后复制
       
In [10]
paddle.summary(model, (1,3,500,500))  # 模型结构查看
登录后复制
   

四、模型训练

In [11]
import paddlefrom paddle.vision.models import MobileNetV2

model = MobileNetV2(num_classes=20)
model = paddle.Model(model)

EPOCH_NUM = 250BATCH_SIZE = 32learning_rate = 2e-3scheduler = paddle.optimizer.SGD(learning_rate=learning_rate, parameters=model.parameters())# 配置优化器、损失函数、评估指标model.prepare(scheduler, 
              paddle.nn.CrossEntropyLoss(), 
              paddle.metric.Accuracy())# 训练可视化VisualDL工具的回调函数visualdl = paddle.callbacks.VisualDL(log_dir='visualdl_log')# 启动模型全流程训练model.fit(train_dataset,
    eval_dataset,
    epochs=EPOCH_NUM,
    batch_size=BATCH_SIZE,
    callbacks=[visualdl],
    save_dir='output',
    shuffle=False,
    save_freq=10)
登录后复制
   
Epoch 250/250step 10/28 - loss: 0.2091 - acc: 0.9812 - 767ms/stepstep 20/28 - loss: 0.2418 - acc: 0.9812 - 768ms/stepstep 28/28 - loss: 0.1428 - acc: 0.9784 - 754ms/step
登录后复制
   

五、结果展示

In [21]
# 加载模型model = MobileNetV2(num_classes=20)
para_dict = paddle.load('output/final.pdparams') # 这里我根据上面的图中我选择使用220轮的模型进行验证model.load_dict(para_dict)

image ='work/动物1-20/貂熊/貂熊13.jpg'img = Image.open(image).convert('RGB')
img = paddle.to_tensor(train_transforms(img),dtype='float32')
img = paddle.reshape(img,(1,3,500,500))
pre = model(img)
result = pre.numpy().argmax()print(result)print(label_list[result+1]) # 加1 是因为前面生成的label_list第一个是 ['', -1]
登录后复制
       
19
['貂熊', 19]
登录后复制
       
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/nn/layer/norm.py:654: UserWarning: When training, we now always track global mean and variance.
  "When training, we now always track global mean and variance.")
登录后复制
       

以上就是中国一级保护动物识别的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号