らんだむな記憶

blogというものを体験してみようか!的なー

darknet の比較

漢字とかの検出 - らんだむな記憶 を踏まえて追加の調査。

https://github.com/chineseocr/darknet-ocr の darknet は本家 https://github.com/pjreddie/darknet とどこが違うのだろうか?というのを調べた。結果としては大きくは違わないが、縦横を区別した改造が入っていた:

  • make_maxpool_layer@maxpool_layer.{h,c} の stridestridewstrideh
  • 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

ということなので、コードベース的には違いがなくて、

といったところなのだろう。この観点で見ると、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 とかが参考になりそう。