Behind_three_codes_high_performance_classifier三行代码构建一个深度学习AI图像分类识别器背后的内容...

With the help of fastai library, you can build a high performance image classifier with just three codes like this:

tfms=tfms_from_model(arch,sz,aug_tfms=trnsforms_side_on, max_zoom=1.2)
md=ImageClassifierData.form_csv(path,'train',labels_csv,tfms=tfms,bs=bs)
learn=ConvLearner.pretrained(arch,md,precompute=True,ps=0.5)

This classifier can get a accuracy no lower than 97% on  the cats/dogs images set. It looks so magical! What's behind it?
1. First of all, it is built on pytorch calculation platform.
2. Second, the fastai has done a lots of things to simplify the work of data preparing, data loading. 
Pytorch development group have provided a plenty of tutorial resources .You can get into pytorch on its website. In this page, I just want to explain the detail of data processing procedure of fastai library. 

To understand the three codes, you must follow the data loading steps. Let's start with a line of data retrieving codes:

x,y=next(iter(md.val_dl))

executing the above code line, you can retrieve a batch of image data tensors into x with corresponding labels into y. What's a simple statement! just like a magic. How it complete the complicate data preparing, data augmentation, and data loading. To look into it clearly, you just need use a debugger like visual studio code or pycharm to debug it. Set a breakpoint at dataset.py->open_imgae(fn), start debugging you program. when the program pause at the breakpoint, you can get a clear view of call stack like following:

next(iter(md.val_dl))

-->Dataloader.__iter__(self)
---->Dataloader.get_batch()
------>self.dataset[i]
-------->BaseDataset.__getitem__(self,idex)
---------->self.getitem(idx)
-------------->FileDataset.get_x(self,i)
------------------>open_image(os.path.join(self.path,sefl.fnames[I]))
-------------->FileDataset.get(self.transform,x,y)
----------------->Transforms(x,y).   # self.transform is a instance of Transforms with __call__(self,im,y=None)
------------------->Transforms.compose(im,y,self.tfms)
--------------------->for fn in tfms im,y=fn(im,y)

Thanks to the developer of the fastai library, the symbols in the above codes is self-explanatory. You can understand the purpose of each Class and each member function clearly. Your calling to next(iter(md.val_dl)) activates a chain of member functions of Dataloader, Dataset and Transforms. These member functions complete different parts of data shuffling, reading, and transformation as you specified in ImageClassifierData.from_csv() function calling. Look into the details of these Classes and functions can make you get into the AI data preparing deeply. So, don't wait. Take a debugger, run it step by step!



 
发布了36 篇原创文章 · 获赞 0 · 访问量 9146

猜你喜欢

转载自blog.csdn.net/eliuxiaoming1/article/details/88394946