Thanks Shree for your quick reply.
I have already used the version you altered of the Makefile for finetuning 
which you shared in one of the threads I have referenced above.I also tried 
this one (which is the same except for passing -- pass_through_recoder to 
the combine_lang_model which I will research and understand what difference 
it makes or maybe you can advice me please)

I appreciate the support, but my main question is about your suggestion of 
merging training data as in this thread 
<https://github.com/tesseract-ocr/tesseract/issues/1172>:

I copy them to my langdata/language directory and then use a modified 
tesstrain.sh to copy them to the tmp training directory. tesstrain.sh 
changes ``` mkdir -p ${TRAINING_DIR} tlog "\n=== Starting training for 
language '${LANG_CODE}'" cp ../langdata/${LANG_CODE}/*.box ${TRAINING_DIR} 
cp ../langdata/${LANG_CODE}/*.tif ${TRAINING_DIR} ls -l ${TRAINING_DIR} 
source "$(dirname $0)/language-specific.sh" ```
after doing those steps tesstrain.sh worked and generated *.lstmf files 
which I have copied to where my training data is and ran "make training" 
again. The process worked and generated a final model but there were some 
errors as the one I quoted in my original post. And the final unicharsets 
is identical with the original one from the original model but there is 
regression in accuracy compared to original one. 

I though maybe it is bad idea to merge data from ocrd-train with original 
data as box formats look different and wanted to get an advise.

Thanks and appreciate all the time you spend supporting people.


Regards

On Tuesday, September 4, 2018 at 2:30:08 PM UTC+1, shree wrote:

> For finetuning,  I like to use the original unicharset alongwith the 
> unicharset from the training set so that all characters are included.
>
> Please see below a modified makefile that can be used for this - please 
> make changes as per your requirements.
>
> export
>
> SHELL := /bin/bash
> LOCAL := $(PWD)/usr
> PATH := $(LOCAL)/bin:$(PATH)
> HOME := /home/ubuntu
> TESSDATA =  $(HOME)/tessdata_best
> LANGDATA = $(HOME)/langdata
>
> # Name of the model to be built
> MODEL_NAME = san
>
> # Name of the model to continue from
> CONTINUE_FROM = san
>
> # Normalization Mode - see src/training/language_specific.sh for details 
> NORM_MODE = 2
>
> # Tesseract model repo to use. Default: $(TESSDATA_REPO)
> TESSDATA_REPO = _best
>
> # Train directory
> TRAIN := data/train
>
> # BEGIN-EVAL makefile-parser --make-help Makefile
>
> help:
> @echo ""
> @echo "  Targets"
> @echo ""
> @echo "    unicharset       Create unicharset"
> @echo "    lists            Create lists of lstmf filenames for training 
> and eval"
> @echo "    training         Start training"
> @echo "    proto-model      Build the proto model"
> @echo "    leptonica        Build leptonica"
> @echo "    tesseract        Build tesseract"
> @echo "    tesseract-langs  Download tesseract-langs"
> @echo "    langdata         Download langdata"
> @echo "    clean            Clean all generated files"
> @echo ""
> @echo "  Variables"
> @echo ""
> @echo "    MODEL_NAME         Name of the model to be built"
> @echo "    CORES              No of cores to use for compiling 
> leptonica/tesseract"
> @echo "    LEPTONICA_VERSION  Leptonica version. Default: 
> $(LEPTONICA_VERSION)"
> @echo "    TESSERACT_VERSION  Tesseract commit. Default: 
> $(TESSERACT_VERSION)"
> @echo "    LANGDATA_VERSION   Tesseract langdata version. Default: 
> $(LANGDATA_VERSION)"
> @echo "    TESSDATA_REPO      Tesseract model repo to use. Default: 
> $(TESSDATA_REPO)"
> @echo "    TRAIN              Train directory"
> @echo "    RATIO_TRAIN        Ratio of train / eval training data"
>
> # END-EVAL
>
> # Ratio of train / eval training data
> RATIO_TRAIN := 0.90
>
> ALL_BOXES = data/all-boxes
> ALL_LSTMF = data/all-lstmf
>
> # Create unicharset
> unicharset: data/unicharset
>
> # Create lists of lstmf filenames for training and eval
> lists: $(ALL_LSTMF) data/list.train data/list.eval
>
> data/list.train: $(ALL_LSTMF)
> total=`cat $(ALL_LSTMF) | wc -l` \
>    no=`echo "$$total * $(RATIO_TRAIN) / 1" | bc`; \
>    head -n "$$no" $(ALL_LSTMF) > "$@"
>
> data/list.eval: $(ALL_LSTMF)
> total=`cat $(ALL_LSTMF) | wc -l` \
>    no=`echo "($$total - $$total * $(RATIO_TRAIN)) / 1" | bc`; \
>    tail -n "+$$no" $(ALL_LSTMF) > "$@"
>
> # Start training
> training: data/$(MODEL_NAME).traineddata
>
> data/unicharset: $(ALL_BOXES)
> combine_tessdata -u $(TESSDATA)/$(CONTINUE_FROM).traineddata  
> $(TESSDATA)/$(CONTINUE_FROM).
> unicharset_extractor --output_unicharset "$(TRAIN)/my.unicharset" 
> --norm_mode $(NORM_MODE) "$(ALL_BOXES)"
> merge_unicharsets $(TESSDATA)/$(CONTINUE_FROM).lstm-unicharset 
> $(TRAIN)/my.unicharset  "$@"
> $(ALL_BOXES): $(sort $(patsubst %.tif,%.box,$(wildcard $(TRAIN)/*.tif)))
> find $(TRAIN) -name '*.box' -exec cat {} \; > "$@"
> $(TRAIN)/%.box: $(TRAIN)/%.tif $(TRAIN)/%-gt.txt
> python generate_line_box.py -i "$(TRAIN)/$*.tif" -t "$(TRAIN)/$*-gt.txt" > 
> "$@"
>
> $(ALL_LSTMF): $(sort $(patsubst %.tif,%.lstmf,$(wildcard $(TRAIN)/*.tif)))
> find $(TRAIN) -name '*.lstmf' -exec echo {} \; | sort -R -o "$@"
>
> $(TRAIN)/%.lstmf: $(TRAIN)/%.box
> tesseract $(TRAIN)/$*.tif $(TRAIN)/$*   --psm 6 lstm.train
>
> # Build the proto model
> proto-model: data/$(MODEL_NAME)/$(MODEL_NAME).traineddata
>
> data/$(MODEL_NAME)/$(MODEL_NAME).traineddata: $(LANGDATA) data/unicharset
> combine_lang_model \
>   --input_unicharset data/unicharset \
>   --pass_through_recoder \
>   --script_dir $(LANGDATA) \
>   --words $(LANGDATA)/$(MODEL_NAME)/$(MODEL_NAME).wordlist \
>   --numbers $(LANGDATA)/$(MODEL_NAME)/$(MODEL_NAME).numbers \
>   --puncs $(LANGDATA)/$(MODEL_NAME)/$(MODEL_NAME).punc \
>   --output_dir data/ \
>   --lang $(MODEL_NAME)
>
> data/checkpoints/$(MODEL_NAME)_checkpoint: unicharset lists proto-model
> mkdir -p data/checkpoints
> lstmtraining \
>   --continue_from   $(TESSDATA)/$(CONTINUE_FROM).lstm \
>   --old_traineddata $(TESSDATA)/$(CONTINUE_FROM).traineddata \
>   --traineddata data/$(MODEL_NAME)/$(MODEL_NAME).traineddata \
>   --model_output data/checkpoints/$(MODEL_NAME) \
>   --debug_interval -1 \
>   --train_listfile data/list.train \
>   --eval_listfile data/list.eval \
>   --sequential_training \
>   --max_iterations 3000
>
> data/$(MODEL_NAME).traineddata: data/checkpoints/$(MODEL_NAME)_checkpoint
> lstmtraining \
> --stop_training \
> --continue_from $^ \
> --old_traineddata $(TESSDATA)/$(CONTINUE_FROM).traineddata \
> --traineddata data/$(MODEL_NAME)/$(MODEL_NAME).traineddata \
> --model_output $@
>
> # Clean all generated files
> clean:
> find data/train -name '*.box' -delete
> find data/train -name '*.lstmf' -delete
> rm -rf data/all-*
> rm -rf data/list.*
> rm -rf data/$(MODEL_NAME)
> rm -rf data/unicharset
> rm -rf data/checkpoints
>
>
>
> On Tue, Sep 4, 2018 at 4:48 PM, Raniem AROUR <raniem...@gmail.com 
> <javascript:>> wrote:
>
>> Hello..
>>
>> I am trying to fine tune the dan.traineddata for my specific use case. 
>> However, the model is over fitting on my data and seems to be forgetting 
>> the original data it was trained on. I remember I have read somewhere that 
>> this can be solved by showing the original training data to the network so 
>> that I don't get regression over the original performance.
>>
>> I have images and their corresponding ground truth files. Therefore I 
>> have used ocrd-train <https://github.com/OCR-D/ocrd-train> to do the 
>> fine tuning earlier (using some advises found in this thread 
>> <https://groups.google.com/forum/#!searchin/tesseract-ocr/fine$20tuning$20english$20language%7Csort:date/tesseract-ocr/be4-rjvY2tQ/32evtMHlAQAJ>,
>>  
>> thanks to Shree).
>> I have then mixed my training data with the original training data using 
>> the hints provided by shree in this thread 
>> <https://github.com/tesseract-ocr/tesseract/issues/1172>.
>>
>> the command i used after updating the tesstrain.sh as recommended was: 
>>
>> ~/tesseract/src/training/tesstrain.sh --fonts_dir /usr/share/fonts --lang 
>> dan --linedata_only \
>>   --noextract_font_properties --langdata_dir 
>> /home/my_user/ocrd-train/langdata \
>>   --tessdata_dir /home/my_user/tesseract/tessdata \
>>   --output_dir /home/my_user/my_models/danNew/
>>
>>
>>
>> then I tried to run "make training" in the ocrd-train directory as I 
>> usually do for fine tuning. The fine tuning started, however, I got some 
>> errors that I believe are resulted from the original data:
>> e.g. Encoding of string failed! Failure bytes: ffffffc3 ffffffb6 20 65 72 
>> 20 31 2e 34 35 24 2e 20 74 69 64 6c 69 67 65 72 65 20 31 37 2e 20 68 61 76 
>> 65 20 6d 61 6e 67 65 20 4e 59 20 2d 20 76 ffffffc3 ffffffa6 72 65 20 69 20 
>> 53 ffffffc3 ffffff85 20 43 61 6e 61 6c 2b 20 6f 67
>> Can't encode transcription: 'har Søg butik været blevet Ifö er 1.45$. 
>> tidligere 17. have mange NY - være i SÅ Canal+ og' in language ''
>> Encoding of string failed! Failure bytes: ffffffc3 ffffffb6 20 65 72 20 
>> 31 2e 34 35 24 2e 20 74 69 64 6c 69 67 65 72 65 20 31 37 2e 20 68 61 76 65 
>> 20 6d 61 6e 67 65 20 4e 59 20 2d 20 76 ffffffc3 ffffffa6 72 65 20 69 20 53 
>> ffffffc3 ffffff85 20 43 61 6e 61 6c 2b 20 6f 67
>> Can't encode transcription: 'har Søg butik været blevet Ifö er 1.45$. 
>> tidligere 17. have mange NY - være i SÅ Canal+ og' in language ''
>>
>> P.S. I know the box resulted by ocrd-train looks different from the usual 
>> box used for training tesseract4 but it worked fine-tunning other models 
>> and was wondering whether it is a bad idea just to mix them this way.
>>
>> What  could have been gone wrong in this process? I appreciate every 
>> suggestion.
>>
>>
>> Kind Regards
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "tesseract-ocr" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to tesseract-oc...@googlegroups.com <javascript:>.
>> To post to this group, send email to tesser...@googlegroups.com 
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/tesseract-ocr.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/tesseract-ocr/e9676a7b-7396-4d05-8978-97c9bfbc387f%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/tesseract-ocr/e9676a7b-7396-4d05-8978-97c9bfbc387f%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
>
> ____________________________________________________________
> भजन - कीर्तन - आरती @ http://bhajans.ramparivar.com
>

-- 
You received this message because you are subscribed to the Google Groups 
"tesseract-ocr" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to tesseract-ocr+unsubscr...@googlegroups.com.
To post to this group, send email to tesseract-ocr@googlegroups.com.
Visit this group at https://groups.google.com/group/tesseract-ocr.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tesseract-ocr/8f122c52-30da-45c5-8a97-426bb388047e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to