中国一级保护动物识别


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

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

中国一级保护动物分类

背景

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

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

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

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

       

(图源网络,请勿商用)

项目意义

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

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

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

刑法规定

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

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

数据集介绍

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

       

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

一、数据处理

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

1.1 数据解压

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

work/动物1-20/XX

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下的划分功能,我们就不需要去打乱这个标签了,会自动将数据进行合理的划分。

       

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

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.")


# python  # 工具  # ai  # sklearn  # 保护动物  # 国家一级  # 有期徒刑  # 保护野生动物  # 让我们  # 国家二级  # 数据处理  # 就等于  # 保护法  # 马来 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化91478 】 【 技术知识72672 】 【 云计算0 】 【 GEO优化84317 】 【 优选文章0 】 【 营销推广36048 】 【 网络运营41350 】 【 案例网站102563 】 【 AI智能45237


相关推荐: Google Gemini 在跨境电商选品分析中的实战  DeepSeek金融数据分析教程 DeepSeek量化交易策略开发  AI驱动合同管理:Microsoft Power Platform实战指南  QuickBooks Desktop 到 Online 迁移指南:轻松转移您的公司数据  AI内容检测与优化:免费工具助你提升内容质量  Tenorshare AI Bypass:终极AI内容人性化工具深度评测  MetaGPT:AI驱动的软件开发团队,颠覆传统编码模式  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  AI聊天机器人引发伦理思考:泰国老人在Facebook上遭遇情感欺骗悲剧  银行对账单解读完全指南:掌握财务状况,优化资金管理  银行经理写给银行经理的信:实用模板和关键要素  教你用AI进行市场调研,快速生成消费者洞察报告  百度AI助手入口在哪 怎么找到聊天入口  夸克AI能否查快递物流_夸克AI快递查询入口与单号输入【步骤】  文心一言辅助进行行业深度研究报告撰写  MemeGIF Studio:AI驱动的GIF生成器全面评测与使用指南  AI复古纱丽照片编辑:用Google Gemini轻松生成时尚照片  颠覆工作方式:2025年必备的9款强大AI工具  Android图像翻译器应用:技术、应用与未来展望  现代集团CES 2026首秀机器人Atlas 发布AI机器人战略  电脑百度ai助手怎么关闭 电脑版百度ai助手移除教程  DeepSeek 辅助进行硬件描述语言 Verilog 调试  解密Poppy Playtime怪物:全面解析玩具世界背后的故事  C3.ai深度解析:投资者必知的关键洞察  Canva AI工具教程:动漫化图像、生成艺术与定制QR码  豆包AI怎么做数据分析 豆包AI数据处理入门教程  Pictory AI视频制作平台深度评测:功能、价格与使用指南  即梦ai怎么生成游戏角色原画_即梦ai游戏角色生成风格与装备细节【教程】  VoiceBrigade:AI 赋能,革新语音合成与内容创作  GoHighLevel AI Agent:终极指南,释放你的CRM潜力  宠物翻译App评测:与猫狗交流的未来科技?  百度ai助手任务栏怎么关 百度ai助手任务栏图标隐藏  ChatGPT怎样用提示词设上下文_ChatGPT上下文设置技巧【方法】  唐库AI拆书工具怎么查看拆书进度_唐库AI拆书工具进度查看与异常排查【方法】  百度AI搜索怎样设置搜索偏好_百度AI搜索偏好设置与个性化推荐【技巧】  批改网ai检测工具怎么设置检测严格度_批改网ai检测工具严格度调整【技巧】  AI音频增强和视频背景替换终极指南  智行ai抢票怎么选优先车次_智行ai抢票车次优先级设置技巧【指南】  通义千问怎么找新功能入口_通义千问新功能查找【攻略】  怎么用AI帮你写一份客户感谢信?维系客户关系的利器  批改网AI检测工具怎样开启实时检测_批改网AI检测工具实时检测开启与延迟设置【指南】  自动化AI汽车生成挑战赛1966 Gasmea回顾与评分  亚马逊KDP电子书掘金:月入1万美元的秘密策略  AI 3D人像视频制作:零成本手机教程,引爆社交媒体  tofai官网正版入口 tofai网页版免费使用  图像分割技术详解:定义、类型、技术与应用  怎么用AI帮你解读复杂的学术论文?快速抓住核心论点和证据  夸克AI怎么用AI写作_夸克AI写作功能与模板选择【指南】  AI员工工具详解:添加与移除指南,提升效率  AI简历生成工具有哪些_一键生成专业简历的AI工具推荐 

 2025-07-22

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

南京市珐之弘网络技术有限公司


南京市珐之弘网络技术有限公司

南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 87067657

 13565296790

 87067657@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.