- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
""" @Description : 构建Dataset类,不同的任务,dataset自行编写,如基于csv,文本等加载标签,均可从cfg配置文件中读取后,自行扩展编写 编写自定义Dataset类时,初始化参数需定义为source_img, cfg。否则数据加载通用模块,data_load_service.py模块会报错。 source_img :传入的图像地址信息 cfg:传入的配置类信息,针对不同的任务,可能生成的label模式不同,可基于配置类指定label的加载模式,最终为训练的图像初始化label (用户自定义实现) 本例为验证码加载类:基于文件名称生成标签(如验证码:0AaW_54463.png,标签值为:0AaW,返回one-hot编码) """ import torch from torch.utils.data.dataset import Dataset import torchvision.transforms as transforms import cv2 from universe.data_load.normalize_adapter import NormalizeAdapter from PIL import Image from universe.utils.utils import one_hot classTrainDataset(Dataset): """ 构建一个 加载原始图片的dataSet对象 此函数可加载 训练集数据,基于路径识别验证码真实的label,label在转换为one-hot编码 若 验证集逻辑与训练集逻辑一样,验证集可使用TrainDataset,不同,则需自定义一个,参考如下EvalDataset """ def__init__(self, source_img, cfg): self.source_img = source_img self.cfg = cfg self.transform = createTransform(cfg, TrainImgDeal) def__getitem__(self, index): img = cv2.imread(self.source_img[index]) if self.transform isnotNone: img = self.transform(img) # ../ data / train\Qigj_73075.png label = self.source_img[index].split("_")[0][-4:] target = torch.Tensor(one_hot(label)) return img, target, self.source_img[index] def__len__(self): returnlen(self.source_img) classEvalDataset(Dataset): """ 构建一个 加载原始图片的dataSet对象 此函数可加载 验证集数据,基于路径识别验证码真实的label,label在转换为one-hot编码 """ def__init__(self, source_img, cfg): self.source_img = source_img self.cfg = cfg # 若验证集图片处理逻辑(增强,调整)与 训练集不同,可自定义一个EvalImgDeal self.transform = createTransform(cfg, TrainImgDeal) def__getitem__(self, index): img = cv2.imread(self.source_img[index]) if self.transform isnotNone: img = self.transform(img) # ../ data / train\Qigj_73075.png label = self.source_img[index].split("_")[0][-4:] target = torch.Tensor(one_hot(label)) return img, target, self.source_img[index] def__len__(self): returnlen(self.source_img) classPredictDataset(Dataset): """ 构建一个 加载预测图片的dataSet对象 此函数可加载 测试集数据,应用集数据(返回图像信息) """ def__init__(self, source_img,cfg): self.source_img = source_img # 若预测集图片处理逻辑(增强,调整)与 训练集不同,可自定义一个PredictImgDeal self.transform = createTransform(cfg, TrainImgDeal) def__getitem__(self, index): img = cv2.imread(self.source_img[index]) if self.transform isnotNone: img = self.transform(img) # 用于记录实际的label值(因为应用数据也是脚本生成的,所以可以知道正确的验证码) real_label = self.source_img[index].split("_")[0][-4:] return img, real_label, self.source_img[index] def__len__(self): returnlen(self.source_img) classTrainImgDeal: def__init__(self, cfg): img_size = cfg[ ' target_img_size ' ] self.h = img_size[0] self.w = img_size[1 ] def__call__(self, img): img = cv2.resize(img, (self.h, self.w)) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = Image.fromarray(img) return img defcreateTransform(cfg, img_deal): my_normalize = NormalizeAdapter.getNormalize(cfg[ ' model_name ' ]) transform = transforms.Compose([ img_deal(cfg), transforms.ToTensor(), my_normalize, ]) return transform
1/100 [9600/10000 (96%)] - ETA: 0:00:19, loss: 0.0003, acc: 0.9234 LR: 0.001000 [VAL] loss: 0.00012, acc: 81.060% 2/100 [9600/10000 (96%)] - ETA: 0:00:23, loss: 0.0000, acc: 0.9977 LR: 0.001000 [VAL] loss: 0.00011, acc: 82.000% 3/100 [9600/10000 (96%)] - ETA: 0:00:20, loss: 0.0000, acc: 0.9978 LR: 0.001000 [VAL] loss: 0.00012, acc: 79.520% 4/100 [9600/10000 (96%)] - ETA: 0:00:18, loss: 0.0000, acc: 0.9888 LR: 0.001000 [VAL] loss: 0.00013, acc: 78.020% 5/100 [9600/10000 (96%)] - ETA: 0:00:18, loss: 0.0000, acc: 0.9824 LR: 0.001000 [VAL] loss: 0.00012, acc: 80.260% 6/100 [9600/10000 (96%)] - ETA: 0:00:19, loss: 0.0000, acc: 0.9903 LR: 0.001000 [VAL] loss: 0.00013, acc: 80.040% 7/100 [9600/10000 (96%)] - ETA: 0:00:21, loss: 0.0000, acc: 0.9923 LR: 0.000100 [VAL] loss: 0.00010, acc: 83.900% 8/100 [9600/10000 (96%)] - ETA: 0:00:20, loss: 0.0000, acc: 0.9977 LR: 0.000100 [VAL] loss: 0.00009, acc: 84.280% 9/100 [9600/10000 (96%)] - ETA: 0:00:18, loss: 0.0000, acc: 0.9987 LR: 0.000100 [VAL] loss: 0.00009, acc: 84.400% 10/100 [9600/10000 (96%)] - ETA: 0:00:20, loss: 0.0000, acc: 0.9992 LR: 0.000100 [VAL] loss: 0.00009, acc: 84.600% 11/100 [9600/10000 (96%)] - ETA: 0:00:19, loss: 0.0000, acc: 0.9993 LR: 0.000100 [VAL] loss: 0.00009, acc: 84.460% 12/100 [9600/10000 (96%)] - ETA: 0:00:19, loss: 0.0000, acc: 0.9995 LR: 0.000100 [VAL] loss: 0.00009, acc: 84.600% 13/100 [9600/10000 (96%)] - ETA: 0:00:21, loss: 0.0000, acc: 0.9998 LR: 0.000100 [VAL] loss: 0.00009, acc: 85.100% 14/100 [9600/10000 (96%)] - ETA: 0:00:19, loss: 0.0000, acc: 0.9996 LR: 0.000100 [VAL] loss: 0.00009, acc: 84.720% 15/100 [9600/10000 (96%)] - ETA: 0:00:21, loss: 0.0000, acc: 0.9998 LR: 0.000100 [VAL] loss: 0.00009, acc: 85.140% 16/100 [9600/10000 (96%)] - ETA: 0:00:21, loss: 0.0000, acc: 0.9998 LR: 0.000100 [VAL] loss: 0.00009, acc: 84.720% 17/100 [9600/10000 (96%)] - ETA: 0:00:21, loss: 0.0000, acc: 0.9999 LR: 0.000100 [VAL] loss: 0.00009, acc: 85.220% 18/100 [9600/10000 (96%)] - ETA: 0:00:21, loss: 0.0000, acc: 0.9999 LR: 0.000100 [VAL] loss: 0.00009, acc: 84.900% 19/100 [9600/10000 (96%)] - ETA: 0:00:21, loss: 0.0000, acc: 0.9999 LR: 0.000100 [VAL] loss: 0.00009, acc: 84.980% 20/100 [9600/10000 (96%)] - ETA: 0:00:21, loss: 0.0000, acc: 1.0000 LR: 0.000100 [VAL] loss: 0.00009, acc: 85.280% 21/100 [9600/10000 (96%)] - ETA: 0:00:21, loss: 0.0000, acc: 0.9999 LR: 0.000100 [VAL] loss: 0.00009, acc: 85.140% 22/100 [9600/10000 (96%)] - ETA: 0:00:21, loss: 0.0000, acc: 1.0000 LR: 0.000100 [VAL] loss: 0.00009, acc: 85.140% 23/100 [9600/10000 (96%)] - ETA: 0:00:21, loss: 0.0000, acc: 0.9998 LR: 0.000100 [VAL] loss: 0.00009, acc: 84.880% 24/100 [9600/10000 (96%)] - ETA: 0:00:20, loss: 0.0000, acc: 1.0000 LR: 0.000100 [VAL] loss: 0.00010, acc: 85.120% 25/100 [9600/10000 (96%)] - ETA: 0:00:20, loss: 0.0000, acc: 1.0000 LR: 0.000010 [VAL] loss: 0.00009, acc: 85.160% 26/100 [9600/10000 (96%)] - ETA: 0:00:21, loss: 0.0000, acc: 1.0000 LR: 0.000010 [VAL] loss: 0.00009, acc: 85.180% 27/100 [9600/10000 (96%)] - ETA: 0:00:21, loss: 0.0000, acc: 1.0000 LR: 0.000010 [VAL] loss: 0.00009, acc: 85.220% [INFO] Early Stop with patient 7 , best is Epoch - 20 :0.852800 -------------------------------------------------- { ' model_name ' : ' mobilenetv3 ' , ' GPU_ID ' : '' , ' class_number ' : 248, ' random_seed ' : 42, ' cfg_verbose ' : True, ' num_workers ' : 8, ' train_path ' : ' data/train ' , ' val_path ' : ' data/val ' , ' test_path ' : ' data/test ' , ' label_type ' : ' DIR ' , ' label_path ' : '' , ' pretrained ' : ' output/mobilenetv3_e21_0.84700.pth ' , ' try_to_train_items ' : 10000, ' save_best_only ' : True, ' save_one_only ' : True, ' save_dir ' : ' output/ ' , ' metrics ' : [ ' acc ' ], ' loss ' : ' CE ' , ' show_heatmap ' : False, ' show_data ' : False, ' target_img_size ' : [224, 224], ' learning_rate ' : 0.001, ' batch_size ' : 64, ' epochs ' : 100, ' optimizer ' : ' Adam ' , ' scheduler ' : ' default-0.1-3 ' , ' warmup_epoch ' : 0, ' weight_decay ' : 0, ' k_flod ' : 5, ' start_fold ' : 0, ' early_stop_patient ' : 7, ' use_distill ' : 0, ' label_smooth ' : 0, ' class_weight ' : None, ' clip_gradient ' : 0, ' freeze_nonlinear_epoch ' : 0, ' dropout ' : 0.5, ' mixup ' : False, ' cutmix ' : False, ' sample_weights ' : None, ' model_path ' : ' ../../config/weight/mobilenet/mobilenetv3_e22_1.00000.pth ' , ' TTA ' : False, ' merge ' : False, ' test_batch_size ' : 1 } -------------------------------------------------- Process finished with exit code 0
。
def predict(cfg): initConfig(cfg) model = ModelService(cfg) data = DataLoadService(cfg) test_loader = data.getPredictDataloader(PredictDataset) runner = RunnerCaptchaService(cfg, model) modelLoad(cfg[ ' model_path ' ]) res_dict = runner.predict(test_loader) print (len(res_dict)) # to csv res_df = pd.DataFrame.from_dict(res_dict, orient= ' index ' , columns=[ ' label ' ]) res_df = res_df.reset_index().rename(columns={ ' index ' : ' image_id ' }) res_df.to_csv(os.path.join(cfg[ ' save_dir ' ], ' pre.csv ' ), index =False, header= True) if __name__ == ' __main__ ' : predict(cfg)
。
最后此篇关于Easy-Classification-验证码识别的文章就讲到这里了,如果你想了解更多关于Easy-Classification-验证码识别的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我已经创建了移动应用程序,并希望使用 Easy Table 和 Easy API。但是,每当我访问该位置时,它都会显示“不受支持的服务”。 下面是我的 Azure 帐户控制台的图像链接。 提前致谢。
选择图像后,我在两个地方渲染它,一个在 react-easy-crop(4:3 宽高比)中,另一个在单独的 div(960w*510h) 中。所以每当我改变我的裁剪位置时在 react-easy-cr
*来源:*blog.csdn.net/zhan107876/article/ details/120815560 总览 使用flowable自带的flowable-ui制作流程图 使用springbo
**摘要:**使用Docker容器,将带UI的程序,直接转换为Web应用。很方便,跟大家分享一下。 本文分享自华为云社区《使用Docker容器,将带UI的程序,直接转为Web应用》,作者:tsjsdb
我正在尝试使用 meteor-easy-search 实现两个数据库字段的搜索 包,但是,我似乎找不到这样做的方法。这是问题所在: 我有一个架构: { name: String, locati
我目前正在努力让下面的 calcRatio 函数正确计算。这可能是基础数学!以下函数按预期工作: function calcRatio(){ var r = frontRing.value/b
我正在尝试这样做: SELECT Filmai.Pagrind_atlik, ( COUNT(Filmai.Pagrind_atlik)) AS Kiek_kartu_filmavosi FROM F
1.1 框架功能 1.1.1 数据加载 1.1.2 扩展网络 1.1.3 优化器 1.1.4 学习率衰减
1.背景 2.验证码识别 2.1 生成训练数据 2.2 编写训练脚本 2.3 训练结果展示 2.4 预测应用
先来一份完整的爬虫工程师面试考点: 1、 python 基本功 1、简述python 的特点和优点 python 是一门开源的解释性语言,相比 java c++ 等语言,python 具
SpringMVC 源码分析系列最后一篇,和大家聊一聊 Theme。 Theme,就是主题,点一下就给网站更换一个主题,相信大家都用过类似功能,这个其实和前面所说的国际化功能很像,代码其实也很
在傻瓜式部署方式出现问题之后,我们该通过什么方法搭建网站呢?其实京东云擎本身已经给出了答案,那就是git。关于git是什么我们就不做过多介绍了,它与以前的flashfxp这类ftp工具的作用很相似,
https://azure.microsoft.com/en-us/documentation/articles/mobile-services-using-soft-delete/ 所以我正在阅读这
我正在尝试使用 table.Where(item => item.Name == Entry.Text) 检查 Azure Easy Tables 中是否存在行然后我检查保存它的列表是否为空。但表仍然
我正在使用以下代码来获取 azure 移动服务中的用户详细信息。我正在尝试迁移到 azure 移动应用程序,并在 easy api 中获取用户详细信息。如何做到这一点? getIdentity({
是否有某种方法可以从 Azure Easy Tables 中仅获取一行的一个数据列? 例如,Xamarin.Forms 应用程序会将项目名称发送到 Azure,并仅获取项目创建日期时间。 最佳答案 下
我正在尝试将一些数据导出到 PDF 文件中。我正在使用: Django 1.9.12 django-easy-pdf 0.1.0 python 2.7 导出工作正常(我的观点没有问题)但我正在努力将页
我正在使用以下代码来获取 azure 移动服务中的用户详细信息。我正在尝试迁移到 azure 移动应用程序,并在 easy api 中获取用户详细信息。如何做到这一点? getIdentity({
是否有某种方法可以从 Azure Easy Tables 中仅获取一行的一个数据列? 例如,Xamarin.Forms 应用程序会将项目名称发送到 Azure,并仅获取项目创建日期时间。 最佳答案 下
我正在尝试将一些数据导出到 PDF 文件中。我正在使用: Django 1.9.12 django-easy-pdf 0.1.0 python 2.7 导出工作正常(我的观点没有问题)但我正在努力将页
我是一名优秀的程序员,十分优秀!