تنفيذ Pytorch لشبكة المحولات المكانية (STN) مع شريحة لوحة رقيقة (TPS).
STN هي بنية شبكة عصبية قوية اقترحها DeepMind في [1]. يحقق STN الثبات المكاني الحقيقي عن طريق تصحيح صور الإدخال تلقائيًا قبل تغذيةها في شبكة تصنيف عادية. الجزء الأكثر مدهشة من STN هو أنه تفاضلي شامل ويمكن توصيله مباشرة ببناء الشبكة الحالية (Alexnet ، Resnet ، إلخ) ، دون أي إشراف إضافي.
ورقة STN الأصلية [1] تجارب على ثلاثة أشكال تحوّل محددة: تحويل أفيني ، التحول الإسقاطي وتحول اللوحة الرقيقة (TPS) . من بينهم أعتقد أن TPS هي أقوى ترجمة لأنها يمكن أن تشوه صورة بطريقة تعسفية. كما هو موضح أدناه ، يمكنني الاعتماد على الصورة الرمزية الخاصة بي
داخل
تم استخدام TPS-STN في تطبيق OCR [2]. في هذه الورقة ، يتم تصحيح الصور النصية المشوهة تلقائيًا ، قبل إطعامها في نموذج التعرف على نص التعرف على الحروف العادي:
يمكنني استخدام imageio لإنشاء تصور GIF. ما عليك سوى تثبيته عن طريق pip install imageio .
python mnist_train.py --model unbounded_stn --angle 90 --grid_size 4
python mnist_visualize.py --model unbounded_stn --angle 90 --grid_size 4
python mnist_make_gif.py --model unbounded_stn --angle 90 --grid_size 4
ثم سيتم حفظ png و gif resutls في ./image/unbounded_stn_angle60_grid4/ و ./gif/unbounded_stn_angle60_grid4/ .
يمكنك تجربة مجموعات أخرى من بنية النموذج ، وزاوية الدوران العشوائية Mnist وحجم شبكة TPS. التفاصيل أدناه.
هناك ثلاث وسيطات قابلة للتحكم: --model ، --angle ، --grid_size .
--model : STR ، مطلوب
no_stn ، يتم التخلص من وحدة STN وتبقى مصنف CNN واحد فقط.bounded_stn ، يتم ضغط إخراج شبكة التوطين إلى [-1 ، 1] بواسطة F.tanh ، كما حدث في [2]unbounded_stn ، لم يتم ضغط إخراج شبكة locolizaition --angle : int ، الافتراضي = 60
[-angle, angle] --grid_size : int ، الافتراضي = 4
(grid_size x grid_size) نقاط التحكم لتحديد التحول الشني النتائج angle = 90 سيئة بشكل عام:
النتائج مع bounded_stn سيئة إذا كانت grid_size <= 3 :
لكن حسنًا إذا كانت grid_size >= 4 :
النتائج مع unbounded_stn على ما يرام:
بالطبع هناك دائمًا حالات سيئة في كل مجموعة. يمكنك تنزيل جميع صور GIF الخاصة بي من Baidu NetDisk (حجم الملف 2G).
[1] شبكات المحولات المكانية
[2] التعرف على نص مشهد قوي مع الاستقامة التلقائية
[3] 数值方法 —— 薄板样条插值 (spline الرقيقة)