FlyAI出现AttributeError: 'NoneType' object has no attribute 'input_x'问题解决-程序员宅基地

技术标签: BUG  FlyAI  BUG调试  

FlyAI是一个AI竞赛平台,不过多介绍,见官网:https://www.flyai.com/

笔者系统:Ubuntu 16.04  (安装了ROS kinetic)

使用以下命令进行测试时

./flyai test

出现以下错误:

Traceback (most recent call last):
  File "main.py", line 47, in <module>
    x_train, y_train, x_test, y_test = data.next_batch(args.BATCH)  # 读取数据
  File "/home/xxx/.flyai/env/lib/python3.6/site-packages/flyai/dataset.py", line 45, in next_batch
    x_train = self.processor_x(x_train)
  File "/home/xxx/.flyai/env/lib/python3.6/site-packages/flyai/dataset.py", line 103, in processor_x
    processor = self.get_method_dict(self.processor, self.model['input_x'], **data)
  File "/home/xxx/.flyai/env/lib/python3.6/site-packages/flyai/dataset.py", line 186, in get_method_dict
    m = getattr(clz, method_name)
AttributeError: 'NoneType' object has no attribute 'input_x'

1. 解决办法

  笔者遇到的错误原因是安装了ROS 的opencv包,添加了一个PYTHONPATH环境变量'/opt/ros/kinetic/lib/python2.7/dist-packages'(且级别比miniconda环境里的高),所以当程序中调用opencv时,默认使用的时ROS里python2.7的,python3里无法引用。解决办法为在程序引用到cv2的地方前去掉这个环境变量(或者在xshrc里弄,但是会影响ros,我选择前者)

  找到processor.py(引用cv2的文件),在import cv2前加入:

import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')

 

2. 解决过程

  错误原因因人而异,写一下解决过程,希望对你有帮助。

  为方便修改文件,使用本地环境调试。

python main.py

  报错为:

Traceback (most recent call last):
  File "main.py", line 47, in <module>
    x_train, y_train, x_test, y_test = data.next_batch(args.BATCH)  # 读取数据
  File "/home/xxx/miniconda3/envs/PlusWay/lib/python3.6/site-packages/flyai/dataset.py", line 45, in next_batch
    x_train = self.processor_x(x_train)
  File "/home/xxx/miniconda3/envs/PlusWay/lib/python3.6/site-packages/flyai/dataset.py", line 103, in processor_x
    processor = self.get_method_dict(self.processor, self.model['input_x'], **data)
  File "/home/xxx/miniconda3/envs/PlusWay/lib/python3.6/site-packages/flyai/dataset.py", line 186, in get_method_dict
    m = getattr(clz, method_name)
AttributeError: 'NoneType' object has no attribute 'input_x'

  发生在读取数据时,根据路径定位到dataset.py。

  错误发生在getattr函数,该函数返回一个对象的属性值,详见:https://www.runoob.com/python/python-func-getattr.html

  从报错得知传入了一个NoneType的clz,找到调用该函数的位置,发现传入的clz值为self.processor。

  定位self.processor赋值的位置,在__init__时,有processor的赋值:  

        if config_path is not None:
            config = config_path.replace(os.path.sep, '.')
            processor_pka = config + "." + processor_pka
            self.processor = self.create_instance(processor_pka, clz)
        else:
            self.processor = self.create_instance(processor_pka, clz)

   其中config_path为None,因此错误应该发生在create_instance,找到这个函数:

def create_instance(self, module_name, class_name, *args, **kwargs):
        try:
            module_meta = __import__(module_name, globals(), locals(),[class_name])
            class_meta = getattr(module_meta, class_name)
            return class_meta(*args, **kwargs)
        except:
            return None

  发现当__import__失败时,会返回None。

  打印module_name和class_name,分别为:processor和['Processor']。

  开一个python窗口尝试发现,__import__('processor')会报错。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/carey/study/FlyAI/VOC2005_FlyAI/processor.py", line 4, in <module>
    import cv2
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type

   因此,错误原因在processor.py文件。

   解决对应的问题即可。

  

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tju_cc/article/details/89607588

智能推荐

#list 标签获取下标_<#list>-程序员宅基地

文章浏览阅读5.3k次。<#list>标签<#list>能是CMS里面的标签。<#list>获取下标,怎么获取下标 ${c_index}获取下标 例子: [#list tag_list as c] ======> ${c_index} [#list tag_list as a] ======> ${a_index}代码例子:<div class="tabs fn-clear"> [@cms_conten_<#list>

Python可视化matplotlib&seborn14-普通热力图heatmap_python matplotlib 热力图浅色-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏21次。详细介绍python seaborn绘制热图。_python matplotlib 热力图浅色

最好的产品经理社区或者讨论圈有哪几个?_软件产品经理交流社区-程序员宅基地

文章浏览阅读1.8k次。本文将从社区、公众号(产品分析、深度互联网评论)、大佬博客、科技媒体、豆瓣书单等多个方面来阐述目前国内产品经理最好的一些讨论圈和内容,欢迎收藏~产品社区人人都是产品经理官网: http://www.woshipm.com“人人都是产品经理”应该是产品经理日常逛得最多的垂直社区,它里面的内容也主要以产品和运营为主,很多知名的产品经理KOL都会在上面发布文章。职景的学员也经常会把自己的产品分析报告上传发布到“人人都是产品经理”上。这中间也有一些有趣的事,比如两个人上传同一篇文章,只是因为排版格式的_软件产品经理交流社区

西门子PLC与IFIX软件以太网通讯_ifix与西门子plc连接-程序员宅基地

文章浏览阅读4.9k次,点赞2次,收藏16次。摘要IFX组态监控软件与西门子S7-200、S7-300系列PLC通讯,通常采用以太网通讯方式,IFIX软件中,采用S7A驱动的S7TCP/IP的通讯方式。西门子PLC采用第三方工业通讯桥接器实现以太网通讯。方案实施介绍本文以S7 TCP驱动(S7A)连接1台S7300,1台S7200为例:一、配置以太网通讯桥接器的参数用西门子S7TCP驱动来通讯,需要注意参数“S7TCP目标PLC地址”,需要填入PLC的站地址。例:S7-300,IP地址:192...._ifix与西门子plc连接

linux jstack 分析,使用top和jstack分析高CPU问题-程序员宅基地

文章浏览阅读431次。通常我们所说的 CPU 使用率过高,这里面其实隐含着一个用来比较高与低的基准值,比如 JVM 在峰值负载下的平均 CPU 利用率为 40%,如果 CPU 使用率飙到 80% 就可以被认为是不正常的。典型的 JVM 进程包含多个 Java 线程,其中一些在等待工作,另一些则正在执行任务。在单个 Java 程序的情况下,线程数可以非常低,而对于处理大量并发事务的互联网后台来说,线程数可能会比较高。对于..._对于 cpu 的问题,最重要的是要找到是哪些线程在消耗 cpu,通过线程栈定位到问题代

TypeScript手册翻译系列1-基础类型-程序员宅基地

文章浏览阅读111次。为什么80%的码农都做不了架构师?>>> ..._typescript 文档翻译

随便推点

FreeScale-SD-5舵机中值-程序员宅基地

文章浏览阅读9.6k次,点赞14次,收藏81次。SD-5舵机 舵机中值求取_舵机中值

【VSCode】在Linux下使用VSCode编译调试C/C++环境配置(使用g++作为编译器)_vscode远程登陆linux中运行调试attach to chrome怎么改成build g++-程序员宅基地

文章浏览阅读4k次,点赞5次,收藏29次。【VSCode】在Linux下使用VSCode编译调试C/C++环境配置(使用g++作为编译器)一、安装必要插件二、编译运行程序三、调试环境配置四、调试参考链接1: https://blog.csdn.net/ii0789789789/article/details/95026208.参考链接2: https://blog.csdn.net/qq_37968132/article/detai..._vscode远程登陆linux中运行调试attach to chrome怎么改成build g++

树莓派养成之路 ——esp-01智能开关2(硬件篇)_esp-01原理图-程序员宅基地

文章浏览阅读4.1k次,点赞3次,收藏14次。树莓派养成之路 ——esp-01智能开关2(硬件篇)很久没更新了,继续esp智能开关。本文讲述esp-01智能开关的硬件和原理图(PS:本人不是电子专业,只是开了头不得不去搞,如有误请多包含)硬件材料 设备 价格 esp8266-01 11元 220V转3.3v模块 5元 5V继电器(低电平触发) 8元 洞洞板 1元..._esp-01原理图

JavaScript 禁止鼠标选择事件_js 禁止元素鼠标可用-程序员宅基地

文章浏览阅读1.4k次。1、这是通过CSS样式来实现的禁止用鼠标选择功能:unselectable为IE准备onselectstart为Chrome、Safari准备-moz-user-select是FF的css style:html,body{-moz-user-select: none; -khtml-user-select: none; user-select: none;}2、或者使用下面的方法<div unselectable="on" onselectstart="return false;" s_js 禁止元素鼠标可用

ESP32的学习之路(一),基本知识介绍和了解_esp32工作电压-程序员宅基地

文章浏览阅读4.2w次,点赞25次,收藏206次。(一)ESP32麻雀虽小,但也五脏俱全ESP32是Espressif乐鑫信息科技推出的一块WiFi芯片。拥有40nm工艺、双核32位MCU、2.4GHz双模Wi-Fi和蓝牙芯片、主频高达230MHz,计算能力可达600DMIPS。-涵盖精细分辨时钟门控、省电模式和动态电压调整等特征。-它集成了天线和射频巴伦,功率放大器,低噪声放大器,滤波器和电源管理模块等元器件,性能稳定,易于制造,工作温度范围从-40℃到125℃。-支持多种通信协议,如:I2C. I2S. SPI. UART. CAN_esp32工作电压

window下编译lua源码,编译lua的库文件,编译lua解释器,编译lua编译器_lua库和源码一起编译-程序员宅基地

文章浏览阅读448次。网上有很多博客讲如何在windows下编译lua源文件。两上大概是有两种方案:一种是用VS来编译,一种是自己写批处理文件,直接编译。附上以上两种方法的博客:借助VS开发在src文件夹下写批处理_lua库和源码一起编译

推荐文章

热门文章

相关标签