im2rec的使用及那些坑


#41

你的意思你想单独标出负样本(比方说背景)?
我觉得这得看你打算怎么处理这些负样本。报错信息说明你的label尺寸是不合适的,代码中要求是(5,)的,但你没有提供label,你可以自定义。比如说,你将所有的负样本的标签定义为-1,只要之后你处理负样本能正确读出就行。


#42

数据集里有1/4是只有背景的负样本,只定义标签的话也还是会报错
if raw.size < 7:
raise RuntimeError("Label shape is invalid: " + str(raw.shape))
这个意思是对只有背景的图像也要去给类似xy的坐标的label吗


#43

对呀,背景图像一般是整张图吧。可以直接给出整张图的坐标。


#44

好的,谢谢Dalao


#45

一个小坑:
A.这个版本的im2rec.py中,--pack-label=True 已经更改,只需要--pack-label即可,不需要加True了,
image
python im2rec.py --pack-label your.list your/image/folder/
python im2rec.py --pack-label your_list_folder your/image/folder/ 或只写存lst的文件夹即可会自动寻找lst文件
否则报错:
im2rec.py: error: argument --pack-label: ignored explicit argument 'True'
B.多线程标签 [--num-thread NUM_THREAD] 要是不填写,也会抛出信息:
multiprocessing not available, fall back to single threaded encoding
但是没问题。


#46

由lst生成rec时一定要加–pack-label!

在生成rec的时候又遇到两个小坑:
.图片文件名不能有“-”,否则会被读入的I\O函数错误的splite()
读入rec、或者用lst读入,报错类似如下:

   1096                     line = line.strip().split('\t')
   1097                     label = nd.array(line[1:-1], dtype=dtype)
-> 1098                     key = int(line[0])
   1099                     imglist[key] = (label, line[-1])
   1100                     imgkeys.append(key)
ValueError: invalid literal for int() with base 10: '0   4   5   200 200 1   0.51    0.3 0.6 0.69    001_0.jpg'

.解决了命名错误之后,将lst录成rec读入,报错:

    raw = label.ravel()
AttributeError: 'float' object has no attribute 'ravel'
---
    718         if isinstance(label, nd.NDArray):
    719             label = label.asnumpy()
--> 720         raw = label.ravel()
    721         if raw.size < 7:
    722             raise RuntimeError("Label shape is invalid: " + str(raw.shape))

AttributeError: 'float' object has no attribute 'ravel'

后面才发现生成rec的时候忘记加了 –pack-label 参数了,对于多标签必须要加!!
python im2rec.py --pack-label 多维标签不能忘记!!

tips:
附上一个批量修改文件名的.sh

for file in `ls | grep .jpg`
do
    newfile=`echo $file | sed 's/_/0/g'`      #s/_/0g  将_替换为了0
    mv $file $newfile
done

#47

新加了一个教程,欢迎反馈
https://gluon-cv.mxnet.io/build/examples_datasets/detection_custom.html


#48

检查一下是这个原因吗


#49

:joy: 完全没考虑到这种可能性


#50

你的这个问题如何解决的呢?我也碰到这个问题,不知道怎么搞?


#51

请问下面如何解决!!!

Creating .rec file from F:\MXNet计算机视觉\chapter9-物体检测\9.2-objectDetection\data\VOCdevkit\VOC\ImageSets\Main\test.lst in F:\MXNet计算机视觉\chapter9-物体检测\9.2-objectDetection\data\VOCdevkit\VOC\ImageSets\Main
multiprocessing not available, fall back to single threaded encoding
imread read blank (None) image for file: F:\MXNet计算机视觉\chapter9-物体检测\9.2-objectDetection\data\VOCdevkit\VOC/JPEGImages/000001.jpg
Traceback (most recent call last):
File “im2rec.py”, line 386, in
record.write_idx(item[0], s)
File “D:\Anaconda3\lib\site-packages\mxnet\recordio.py”, line 339, in write_idx
self.write(buf)
File “D:\Anaconda3\lib\site-packages\mxnet\recordio.py”, line 178, in write
ctypes.c_size_t(len(buf))))
TypeError: object of type ‘NoneType’ has no len()


#52

请问你解决了吗?


#53



为啥全部是空啊?大佬帮忙看下,万分感谢:pray: