從下圖樣可以看出,文字框模型標註效果不如預期並非正確的結果。
加上英文內容標註為獨立單字,後面辨識時效能與後處理也很複雜。
所以計畫設計一個標註少量樣本來訓練模型得到大量樣本的方法。





### 第一個假設
找同類型文件(同一份文件)取其1/10做人工標註,然後訓練fine-tune模型(tag name 標註名稱並保留模型),用來預測(標註)這一份資料。使其倍增標註樣本為10倍。作為訓練最終模型的基礎樣本(之一)。
同時,需要1/10樣本作為訓練時驗證用,所以實際可能需要2/10的標註,最後為5倍擴充而非10倍。
實際測試: 人工標註訓練集10張樣本測試集10張樣本(共20張),如下


利用resume training訓練70epoch(from 230~300)
```
2023-07-04 16:56:34,961 DBNet.pytorch INFO: [291/300], train_loss: 0.6467, time: 5.3245, lr: 4.6837194216121523e-05
2023-07-04 16:56:41,134 DBNet.pytorch INFO: FPS:18.66458644739518
2023-07-04 16:56:41,136 DBNet.pytorch INFO: test: recall: 0.868545, precision: 0.937500, f1: 0.901706
2023-07-04 16:56:41,136 DBNet.pytorch INFO: current best, recall: 0.868545, precision: 0.937500, hmean: 0.901706, train_loss: 0.646725, best_model_epoch: 291.000000,
2023-07-04 16:56:41,254 DBNet.pytorch INFO: Saving current best: c:\develop\DBNet_pytorch_Wenmu\output\DBNet_resnet18_FPN_DBHead\checkpoint/model_best.pth
2023-07-04 16:56:46,558 DBNet.pytorch INFO: [292/300], train_loss: 0.5880, time: 5.3024, lr: 4.259995391188707e-05
2023-07-04 16:56:51,758 DBNet.pytorch INFO: FPS:30.293319774311623
2023-07-04 16:56:51,759 DBNet.pytorch INFO: test: recall: 0.870110, precision: 0.937605, f1: 0.902597
2023-07-04 16:56:51,760 DBNet.pytorch INFO: current best, recall: 0.870110, precision: 0.937605, hmean: 0.902597, train_loss: 0.588031, best_model_epoch: 292.000000,
2023-07-04 16:56:51,878 DBNet.pytorch INFO: Saving current best: c:\develop\DBNet_pytorch_Wenmu\output\DBNet_resnet18_FPN_DBHead\checkpoint/model_best.pth
2023-07-04 16:56:57,349 DBNet.pytorch INFO: [293/300], train_loss: 0.6035, time: 5.4700, lr: 3.8315267243499006e-05
2023-07-04 16:57:02,740 DBNet.pytorch INFO: FPS:23.38649090340362
2023-07-04 16:57:02,741 DBNet.pytorch INFO: test: recall: 0.873239, precision: 0.939394, f1: 0.905109
2023-07-04 16:57:02,742 DBNet.pytorch INFO: current best, recall: 0.873239, precision: 0.939394, hmean: 0.905109, train_loss: 0.603535, best_model_epoch: 293.000000,
2023-07-04 16:57:02,861 DBNet.pytorch INFO: Saving current best: c:\develop\DBNet_pytorch_Wenmu\output\DBNet_resnet18_FPN_DBHead\checkpoint/model_best.pth
2023-07-04 16:57:08,039 DBNet.pytorch INFO: [294/300], train_loss: 0.6372, time: 5.1771, lr: 3.397653658483928e-05
2023-07-04 16:57:13,399 DBNet.pytorch INFO: FPS:19.027188671250887
2023-07-04 16:58:17,224 DBNet.pytorch INFO: train_loss:0.6035346388816833
2023-07-04 16:58:17,224 DBNet.pytorch INFO: best_model_epoch:293
2023-07-04 16:58:17,224 DBNet.pytorch INFO: finish train
```
結果如下:


對比finetune前的模型效果(下圖:左訓練前,右訓練後):


結論:可以明確提升效果,但對於增加訓練樣本(標註)的目的,可能還是要考量加上人工處理,如下案例:



若不人工處理(例如至少要刪除不正確的部分),可能會造成後續訓練時產生無法預期或控制結果。此案例利用20張標註樣本所達成用20張finetune做出100張訓練資料樣本,算是非常方便的處理方式。
##### 2023/07/06
依照上述的流程,做了判別橫式模型finetune。訓練集139測試集92張,訓練到400epoch(230~...350...~400)效果如下。另外說明,圖的部分因為就算框出來辨識也是很多零碎的內容,後來標註時就不標圖的內容(部分有標)。



好像一直用橫式樣本,直式辨識效果有些退化如下圖,但大部分都還好,這也沒關係,因為這個模型主要目的是用來產生更多訓練樣本。最後是使用之前訓練的模型加上用這方法做的更多樣本,來訓練效果更好的最終模型。

### 接下來打算增加20張直式的人工標註樣本,以同樣的手法,做出100張訓練樣本再進一步評估此作法。
做了非常少的32個樣本,訓練約200epoch效果也很好,省很多工。如下:


接下來修正預測的樣本標註,圖表的部分就只刪除錯誤的不再補上正確的,因為太花時間了。


### 最後合併直式與橫式樣本,使用之前訓練的模型做finetune 200 epochs




