前言:
{
这段时间一直在更新论文的阅读记录,文字太多,这次的形式就改成了实践记录。
本次的目标是在VOC2012数据集上实现多目标识别。
}
正文:
{
最近发现了一个目前目标识别效果比较好的新网络:PNASNet[1],就把它拿来改改。不求很好的效果,只是想做做实践换换口味。本次的计划是从PNASNet中的一些部位引出一些张量,配合着最后的瓶颈层一起进行多目标识别。
PNASNet的论文我没有细看,只知道其是自动生成的一种结构,包含了一种新的单元:PNASCell[1],PNASCell由分为normal和reduction两种(后置会将输入张量的长宽减半)。在我找到的其基于tentorflow的代码[2]中,网络在一层卷积层后一共有14个PNASCell,前2个PNASCell为reduction类,后面每3个normal类就会加一个reduction类。
VOC2012数据集中一共有20个大类,标签都是以xml文件储存,所以这里涉及到了Python下对xml的解析。代码1的打印结果为一个xml文件中所有object的使用name的文本。
#代码1
import xml.etree.ElementTree as ET
domtree = ET.parse(xml_path+'/'+xml_name)
domroot = domtree.getroot()
objects = domroot.iter('object')
for object in objects:
print(object.find('name').text) #打印object项里的所有name项中的文字
而且还涉及到了one_hot向量的生成。见代码2。
#代码2
def numpy_one_hot(number, max):
result = np.ones(max) * 0
result[number] = 1
return result
这次先写出了数据格式转换的代码,见代码3。
#代码3
# -- coding: utf-8 --
'''
此文件实现JPG和xml标签到TFRecord的转换(VOC2012版本),其中对每个JPG源文件都会生成一个TFRecord目标文件。
文件名“test_data_28.TFRecord”表示测试数据的第29个文件(第一个文件的文件号为0)。
'