###前提・実現したいこと
物体検出を行うため、以下のサイトを参考にしてKerasでSSDを行っています。
http://qiita.com/slowsingle/items/64cc927bb29a49a7af14
pickleを用いて教師信号をpklファイルにまとめるのですが、画像の名前(00XXXX.jpg)と物体の位置とクラス名が入ります。下のpyファイルでpklファイルを作成しました。
https://github.com/rykov8/ssd_keras/blob/master/PASCAL_VOC/get_data_from_XML.py
実現したいこと:上書き保存した情報を反映してpklファイルを作成すること。キャッシュ読み込みによる現象なら、pycを消した後、どこに上書き前のキャッシュが保存されているのか教えてください。
###発生している問題・エラーメッセージ
ファイル名、物体の位置とクラス名が記載されているxmlファイルに間違いがあったためgeditで訂正・上書き保存しました。pklファイルを確認すると上書き保存する前の間違った情報が反映されていました。
###該当のソースコード
Python3.5, Ubuntu14.04, Anaconda3による仮想環境。
1クラス判別のため、それ以外のクラスをコメントアウトし、一番下の3行から#を外しました。
import numpy as np
import os
from xml.etree import ElementTree
class XML_preprocessor(object):
def __init__(self, data_path): self.path_prefix = data_path self.num_classes = 1 self.data = dict() self._preprocess_XML() def _preprocess_XML(self): filenames = os.listdir(self.path_prefix) for filename in filenames: tree = ElementTree.parse(self.path_prefix + filename) root = tree.getroot() bounding_boxes = [] one_hot_classes = [] size_tree = root.find('size') width = float(size_tree.find('width').text) height = float(size_tree.find('height').text) for object_tree in root.findall('object'): for bounding_box in object_tree.iter('bndbox'): xmin = float(bounding_box.find('xmin').text)/width ymin = float(bounding_box.find('ymin').text)/height xmax = float(bounding_box.find('xmax').text)/width ymax = float(bounding_box.find('ymax').text)/height bounding_box = [xmin,ymin,xmax,ymax] bounding_boxes.append(bounding_box) class_name = object_tree.find('name').text one_hot_class = self._to_one_hot(class_name) one_hot_classes.append(one_hot_class) image_name = root.find('filename').text bounding_boxes = np.asarray(bounding_boxes) one_hot_classes = np.asarray(one_hot_classes) image_data = np.hstack((bounding_boxes, one_hot_classes)) self.data[image_name] = image_data def _to_one_hot(self,name): one_hot_vector = [0] * self.num_classes if name == 'nerve': one_hot_vector[0] = 1 else: print('unknown label: %s' %name) return one_hot_vector
import pickle
data = XML_preprocessor('/home/owner/data/VOCdevkit/VOC2019/Annotations/').data
pickle.dump(data,open('/home/owner/data/VOCdevkit/VOC2019/VOC2019.pkl','wb'))
###試したこと
キャッシュから読み込まれているのかと思い、仮想環境のすべてのpycファイルを削除しましたが、やはり上書き保存前の情報のままでした。
###補足情報(言語/FW/ツール等のバージョンなど)
UbuntuCleanerでシステムワイドにcacheを消しましたが古い内容を読み込むままでした。
あなたの回答
tips
プレビュー