Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
D
DAN
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Package registry
Container Registry
Operate
Terraform modules
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Automatic Text Recognition
DAN
Commits
517510aa
Commit
517510aa
authored
1 year ago
by
Solene Tarride
Committed by
Solene Tarride
1 year ago
Browse files
Options
Downloads
Patches
Plain Diff
Fix tests
parent
f8630f6e
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
dan/ocr/predict/__init__.py
+1
-1
1 addition, 1 deletion
dan/ocr/predict/__init__.py
dan/ocr/predict/prediction.py
+10
-27
10 additions, 27 deletions
dan/ocr/predict/prediction.py
with
11 additions
and
28 deletions
dan/ocr/predict/__init__.py
+
1
−
1
View file @
517510aa
...
...
@@ -169,7 +169,7 @@ def add_predict_parser(subcommands) -> None:
)
parser
.
add_argument
(
"
--use-language-model
"
,
help
=
"
Whether to use an explicit language model to rescore text hypothes
i
s.
"
,
help
=
"
Whether to use an explicit language model to rescore text hypothes
e
s.
"
,
action
=
"
store_true
"
,
required
=
False
,
)
...
...
This diff is collapsed.
Click to expand it.
dan/ocr/predict/prediction.py
+
10
−
27
View file @
517510aa
...
...
@@ -77,16 +77,6 @@ class DAN:
decoder
=
GlobalHTADecoder
(
parameters
[
"
decoder
"
]).
to
(
self
.
device
)
decoder
.
load_state_dict
(
checkpoint
[
"
decoder_state_dict
"
],
strict
=
True
)
self
.
lm_decoder
=
CTCLanguageDecoder
(
language_model_path
=
parameters
[
"
lm_decoder
"
][
"
language_model_path
"
],
lexicon_path
=
parameters
[
"
lm_decoder
"
][
"
lexicon_path
"
],
tokens_path
=
parameters
[
"
lm_decoder
"
][
"
tokens_path
"
],
language_model_weight
=
parameters
[
"
lm_decoder
"
][
"
language_model_weight
"
],
blank_token
=
parameters
[
"
lm_decoder
"
][
"
blank_token
"
],
unk_token
=
parameters
[
"
lm_decoder
"
][
"
unk_token
"
],
sil_token
=
parameters
[
"
lm_decoder
"
][
"
sil_token
"
],
)
logger
.
debug
(
f
"
Loaded model
{
model_path
}
"
)
if
mode
==
"
train
"
:
...
...
@@ -100,17 +90,16 @@ class DAN:
self
.
encoder
=
encoder
self
.
decoder
=
decoder
self
.
lm_decoder
=
None
if
use_language_model
and
parameters
[
"
language_model
"
][
"
weight
"
]
>
0
:
logger
.
info
(
f
"
Decoding with a language model (weight=
{
parameters
[
'
language_model
'
][
'
weight
'
]
}
).
"
)
if
use_language_model
:
self
.
lm_decoder
=
CTCLanguageDecoder
(
language_model_path
=
parameters
[
"
language_model
"
][
"
model
"
],
lexicon_path
=
parameters
[
"
language_model
"
][
"
lexicon
"
],
tokens_path
=
parameters
[
"
language_model
"
][
"
tokens
"
],
language_model_weight
=
parameters
[
"
language_model
"
][
"
weight
"
],
language_model_path
=
parameters
[
"
lm_decoder
"
][
"
language_model_path
"
],
lexicon_path
=
parameters
[
"
lm_decoder
"
][
"
lexicon_path
"
],
tokens_path
=
parameters
[
"
lm_decoder
"
][
"
tokens_path
"
],
language_model_weight
=
parameters
[
"
lm_decoder
"
][
"
language_model_weight
"
],
blank_token
=
parameters
[
"
lm_decoder
"
][
"
blank_token
"
],
unk_token
=
parameters
[
"
lm_decoder
"
][
"
unk_token
"
],
sil_token
=
parameters
[
"
lm_decoder
"
][
"
sil_token
"
],
)
self
.
mean
,
self
.
std
=
(
...
...
@@ -370,7 +359,6 @@ def process_batch(
# Return LM results
if
use_language_model
:
result
[
"
language_model
"
]
=
{}
print
(
prediction
)
result
[
"
language_model
"
][
"
text
"
]
=
prediction
[
"
language_model
"
][
"
text
"
][
idx
]
result
[
"
language_model
"
][
"
confidence
"
]
=
prediction
[
"
language_model
"
][
"
confidence
"
...
...
@@ -477,7 +465,7 @@ def run(
:param batch_size: Size of the batches for prediction.
:param tokens: NER tokens used.
:param start_token: Use a specific starting token at the beginning of the prediction. Useful when making predictions on different single pages.
:param use_language_model: Whether to use an explicit language model to rescore text hypothes
i
s.
:param use_language_model: Whether to use an explicit language model to rescore text hypothes
e
s.
"""
# Create output directory if necessary
if
not
output
.
exists
():
...
...
@@ -487,12 +475,7 @@ def run(
cuda_device
=
f
"
:
{
gpu_device
}
"
if
gpu_device
is
not
None
else
""
device
=
f
"
cuda
{
cuda_device
}
"
if
torch
.
cuda
.
is_available
()
else
"
cpu
"
dan_model
=
DAN
(
device
,
temperature
)
dan_model
.
load
(
model
,
parameters
,
charset
,
mode
=
"
eval
"
,
use_language_model
=
use_language_model
)
# Do not use LM with invalid LM weight
use_language_model
=
dan_model
.
lm_decoder
is
not
None
dan_model
.
load
(
model
,
parameters
,
charset
,
mode
=
"
eval
"
)
images
=
image_dir
.
rglob
(
f
"
*
{
image_extension
}
"
)
if
not
image
else
[
image
]
for
image_batch
in
list_to_batches
(
images
,
n
=
batch_size
):
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment