本文着重讲不学无术的大学生如何快速上手跑出结果。本项目基于resnet34识别四类示意图,由cat vs dog项目改写而来。文末会说明如何快速把它改成你想要的项目(图片二分类等)。


项目代码、数据集下载:ht删tps://p除an.bai中du.c文om/s/1F打aI6hKNPB_0w_oed9H开0STg 提取码: z5v5


1.各文件/文件夹作用

自上到下:

checkpoints  储存每个epoch训练后的模型

datasets  储存训练集、测试集

image  用来给数据集做重命名,后面会提到

result  似乎没用过?

图片分类结果  手动分类的数据集。将示意图分四类,每类约150张

config  储存模型相关参数完全不用修改

dataset  数据集预处理等工作。

rename  数据集图片重命名用,后面会讲

test_model是从checkpoints里取出来训练好的模型改个名,文件夹里是我们的模型

test  测试程序,train  训练程序。


2.如何运行项目

先自己看import哪些库,装好库

①图片重命名

我使用的数据集存在图片分类结果文件夹了,你也可以不用它。

把分类好的四类图片中任一类(如sketch1)全部放入image/raw。

将rename.py中的label = 'sketch4'改成label = 'sketch1'

index_list = [i for i in range(52, imgs_num + 52)]也要根据图片数量做调整相信废物大学生也能看得懂

运行rename.py会在image/processed生成重命名好的图片。格式为sktech1.0.jpg、sktech1.1.jpg、sktech1.2.jpg等。将这些图片二八分开分别放入datasets/test和datasets/train

四类图片都要这样处理。

需要注意的是,最后无论是test文件夹还是train文件夹,图片的id不能重复,比如sktech1.0.jpg里0就是id。不能同时存在sktech1.0.jpg​​​​​​​和sktech2.0.jpg 。

②运行train.py训练模型。

此时checkpoints文件夹里会多出来很多模型,同时shell会输出正确率。当你认为正确率够高就可以停了,从checkpoints拿出最新的模型改名为test_model,拿到主目录替换我们的模型。

③运行test.py输出正确率。

此时项目运行完成。


3.Q&A

老师的要求是分类其他类型的图片,不是你给的示意图。怎么办?

答:用你自己的数据集即可。不知道怎么找数据集可以评论区问。

老师的要求是图片的二/三分类,怎么修改代码?

答:以二分类为例。修改以下代码:

datasets.py:第60行

从四类改两类。

rename.py:重命名图片跟着上面步骤做。

test_modification.py:

29行的model.fc = nn.Linear(512, 4)   把4改成2.

48行(下图)改2类

72行同理:

train.py:

30行model.fc = nn.Linear(512,4)   把4改成2

110行confusion_matrix = meter.ConfusionMeter(4)  把4改2

120行accuracy = 100.* (cm_value[0][0] + cm_value[1][1] + cm_value[2][2] + cm_value[3][3]) / (cm_value.sum())    把cm_value[2][2] + cm_value[3][3])删掉,只留两类。

应该就这些,改不好来评论区问。

③你这项目没做可视化啊?

答:确实。


本文结束


以下代码无关本文,仅充数用

# coding=utf-8""" test
使用测试集测试模型结果
"""from config import _setting_
import os
import torch as t
from dataset import NatureSketchClassification
from torch.utils.data import DataLoader
from torchnet import meter
from torch.autograd import Variable
from torchvision import models
from torch import nn
import time
import csv""""""
def test(**kwargs):# set datatest_data = NatureSketchClassification(_setting_.test_data_root, test=True)test_dataloader = DataLoader(test_data, batch_size=_setting_.batch_size, shuffle=False, num_workers=_setting_.num_workers)results = []# set modelmodel = models.resnet34(weights=models.ResNet34_Weights.IMAGENET1K_V1)model.fc = nn.Linear(512, 4)model.load_state_dict(t.load('./test_model.pth', map_location='cpu'))model.eval()for id, (data, path) in enumerate(test_dataloader):# input = Variable(data,volatile=True)with t.no_grad():input = Variable(data)score = model(input)print('score=',score)#检验scorepath = path.numpy().tolist()_,predicted = t.max(score.data,1)#Modificationpredicted = predicted.data.cpu().numpy().tolist()res = ""print('predicted=',predicted)#检验predicted#Modificationfor (i, j) in zip(path, predicted):if j == 0:res = "sketch1"elif j == 1:res = "sketch2"elif j == 2:res = "sketch3"elif j == 3:res = "sketch4"print('res=',res)#检验res(result)results.append([i,"".join(res)])res = []truth = ""compare = ""imgs = [os.path.join(_setting_.test_data_root,img) for img in os.listdir(_setting_.test_data_root)] #获取root路径下所有图片的地址imgs_num = len(imgs) # 图片数量NumofCorrect = 0imgs = sorted(imgs,key=lambda x: int(x.split('.')[-2].split('/')[-1])) # 按序号排序for image in imgs:id = int(image.split('.')[-2].split('/')[-1]) # 获取id#Modificationif 'sketch1' in image.split('/')[-1]:truth = 'sketch1'elif 'sketch2' in image.split('/')[-1]:truth = 'sketch2'elif 'sketch3' in image.split('/')[-1]:truth = 'sketch3'else:truth = 'sketch4'print('truth=',truth)#truth = 'nature' if 'nature' in image.split('/')[-1] else 'sketch' # 获取图片的真实分类compare = 'true' if truth == results[id - 1][1] else 'false'if compare == 'true':NumofCorrect = NumofCorrect + 1res.append([results[id - 1][0], results[id - 1][1], "".join(truth), compare])Accuracy = NumofCorrect / imgs_num * 100round(Accuracy, 2)write_csv(res, _setting_.result_file, Accuracy)for id, label, truth, compare in res:if compare == 'false':print("number: "+ str(id) + ", res: " + label + ", truth: " + truth + ", IsCorrect: " + compare)print("Accuracy: " + str(Accuracy))return results""""""
def write_csv(results, file_name, acc):Accuracy = []Accuracy.append([" ", "Accuracy", "".join(str(acc))])with open(file_name, "w") as f:writer = csv.writer(f)writer.writerow(['id', 'label', 'truth', 'IsCorrect'])writer.writerows(results)writer.writerows(Accuracy)if __name__ == '__main__':test()

(学生快速上手向)python图片分类识别器相关推荐

  1. matlab如何测两点的角度_【邢不行|量化小讲堂系列01-Python量化入门】如何快速上手使用Python进行金融数据分析...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总]请点击此处 [必读文章]: [邢不 ...

  2. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

  3. python金融编程入门_【量化小讲堂- Python、pandas技巧系列】如何快速上手使用Python进行金融数据分析...

    如何快速上手使用Python进行金融数据分析 引言: 本系列帖子"量化小讲堂",通过实际案例教初学者使用python.pandas进行金融数据处理,希望能对大家有帮助. [必读文章 ...

  4. 快速实践大规模轻量级图片分类模型:飞桨识图 PP-ShiTu

    快速实践大规模图片分类模型:飞桨识图 PP-ShiTu 飞桨识图PP-ShiTu是轻量级图像识别系统,集成了目标检测.特征学习.图像检索等模块,广泛适用于各类图像识别任务.CPU上0.2s即可完成在1 ...

  5. python图片分类管理系统_图片分类工具MyQcloudImage免费版下载(图片管理系统) V1.0 绿色版_数码资源网...

    需要智能人脸识别图片管理软件?MyQcloudImage免费版肯定是您需要的哦!图片分类工具这里有最新的最强大的图片数据分类和图片识别功能可以了解哦!MyQcloudImage免费版最好用的图片管理系 ...

  6. python图片分类技术介绍_手把手教你用Python构建你的第一个多标签图像分类模型(附案例)!...

    介绍 你正在处理图像数据吗?我们可以使用计算机视觉算法来做很多事情:对象检测 图像分割 图像翻译 对象跟踪(实时),还有更多-- 这让我思考--如果一个图像中有多个对象类别,我们该怎么办?制作一个图像 ...

  7. 零基础也能快速上手的python实战项目----美多商城

    美多商城:课时安排16天 黑马程序员python企业级开发项目-手把手从0到1开发<美多商城>_哔哩哔哩_bilibili 美多商城属于B2C电商平台,商城销售自营商品给顾客.系统前台包括 ...

  8. 利用exchangelib快速上手使用python发邮件

    前言 之前一直知道使用python smtp发邮件,但是最近发现一个神器exchangelib,用这个神器发邮件,简直简单的不能再简单了,官方文档在这里 实例 只需要将下面的xxx改成你的信息就可以了 ...

  9. 快速上手用Python搭建自己的第一个pyecharts图表

    效果 实现 安装pyecharts pip安装 打开cmd,输入: pip install pyecharts 安装完在执行时如果提示找不到module pyecharts_snapshot... 那 ...

最新文章

  1. mysql触发器错误信息_MySQL 触发器错误_MySQL
  2. 自动化测试框架搭建-参数化-3
  3. android最新框架,XUpdate 一个轻量级、高可用性的Android版本更新框架
  4. vi 按了ctrl+s怎么办
  5. 想做测试工程师,这7件事你必须先知道
  6. flowable 中文文档_滴滴实习收获 | 产品经理就是写文档和开会沟通的吗?
  7. linux下网络包分析工具下载,Wireshark下载-网络封包分析工具 v3.2.6 官方版 - 下载吧...
  8. 字符设备驱动之Led驱动学习记录
  9. 机械原理matlab辅助分析 答案,机械原理Matlab辅助分析答案
  10. lg g2 android 5.0 rom,LG G2(D802)升级Flyme4.5图文教程
  11. BP误差反传神经网络
  12. python安卓库拍照_Python Faker库的实战,用Faker库生成伪造的安卓通讯录
  13. 【附源码】计算机毕业设计SSM校园论坛设计
  14. 数据分析之路的尽头是创业?
  15. 耳朵经济下,有声读物的加与减
  16. 《算法4》读书笔记(二)
  17. Airtest新增iOS、Windows录屏功能,真香
  18. Ubuntu16.04 python安装
  19. TP TN FP FN IOU
  20. 如何收取google adsense广告费?招行一卡通电汇设置指南

热门文章

  1. jmeter断言操作——响应断言
  2. 有趣的 CentOS 7 命令
  3. springboot maven配置文件外置
  4. java中数组的内存模型_Java如何在内存有限的情况下实现一个超大数组?jvm性能调优+内存模型+虚拟机原理能解决什么样问题...
  5. 80040154错误
  6. 免费的 Docker 镜像仓库,无需注册登录
  7. mysql批量改表名及列名
  8. 上传文件计算机传输的,如何快速传输 iPhone/PC 上的大文件?
  9. 鸿蒙系统上市时间未定,为啥华为会说鸿蒙上市时间未定,并表示很支持安卓,原因很简单...
  10. 短视频平台小咖秀小程序,给你生活增添更多乐趣