漢字とかの検出 - らんだむな記憶 を踏まえて追加の調査。
https://github.com/chineseocr/darknet-ocr の darknet は本家 https://github.com/pjreddie/darknet とどこが違うのだろうか?というのを調べた。結果としては大きくは違わないが、縦横を区別した改造が入っていた:
make_maxpool_layer
@maxpool_layer.{h,c} のstride
がstridew
とstrideh
にforward_maxpool_layer_kernel
@maxpool_layer_kernels.cu も同様。- network.c での
workspace_size
のチェックが緩められた? network_predict_image
だけでなくnetwork_predict_image_vgg
が追加
といったくらいで、あとは関連する変更や無効なコード、テストコードの削除といった感じであった。
https://github.com/AlexeyAB/darknet と本家はどれくらい違うのかな?というのも調べたが・・・こちらは熱心にテコ入れされていてどこが・・・というのを一言でまとめられる分量ではなかったので断念。
さて、YOLOv3 と darknet の master ブランチのコードは
何が違うのだろう?と思って少し眺めたが、大きな違いはないように見える。YOLO: Real-Time Object Detection を見ても、
wget https://pjreddie.com/media/files/yolov3.weights ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
ということなので、コードベース的には違いがなくて、
- darknet には特別な細工が入るわけではなく基本的なフレームワークとして使用され、
- https://github.com/pjreddie/darknet/blob/master/cfg/yolov3.cfg の定義に従って構築されるアーキテクチャで YOLOv3 である
といったところなのだろう。この観点で見ると、chineseocr の YOLOv3 部分は https://github.com/chineseocr/chineseocr/blob/app/models/text.cfg で、darknet-ocr のテキスト検出器のモデルは https://github.com/chineseocr/darknet-ocr/blob/master/models/text/text.cfg ということになるのだろう。行数の比較で見て良いかは分からないが、darknet-ocr のほうが大分少ないので軽量のモデルということかもしれない。(このせいか訓練済みパラメータはかなり小さめにはなっている)
darknet は読みたくない、PyTorch だけで読みたいって場合には https://github.com/eriklindernoren/PyTorch-YOLOv3 とか https://github.com/ultralytics/yolov3 を見たら良さそう。
darknet のモデルをテコ入れするなら Google Colab上でYOLOv3の独自データ学習をする - Qiita とかが参考になりそう。