Caffe: كيفية تحويل binaryproto إلى npy (مثل ilsvrc_2012_mean.npy)؟

تم إنشاؤها على ٣ أبريل ٢٠١٤  ·  9تعليقات  ·  مصدر: BVLC/caffe

عندما أقوم بتشغيل نموذج ImageNet الذي تم اختباره مسبقًا ، وجدت أن غلاف python (wrapper.py) سيقرأ هذا الملف:
python / caffe / imagenet / ilsvrc_2012_mean.npy
على حد علمي ، الملف هو النسخة غير المفككة من الملف "imagenet_mean.binaryproto".

  1. هل يعرف أي شخص كيفية تحويل "imagenet_mean.binaryproto" إلى "ilsvrc_2012_mean.npy"؟
  2. إذا كان الملف المتوسط ​​("ilsvrc_2012_mean.npy") معاملًا في imagenet_deploy.prototxt ، فهل سيكون أفضل؟

شكرا لك!

question

التعليق الأكثر فائدة

808

import caffe
import numpy as np
import sys

if len(sys.argv) != 3:
print "Usage: python convert_protomean.py proto.mean out.npy"
sys.exit()

blob = caffe.proto.caffe_pb2.BlobProto()
data = open( sys.argv[1] , 'rb' ).read()
blob.ParseFromString(data)
arr = np.array( caffe.io.blobproto_to_array(blob) )
out = arr[0]
np.save( sys.argv[2] , out )

ال 9 كومينتر

1: بالنسبة للتحويل الثنائي ، راجع convert.py ووظائف الأداة المساعدة. قم بتحميل binaryproto في python ، مما يؤدي إلى الحصول على blob ، ثم اتصل بـ blobproto_to_array ، واحفظ المصفوفة numpy كيفما تشاء (على سبيل المثال كـ npy).

2: من الأفضل أن يتم تضمين المتوسط ​​في تعريف الشبكة ، بحيث لا يحتاج إلى حمله في مكان آخر. هناك عمل مستمر # 148 # 244 وتغيير مخطط للقناة يعني أنه يمكن كتابتها بسهولة في prototxt (أي أن كل قناة سيكون لها قيمة متوسطة ثابتة للفضاء ، والتي لها أداء مشابه لوسط الصورة الكامل وتبسيط المعالجة) .

عزيزي إيفان شيلهامر ،

شكرا لك على مساعدتك! لقد قرأت convert.py ووجدت أن الوظيفة "blobproto_to_array". لتحويل التنسيق ، أعتقد أنه يجب أن يكون:
الخطوة 1: dat = to_load_datum ('imagenet_mean.binaryproto')
الخطوة 2: arr = blobproto_to_array (dat)
الخطوة 3: ny.save ('ilsvrc_2012_mean.npy'، arr)
نظرًا لأنني لست على دراية كافية بـ datum و python ، لا أعرف كيفية تحميل ملف "imagenet_mean.binaryproto". هل يمكنك التفضل بإعطائي بعض أسطر التعليمات البرمجية للقيام بذلك؟ شكرا لك.

ملف binaryproto هو ملف protobuf لـ BlobProto . ارجع إلى البرنامج التعليمي لـ protobuf python وقم بعمل from caffe.proto import caffe_pb2 للحصول على blob = caffe_pb2.BlobProto() .

كنصيحة للأشخاص الذين يقرؤون هذا الآن ، فإن الملف: convert.py لم يعد موجودًا ، وبدلاً من ذلك انتقلت وظيفة blobproto_to_array إلى وحدة caffe.io .

أعتقد أن mezN تعني وحدة caffe / python / caffe / io.py

808

import caffe
import numpy as np
import sys

if len(sys.argv) != 3:
print "Usage: python convert_protomean.py proto.mean out.npy"
sys.exit()

blob = caffe.proto.caffe_pb2.BlobProto()
data = open( sys.argv[1] , 'rb' ).read()
blob.ParseFromString(data)
arr = np.array( caffe.io.blobproto_to_array(blob) )
out = arr[0]
np.save( sys.argv[2] , out )

اين كل هذه الملفات 404 أو غير موجود الآن

توجد وظائف الأداة المساعدة لقراءة الملفات الأولية وكتابتها في تنسيقات أخرى في الوحدة النمطية io. يمكنك العثور على الكود هنا:
CPP:
https://github.com/BVLC/caffe/blob/master/src/caffe/util/io.cpp
بايثون:
https://github.com/BVLC/caffe/blob/master/python/caffe/io.py

شكرًا جزيلاً لـ @ sg90 لمشاركة مثل هذا المقتطف اللطيف: +1:

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

FreakTheMighty picture FreakTheMighty  ·  3تعليقات

malreddysid picture malreddysid  ·  3تعليقات

Ruhjkg picture Ruhjkg  ·  3تعليقات

prathmeshrmadhu picture prathmeshrmadhu  ·  3تعليقات

weather319 picture weather319  ·  3تعليقات