基于Attention_CNN_GRU的野生动物监测图像分类
大一的时候突发奇想选择了这样的一个方向,并查阅了相关文献,努力去完成这样的一个系统化的东西。但确实这方面做的人很少,也没有找到有关的进行学习,做的也是很是缓慢,同时也是运用到了Paddle框架,Paddle的一小部分展示如下:
import paddle
import sys
import osimport paddlehub as hub
module = hub.Module(name='resnet50_vd_animals')Downloading resnet50_vd_animals
[==================================================] 100.00%
Uncompress /home/aistudio/.paddlehub/tmp/tmp2qvasfuz/resnet50_vd_animals
[==================================================] 100.00%Filelist = []
Dirlist = []
path ='dataset/img'
import os
def set_label(file_path):del_str='.ipynb_checkpoints'for home, dirs, files in os.walk(file_path):for d in dirs:if del_str in d:continueelse:Dirlist.append(d)
set_label(path)
print(Dirlist)def get_filelist(dir):data_dict={}.fromkeys(['path','label'])del_str='.ipynb_checkpoints'for home, dirs, files in os.walk(path):for filename in files:if del_str in filename:continueelse:data_dict={}.fromkeys(['path','label'])img_path=os.path.join(home, filename)data_dict['path']=img_pathfor i in range(len(Dirlist)):if Dirlist[i] in img_path:img_label=idata_dict['label']=img_labelFilelist.append(data_dict)return Filelist, Dirlist #返回文件名 路径img_files,labels=get_filelist('dataset/img')forecast_list=[]def dict_save(trainfilename,validatafilename,data):for i in range(len(data)):if 0<=i%10 and i%10<=5: with open(trainfilename,"a") as f:train = data[i]["path"]+" "+str(data[i]["label"])+"\n"f.write(train)if 6<=i%10 and i%10<=7: with open(validatafilename,"a") as f1:validata = data[i]["path"]+" "+str(data[i]["label"])+"\n"f1.write(validata)if 8<=i%10:forecast_list.append(data[i]["path"])print("保存文件成功") def text_save(filename, data):str_list = [line+'\n' for line in data]with open(filename, 'w') as f:f.writelines(str_list)print("保存文件成功") validata_file='data/validata_list.txt'
label_file='data/label_list.txt'
train_file='data/train_list.txt'dict_save(train_file,validata_file,img_files)
text_save(label_file,labels)['野骆驼', '高鼻羚羊', '野牛', '麋鹿', '虎', '野马', '普氏原羚', '白唇鹿', '黑麂', ' 豚鹿', '丹顶鹤', '蒙古野驴', '中华秋沙鸭', '扭角羚', '鼷鹿', '西藏野驴', '熊猫', '台湾鬣羚', '河狸', '梅花鹿', '扬子鳄', '金钱豹', '藏羚', '云豹', '坡鹿', '紫貂', '野牦牛', '塔尔羊', '绿孔雀', '赤斑羚', '蜂猴', '藏羚羊']
保存文件成功
保存文件成功from paddlehub.dataset.base_cv_dataset import BaseCVDatasetclass HumanfaceDataset(BaseCVDataset): def __init__(self):self.dataset_dir = '/home/aistudio'super(HumanfaceDataset,self).__init__(base_path=self.dataset_dir,train_list_file="data/train_list.txt", label_list_file="data/label_list.txt",validate_list_file="data/validata_list.txt",)
dataset = HumanfaceDataset()reader = hub.reader.ImageClassificationReader( #reader 负责对dataset进行数据预处理image_width=module.get_expected_image_width(),image_height=module.get_expected_image_height(),images_mean=module.get_pretrained_images_mean(),images_std=module.get_pretrained_images_std(),dataset = dataset
)config = hub.RunConfig( use_cuda=True,num_epoch=10,batch_size=62,log_interval=50,strategy=hub.DefaultFinetuneStrategy())input_dict, output_dict, program = module.context(trainable=True)
img = input_dict["image"]feature_map = output_dict["feature_map"]feed_list = [input_dict["image"].name]
task = hub.ImageClassifierTask( data_reader=reader,feed_list=feed_list,feature=feature_map,num_classes=dataset.num_labels,config=config)task.finetune_and_eval()
import numpy as np
import re
import osdata = forecast_listlabel_map = dataset.label_dict()
index = 0
num = 0
run_states = task.predict(data=data)results = [run_state.run_results for run_state in run_states]
count=0
num1=0
for batch_result in results:batch_results = np.max(batch_result, axis=2)[0]batch_result = np.argmax(batch_result, axis=2)[0]for result in batch_result:num+=1index += 1try:if batch_results[index-1]:passexcept:index=1result = label_map[result]if batch_results[index-1]>=0.6:num1+=1print("input %i is %s, and the predict result is %s" %(num, data[num - 1], result))res = re.compile('[\u4e00-\u9fff]+').findall(data[num - 1])if res[0] in result:count+=1else:print("input %i is %s, 该动物未被识别" %(num, data[num - 1]))print("能够识别出来的精确率是:%.2f%%"%(count/num1*100))
其中对于图像的低照度增强,这里借鉴一下崔崔的:
def Image_enhancing(image):img=cv2.cvtColor(image,cv2.COLOR_BGR2GARY)/255# img = 0.2989*image[:, :, 2]+0.5870*image[:, :, 1]+0.1140*image[:, :, 0]#二者效果一样,使用后者不需要再除以255img = replaceZeroes(img)img_n = (np.power(img, 0.24)+(1-img)*0.5+np.power(img, 2))/2sigma = 3window = 3*sigma*2+1guass1 = cv2.GaussianBlur(img, (window, window), sigma)r1 = guass1/imgR1 = np.power(img_n, r1)sigma = 20window = 3*sigma*2+1guass2 = cv2.GaussianBlur(img, (window, window), sigma)r2 = guass2/imgR2 = np.power(img_n, r2)sigma = 24window = 255guass3 = cv2.GaussianBlur(img, (window, window), sigma)r3 = guass3/imgR3 = np.power(img_n, r3/255)R = (R1+R2+R3)/3Rr = R*(image[:, :, 2]/img_n)Rg = R*(image[:, :, 1]/img_n)Rb = R*(image[:, :, 0]/img_n)rgb = np.concatenate((Rb[:, :, np.newaxis], Rg[:, :, np.newaxis], Rr[:, :, np.newaxis]), axis=2)return rgb+image
def replaceZeroes(img):min_nonzero = min(img[np.nonzero(img)])img[img == 0] = min_nonzeroreturn img
以上的几个要点:
读取图像时需要归一化,归一化放在转为灰度图之后;
显示增强图像时需要除以255;
cv2.imread()读取图片通道为BGR;
有文章说需要将增强图像超过1的部分设为1,详见此,但实际并没有遇到问题。
我在上一篇CRNN+CTC中会给出Paddle的图像增强的几种代码。
基于Attention_CNN_GRU的野生动物监测图像分类相关推荐
- 基于卷积神经网络的垃圾图像分类算法
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 垃圾分类作为资源回收利用的重要环节之一, 可以有效地提高资源回收利 ...
- 基于python的分布式扫描器_基于python的服务器监测系统的设计
基于 python 的服务器监测系统的设计 高正 ; 徐浩 ; 余曼 [期刊名称] <电脑知识与技术> [年 ( 卷 ), 期] 2017(013)002 [摘要] 本文介绍了一种基于 P ...
- 【项目实战课】基于Pytorch的InceptionNet花卉图像分类实战
欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的InceptionNet花卉图像分类实战>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行 ...
- 基于单片机的温湿度监测报警
基于单片机的温湿度监测系统(独立按键.LCD1602.DHT11) 0.关注微信公众号(风吹摇铃 奔赴星海)下载全套资料,全套资料中包括如下内容:(需要PCB和焊接实物请阅读(使用前必读)文件下的内容 ...
- 基于单片机的气象监测系统
设计简介: 本设计是基于单片机的气象监测系统,主要实现以下功能: 可通过LCD1602显示温湿度和空气质量: 可通过按键调整温湿度阈值和空气质量最大值: 可通过ADC0832将MQ-135检测到的模拟 ...
- 基于数字电路交通灯信号灯控制系统设计-基于单片机病房温度监测与呼叫系统设计-基于STM32的无线蓝牙心电监护仪系统设计-基于STM32的智能蓝牙温控风扇控制设计-基于STM32的智能温室控制系统设计
1617基于数字电路交通灯信号灯控制系统设计(仿真电路,论文报告) 摘 要:交通灯控制系统在城市交通控制中发挥着重要的作用,本次课程设计就是以城市交通灯控制系统为背景的,主要通过运用学过的数字电路 ...
- 基于树莓派的流星雨监测系统(RMS)的搭建
本系列第二篇文章:基于树莓派的流星雨监测系统(RMS)的进一步改造(1)_delacroix_xu的专栏-CSDN博客 本系列第三篇文章:基于树莓派的流星雨监测系统(RMS)的进一步改造(2)_del ...
- 一种基于深度学习的遥感图像分类及农田识别方法
文章针对现有的神经网络收敛速度慢.识别准确率不高的缺点,提出了一种基于卷积神经网络的遥感图像农田分类及识别方法.该算法使用较大的卷积核,有效地提取梯度信息:设计深度为6层的卷积神经网络,提高了网络的分 ...
- 基于stm32人体健康监测系统
基于stm32人体健康监测系统 (心率,血氧,体温,语音播报,报警) 本设计采用STM32F103C8T6作为主控 使用MAX30102采集心率和血氧值 使用MLX90614测量体温 OLED显示当前 ...
最新文章
- 独家 | 图解BiDAF中的单词嵌入、字符嵌入和上下文嵌入(附链接)
- HMTL/CSS——下拉菜单DEMO
- jvm(Java virtual machine) JVM架构解释
- Android之非root手机run-as命令获取debug版本apk里面的数据(shared_prefs文件,lib下面的so,数据库文件)
- Dataphin产品核心功能大图(六)发布中心:生产和开发隔离模式下的保护伞
- Fiddler抓包 | 竟然有这些骚操作,太神奇了?
- c语言将一个实型变量f=55.5678,《C语言程序设计》第2章2 常量和变量
- 中国13个新职业薪酬待遇如何?这个岗位平均薪酬惊人!
- dram和nand哪个难生产_终于有人说清楚了什么是DRAM、什么是NAND Flash
- c语言中运用空语句的延时函数,【转载】单片机C语言中_nop_函数的使用及C语言的延时计算...
- axios http错误码处理
- 计算机注销的快捷键,电脑死机了按哪个键注销电脑
- SEO诊断案例-崔凯博客
- 写在Aras Innovator技术贴 前面
- 围棋的基本下法与规则
- linux dolphin模拟器,dolphin模拟器32位64位
- opencv3_java 图像的修剪裁剪Trimming Rect
- 如果删掉微信中一个功能,你的选择是什么
- oracle 行列转换函数
- 八、MySQL 常用函数汇总(1)
热门文章
- 深度解析FPS游戏外挂形成原因与“破局”方案
- Bea公司和sun公司介绍
- 计算机视觉中的高效阅读论文的方法总结
- 利用logic friday 把分组密码Present的S盒转化成布尔函数(转载)
- 【已解决】在Overleaf/latex环境编辑Elsevier -> JVCI模板,参考文献显示为问号/不显示参考文献的问题
- 盘点国内程序员不常用的热门iOS第三方库:看完,还敢自称”精通iOS开发”吗?
- 新疆独库公路,一生一定要走一次!
- 编译链接脚本lds文件
- MySQL常用系统名字
- h5(移动端) 监听软键盘弹起、收起