当前位置:网站首页>Using fastai to develop and deploy image classifier application
Using fastai to develop and deploy image classifier application
2020-11-09 14:55:00 【Artificial intelligence meets pioneer】
author |[email protected] compile |Flin source |analyticsvidhya
Introduce
Fastai Is a popular open source library , For learning and practicing machine learning and deep learning . Jeremy · Howard (Jeremy Howard) And Rachel · Thomas (Rachel Thomas) founded fast.ai, The goal is to make deep learning resources more accessible .fast.ai All the detailed resources provided in , For example, courses , Software and research papers are completely free .
2020 year 8 month ,fastai_v2 Release , This version is expected to be faster , More flexible implementation of deep learning framework . stay 2020 fastai The course combines the core concepts of machine learning and deep learning . It also introduces users to important aspects of model production and deployment .
In this paper , I will discuss fast.ai In the first three lessons of the beginner's course, we introduced the technology of building a fast and simple image classification model . While building the model , You will also learn how to easily develop models Web Application and deploy it to the production environment .
This article will follow Jeremy The top-down approach used in its curriculum . You will first learn about training image classifiers . later , Details about the model used for classification will be explained . To understand this article , You have to have Python knowledge , because fastai Yes, it is Python Written and based on PyTorch Built . I suggest that you Google Colab or Gradient Run this code in , Because we need GPU Access right , and fastai It can be easily installed on both platforms .
install , Import and load datasets
!pip install -Uqq fastbook
import fastbook
fastbook.setup_book()
from fastbook import *
from fastai.vision.widgets import *
install fastai And import the necessary Libraries . If you're using Colab, You have to provide information about Google Access to the cloud hard disk to save files and images . You can start your Kaggle and Bing Download any image dataset from sources such as image search .Fast.ai There's also a huge collection of images . I used in this article from https://github.com/ieee8023/covid-chestxray-dataset A set of breasts X Radiograph .
path = Path ('/content/gdrive/My Drive/Covid19images')
Save the path to the location of the dataset in Path() In the object . If you use fast.ai Data sets , You can use the following code :
path = untar_data(URLs.PETS)/'images'
This will come from fastai PETS Download and extract images from dataset collection .
Check the image path and display some sample images in the dataset . I've used Python Imaging Library(PIL).
path.ls
from PIL import Image
img = Image.open(path'/train/covid/1-s2.0-S1684118220300682-main.pdf-002-a2.png')
print(img.shape)
img.to_thumb(128,128)
In this image classification problem , I'm going to train the model , In order to X X-ray images are classified as COVID or No COVID class . The preprocessing dataset has been placed in a separate COVID and No COVID In the folder ( source :ChristianTutivénGálvez).
If you're using fast.ai Data sets , Please use the following function to group images by pet's name :
def is_cat(x): return x[0].isupper()
PETS It's a collection of cat and dog images .Cat The picture is marked with the first capital letter , So it's easy to classify them .
Image transformation
Image transformation is the key step in training image model . It's also known as data expansion . In order to avoid over fitting the model , Image transformation is necessary . There are many ways to convert images , For example, sizing , tailoring , Compress and fill . however , Compression and filling will grab the original information in the image , And add other pixels separately . therefore , Random image resizing can produce good results .
This is shown in the following example , In this method , Random regions of each image are sampled in each period . This allows the model to learn more details about each image , In order to achieve higher accuracy .
Another point to remember is , Always transform only the training image , Without modifying the validation image . stay fastai In the library , This is handled by default .
item_tfms=Resize(128, ResizeMethod.Squish))
item_tfms=Resize(128, ResizeMethod.Pad, pad_mode='zeros')
item_tfms=RandomResizedCrop(128, min_scale=0.3) - 30% of the image area is zoomed by specifying 0.3
Fastai Kuo passed through aug_transforms Function provides a set of standard extensions . If the image size is uniform , It can be applied in batches , Save a lot of training time .
tfms = aug_transforms(do_flip = True, flip_vert = False, mult=2.0)
fastai Medium DataLoaders Class is very easy to store various objects for training and validating models . If you want to customize the objects to be used during training , Then you can put DataBlock Class and DataLoaders Use a combination of .
data= ImageDataLoaders.from_folder(path,train = "train", valid_pct=0.2, item_tfms=Resize(128), batch_tfms=tfms, bs = 30, num_workers = 4)
If you define an image label in a metafile , You can use DataBlock Divide the image and label into two different blocks , This is shown in the following code snippet . Use defined data blocks with data loader functions to access images .
Data = DataBlock( blocks=(ImageBlock, CategoryBlock), get_items=get_image_files,
splitter=RandomSplitter(valid_pct=0.2, seed=42), get_y=parent_label, item_tfms=Resize(128))
dls = Data.dataloaders(path)
model training
To train the image dataset , Using pre trained CNN Model . This method is called transfer learning . Jeremy (Jeremy) It is recommended to use pre trained models , To speed up training and improve accuracy . This is especially true for computer vision problems .
learn = cnn_learner(data, resnet34, metrics=error_rate)
learn.fine_tune(4)
Use ResNet34 Architecture , And verify the result according to the error rate . Due to the use of pre trained models for training , So use fine tuning instead of fitting the model .
You can run more periods , And look at the performance of the model . Choose the right number of periods to avoid over fitting .
You can try to use accuracy ( accuracy = 1- Error rate ) To verify model performance , Instead of using error_rate. Both are used to validate the output of the model . In this example , Retain the 20% Data used to verify . therefore , The model will only be applied to 80% Data for training . This is a very critical step in checking the performance of any machine learning model . You can also change ResNet layer ( The options are 18、50、101 and 152) To run this model . Unless you have a large dataset that will produce accurate results , Otherwise, this may lead to over fitting again .
Verify model performance
Model performance can be verified in different ways . One popular method is to use obfuscation matrix . The diagonal value of the matrix indicates the correct prediction for each category , Other cell values indicate many false predictions .
interp = ClassificationInterpretation.from_learner(learn)
interp.plot_confusion_matrix()
Fastai Provides a useful feature , You can view false predictions based on the highest loss rate . The output of this function indicates the prediction tag of each image , Target tag , Loss rate and probability value . High probability means that the model has a high degree of confidence . It's in 0 To 1 Change between . High loss rate indicates how poor the model performance is .
interp.plot_top_losses(5, nrows=1, figsize = (25,5))
Another great Fastai function , ImageClassifierCleaner(GUI), It can clear the fault image by deleting the fault image or renaming its label . This is very helpful for data preprocessing , Thus, the accuracy of the model is improved .
Jeremy (Jeremy) It is recommended to run this function after basic training of images , Because this allows you to understand the types of exceptions in the dataset .
from fastai.vision.widgets import *
cleaner = ImageClassifierCleaner(learn)
cleaner
Save and deploy the model
After training the model and being satisfied with the results , You can deploy the model . To deploy the model to a production environment , You need to save the architecture of the model and the parameters for training it . So , Using the export method . The exported model is saved as PKL file , The document is pickle(Python modular ) Created files .
learn.export()
Create an inference learner from the exported file , The learner can be used to deploy the model as an application . Inference learners predict the output of a new image at a time . Prediction returns three parameters : Forecast category , The index of the predicted categories and the probability of each category .
learn_inf = load_learner(path/'export.pkl')
learn_inf.predict("img")
(‘noCovid’, tensor(1), tensor([5.4443e-05, 9.9995e-01])) – prediction
There are many ways to create Web Applications . One of the easiest ways is to use as GUI Component's IPython The widget is in Jupyter notebook Create the required objects for your application in .
from fastai.vision.widgets import *
btn_upload = widgets.FileUpload()
out_pl = widgets.Output()
lbl_pred = widgets.Label()
After designing the application elements , Please use the image Web Applications run the same way Jupyter notebook Of Voila To deploy the model . It removes all cell input , Show only model output . To put notebook As VoilàWeb Application view , Please put the browser URL Medium “notebook” Replace the word with “ voila/render”. Must include trained models and IPython The identity of the widget notebook Install and execute Voila.
!pip install voila
!jupyter serverextension enable voila --sys-prefix
Conclusion
That's it , You've used fastai The library builds and deploys a cool image classifier application , It's just eight steps ! This is just the tip of the iceberg that I've shown in this article . There are more fastai Components can be used with NLP Various deep learning use cases related to computer vision , You can explore these components .
Here are fastai Learning resources , And mine git repo, It contains the code and image of the image classifier explained in this paper .
-
Covid19 X X-ray image classifier : Contains the complete code and data set discussed in this article
-
covers fast.ai All the courses taught in the course
-
Covering the whole of fastai API file
-
Fast.ai Community BBS
Link to the original text :https://www.analyticsvidhya.com/blog/2020/10/develop-and-deploy-an-image-classifier-app-using-fastai/
Welcome to join us AI Blog station : http://panchuang.net/
sklearn Machine learning Chinese official documents : http://sklearn123.com/
Welcome to pay attention to pan Chuang blog resource summary station : http://docs.panchuang.net/
版权声明
本文为[Artificial intelligence meets pioneer]所创,转载请带上原文链接,感谢
边栏推荐
- Why I strongly recommend custom development of small programs, these benefits you need to understand
- 基于Chef InSpec的基础设施测试
- Why does it take more and more time to develop a software?
- 7-10x write performance improvement: analysis of wiredtiger data page lock free and compression black Technology
- AE(After Effects)的简单使用——记一次模板套用的过程
- Rongyun has completed several hundred million RMB round D financing, and will continue to build global cloud communication capability
- python中常见的一些错误异常类型
- IDEA解决yml配置文件中文输出乱码问题
- Restart the heap_ uaf_ hacknote
- 面试了一位33岁Android程序员,只会面向百度编程,居然要25k,被我一顿怼
猜你喜欢
03.优先链接模型
MES system plays an important role in the factory production management
arthas无网络环境下离线安装方法
博士在读时,把暗恋的师兄变成了老公是种怎样的体验?
Put method of immutablemap
Two ways for Tencent cloud server to build WordPress website
MES系统在行业应用里区别于传统式管理
What can DNS do besides resolving domain names?
Do programmers pay too much to work overtime? Should programmer's salary be reduced? Netizen: let go of other hard pressed programmers
Lazy to write a document, swagger document does not smell
随机推荐
Several methods of initializing singleton variable in go language
cad教程 cad2016安装教程
A quick start to Shell Scripting
CSP-J/S 2020考前注意事项
MES系统在行业应用里区别于传统式管理
华为云GaussDB:从颠覆自我到颠覆行业,重构数据库市场新格局
OpenYurt 深度解读:如何构建 Kubernetes 原生云边高效协同网络?
SEO builders, what are the unspeakable hardships?
It's amazing! Ali senior architect 20 years of experience, collate and share servicemesh actual combat documents, pay rise is bad for this article!
跟我一起学.NetCore之EF Core 实战入门,一看就会
Idea rest client, yes, I haven't opened postman yet
03.优先链接模型
缓存的数据一致性
C language (circular list) to achieve the basic function of snake
国际顶刊Radiology发表华为云最新联合成果,AI辅助检测脑动脉瘤
Decision tree algorithm theory
Guest interview: Wang Jian
解密未来数据库设计:MongoDB新存储引擎WiredTiger实现(事务篇)
Learning history of C language
面试了一位33岁Android程序员,只会面向百度编程,居然要25k,被我一顿怼