Before downvoting this question and marked as duplicate, let me just explain the issue, i tried all the possible solutions with similar question here on stack, but none of them worked. i also checked, setting an array element with a sequence" error could be improved. #6584
So am training a random forest classifier on 3 different features, all with different dimensions but i reshaped them to to (-1,1), which can fit for training the RF(random forest) model, but it keep on giving the same error again and again as i have tried all the possible things, here are the list of feature functions am using,
here , am computing the color features by simply taking mean/average of images in different color spaces,here am working on RGB,LAB,HSV and GRAY image respectively, as from the code below i have flattened all the possible feature vector array, from different color spaces.
def extract_color_feature(rgb_roi, lab_roi, hsv_roi, gray_roi):
avg_rgb_per_row = np.average(rgb_roi, axis=0)
avg_rgb = np.average(avg_rgb_per_row, axis=0).flatten()
avg_lab_per_row = np.average(lab_roi, axis=0)
avg_lab = np.average(avg_lab_per_row, axis=0).flatten()
h, s, _ = cv2.split(hsv_roi)
h_avg = cv2.mean(h)
s_avg = cv2.mean(s)
avg_hs = np.hstack([h_avg, s_avg]).flatten()
lbp = extract_lbp(gray_roi).flatten()
avg_rgb = np.array(avg_rgb, dtype=np.float32).flatten()
avg_lab = np.array(avg_lab, dtype=np.float32).flatten()
avg_hs = np.array(avg_hs, dtype=np.float32).flatten()
lbp = np.array(lbp, dtype=np.float32).flatten()
avg_color = np.hstack([avg_rgb, avg_lab, avg_hs, lbp])
return avg_color.flatten()
in the following function i only computed histogram values from different color spaces again RGB,LAB,HSV color spaces used. as every histogram here performed on single color channel, so depth of every histogram feature will always be 1.
def compute_hist_feature(rgb_seg, hsv_seg, lab_seg, mask):
b, g, r = cv2.split(rgb_seg)
h, s, v = cv2.split(hsv_seg)
l, a, b = cv2.split(lab_seg)
r_equ = cv2.equalizeHist(r)
g_equ = cv2.equalizeHist(g)
b_equ = cv2.equalizeHist(b)
r_hist = cv2.calcHist([r_equ], [0], mask, [8],
[0, 256]).flatten()
g_hist = cv2.calcHist([g_equ], [0], mask, [8],
[0, 256]).flatten()
b_hist = cv2.calcHist([b_equ], [0], mask, [8],
[0, 256]).flatten()
l_hist = cv2.calcHist([l], [0], mask, [8],
[0, 256]).flatten()
a_hist = cv2.calcHist([a], [0], mask, [8],
[0, 256]).flatten()
bb_hist = cv2.calcHist([b], [0], mask, [8],
[0, 256]).flatten()
h_hist = cv2.calcHist([h], [0], mask,
[8], [0, 256]).flatten()
s_hist = cv2.calcHist([s], [0], mask,
[8], [0, 256]).flatten()
h_hist = np.array(h_hist, dtype=np.float32).flatten()
r_hist = np.array(r_hist, dtype=np.float32).flatten()
g_hist = np.array(g_hist, dtype=np.float32).flatten()
b_hist = np.array(b_hist, dtype=np.float32).flatten()
s_hist = np.array(s_hist, dtype=np.float32).flatten()
l_hist = np.array(l_hist, dtype=np.float32).flatten()
a_hist = np.array(a_hist, dtype=np.float32).flatten()
bb_hist = np.array(bb_hist, dtype=np.float32).flatten()
hist = np.hstack([r_hist, g_hist, b_hist, h_hist, s_hist, l_hist, a_hist, bb_hist])
return hist.flatten()
and finally am using location features , by simply flattened down the (x,y) cordinate list to form a feature array whhich will represent location feautre respectively.
cords = [t[::-1] for t in clusters_.get(disc)] # reversing the list of tuples
disc_pts = np.array(cords, dtype=np.int32)
loc_feat = np.array(cords, dtype=np.float32).flatten()
here initially the cords represents to a array with depth 2 coz every pixel have two cordinates so, i flattened it , to form a array with depth of 1.
finally i stacked all the three features to form single feature vector,
feat_vec = np.hstack([loc_feat, color_feat, hist_feat]).flatten()
here i have manually cheked the elements in all three feature vectors, in order to confirm the dtype, dimensions of array are not ambiguous to trigger the error, but everything looks fine to me.
this is the first one, location feature
[ 82. 209. 82. 210. 83. 210. 82. 211. 83. 211. 82. 212.
83. 212. 84. 212. 81. 213. 82. 213. 83. 213. 84. 213.
81. 214. 82. 214. 83. 214. 84. 214. 81. 215. 82. 215.
83. 215. 84. 215. 81. 216. 82. 216. 83. 216. 84. 216.
81. 217. 82. 217. 83. 217. 84. 217. 81. 218. 82. 218.
83. 218. 84. 218. 85. 218. 81. 219. 82. 219. 83. 219.
84. 219. 85. 219. 81. 220. 82. 220. 83. 220. 84. 220.
85. 220. 81. 221. 82. 221. 83. 221. 84. 221. 85. 221.
81. 222. 82. 222. 83. 222. 84. 222. 85. 222. 86. 222.
81. 223. 82. 223. 83. 223. 84. 223. 85. 223. 86. 223.
81. 224. 82. 224. 83. 224. 84. 224. 85. 224. 86. 224.
81. 225. 82. 225. 83. 225. 84. 225. 85. 225. 86. 225.
87. 225. 81. 226. 82. 226. 83. 226. 84. 226. 85. 226.
86. 226. 87. 226. 81. 227. 82. 227. 83. 227. 84. 227.
85. 227. 86. 227. 87. 227. 82. 228. 83. 228. 84. 228.
85. 228. 86. 228. 87. 228. 82. 229. 83. 229. 84. 229.
85. 229. 86. 229. 87. 229. 82. 230. 83. 230. 84. 230.
85. 230. 86. 230. 87. 230. 82. 231. 83. 231. 84. 231.
85. 231. 86. 231. 87. 231. 82. 232. 83. 232. 84. 232.
85. 232. 86. 232. 87. 232. 82. 233. 83. 233. 84. 233.
85. 233. 86. 233. 87. 233. 88. 233. 83. 234. 84. 234.
85. 234. 86. 234. 87. 234. 88. 234. 83. 235. 84. 235.
85. 235. 86. 235. 87. 235. 88. 235. 83. 236. 84. 236.
85. 236. 86. 236. 87. 236. 88. 236. 83. 237. 84. 237.
85. 237. 86. 237. 87. 237. 88. 237. 84. 238. 85. 238.
86. 238. 87. 238. 84. 239. 85. 239. 86. 239. 87. 239.
84. 240. 85. 240. 86. 240. 87. 240. 84. 241. 85. 241.
86. 241. 87. 241. 85. 242. 86. 242. 87. 242. 85. 243.
86. 243.]
this is color feautre vector
[ 3.35917592e-01 3.25945705e-01 3.25065553e-01 3.34438205e-01
2.04288393e-01 1.97153553e-01 1.85440078e-01 0.00000000e+00
0.00000000e+00 0.00000000e+00 1.32209742e-02 0.00000000e+00
0.00000000e+00 0.00000000e+00 2.62172282e-04 3.93258437e-04
1.31086141e-04 9.36329598e-05 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 9.98417616e-01 7.02247198e-04]
and this is histogram feature vector
[ 0. 0. 0. 0. 0. 0. 0. 169. 0. 0. 0. 0.
0. 0. 0. 169. 0. 163. 6. 0. 0. 0. 0. 0.
0. 0. 0. 169. 0. 0. 0. 0. 169. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 29. 93. 47.
0. 0. 0. 0. 169. 0. 0. 0. 0. 0. 0. 169.
0. 0. 0. 0.]
as it can be seen the datatype and dimensions of all three arrays are same, but still getting the error while training with RF or SVC classifier, also when i don't use location feature and train only with color and histogram features, then it doesn't generate the error, and both the training and prediction program works fine. but only when all the three features stacked it geves the error.
the error is throwned when RF classifier is set for training.here _data is a list of feature vectors( ~feat_vec~ ) that are computed previously. and _labels are curresponding lables either 1 or 0, for each data(image) samples respectively.
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(_data, _labels)
complete error trace back:
Traceback (most recent call last):
File "~/openCV/saliency_detection/svm_train.py", line 59, in <module>
model.fit(_data, _labels)
File "/usr/lib/python2.7/site-packages/sklearn/ensemble/forest.py", line 247, in fit
X = check_array(X, accept_sparse="csc", dtype=DTYPE)
File "/usr/lib/python2.7/site-packages/sklearn/utils/validation.py", line 382, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: setting an array element with a sequence.
_dataand_labelswhen you get this error? Those variables are not used elsewhere in your question.