Comments (4)
@abigailng, để export nó mình chia ra 3 cái graph nhỏ: cnn,encoder, decoder.
-
export cnn thì modify function translate() trong vietocr/tool/translate.py như sau:
def translate(img, model, max_seq_length=128, sos_token=1, eos_token=2): "data: BxCXHxW" model.eval() device = img.device with torch.no_grad(): src = model.cnn(img) torch.onnx.export(model.cnn, img, os.environ['ONNX_PATH']+"/model_cnn.onnx", export_params=True, opset_version=12, do_constant_folding=True, input_names=['img'], output_names=['output'], dynamic_axes={'img': {3: 'lenght'}, 'output': {0: 'channel'}}) .....
-
export encoder và decoder thì modify functions trong vietocr/model/seqmodel/seq2seq.py:
def forward_encoder(self, src): """ src: timestep x batch_size x channel hidden: batch_size x hid_dim encoder_outputs: src_len x batch_size x hid_dim """ encoder_outputs, hidden = self.encoder(src) torch.onnx.export(self.encoder, src, os.environ['ONNX_PATH']+"/model_encoder.onnx", export_params=True, opset_version=12, do_constant_folding=True, input_names=['src'], output_names=['encoder_outputs', 'hidden'], dynamic_axes={'src':{0: "channel_input"}, 'encoder_outputs': {0: 'channel_output'}}) return (hidden, encoder_outputs)
`def forward_decoder(self, tgt, memory):
"""
tgt: timestep x batch_size
hidden: batch_size x hid_dim
encouder: src_len x batch_size x hid_dim
output: batch_size x 1 x vocab_size
"""tgt = tgt[-1] hidden, encoder_outputs = memory output, hidden, _ = self.decoder(tgt, hidden, encoder_outputs) torch.onnx.export(self.decoder, (tgt, hidden, encoder_outputs), os.environ['ONNX_PATH']+"/model_decoder.onnx", export_params=True, opset_version=12, do_constant_folding=True, input_names=['tgt', 'hidden', 'encoder_outputs'], output_names=['output', 'hidden_out', 'last'], dynamic_axes={'encoder_outputs':{0: "channel_input"}, 'last': {0: 'channel_output'}}) output = output.unsqueeze(1) return output, (hidden, encoder_outputs)`
END: việc còn lại là bạn load 3 cái graph này lên. code lại có preprocess và postprocess của tác giả. good luck
from vietocr.
Việc convert sang onnx chạy nhanh hơn 50% so vs chạy trên framework pytorch nha @pbcquoc . Ví dụ trong 1 cái ảnh. khi mình đã chạy cái ảnh đó qua paddleocr detection thì nó sẽ detect ra n cái boxes nhỏ. lúc này nếu dùng padding hay cái gì đó để biến những cái boxes nhỏ này về 1 size r đưa vô 1 batch đổi pass through qua model của Quốc làm giảm performance. Nếu chạy từng cái thì mỗi cái box nhỏ chạy tốn tầm 50-70ms. Trong bào toán của mình 1 ảnh có tới 50-70 cái boxes nhỏ. tính ra model của Quốc sẽ chạy 50-70 lần. end to end tốn tầm 4-6s cho 1 phiếu A4 khi chụp ảnh. Nếu export qua onnx thì thời gian chạy tầm 30-40s cho 1 boxes nhỏ thôi. thời gian đó nhân lơn 40-70 lần là khá nhìu. Kết luận export qua onnx chạy chỉ tầm 2-2.5s cho 1 ảnh. còn nếu chạy pytorch thì tốn 4-6s.
from vietocr.
Hi em,
đầu tiên là em convert sang dạng onnx cũng không nhanh hơn bao nhiêu mà chỉ tiện hơn để deploy thôi ak.
anh chưa em hiểu em xử lý gì nữa mà phải viết lại class nhỉ?
from vietocr.
@thanhpt55 e thấy a đang convert model seq2seq phải ko ạ, a đã convert model transformer của vietocr thử chưa ạ
from vietocr.
Related Issues (20)
- Error: train_hw: There is not enough space on the disk.
- Can we train VietOCR model for Japanese language ? HOT 2
- AttributeError: 'Delaunay' object has no attribute 'vertices' HOT 5
- lỗi load config HOT 1
- Có vấn đề khi sử dụng batch predict. HOT 1
- TypeError: 'Predictor' object is not callable
- Lỗi khi training custom dataset HOT 1
- Lỗi không chạy được sau khi cài HOT 4
- Predict trên 1 dataset lớn HOT 1
- Valid loss lớn hơn Training loss HOT 1
- Remove n invalid images HOT 2
- New PIL not AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS' HOT 6
- Load dataset HOT 6
- Augmentation Issues HOT 1
- Có thể giới hạn được các kí tự đầu ra không?
- Chào a, cảm ơn a vì đã đóng góp sản phẩm này cho cộng đồng,
- Thắc mắc về đầu vào Image, Acc per char HOT 1
- Can not create dataset on Jupyter Notebook because of [tab] definition HOT 2
- Getting error after train
- Lỗi khi load model seq2seq trên cuda12
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from vietocr.