Ros u-net usage error
I want to instantly process the data I receive from the car camera on via u-net. But I'm getting an error like this ;
[ERROR] [1602424911.184610, 2209.890000]: bad callback: <function func at 0x7fe16503cb50>
Traceback (most recent call last):
File "/opt/ros/melodic/lib/python2.7/dist-packages/rospy/topics.py", line 750, in _invoke_callback
cb(msg)
File "cvbridge-model.py", line 215, in func
hesapla(cv_goruntu)
File "cvbridge-model.py", line 185, in hesapla
sag = model.predict(right)
File "/home/bozkaya/.local/lib/python2.7/site-packages/keras/engine/training.py", line 1456, in predict
self._make_predict_function()
File "/home/bozkaya/.local/lib/python2.7/site-packages/keras/engine/training.py", line 378, in _make_predict_function
**kwargs)
File "/home/bozkaya/.local/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py", line 3009, in function
**kwargs)
File "/home/bozkaya/.local/lib/python2.7/site-packages/tensorflow/python/keras/backend.py", line 3479, in function
return GraphExecutionFunction(inputs, outputs, updates=updates, **kwargs)
File "/home/bozkaya/.local/lib/python2.7/site-packages/tensorflow/python/keras/backend.py", line 3142, in init
with ops.control_dependencies([self.outputs[0]]):
File "/home/bozkaya/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 5426, in control_dependencies
return get_default_graph().control_dependencies(control_inputs)
File "/home/bozkaya/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 4867, in control_dependencies
c = self.as_graph_element(c)
File "/home/bozkaya/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 3796, in as_graph_element
return self._as_graph_element_locked(obj, allow_tensor, allow_operation)
File "/home/bozkaya/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 3875, in _as_graph_element_locked
raise ValueError("Tensor %s is not an element of this graph." % obj)
ValueError: Tensor Tensor("conv2d_19/Sigmoid:0", shape=(?, 64, 256, 3), dtype=float32) is not an element of this graph.
My code
#!/usr/bin/env python
-- coding: UTF-8 --
import rospy
import cv2
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
import sys
import filtre_2 as ft
import numpy as np
import time
from ackermann_msgs.msg import AckermannDriveStamped
model=ft.create_model()
model.load_weights("/home/bozkaya/catkin_ws/src/racecar-simulator/racecar_gazebo/scripts/weight3")
def hesapla(frame):
right = frame[226:,672:]
left = frame[226:,:672]
right=(right / 255.0).astype(np.float32)
left=(left / 255.0).astype(np.float32)
image_right=right[:,1:672]
right = cv2.resize(image_right, None, fx=(1.0/2.62), fy=(1.0/2.34), interpolation=cv2.INTER_AREA)
image_left=left[:,1:672]
left = cv2.resize(image_left, None, fx=(1.0/2.62), fy=(1.0/2.34), interpolation=cv2.INTER_AREA)
right.resize(1,64,256,3)
left.resize(1,64,256,3)
sag = model.predict(right)
sol = model.predict(left)
sag = np.reshape(sag,(64,256,3))
sol = np.reshape(sol,(64,256,3))
sag=(sag * 255.0).astype(np.uint8)
sol=(sol * 255.0).astype(np.uint8)
serit=np.zeros([64,512,3])
sag, sag_orta=nokta(sag)
sol, sol_orta=nokta(sol)
sag = cv2.resize(sag, (960, 540))
sol = cv2.resize(sol, (960, 540))
cv2.imshow("sag",sag)
cv2.imshow("sol",sol)
orta =(sag_orta+sol_orta)/2
return sag, orta
bridge = CvBridge()
def func(ros_goruntu):
print('Goruntu alindi!')
global bridge
try:
cv_goruntu = bridge.imgmsg_to_cv2(ros_goruntu,"passthrough")
hesapla(cv_goruntu)
print(cv_goruntu.shape)
except CvBridgeError as e:
print(e)
if cv2.waitKey(1) & 0xFF == ord('q'):
rospy.signal_shutdown('kapatılıyor...')
def main(args):
rospy.init_node('unet_model', anonymous=True)
ack_publisher = rospy.Publisher('/ackermann_cmd',AckermannDriveStamped, queue_size=1)
rospy.Subscriber("/camera/zed/rgb/image_rect_color",Image,func)
try:
rospy.spin()
except KeyboardInterrupt:
print("kapatılıyor...")
cv2.destroyAllWindows()
if name =='main':
main(sys.argv)
My filter.py
import numpy as np
import tensorflow as tf
import cv2
from keras.models import Model, load_model
from keras.layers import Input, BatchNormalization, Activation, Dense, Dropout
from keras.layers.core import Lambda
from keras.layers.convolutional import Conv2D, Conv2DTranspose
from keras.layers.pooling import MaxPooling2D
from keras.layers.merge import concatenate, add
from keras.optimizers import Adam
def create_model():
IMG_HEIGHT=64
IMG_WIDTH=256
IMG_CHANNELS=3
# Build U-Net model
inputs = Input((IMG_HEIGHT, IMG_WIDTH, IMG_CHANNELS))
#s = Lambda(lambda x: x / 255) (inputs)
c1 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (inputs)
c1 = Dropout(0.1) (c1)
c1 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c1)
p1 = MaxPooling2D((2, 2)) (c1)
c2 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (p1)
c2 = Dropout(0.1) (c2)
c2 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c2)
p2 = MaxPooling2D((2, 2)) (c2)
c3 = Conv2D(64, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (p2)
c3 = Dropout(0.2) (c3)
c3 = Conv2D(64, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c3)
p3 = MaxPooling2D((2, 2)) (c3)
c4 = Conv2D(128, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (p3)
c4 = Dropout(0.2) (c4)
c4 = Conv2D(128, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c4)
p4 = MaxPooling2D(pool_size=(2, 2)) (c4)
c5 = Conv2D(256, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (p4)
c5 = Dropout(0.3) (c5)
c5 = Conv2D(256, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c5)
u6 = Conv2DTranspose(128, (2, 2), strides=(2, 2), padding='same') (c5)
u6 = concatenate([u6, c4])
c6 = Conv2D(128, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (u6)
c6 = Dropout(0.2) (c6)
c6 = Conv2D(128, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c6)
u7 = Conv2DTranspose(64, (2, 2), strides=(2, 2), padding='same') (c6)
u7 = concatenate([u7, c3])
c7 = Conv2D(64, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (u7)
c7 = Dropout(0.2) (c7)
c7 = Conv2D(64, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c7)
u8 = Conv2DTranspose(32, (2, 2), strides=(2, 2), padding='same') (c7)
u8 = concatenate([u8, c2])
c8 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (u8)
c8 = Dropout(0.1) (c8)
c8 = Conv2D(32, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c8)
u9 = Conv2DTranspose(16, (2, 2), strides=(2, 2), padding='same') (c8)
u9 = concatenate([u9, c1], axis=3)
c9 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (u9)
c9 = Dropout(0.1) (c9)
c9 = Conv2D(16, (3, 3), activation='elu', kernel_initializer='he_normal', padding='same') (c9)
outputs = Conv2D(3, (1, 1), activation='sigmoid') (c9)
model = Model(inputs=[inputs], outputs=[outputs])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=["accuracy"])
model.summary()
return model
def predict_model(model, frame):
frame=(frame / 255.0).astype(np.float32)
#frame = cv2.GaussianBlur(frame, (3,3), 0)
frame=np.reshape(frame,(1,128,256,3))
sonuc = model.predict(frame)
#binarry = np.zeros_like(sonuc)
#binarry[sonuc > 0.5] = 255
sonuc = np.reshape(sonuc,(128,256,3))
cv2.imshow("frame",sonuc)
return sonuc
Asked by Sukru on 2020-10-11 09:23:50 UTC
Comments